github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/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  }