github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/api/addresser/addresser_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package addresser_test 5 6 import ( 7 "errors" 8 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/api/addresser" 13 "github.com/juju/juju/api/base" 14 apitesting "github.com/juju/juju/api/base/testing" 15 "github.com/juju/juju/apiserver/params" 16 apiservertesting "github.com/juju/juju/apiserver/testing" 17 coretesting "github.com/juju/juju/testing" 18 "github.com/juju/juju/watcher" 19 ) 20 21 type AddresserSuite struct { 22 coretesting.BaseSuite 23 } 24 25 var _ = gc.Suite(&AddresserSuite{}) 26 27 func (s *AddresserSuite) TestNewAPI(c *gc.C) { 28 var called int 29 apiCaller := clientErrorAPICaller(c, "CleanupIPAddresses", nil, &called) 30 api := addresser.NewAPI(apiCaller) 31 c.Check(api, gc.NotNil) 32 c.Check(called, gc.Equals, 0) 33 34 // Make a call so that an error will be returned. 35 err := api.CleanupIPAddresses() 36 c.Assert(err, gc.ErrorMatches, "client error!") 37 c.Assert(called, gc.Equals, 1) 38 } 39 40 func (s *AddresserSuite) TestNewAPIWithNilCaller(c *gc.C) { 41 panicFunc := func() { addresser.NewAPI(nil) } 42 c.Assert(panicFunc, gc.PanicMatches, "caller is nil") 43 } 44 45 func (s *AddresserSuite) TestCanDeallocateAddressesSuccess(c *gc.C) { 46 var called int 47 expectedResult := params.BoolResult{ 48 Result: true, 49 } 50 apiCaller := successAPICaller(c, "CanDeallocateAddresses", nil, expectedResult, &called) 51 api := addresser.NewAPI(apiCaller) 52 53 ok, err := api.CanDeallocateAddresses() 54 c.Assert(err, jc.ErrorIsNil) 55 c.Assert(ok, jc.IsTrue) 56 c.Assert(called, gc.Equals, 1) 57 } 58 59 func (s *AddresserSuite) TestCanDeallocateAddressesServerError(c *gc.C) { 60 var called int 61 expectedResult := params.BoolResult{ 62 Error: apiservertesting.ServerError("server boom!"), 63 } 64 apiCaller := successAPICaller(c, "CanDeallocateAddresses", nil, expectedResult, &called) 65 api := addresser.NewAPI(apiCaller) 66 67 ok, err := api.CanDeallocateAddresses() 68 c.Assert(err, gc.ErrorMatches, "server boom!") 69 c.Assert(ok, jc.IsFalse) 70 c.Assert(called, gc.Equals, 1) 71 } 72 73 func (s *AddresserSuite) TestCleanupIPAddressesSuccess(c *gc.C) { 74 var called int 75 expectedResult := params.ErrorResult{} 76 apiCaller := successAPICaller(c, "CleanupIPAddresses", nil, expectedResult, &called) 77 api := addresser.NewAPI(apiCaller) 78 79 err := api.CleanupIPAddresses() 80 c.Assert(err, jc.ErrorIsNil) 81 c.Assert(called, gc.Equals, 1) 82 } 83 84 func (s *AddresserSuite) TestCleanupIPAddressesServerError(c *gc.C) { 85 var called int 86 expectedResult := params.ErrorResult{ 87 Error: apiservertesting.ServerError("server boom!"), 88 } 89 apiCaller := successAPICaller(c, "CleanupIPAddresses", nil, expectedResult, &called) 90 api := addresser.NewAPI(apiCaller) 91 92 err := api.CleanupIPAddresses() 93 c.Assert(err, gc.ErrorMatches, "server boom!") 94 c.Assert(called, gc.Equals, 1) 95 } 96 97 func (s *AddresserSuite) TestWatchIPAddressesSuccess(c *gc.C) { 98 var numFacadeCalls int 99 var numWatcherCalls int 100 expectedResult := params.EntitiesWatchResult{ 101 EntitiesWatcherId: "42", 102 Changes: []string{ 103 "ipaddress-11111111-0000-0000-0000-000000000000", 104 "ipaddress-22222222-0000-0000-0000-000000000000", 105 }, 106 } 107 watcherFunc := func(caller base.APICaller, result params.EntitiesWatchResult) watcher.EntitiesWatcher { 108 numWatcherCalls++ 109 c.Check(caller, gc.NotNil) 110 c.Check(result, jc.DeepEquals, expectedResult) 111 return nil 112 } 113 s.PatchValue(addresser.NewEntitiesWatcher, watcherFunc) 114 115 apiCaller := successAPICaller(c, "WatchIPAddresses", nil, expectedResult, &numFacadeCalls) 116 api := addresser.NewAPI(apiCaller) 117 118 w, err := api.WatchIPAddresses() 119 c.Assert(err, jc.ErrorIsNil) 120 c.Assert(numFacadeCalls, gc.Equals, 1) 121 c.Assert(numWatcherCalls, gc.Equals, 1) 122 c.Assert(w, gc.IsNil) 123 } 124 125 func (s *AddresserSuite) TestWatchIPAddressesClientError(c *gc.C) { 126 var called int 127 apiCaller := clientErrorAPICaller(c, "WatchIPAddresses", nil, &called) 128 129 api := addresser.NewAPI(apiCaller) 130 w, err := api.WatchIPAddresses() 131 132 c.Assert(w, jc.ErrorIsNil) 133 c.Assert(err, gc.ErrorMatches, "client error!") 134 c.Assert(called, gc.Equals, 1) 135 } 136 137 func (s *AddresserSuite) TestWatchIPAddressesServerError(c *gc.C) { 138 var called int 139 expectedResult := params.EntitiesWatchResult{ 140 Error: apiservertesting.ServerError("server boom!"), 141 } 142 apiCaller := successAPICaller(c, "WatchIPAddresses", nil, expectedResult, &called) 143 api := addresser.NewAPI(apiCaller) 144 145 w, err := api.WatchIPAddresses() 146 c.Assert(w, jc.ErrorIsNil) 147 c.Assert(err, gc.ErrorMatches, "server boom!") 148 c.Assert(called, gc.Equals, 1) 149 } 150 151 func successAPICaller(c *gc.C, method string, expectArgs, useResults interface{}, numCalls *int) base.APICaller { 152 args := &apitesting.CheckArgs{ 153 Facade: "Addresser", 154 VersionIsZero: true, 155 IdIsEmpty: true, 156 Method: method, 157 Args: expectArgs, 158 Results: useResults, 159 } 160 return apitesting.CheckingAPICaller(c, args, numCalls, nil) 161 } 162 163 func clientErrorAPICaller(c *gc.C, method string, expectArgs interface{}, numCalls *int) base.APICaller { 164 args := &apitesting.CheckArgs{ 165 Facade: "Addresser", 166 VersionIsZero: true, 167 IdIsEmpty: true, 168 Method: method, 169 Args: expectArgs, 170 } 171 return apitesting.CheckingAPICaller(c, args, numCalls, errors.New("client error!")) 172 }