...
1 package etcd
2
3 import (
4 "errors"
5 "testing"
6
7 stdetcd "go.etcd.io/etcd/client/v2"
8
9 "github.com/go-kit/kit/sd"
10 "github.com/go-kit/log"
11 )
12
13 var _ sd.Instancer = (*Instancer)(nil)
14
15 var (
16 node = &stdetcd.Node{
17 Key: "/foo",
18 Nodes: []*stdetcd.Node{
19 {Key: "/foo/1", Value: "1:1"},
20 {Key: "/foo/2", Value: "1:2"},
21 },
22 }
23 fakeResponse = &stdetcd.Response{
24 Node: node,
25 }
26 )
27
28 var _ sd.Instancer = &Instancer{}
29
30 func TestInstancer(t *testing.T) {
31 client := &fakeClient{
32 responses: map[string]*stdetcd.Response{"/foo": fakeResponse},
33 }
34
35 s, err := NewInstancer(client, "/foo", log.NewNopLogger())
36 if err != nil {
37 t.Fatal(err)
38 }
39 defer s.Stop()
40
41 if state := s.cache.State(); state.Err != nil {
42 t.Fatal(state.Err)
43 }
44 }
45
46 type fakeClient struct {
47 responses map[string]*stdetcd.Response
48 }
49
50 func (c *fakeClient) GetEntries(prefix string) ([]string, error) {
51 response, ok := c.responses[prefix]
52 if !ok {
53 return nil, errors.New("key not exist")
54 }
55
56 entries := make([]string, len(response.Node.Nodes))
57 for i, node := range response.Node.Nodes {
58 entries[i] = node.Value
59 }
60 return entries, nil
61 }
62
63 func (c *fakeClient) WatchPrefix(prefix string, ch chan struct{}) {}
64
65 func (c *fakeClient) Register(Service) error {
66 return nil
67 }
68 func (c *fakeClient) Deregister(Service) error {
69 return nil
70 }
71
View as plain text