github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/externalcontrollerupdater/externalcontrollerupdater_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package externalcontrollerupdater_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/api/base/testing"
    11  	"github.com/juju/juju/api/externalcontrollerupdater"
    12  	"github.com/juju/juju/apiserver/params"
    13  	"github.com/juju/juju/core/crossmodel"
    14  	coretesting "github.com/juju/juju/testing"
    15  )
    16  
    17  var _ = gc.Suite(&ExternalControllerUpdaterSuite{})
    18  
    19  type ExternalControllerUpdaterSuite struct {
    20  	coretesting.BaseSuite
    21  }
    22  
    23  func (s *ExternalControllerUpdaterSuite) TestNewClient(c *gc.C) {
    24  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    25  		return nil
    26  	})
    27  	client := externalcontrollerupdater.New(apiCaller)
    28  	c.Assert(client, gc.NotNil)
    29  }
    30  
    31  func (s *ExternalControllerUpdaterSuite) TestExternalControllerInfo(c *gc.C) {
    32  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    33  		c.Check(objType, gc.Equals, "ExternalControllerUpdater")
    34  		c.Check(version, gc.Equals, 0)
    35  		c.Check(id, gc.Equals, "")
    36  		c.Check(request, gc.Equals, "ExternalControllerInfo")
    37  		c.Check(arg, gc.DeepEquals, params.Entities{
    38  			Entities: []params.Entity{{coretesting.ControllerTag.String()}},
    39  		})
    40  		c.Assert(result, gc.FitsTypeOf, &params.ExternalControllerInfoResults{})
    41  		*(result.(*params.ExternalControllerInfoResults)) = params.ExternalControllerInfoResults{
    42  			[]params.ExternalControllerInfoResult{{
    43  				Result: &params.ExternalControllerInfo{
    44  					ControllerTag: coretesting.ControllerTag.String(),
    45  					Alias:         "foo",
    46  					Addrs:         []string{"bar"},
    47  					CACert:        "baz",
    48  				},
    49  			}},
    50  		}
    51  		return nil
    52  	})
    53  	client := externalcontrollerupdater.New(apiCaller)
    54  	info, err := client.ExternalControllerInfo(coretesting.ControllerTag.Id())
    55  	c.Assert(err, jc.ErrorIsNil)
    56  	c.Assert(info, jc.DeepEquals, &crossmodel.ControllerInfo{
    57  		ControllerTag: coretesting.ControllerTag,
    58  		Alias:         "foo",
    59  		Addrs:         []string{"bar"},
    60  		CACert:        "baz",
    61  	})
    62  }
    63  
    64  func (s *ExternalControllerUpdaterSuite) TestExternalControllerInfoError(c *gc.C) {
    65  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    66  		*(result.(*params.ExternalControllerInfoResults)) = params.ExternalControllerInfoResults{
    67  			[]params.ExternalControllerInfoResult{{
    68  				Error: &params.Error{Message: "boom"},
    69  			}},
    70  		}
    71  		return nil
    72  	})
    73  	client := externalcontrollerupdater.New(apiCaller)
    74  	info, err := client.ExternalControllerInfo(coretesting.ControllerTag.Id())
    75  	c.Assert(err, gc.ErrorMatches, "boom")
    76  	c.Assert(info, gc.IsNil)
    77  }
    78  
    79  func (s *ExternalControllerUpdaterSuite) TestSetExternalControllerInfo(c *gc.C) {
    80  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
    81  		c.Check(objType, gc.Equals, "ExternalControllerUpdater")
    82  		c.Check(version, gc.Equals, 0)
    83  		c.Check(id, gc.Equals, "")
    84  		c.Check(request, gc.Equals, "SetExternalControllerInfo")
    85  		c.Check(arg, jc.DeepEquals, params.SetExternalControllersInfoParams{
    86  			[]params.SetExternalControllerInfoParams{{
    87  				params.ExternalControllerInfo{
    88  					ControllerTag: coretesting.ControllerTag.String(),
    89  					Alias:         "foo",
    90  					Addrs:         []string{"bar"},
    91  					CACert:        "baz",
    92  				},
    93  			}},
    94  		})
    95  		c.Assert(result, gc.FitsTypeOf, &params.ErrorResults{})
    96  		*(result.(*params.ErrorResults)) = params.ErrorResults{
    97  			[]params.ErrorResult{{
    98  				&params.Error{Message: "boom"},
    99  			}},
   100  		}
   101  		return nil
   102  	})
   103  	client := externalcontrollerupdater.New(apiCaller)
   104  	err := client.SetExternalControllerInfo(crossmodel.ControllerInfo{
   105  		ControllerTag: coretesting.ControllerTag,
   106  		Alias:         "foo",
   107  		Addrs:         []string{"bar"},
   108  		CACert:        "baz",
   109  	})
   110  	c.Assert(err, gc.ErrorMatches, "boom")
   111  }
   112  
   113  func (s *ExternalControllerUpdaterSuite) TestWatchExternalControllers(c *gc.C) {
   114  	apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error {
   115  		c.Check(objType, gc.Equals, "ExternalControllerUpdater")
   116  		c.Check(version, gc.Equals, 0)
   117  		c.Check(id, gc.Equals, "")
   118  		c.Check(request, gc.Equals, "WatchExternalControllers")
   119  		c.Check(arg, gc.IsNil)
   120  		c.Assert(result, gc.FitsTypeOf, &params.StringsWatchResults{})
   121  		*(result.(*params.StringsWatchResults)) = params.StringsWatchResults{
   122  			[]params.StringsWatchResult{{
   123  				Error: &params.Error{Message: "boom"},
   124  			}},
   125  		}
   126  		return nil
   127  	})
   128  	client := externalcontrollerupdater.New(apiCaller)
   129  	w, err := client.WatchExternalControllers()
   130  	c.Assert(err, gc.ErrorMatches, "boom")
   131  	c.Assert(w, gc.IsNil)
   132  }