github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/subnets/subnets_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package subnets_test 5 6 import ( 7 "errors" 8 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 "gopkg.in/juju/names.v2" 12 13 apitesting "github.com/juju/juju/api/base/testing" 14 "github.com/juju/juju/api/subnets" 15 "github.com/juju/juju/apiserver/params" 16 "github.com/juju/juju/network" 17 coretesting "github.com/juju/juju/testing" 18 ) 19 20 // SubnetsSuite tests the client side subnets API 21 type SubnetsSuite struct { 22 coretesting.BaseSuite 23 24 apiCaller *apitesting.CallChecker 25 api *subnets.API 26 } 27 28 var _ = gc.Suite(&SubnetsSuite{}) 29 30 func (s *SubnetsSuite) prepareAPICall(c *gc.C, args apitesting.APICall) { 31 s.apiCaller = apitesting.APICallChecker(c, args) 32 s.api = subnets.NewAPI(s.apiCaller) 33 c.Check(s.api, gc.NotNil) 34 c.Check(s.apiCaller.CallCount, gc.Equals, 0) 35 } 36 37 // TestNewAPISuccess checks that a new subnets API is created when passed a non-nil caller 38 func (s *SubnetsSuite) TestNewAPISuccess(c *gc.C) { 39 apiCaller := apitesting.APICallChecker(c) 40 api := subnets.NewAPI(apiCaller) 41 c.Check(api, gc.NotNil) 42 c.Check(apiCaller.CallCount, gc.Equals, 0) 43 } 44 45 // TestNewAPIWithNilCaller checks that a new subnets API is not created when passed a nil caller 46 func (s *SubnetsSuite) TestNewAPIWithNilCaller(c *gc.C) { 47 panicFunc := func() { subnets.NewAPI(nil) } 48 c.Assert(panicFunc, gc.PanicMatches, "caller is nil") 49 } 50 51 func makeAddSubnetsArgs(cidr, providerId, space string, zones []string) apitesting.APICall { 52 spaceTag := names.NewSpaceTag(space).String() 53 subnetTag := names.NewSubnetTag(cidr).String() 54 if providerId != "" { 55 subnetTag = "" 56 } 57 58 expectArgs := params.AddSubnetsParams{ 59 Subnets: []params.AddSubnetParams{{ 60 SpaceTag: spaceTag, 61 SubnetTag: subnetTag, 62 SubnetProviderId: providerId, 63 Zones: zones, 64 }}} 65 66 expectResults := params.ErrorResults{ 67 Results: []params.ErrorResult{{}}, 68 } 69 70 args := apitesting.APICall{ 71 Facade: "Subnets", 72 Method: "AddSubnets", 73 Args: expectArgs, 74 Results: expectResults, 75 } 76 77 return args 78 } 79 80 func makeCreateSubnetsArgs(cidr, space string, zones []string, isPublic bool) apitesting.APICall { 81 spaceTag := names.NewSpaceTag(space).String() 82 subnetTag := names.NewSubnetTag(cidr).String() 83 84 expectArgs := params.CreateSubnetsParams{ 85 Subnets: []params.CreateSubnetParams{{ 86 SpaceTag: spaceTag, 87 SubnetTag: subnetTag, 88 Zones: zones, 89 IsPublic: isPublic, 90 }}} 91 92 expectResults := params.ErrorResults{ 93 Results: []params.ErrorResult{{}}, 94 } 95 96 args := apitesting.APICall{ 97 Facade: "Subnets", 98 Method: "CreateSubnets", 99 Args: expectArgs, 100 Results: expectResults, 101 } 102 103 return args 104 } 105 106 func makeListSubnetsArgs(space *names.SpaceTag, zone string) apitesting.APICall { 107 expectResults := params.ListSubnetsResults{} 108 expectArgs := params.SubnetsFilters{ 109 SpaceTag: space.String(), 110 Zone: zone, 111 } 112 args := apitesting.APICall{ 113 Facade: "Subnets", 114 Method: "ListSubnets", 115 Results: expectResults, 116 Args: expectArgs, 117 } 118 return args 119 } 120 121 func (s *SubnetsSuite) TestAddSubnet(c *gc.C) { 122 cidr := "1.1.1.0/24" 123 providerId := "foo" 124 space := "bar" 125 zones := []string{"foo", "bar"} 126 args := makeAddSubnetsArgs(cidr, providerId, space, zones) 127 s.prepareAPICall(c, args) 128 err := s.api.AddSubnet( 129 names.NewSubnetTag(cidr), 130 network.Id(providerId), 131 names.NewSpaceTag(space), 132 zones, 133 ) 134 c.Assert(s.apiCaller.CallCount, gc.Equals, 1) 135 c.Assert(err, jc.ErrorIsNil) 136 } 137 138 func (s *SubnetsSuite) TestAddSubnetFails(c *gc.C) { 139 cidr := "1.1.1.0/24" 140 providerId := "foo" 141 space := "bar" 142 zones := []string{"foo", "bar"} 143 args := makeAddSubnetsArgs(cidr, providerId, space, zones) 144 args.Error = errors.New("bang") 145 s.prepareAPICall(c, args) 146 err := s.api.AddSubnet( 147 names.NewSubnetTag(cidr), 148 network.Id(providerId), 149 names.NewSpaceTag(space), 150 zones, 151 ) 152 c.Check(s.apiCaller.CallCount, gc.Equals, 1) 153 c.Assert(err, gc.ErrorMatches, "bang") 154 } 155 156 func (s *SubnetsSuite) TestCreateSubnet(c *gc.C) { 157 cidr := "1.1.1.0/24" 158 space := "bar" 159 zones := []string{"foo", "bar"} 160 isPublic := true 161 args := makeCreateSubnetsArgs(cidr, space, zones, isPublic) 162 s.prepareAPICall(c, args) 163 err := s.api.CreateSubnet( 164 names.NewSubnetTag(cidr), 165 names.NewSpaceTag(space), 166 zones, 167 isPublic, 168 ) 169 c.Assert(s.apiCaller.CallCount, gc.Equals, 1) 170 c.Assert(err, jc.ErrorIsNil) 171 } 172 173 func (s *SubnetsSuite) TestCreateSubnetFails(c *gc.C) { 174 cidr := "1.1.1.0/24" 175 isPublic := true 176 space := "bar" 177 zones := []string{"foo", "bar"} 178 args := makeCreateSubnetsArgs(cidr, space, zones, isPublic) 179 args.Error = errors.New("bang") 180 s.prepareAPICall(c, args) 181 err := s.api.CreateSubnet( 182 names.NewSubnetTag(cidr), 183 names.NewSpaceTag(space), 184 zones, 185 isPublic, 186 ) 187 c.Check(s.apiCaller.CallCount, gc.Equals, 1) 188 c.Assert(err, gc.ErrorMatches, "bang") 189 } 190 191 func (s *SubnetsSuite) TestListSubnetsNoResults(c *gc.C) { 192 space := names.NewSpaceTag("foo") 193 zone := "bar" 194 args := makeListSubnetsArgs(&space, zone) 195 s.prepareAPICall(c, args) 196 results, err := s.api.ListSubnets(&space, zone) 197 c.Assert(s.apiCaller.CallCount, gc.Equals, 1) 198 c.Assert(err, jc.ErrorIsNil) 199 200 var expectedResults []params.Subnet 201 c.Assert(results, jc.DeepEquals, expectedResults) 202 } 203 204 func (s *SubnetsSuite) TestListSubnetsFails(c *gc.C) { 205 space := names.NewSpaceTag("foo") 206 zone := "bar" 207 args := makeListSubnetsArgs(&space, zone) 208 args.Error = errors.New("bang") 209 s.prepareAPICall(c, args) 210 results, err := s.api.ListSubnets(&space, zone) 211 c.Assert(s.apiCaller.CallCount, gc.Equals, 1) 212 c.Assert(err, gc.ErrorMatches, "bang") 213 214 var expectedResults []params.Subnet 215 c.Assert(results, jc.DeepEquals, expectedResults) 216 }