package etcdv3 import ( "errors" "testing" "github.com/go-kit/kit/log" "github.com/go-kit/kit/sd" ) var _ sd.Instancer = (*Instancer)(nil) // API check type testKV struct { Key []byte Value []byte } type testResponse struct { Kvs []testKV } var ( fakeResponse = testResponse{ Kvs: []testKV{ { Key: []byte("/foo/1"), Value: []byte("1:1"), }, { Key: []byte("/foo/2"), Value: []byte("2:2"), }, }, } ) var _ sd.Instancer = &Instancer{} // API check func TestInstancer(t *testing.T) { client := &fakeClient{ responses: map[string]testResponse{"/foo": fakeResponse}, } s, err := NewInstancer(client, "/foo", log.NewNopLogger()) if err != nil { t.Fatal(err) } defer s.Stop() if state := s.cache.State(); state.Err != nil { t.Fatal(state.Err) } } type fakeClient struct { responses map[string]testResponse } func (c *fakeClient) GetEntries(prefix string) ([]string, error) { response, ok := c.responses[prefix] if !ok { return nil, errors.New("key not exist") } entries := make([]string, len(response.Kvs)) for i, node := range response.Kvs { entries[i] = string(node.Value) } return entries, nil } func (c *fakeClient) WatchPrefix(prefix string, ch chan struct{}) { } func (c *fakeClient) LeaseID() int64 { return 0 } func (c *fakeClient) Register(Service) error { return nil } func (c *fakeClient) Deregister(Service) error { return nil }