1package physical
2
3import (
4	"fmt"
5	"log"
6	"os"
7	"testing"
8	"time"
9
10	"github.com/samuel/go-zookeeper/zk"
11)
12
13func TestZookeeperBackend(t *testing.T) {
14	addr := os.Getenv("ZOOKEEPER_ADDR")
15	if addr == "" {
16		t.SkipNow()
17	}
18
19	client, _, err := zk.Connect([]string{addr}, time.Second)
20
21	if err != nil {
22		t.Fatalf("err: %v", err)
23	}
24
25	randPath := fmt.Sprintf("/vault-%d", time.Now().Unix())
26	acl := zk.WorldACL(zk.PermAll)
27	_, err = client.Create(randPath, []byte("hi"), int32(0), acl)
28
29	if err != nil {
30		t.Fatalf("err: %v", err)
31	}
32
33	defer func() {
34		client.Delete(randPath+"/foo/bar/baz", -1)
35		client.Delete(randPath+"/foo/bar", -1)
36		client.Delete(randPath+"/foo", -1)
37		client.Delete(randPath, -1)
38		client.Close()
39	}()
40
41	logger := log.New(os.Stderr, "", log.LstdFlags)
42	b, err := NewBackend("zookeeper", logger, map[string]string{
43		"address": addr + "," + addr,
44		"path":    randPath,
45	})
46	if err != nil {
47		t.Fatalf("err: %s", err)
48	}
49
50	testBackend(t, b)
51	testBackend_ListPrefix(t, b)
52}
53
54func TestZookeeperHABackend(t *testing.T) {
55	addr := os.Getenv("ZOOKEEPER_ADDR")
56	if addr == "" {
57		t.SkipNow()
58	}
59
60	client, _, err := zk.Connect([]string{addr}, time.Second)
61
62	if err != nil {
63		t.Fatalf("err: %v", err)
64	}
65
66	randPath := fmt.Sprintf("/vault-ha-%d", time.Now().Unix())
67	acl := zk.WorldACL(zk.PermAll)
68	_, err = client.Create(randPath, []byte("hi"), int32(0), acl)
69
70	if err != nil {
71		t.Fatalf("err: %v", err)
72	}
73
74	defer func() {
75		client.Delete(randPath+"/foo", -1)
76		client.Delete(randPath, -1)
77		client.Close()
78	}()
79
80	logger := log.New(os.Stderr, "", log.LstdFlags)
81	b, err := NewBackend("zookeeper", logger, map[string]string{
82		"address": addr + "," + addr,
83		"path":    randPath,
84	})
85	if err != nil {
86		t.Fatalf("err: %s", err)
87	}
88
89	ha, ok := b.(HABackend)
90	if !ok {
91		t.Fatalf("zookeeper does not implement HABackend")
92	}
93	testHABackend(t, ha, ha)
94}
95