mirror of https://github.com/aptly-dev/aptly
99 lines
2.0 KiB
Go
99 lines
2.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type expectedRequest struct {
|
|
URL string
|
|
Err error
|
|
Response string
|
|
}
|
|
|
|
// FakeDownloader is like Downloader, but it used in tests
|
|
// to stub out results
|
|
type FakeDownloader struct {
|
|
expected []expectedRequest
|
|
}
|
|
|
|
// Check interface
|
|
var (
|
|
_ Downloader = &FakeDownloader{}
|
|
)
|
|
|
|
// NewFakeDownloader creates new expected downloader
|
|
func NewFakeDownloader() *FakeDownloader {
|
|
result := &FakeDownloader{}
|
|
result.expected = make([]expectedRequest, 0)
|
|
return result
|
|
}
|
|
|
|
// ExpectResponse installs expectation on upcoming download with response
|
|
func (f *FakeDownloader) ExpectResponse(url string, response string) *FakeDownloader {
|
|
f.expected = append(f.expected, expectedRequest{URL: url, Response: response})
|
|
return f
|
|
}
|
|
|
|
// ExpectError installs expectation on upcoming download with error
|
|
func (f *FakeDownloader) ExpectError(url string, err error) *FakeDownloader {
|
|
f.expected = append(f.expected, expectedRequest{URL: url, Err: err})
|
|
return f
|
|
}
|
|
|
|
// Empty verifies that are planned downloads have happened
|
|
func (f *FakeDownloader) Empty() bool {
|
|
return len(f.expected) == 0
|
|
}
|
|
|
|
// Download performs fake download by matching against first expectation in the queue
|
|
func (f *FakeDownloader) Download(url string, filename string, result chan<- error) {
|
|
if len(f.expected) == 0 || f.expected[0].URL != url {
|
|
result <- fmt.Errorf("unexpected request for %s", url)
|
|
return
|
|
}
|
|
|
|
expected := f.expected[0]
|
|
f.expected = f.expected[1:]
|
|
|
|
if expected.Err != nil {
|
|
result <- expected.Err
|
|
return
|
|
}
|
|
|
|
err := os.MkdirAll(filepath.Dir(filename), 0755)
|
|
if err != nil {
|
|
result <- err
|
|
return
|
|
}
|
|
|
|
outfile, err := os.Create(filename)
|
|
if err != nil {
|
|
result <- err
|
|
return
|
|
}
|
|
defer outfile.Close()
|
|
|
|
_, err = outfile.Write([]byte(expected.Response))
|
|
if err != nil {
|
|
result <- err
|
|
return
|
|
}
|
|
|
|
result <- nil
|
|
return
|
|
}
|
|
|
|
// Shutdown does nothing
|
|
func (f *FakeDownloader) Shutdown() {
|
|
}
|
|
|
|
// Pause does nothing
|
|
func (f *FakeDownloader) Pause() {
|
|
}
|
|
|
|
// Resume does nothing
|
|
func (f *FakeDownloader) Resume() {
|
|
}
|