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