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  }