github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/caasmodelconfigmanager/manifold_test.go (about) 1 // Copyright 2021 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasmodelconfigmanager_test 5 6 import ( 7 "time" 8 9 "github.com/juju/clock/testclock" 10 "github.com/juju/errors" 11 "github.com/juju/loggo" 12 "github.com/juju/names/v5" 13 "github.com/juju/testing" 14 jc "github.com/juju/testing/checkers" 15 "github.com/juju/worker/v3" 16 dt "github.com/juju/worker/v3/dependency/testing" 17 "go.uber.org/mock/gomock" 18 gc "gopkg.in/check.v1" 19 20 "github.com/juju/juju/api/base" 21 "github.com/juju/juju/caas" 22 "github.com/juju/juju/worker/caasmodelconfigmanager" 23 "github.com/juju/juju/worker/caasmodelconfigmanager/mocks" 24 ) 25 26 var _ = gc.Suite(&manifoldSuite{}) 27 28 type manifoldSuite struct { 29 testing.IsolationSuite 30 config caasmodelconfigmanager.ManifoldConfig 31 } 32 33 func (s *manifoldSuite) SetUpTest(c *gc.C) { 34 s.IsolationSuite.SetUpTest(c) 35 s.config = s.validConfig() 36 } 37 38 func (s *manifoldSuite) validConfig() caasmodelconfigmanager.ManifoldConfig { 39 return caasmodelconfigmanager.ManifoldConfig{ 40 APICallerName: "api-caller", 41 BrokerName: "broker", 42 NewWorker: func(config caasmodelconfigmanager.Config) (worker.Worker, error) { 43 return nil, nil 44 }, 45 NewFacade: func(caller base.APICaller) (caasmodelconfigmanager.Facade, error) { 46 return nil, nil 47 }, 48 Logger: loggo.GetLogger("test"), 49 Clock: testclock.NewClock(time.Time{}), 50 } 51 } 52 53 func (s *manifoldSuite) TestValid(c *gc.C) { 54 c.Check(s.config.Validate(), jc.ErrorIsNil) 55 } 56 57 func (s *manifoldSuite) TestMissingAPICallerName(c *gc.C) { 58 s.config.APICallerName = "" 59 s.checkNotValid(c, "empty APICallerName not valid") 60 } 61 62 func (s *manifoldSuite) TestMissingBrokerName(c *gc.C) { 63 s.config.BrokerName = "" 64 s.checkNotValid(c, "empty BrokerName not valid") 65 } 66 67 func (s *manifoldSuite) TestMissingNewFacade(c *gc.C) { 68 s.config.NewFacade = nil 69 s.checkNotValid(c, "nil NewFacade not valid") 70 } 71 72 func (s *manifoldSuite) TestMissingNewWorker(c *gc.C) { 73 s.config.NewWorker = nil 74 s.checkNotValid(c, "nil NewWorker not valid") 75 } 76 77 func (s *manifoldSuite) TestMissingLogger(c *gc.C) { 78 s.config.Logger = nil 79 s.checkNotValid(c, "nil Logger not valid") 80 } 81 82 func (s *manifoldSuite) TestMissingClock(c *gc.C) { 83 s.config.Clock = nil 84 s.checkNotValid(c, "nil Clock not valid") 85 } 86 87 func (s *manifoldSuite) checkNotValid(c *gc.C, expect string) { 88 err := s.config.Validate() 89 c.Check(err, gc.ErrorMatches, expect) 90 c.Check(err, jc.Satisfies, errors.IsNotValid) 91 } 92 93 func (s *manifoldSuite) TestStart(c *gc.C) { 94 ctrl := gomock.NewController(c) 95 defer ctrl.Finish() 96 97 called := false 98 s.config.NewFacade = func(caller base.APICaller) (caasmodelconfigmanager.Facade, error) { 99 return mocks.NewMockFacade(ctrl), nil 100 } 101 s.config.NewWorker = func(config caasmodelconfigmanager.Config) (worker.Worker, error) { 102 called = true 103 mc := jc.NewMultiChecker() 104 mc.AddExpr(`_.Facade`, gc.NotNil) 105 mc.AddExpr(`_.Broker`, gc.NotNil) 106 mc.AddExpr(`_.Logger`, gc.NotNil) 107 mc.AddExpr(`_.RegistryFunc`, gc.NotNil) 108 mc.AddExpr(`_.Clock`, gc.NotNil) 109 c.Check(config, mc, caasmodelconfigmanager.Config{ 110 ModelTag: names.NewModelTag("ffffffff-ffff-ffff-ffff-ffffffffffff"), 111 }) 112 return nil, nil 113 } 114 manifold := caasmodelconfigmanager.Manifold(s.config) 115 w, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{ 116 "api-caller": struct{ base.APICaller }{&mockAPICaller{}}, 117 "broker": struct{ caas.Broker }{}, 118 })) 119 c.Assert(err, jc.ErrorIsNil) 120 c.Assert(w, gc.IsNil) 121 c.Assert(called, jc.IsTrue) 122 } 123 124 type mockAPICaller struct { 125 base.APICaller 126 } 127 128 func (*mockAPICaller) BestFacadeVersion(facade string) int { 129 return 1 130 } 131 132 func (*mockAPICaller) ModelTag() (names.ModelTag, bool) { 133 return names.NewModelTag("ffffffff-ffff-ffff-ffff-ffffffffffff"), true 134 }