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