From cd777b29663a4f49abfa13a399019aeecf6479b8 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Thu, 29 Jan 2015 16:13:11 -0800 Subject: [PATCH] client: test httpClusterClient.Sync --- client/client_test.go | 76 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 2 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index 0b2564bc9..8b387a478 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -65,6 +65,7 @@ func (s *staticHTTPAction) HTTPRequest(url.URL) *http.Request { type staticHTTPResponse struct { resp http.Response + body []byte err error } @@ -76,7 +77,7 @@ type multiStaticHTTPClient struct { func (s *multiStaticHTTPClient) Do(context.Context, httpAction) (*http.Response, []byte, error) { r := s.responses[s.cur] s.cur++ - return &r.resp, nil, r.err + return &r.resp, r.body, r.err } func newStaticHTTPClientFactory(responses []staticHTTPResponse) httpClientFactory { @@ -84,7 +85,7 @@ func newStaticHTTPClientFactory(responses []staticHTTPResponse) httpClientFactor return func(url.URL) httpClient { r := responses[cur] cur++ - return &staticHTTPClient{resp: r.resp, err: r.err} + return &staticHTTPClient{resp: r.resp, body: r.body, err: r.err} } } @@ -564,3 +565,74 @@ func TestDefaultCheckRedirect(t *testing.T) { } } } + +func TestHTTPClusterClientSync(t *testing.T) { + cf := newStaticHTTPClientFactory([]staticHTTPResponse{ + staticHTTPResponse{ + resp: http.Response{StatusCode: http.StatusOK, Header: http.Header{"Content-Type": []string{"application/json"}}}, + body: []byte(`{"members":[{"id":"2745e2525fce8fe","peerURLs":["http://127.0.0.1:7003"],"name":"node3","clientURLs":["http://127.0.0.1:4003"]},{"id":"42134f434382925","peerURLs":["http://127.0.0.1:2380","http://127.0.0.1:7001"],"name":"node1","clientURLs":["http://127.0.0.1:2379","http://127.0.0.1:4001"]},{"id":"94088180e21eb87b","peerURLs":["http://127.0.0.1:7002"],"name":"node2","clientURLs":["http://127.0.0.1:4002"]}]}`), + }, + }) + + hc := &httpClusterClient{clientFactory: cf} + err := hc.reset([]string{"http://127.0.0.1:4001"}) + if err != nil { + t.Fatalf("unexpected error during setup: %#v", err) + } + + want := []string{"http://127.0.0.1:4001"} + got := hc.Endpoints() + if !reflect.DeepEqual(want, got) { + t.Fatalf("incorrect endpoints: want=%#v got=%#v", want, got) + } + + err = hc.Sync(context.Background()) + if err != nil { + t.Fatalf("unexpected error during Sync: %#v", err) + } + + want = []string{"http://127.0.0.1:4003", "http://127.0.0.1:2379", "http://127.0.0.1:4001", "http://127.0.0.1:4002"} + got = hc.Endpoints() + if !reflect.DeepEqual(want, got) { + t.Fatalf("incorrect endpoints post-Sync: want=%#v got=%#v", want, got) + } + + err = hc.reset([]string{"http://127.0.0.1:4009"}) + if err != nil { + t.Fatalf("unexpected error during reset: %#v", err) + } + + want = []string{"http://127.0.0.1:4009"} + got = hc.Endpoints() + if !reflect.DeepEqual(want, got) { + t.Fatalf("incorrect endpoints post-reset: want=%#v got=%#v", want, got) + } +} + +func TestHTTPClusterClientSyncFail(t *testing.T) { + cf := newStaticHTTPClientFactory([]staticHTTPResponse{ + staticHTTPResponse{err: errors.New("fail!")}, + }) + + hc := &httpClusterClient{clientFactory: cf} + err := hc.reset([]string{"http://127.0.0.1:4001"}) + if err != nil { + t.Fatalf("unexpected error during setup: %#v", err) + } + + want := []string{"http://127.0.0.1:4001"} + got := hc.Endpoints() + if !reflect.DeepEqual(want, got) { + t.Fatalf("incorrect endpoints: want=%#v got=%#v", want, got) + } + + err = hc.Sync(context.Background()) + if err == nil { + t.Fatalf("got nil error during Sync") + } + + got = hc.Endpoints() + if !reflect.DeepEqual(want, got) { + t.Fatalf("incorrect endpoints after failed Sync: want=%#v got=%#v", want, got) + } +}