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  }