Rename FetchProcessSave and wrap all func in process
parent
1884fda442
commit
27479df8c7
|
|
@ -5,27 +5,19 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Savable interface {
|
|
||||||
Namespace() string
|
|
||||||
Key() string
|
|
||||||
Value() []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
type Fetch struct {
|
type Fetch struct {
|
||||||
process func([]byte) ([]Savable, error)
|
process func(string, []byte) error
|
||||||
save func(string, string, []byte) error
|
|
||||||
client *http.Client
|
client *http.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(process func([]byte) ([]Savable, error), save func(string, string, []byte) error) (*Fetch, error) {
|
func New(process func(string, []byte) error) (*Fetch, error) {
|
||||||
return &Fetch{
|
return &Fetch{
|
||||||
save: save,
|
|
||||||
process: process,
|
process: process,
|
||||||
client: &http.Client{},
|
client: &http.Client{},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fetcher *Fetch) FetchProcessSave(url string) error {
|
func (fetcher *Fetch) FetchProcess(url string) error {
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -39,15 +31,8 @@ func (fetcher *Fetch) FetchProcessSave(url string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
items, err := fetcher.process(b)
|
if err := fetcher.process(url, b); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for i := range items {
|
|
||||||
err := fetcher.save(items[i].Namespace(), items[i].Key(), items[i].Value())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,75 +7,32 @@ import (
|
||||||
"testing"
|
"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) {
|
func Test_Fetch(t *testing.T) {
|
||||||
s := mockRemote()
|
s := mockRemote()
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
process func([]byte) ([]Savable, error)
|
process func(string, []byte) error
|
||||||
save func(string, string, []byte) error
|
|
||||||
err error
|
err error
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
process: func([]byte) ([]Savable, error) {
|
process: func(string, []byte) error {
|
||||||
return []Savable{&mockSavable{
|
|
||||||
ns: "hello",
|
|
||||||
k: "world",
|
|
||||||
v: []byte("!"),
|
|
||||||
}}, nil
|
|
||||||
},
|
|
||||||
save: func(string, string, []byte) error {
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
err: nil,
|
err: nil,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
process: func([]byte) ([]Savable, error) {
|
process: func(string, []byte) error {
|
||||||
return []Savable{&mockSavable{
|
return errors.New("that one")
|
||||||
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"),
|
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 {
|
for _, c := range cases {
|
||||||
f, err := New(c.process, c.save)
|
f, err := New(c.process)
|
||||||
if err != nil && err != c.err {
|
if err != nil && err != c.err {
|
||||||
t.Errorf("cannot create new fetcher: %v", err)
|
t.Errorf("cannot create new fetcher: %v", err)
|
||||||
} else if err == nil {
|
} else if err == nil {
|
||||||
if err := f.FetchProcessSave(s.URL); err != nil && err.Error() != c.err.Error() {
|
if err := f.FetchProcess(s.URL); err != nil && err.Error() != c.err.Error() {
|
||||||
t.Errorf("unexpected error: %v, expected %v", err, c.err)
|
t.Errorf("unexpected error: %v, expected %v", err, c.err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue