12 stdzk "github.com/samuel/go-zookeeper/zk"
19 func TestMain(m *testing.M) {
20 zkAddr := os.Getenv("ZK_ADDR")
22 log.Fatal("ZK_ADDR is not set")
24 host = []string{zkAddr}
27 func TestCreateParentNodesOnServer(t *testing.T) {
28 payload := [][]byte{[]byte("Payload"), []byte("Test")}
29 c1, err := NewClient(host, logger, Payload(payload))
31 t.Fatalf("Connect returned error: %v", err)
34 t.Fatal("Expected pointer to client, got nil")
38 instancer, err := NewInstancer(c1, path, logger)
40 t.Fatalf("Unable to create Subscriber: %v", err)
42 defer instancer.Stop()
44 state := instancer.state()
48 if want, have := 0, len(state.Instances); want != have {
49 t.Errorf("want %d, have %d", want, have)
52 c2, err := NewClient(host, logger)
54 t.Fatalf("Connect returned error: %v", err)
57 data, _, err := c2.(*client).Get(path)
61 // test Client implementation of CreateParentNodes. It should have created
63 if bytes.Compare(data, payload[1]) != 0 {
64 t.Errorf("want %s, have %s", payload[1], data)
69 func TestCreateBadParentNodesOnServer(t *testing.T) {
70 c, _ := NewClient(host, logger)
73 _, err := NewInstancer(c, "invalid/path", logger)
75 if want, have := stdzk.ErrInvalidPath, err; want != have {
76 t.Errorf("want %v, have %v", want, have)
80 func TestCredentials1(t *testing.T) {
81 acl := stdzk.DigestACL(stdzk.PermAll, "user", "secret")
82 c, _ := NewClient(host, logger, ACL(acl), Credentials("user", "secret"))
85 _, err := NewInstancer(c, "/acl-issue-test", logger)
92 func TestCredentials2(t *testing.T) {
93 acl := stdzk.DigestACL(stdzk.PermAll, "user", "secret")
94 c, _ := NewClient(host, logger, ACL(acl))
97 _, err := NewInstancer(c, "/acl-issue-test", logger)
99 if err != stdzk.ErrNoAuth {
100 t.Errorf("want %v, have %v", stdzk.ErrNoAuth, err)
104 func TestConnection(t *testing.T) {
105 c, _ := NewClient(host, logger)
108 _, err := NewInstancer(c, "/acl-issue-test", logger)
110 if err != ErrClientClosed {
111 t.Errorf("want %v, have %v", ErrClientClosed, err)
115 func TestGetEntriesOnServer(t *testing.T) {
116 var instancePayload = "10.0.3.204:8002"
118 c1, err := NewClient(host, logger)
120 t.Fatalf("Connect returned error: %v", err)
125 c2, err := NewClient(host, logger)
126 s, err := NewInstancer(c2, path, logger)
132 instance1 := &Service{
135 Data: []byte(instancePayload),
137 if err = c2.Register(instance1); err != nil {
138 t.Fatalf("Unable to create test ephemeral znode 1: %+v", err)
140 instance2 := &Service{
143 Data: []byte(instancePayload),
145 if err = c2.Register(instance2); err != nil {
146 t.Fatalf("Unable to create test ephemeral znode 2: %+v", err)
149 time.Sleep(50 * time.Millisecond)
152 if state.Err != nil {
155 if want, have := 2, len(state.Instances); want != have {
156 t.Errorf("want %d, have %d", want, have)
160 func TestGetEntriesPayloadOnServer(t *testing.T) {
161 c, err := NewClient(host, logger)
163 t.Fatalf("Connect returned error: %v", err)
165 _, eventc, err := c.GetEntries(path)
170 instance3 := Service{
173 Data: []byte("just some payload"),
175 registrar := NewRegistrar(c, instance3, logger)
178 case event := <-eventc:
179 if want, have := stdzk.EventNodeChildrenChanged.String(), event.Type.String(); want != have {
180 t.Errorf("want %s, have %s", want, have)
182 case <-time.After(100 * time.Millisecond):
183 t.Errorf("expected incoming watch event, timeout occurred")
186 _, eventc, err = c.GetEntries(path)
191 registrar.Deregister()
193 case event := <-eventc:
194 if want, have := stdzk.EventNodeChildrenChanged.String(), event.Type.String(); want != have {
195 t.Errorf("want %s, have %s", want, have)
197 case <-time.After(100 * time.Millisecond):
198 t.Errorf("expected incoming watch event, timeout occurred")