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