89 lines
1.8 KiB
Go
89 lines
1.8 KiB
Go
package fetch
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
)
|
|
|
|
type mockSavable struct {
|
|
ns string
|
|
k string
|
|
v []byte
|
|
}
|
|
|
|
func (ms *mockSavable) Namespace() string { return ms.ns }
|
|
func (ms *mockSavable) Key() string { return ms.k }
|
|
func (ms *mockSavable) Value() []byte { return ms.v }
|
|
|
|
func Test_Fetch(t *testing.T) {
|
|
s := mockRemote()
|
|
defer s.Close()
|
|
cases := []struct {
|
|
process func([]byte) ([]Savable, error)
|
|
save func(string, string, []byte) error
|
|
err error
|
|
}{
|
|
{
|
|
process: func([]byte) ([]Savable, error) {
|
|
return []Savable{&mockSavable{
|
|
ns: "hello",
|
|
k: "world",
|
|
v: []byte("!"),
|
|
}}, nil
|
|
},
|
|
save: func(string, string, []byte) error {
|
|
return nil
|
|
},
|
|
err: nil,
|
|
},
|
|
{
|
|
process: func([]byte) ([]Savable, error) {
|
|
return []Savable{&mockSavable{
|
|
ns: "hello",
|
|
k: "world",
|
|
v: []byte("!"),
|
|
}}, nil
|
|
},
|
|
save: func(string, string, []byte) error {
|
|
return errors.New("this one")
|
|
},
|
|
err: errors.New("this one"),
|
|
},
|
|
{
|
|
process: func([]byte) ([]Savable, error) {
|
|
return []Savable{}, errors.New("that one")
|
|
},
|
|
save: func(string, string, []byte) error {
|
|
return nil
|
|
},
|
|
err: errors.New("that one"),
|
|
},
|
|
{
|
|
process: func([]byte) ([]Savable, error) {
|
|
return []Savable{}, nil
|
|
},
|
|
save: func(string, string, []byte) error {
|
|
return nil
|
|
},
|
|
err: nil,
|
|
},
|
|
}
|
|
for _, c := range cases {
|
|
f, err := New(c.process, c.save)
|
|
if err != nil && err != c.err {
|
|
t.Errorf("cannot create new fetcher: %v", err)
|
|
} else if err == nil {
|
|
if err := f.FetchProcessSave(s.URL); err != nil && err.Error() != c.err.Error() {
|
|
t.Errorf("unexpected error: %v, expected %v", err, c.err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func mockRemote() *httptest.Server {
|
|
return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
}))
|
|
}
|