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, ¶ms.ExternalControllerInfoResults{}) 42 *(result.(*params.ExternalControllerInfoResults)) = params.ExternalControllerInfoResults{ 43 []params.ExternalControllerInfoResult{{ 44 Result: ¶ms.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: ¶ms.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, ¶ms.ErrorResults{}) 97 *(result.(*params.ErrorResults)) = params.ErrorResults{ 98 []params.ErrorResult{{ 99 ¶ms.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, ¶ms.StringsWatchResults{}) 122 *(result.(*params.StringsWatchResults)) = params.StringsWatchResults{ 123 []params.StringsWatchResult{{ 124 Error: ¶ms.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 }