7 "github.com/go-kit/kit/sd"
10 var _ sd.Instancer = (*Instancer)(nil) // API check
12 func TestInstancer(t *testing.T) {
13 client := newFakeClient()
15 instancer, err := NewInstancer(client, path, logger)
17 t.Fatalf("failed to create new Instancer: %v", err)
19 defer instancer.Stop()
20 endpointer := sd.NewEndpointer(instancer, newFactory(""), logger)
22 if _, err := endpointer.Endpoints(); err != nil {
27 func TestBadFactory(t *testing.T) {
28 client := newFakeClient()
30 instancer, err := NewInstancer(client, path, logger)
32 t.Fatalf("failed to create new Instancer: %v", err)
34 defer instancer.Stop()
35 endpointer := sd.NewEndpointer(instancer, newFactory("kaboom"), logger)
37 // instance1 came online
38 client.AddService(path+"/instance1", "kaboom")
40 // instance2 came online
41 client.AddService(path+"/instance2", "zookeeper_node_data")
43 if err = asyncTest(100*time.Millisecond, 1, endpointer); err != nil {
48 func TestServiceUpdate(t *testing.T) {
49 client := newFakeClient()
51 instancer, err := NewInstancer(client, path, logger)
53 t.Fatalf("failed to create new Instancer: %v", err)
55 defer instancer.Stop()
56 endpointer := sd.NewEndpointer(instancer, newFactory(""), logger)
58 endpoints, err := endpointer.Endpoints()
62 if want, have := 0, len(endpoints); want != have {
63 t.Errorf("want %d, have %d", want, have)
66 // instance1 came online
67 client.AddService(path+"/instance1", "zookeeper_node_data1")
69 // instance2 came online
70 client.AddService(path+"/instance2", "zookeeper_node_data2")
72 // we should have 2 instances
73 if err = asyncTest(100*time.Millisecond, 2, endpointer); err != nil {
77 // TODO(pb): this bit is flaky
79 //// watch triggers an error...
80 //client.SendErrorOnWatch()
82 //// test if error was consumed
83 //if err = client.ErrorIsConsumedWithin(100 * time.Millisecond); err != nil {
87 // instance3 came online
88 client.AddService(path+"/instance3", "zookeeper_node_data3")
90 // we should have 3 instances
91 if err = asyncTest(100*time.Millisecond, 3, endpointer); err != nil {
95 // instance1 goes offline
96 client.RemoveService(path + "/instance1")
98 // instance2 goes offline
99 client.RemoveService(path + "/instance2")
101 // we should have 1 instance
102 if err = asyncTest(100*time.Millisecond, 1, endpointer); err != nil {
107 func TestBadInstancerCreate(t *testing.T) {
108 client := newFakeClient()
109 client.SendErrorOnWatch()
111 instancer, err := NewInstancer(client, path, logger)
113 t.Error("expected error on new Instancer")
115 if instancer != nil {
116 t.Error("expected Instancer not to be created")
118 instancer, err = NewInstancer(client, "BadPath", logger)
120 t.Error("expected error on new Instancer")
122 if instancer != nil {
123 t.Error("expected Instancer not to be created")