github.com/jiasir/deis@v1.12.2/builder/etcd/etcd_test.go (about) 1 package etcd 2 3 import ( 4 "testing" 5 6 "github.com/Masterminds/cookoo" 7 "github.com/coreos/go-etcd/etcd" 8 ) 9 10 func TestInterfaces(t *testing.T) { 11 // Throughout the codebase, we assume that our interfaces match what the 12 // etcd client provides. This is a canary to verify. 13 cli := etcd.NewClient([]string{"http://localhost:4001"}) 14 var _ Getter = cli 15 var _ = cli 16 var _ GetterSetter = cli 17 } 18 19 func TestCreateClient(t *testing.T) { 20 reg, router, cxt := cookoo.Cookoo() 21 22 reg.Route("test", "Test route"). 23 Does(CreateClient, "res").Using("url").WithDefault("localhost:4100") 24 25 if err := router.HandleRequest("test", cxt, true); err != nil { 26 t.Error(err) 27 } 28 29 // All we really want to know is whether we got a valid client back. 30 _ = cxt.Get("res", nil).(*etcd.Client) 31 } 32 33 func TestGet(t *testing.T) { 34 reg, router, cxt := cookoo.Cookoo() 35 36 reg.Route("test", "Test route"). 37 Does(Get, "res"). 38 Using("client").WithDefault(&stubClient{}). 39 Using("path").WithDefault("/") 40 41 err := router.HandleRequest("test", cxt, true) 42 if err != nil { 43 t.Error(err) 44 } 45 46 if res := cxt.Get("res", nil); res == nil { 47 t.Error("Expected an *etcd.Response, not nil.") 48 } else if tt, ok := res.(*etcd.Response); !ok { 49 t.Errorf("Expected instance of *etcd.Response. Got %T", tt) 50 } 51 } 52 53 func TestSet(t *testing.T) { 54 reg, router, cxt := cookoo.Cookoo() 55 56 reg.Route("test", "Test route"). 57 Does(Set, "res"). 58 Using("client").WithDefault(&stubClient{}). 59 Using("key").WithDefault("Hello"). 60 Using("value").WithDefault("World") 61 62 err := router.HandleRequest("test", cxt, true) 63 if err != nil { 64 t.Error(err) 65 } 66 67 if res := cxt.Get("res", nil); res == nil { 68 t.Error("Expected an *etcd.Response, not nil.") 69 } else if tt, ok := res.(*etcd.Response); !ok { 70 t.Errorf("Expected instance of *etcd.Response. Got %T", tt) 71 } 72 } 73 func TestMakeDir(t *testing.T) { 74 reg, router, cxt := cookoo.Cookoo() 75 76 reg.Route("test", "Test route"). 77 Does(MakeDir, "res"). 78 Using("client").WithDefault(&stubClient{}). 79 Using("path").WithDefault("/deis/users/foo") 80 81 err := router.HandleRequest("test", cxt, true) 82 if err != nil { 83 t.Error(err) 84 } 85 86 if res := cxt.Get("res", nil); res == nil { 87 t.Error("Expected an *etcd.Response, not nil.") 88 } else if tt, ok := res.(*etcd.Response); !ok { 89 t.Errorf("Expected instance of *etcd.Response. Got %T", tt) 90 } 91 } 92 93 // stubClient implements EtcdGetter and EtcdDirCreator 94 type stubClient struct { 95 } 96 97 func (s *stubClient) Get(key string, sort, recurse bool) (*etcd.Response, error) { 98 return s.response("get"), nil 99 } 100 101 func (s *stubClient) CreateDir(key string, ttl uint64) (*etcd.Response, error) { 102 return s.response("createdir"), nil 103 } 104 105 func (s *stubClient) Set(key string, value string, ttl uint64) (*etcd.Response, error) { 106 return s.response("set"), nil 107 } 108 109 func (s *stubClient) response(a string) *etcd.Response { 110 // This is totally fake data. It may or may not reflect what etcd really 111 // returns. 112 return &etcd.Response{ 113 Action: a, 114 EtcdIndex: 1, 115 RaftIndex: 1, 116 RaftTerm: 1, 117 Node: &etcd.Node{ 118 Dir: true, 119 Key: "/foo", 120 }, 121 } 122 123 }