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