github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/controller/crosscontroller/crosscontroller_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package crosscontroller_test 5 6 import ( 7 "errors" 8 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/apiserver/common" 13 "github.com/juju/juju/apiserver/facades/controller/crosscontroller" 14 "github.com/juju/juju/apiserver/params" 15 "github.com/juju/juju/state" 16 coretesting "github.com/juju/juju/testing" 17 ) 18 19 var _ = gc.Suite(&CrossControllerSuite{}) 20 21 type CrossControllerSuite struct { 22 coretesting.BaseSuite 23 24 resources *common.Resources 25 watcher *mockNotifyWatcher 26 localControllerInfo func() ([]string, string, error) 27 watchLocalControllerInfo func() state.NotifyWatcher 28 api *crosscontroller.CrossControllerAPI 29 } 30 31 func (s *CrossControllerSuite) SetUpTest(c *gc.C) { 32 s.BaseSuite.SetUpTest(c) 33 s.resources = common.NewResources() 34 s.AddCleanup(func(*gc.C) { s.resources.StopAll() }) 35 s.localControllerInfo = func() ([]string, string, error) { 36 return []string{"addr1", "addr2"}, "ca-cert", nil 37 } 38 s.watchLocalControllerInfo = func() state.NotifyWatcher { 39 return s.watcher 40 } 41 api, err := crosscontroller.NewCrossControllerAPI( 42 s.resources, 43 func() ([]string, string, error) { return s.localControllerInfo() }, 44 func() state.NotifyWatcher { return s.watchLocalControllerInfo() }, 45 ) 46 c.Assert(err, jc.ErrorIsNil) 47 s.api = api 48 s.watcher = newMockNotifyWatcher() 49 s.AddCleanup(func(*gc.C) { s.watcher.Stop() }) 50 } 51 52 func (s *CrossControllerSuite) TestControllerInfo(c *gc.C) { 53 results, err := s.api.ControllerInfo() 54 c.Assert(err, jc.ErrorIsNil) 55 c.Assert(results, jc.DeepEquals, params.ControllerAPIInfoResults{ 56 []params.ControllerAPIInfoResult{{ 57 Addresses: []string{"addr1", "addr2"}, 58 CACert: "ca-cert", 59 }}, 60 }) 61 } 62 63 func (s *CrossControllerSuite) TestControllerInfoError(c *gc.C) { 64 s.localControllerInfo = func() ([]string, string, error) { 65 return nil, "", errors.New("nope") 66 } 67 results, err := s.api.ControllerInfo() 68 c.Assert(err, jc.ErrorIsNil) 69 c.Assert(results, jc.DeepEquals, params.ControllerAPIInfoResults{ 70 []params.ControllerAPIInfoResult{{ 71 Error: ¶ms.Error{Message: "nope"}, 72 }}, 73 }) 74 } 75 76 func (s *CrossControllerSuite) TestWatchControllerInfo(c *gc.C) { 77 s.watcher.changes <- struct{}{} // initial value 78 results, err := s.api.WatchControllerInfo() 79 c.Assert(err, jc.ErrorIsNil) 80 c.Assert(results, jc.DeepEquals, params.NotifyWatchResults{ 81 []params.NotifyWatchResult{{ 82 NotifyWatcherId: "1", 83 }}, 84 }) 85 c.Assert(s.resources.Get("1"), gc.Equals, s.watcher) 86 } 87 88 func (s *CrossControllerSuite) TestWatchControllerInfoError(c *gc.C) { 89 s.watcher.tomb.Kill(errors.New("nope")) 90 close(s.watcher.changes) 91 92 results, err := s.api.WatchControllerInfo() 93 c.Assert(err, jc.ErrorIsNil) 94 c.Assert(results, jc.DeepEquals, params.NotifyWatchResults{ 95 []params.NotifyWatchResult{{ 96 Error: ¶ms.Error{Message: "nope"}, 97 }}, 98 }) 99 c.Assert(s.resources.Get("1"), gc.IsNil) 100 }