github.com/technosophos/deis@v1.7.1-0.20150915173815-f9005256004b/tests/etcdutils/etcdutils.go (about) 1 // Package etcdutils helps test interactions with etcd. 2 package etcdutils 3 4 import ( 5 "fmt" 6 "strings" 7 "testing" 8 9 "github.com/coreos/go-etcd/etcd" 10 "github.com/deis/deis/tests/utils" 11 ) 12 13 // EtcdHandle is used to set keys and values in a test etcd instance. 14 type EtcdHandle struct { 15 Dirs []string 16 Keys []string 17 C *etcd.Client 18 } 19 20 func etcdClient(port string) *etcd.Client { 21 machines := []string{"http://" + utils.HostAddress() + ":" + port} 22 return etcd.NewClient(machines) 23 } 24 25 // InitEtcd configures a test etcd instance. 26 func InitEtcd(setdir, setkeys []string, port string) *EtcdHandle { 27 cli := etcdClient(port) 28 controllerHandle := new(EtcdHandle) 29 controllerHandle.Dirs = setdir 30 controllerHandle.Keys = setkeys 31 controllerHandle.C = cli 32 fmt.Println("Etcd client initialized") 33 return controllerHandle 34 } 35 36 // SetSingle sets a key and value into a test etcd instance. 37 func SetSingle(t *testing.T, key string, value string, port string) { 38 c := etcdClient(port) 39 _, err := c.Set(key, value, 0) 40 if err != nil { 41 t.Fatal(err) 42 } 43 } 44 45 // SetEtcd sets an array of values into a test etcd instance. 46 func SetEtcd(t *testing.T, keys []string, values []string, c *etcd.Client) { 47 for i, key := range keys { 48 _, err := c.Set(key, values[i], 0) 49 if err != nil { 50 t.Fatal(err) 51 } 52 } 53 } 54 55 // VerifyEtcdKey verifies that an etcd key exists. 56 func VerifyEtcdKey(t *testing.T, key string, port string) { 57 c := etcdClient(port) 58 _, err := c.Get(key, true, true) 59 if err != nil { 60 t.Fatal(err) 61 } 62 } 63 64 // VerifyEtcdValue verifies the value of an etcd key. 65 func VerifyEtcdValue(t *testing.T, key string, expectedValue string, port string) { 66 c := etcdClient(port) 67 result, err := c.Get(key, true, true) 68 if err != nil { 69 t.Fatal(err) 70 } 71 if result.Node.Value != expectedValue { 72 t.Errorf(key + ": expected '" + expectedValue + "', got '" + result.Node.Value + "'.") 73 } 74 } 75 76 // PublishEtcd sets canonical etcd values into a test etcd instance. 77 func PublishEtcd(t *testing.T, ecli *EtcdHandle) { 78 fmt.Println("--- Publish etcd keys and values") 79 for _, dir := range ecli.Dirs { 80 _, err := ecli.C.SetDir(dir, 0) 81 if err != nil { 82 t.Fatal(err) 83 } 84 } 85 for _, key := range ecli.Keys { 86 switch true { 87 case (strings.Contains(key, "host")): 88 _, err := ecli.C.Set(key, "172.17.8.100", 0) 89 if err != nil { 90 t.Fatal(err) 91 } 92 case (strings.Contains(key, "port")): 93 _, err := ecli.C.Set(key, "10881", 0) 94 if err != nil { 95 t.Fatal(err) 96 } 97 default: 98 _, err := ecli.C.Set(key, "deis", 0) 99 if err != nil { 100 t.Fatal(err) 101 } 102 } 103 } 104 }