OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / go-kit / kit / sd / zk / instancer_test.go
1 package zk
2
3 import (
4         "testing"
5         "time"
6
7         "github.com/go-kit/kit/sd"
8 )
9
10 var _ sd.Instancer = (*Instancer)(nil) // API check
11
12 func TestInstancer(t *testing.T) {
13         client := newFakeClient()
14
15         instancer, err := NewInstancer(client, path, logger)
16         if err != nil {
17                 t.Fatalf("failed to create new Instancer: %v", err)
18         }
19         defer instancer.Stop()
20         endpointer := sd.NewEndpointer(instancer, newFactory(""), logger)
21
22         if _, err := endpointer.Endpoints(); err != nil {
23                 t.Fatal(err)
24         }
25 }
26
27 func TestBadFactory(t *testing.T) {
28         client := newFakeClient()
29
30         instancer, err := NewInstancer(client, path, logger)
31         if err != nil {
32                 t.Fatalf("failed to create new Instancer: %v", err)
33         }
34         defer instancer.Stop()
35         endpointer := sd.NewEndpointer(instancer, newFactory("kaboom"), logger)
36
37         // instance1 came online
38         client.AddService(path+"/instance1", "kaboom")
39
40         // instance2 came online
41         client.AddService(path+"/instance2", "zookeeper_node_data")
42
43         if err = asyncTest(100*time.Millisecond, 1, endpointer); err != nil {
44                 t.Error(err)
45         }
46 }
47
48 func TestServiceUpdate(t *testing.T) {
49         client := newFakeClient()
50
51         instancer, err := NewInstancer(client, path, logger)
52         if err != nil {
53                 t.Fatalf("failed to create new Instancer: %v", err)
54         }
55         defer instancer.Stop()
56         endpointer := sd.NewEndpointer(instancer, newFactory(""), logger)
57
58         endpoints, err := endpointer.Endpoints()
59         if err != nil {
60                 t.Fatal(err)
61         }
62         if want, have := 0, len(endpoints); want != have {
63                 t.Errorf("want %d, have %d", want, have)
64         }
65
66         // instance1 came online
67         client.AddService(path+"/instance1", "zookeeper_node_data1")
68
69         // instance2 came online
70         client.AddService(path+"/instance2", "zookeeper_node_data2")
71
72         // we should have 2 instances
73         if err = asyncTest(100*time.Millisecond, 2, endpointer); err != nil {
74                 t.Error(err)
75         }
76
77         // TODO(pb): this bit is flaky
78         //
79         //// watch triggers an error...
80         //client.SendErrorOnWatch()
81         //
82         //// test if error was consumed
83         //if err = client.ErrorIsConsumedWithin(100 * time.Millisecond); err != nil {
84         //      t.Error(err)
85         //}
86
87         // instance3 came online
88         client.AddService(path+"/instance3", "zookeeper_node_data3")
89
90         // we should have 3 instances
91         if err = asyncTest(100*time.Millisecond, 3, endpointer); err != nil {
92                 t.Error(err)
93         }
94
95         // instance1 goes offline
96         client.RemoveService(path + "/instance1")
97
98         // instance2 goes offline
99         client.RemoveService(path + "/instance2")
100
101         // we should have 1 instance
102         if err = asyncTest(100*time.Millisecond, 1, endpointer); err != nil {
103                 t.Error(err)
104         }
105 }
106
107 func TestBadInstancerCreate(t *testing.T) {
108         client := newFakeClient()
109         client.SendErrorOnWatch()
110
111         instancer, err := NewInstancer(client, path, logger)
112         if err == nil {
113                 t.Error("expected error on new Instancer")
114         }
115         if instancer != nil {
116                 t.Error("expected Instancer not to be created")
117         }
118         instancer, err = NewInstancer(client, "BadPath", logger)
119         if err == nil {
120                 t.Error("expected error on new Instancer")
121         }
122         if instancer != nil {
123                 t.Error("expected Instancer not to be created")
124         }
125 }