github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/caasfirewaller/manifold_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasfirewaller_test 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/loggo" 9 "github.com/juju/testing" 10 jc "github.com/juju/testing/checkers" 11 "github.com/juju/worker/v3" 12 "github.com/juju/worker/v3/dependency" 13 dt "github.com/juju/worker/v3/dependency/testing" 14 "github.com/juju/worker/v3/workertest" 15 gc "gopkg.in/check.v1" 16 17 "github.com/juju/juju/api/base" 18 coretesting "github.com/juju/juju/testing" 19 "github.com/juju/juju/worker/caasfirewaller" 20 ) 21 22 type ManifoldSuite struct { 23 testing.IsolationSuite 24 testing.Stub 25 manifold dependency.Manifold 26 context dependency.Context 27 28 apiCaller fakeAPICaller 29 broker fakeBroker 30 client fakeClient 31 } 32 33 var _ = gc.Suite(&ManifoldSuite{}) 34 35 func (s *ManifoldSuite) SetUpTest(c *gc.C) { 36 s.IsolationSuite.SetUpTest(c) 37 s.ResetCalls() 38 39 s.context = s.newContext(nil) 40 s.manifold = caasfirewaller.Manifold(s.validConfig()) 41 } 42 43 func (s *ManifoldSuite) validConfig() caasfirewaller.ManifoldConfig { 44 return caasfirewaller.ManifoldConfig{ 45 APICallerName: "api-caller", 46 BrokerName: "broker", 47 ControllerUUID: coretesting.ControllerTag.Id(), 48 ModelUUID: coretesting.ModelTag.Id(), 49 NewClient: s.newClient, 50 NewWorker: s.newWorker, 51 Logger: loggo.GetLogger("test"), 52 } 53 } 54 55 func (s *ManifoldSuite) newClient(apiCaller base.APICaller) caasfirewaller.Client { 56 s.MethodCall(s, "NewClient", apiCaller) 57 return &s.client 58 } 59 60 func (s *ManifoldSuite) newWorker(config caasfirewaller.Config) (worker.Worker, error) { 61 s.MethodCall(s, "NewWorker", config) 62 if err := s.NextErr(); err != nil { 63 return nil, err 64 } 65 w := worker.NewRunner(worker.RunnerParams{}) 66 s.AddCleanup(func(c *gc.C) { workertest.DirtyKill(c, w) }) 67 return w, nil 68 } 69 70 func (s *ManifoldSuite) newContext(overlay map[string]interface{}) dependency.Context { 71 resources := map[string]interface{}{ 72 "api-caller": &s.apiCaller, 73 "broker": &s.broker, 74 } 75 for k, v := range overlay { 76 resources[k] = v 77 } 78 return dt.StubContext(nil, resources) 79 } 80 81 func (s *ManifoldSuite) TestMissingControllerUUID(c *gc.C) { 82 config := s.validConfig() 83 config.ControllerUUID = "" 84 s.checkConfigInvalid(c, config, "empty ControllerUUID not valid") 85 } 86 87 func (s *ManifoldSuite) TestMissingModelUUID(c *gc.C) { 88 config := s.validConfig() 89 config.ModelUUID = "" 90 s.checkConfigInvalid(c, config, "empty ModelUUID not valid") 91 } 92 93 func (s *ManifoldSuite) TestMissingAPICallerName(c *gc.C) { 94 config := s.validConfig() 95 config.APICallerName = "" 96 s.checkConfigInvalid(c, config, "empty APICallerName not valid") 97 } 98 99 func (s *ManifoldSuite) TestMissingBrokerName(c *gc.C) { 100 config := s.validConfig() 101 config.BrokerName = "" 102 s.checkConfigInvalid(c, config, "empty BrokerName not valid") 103 } 104 105 func (s *ManifoldSuite) TestMissingNewWorker(c *gc.C) { 106 config := s.validConfig() 107 config.NewWorker = nil 108 s.checkConfigInvalid(c, config, "nil NewWorker not valid") 109 } 110 111 func (s *ManifoldSuite) TestMissingLogger(c *gc.C) { 112 config := s.validConfig() 113 config.Logger = nil 114 s.checkConfigInvalid(c, config, "nil Logger not valid") 115 } 116 117 func (s *ManifoldSuite) checkConfigInvalid(c *gc.C, config caasfirewaller.ManifoldConfig, expect string) { 118 err := config.Validate() 119 c.Check(err, gc.ErrorMatches, expect) 120 c.Check(err, jc.Satisfies, errors.IsNotValid) 121 } 122 123 var expectedInputs = []string{"api-caller", "broker"} 124 125 func (s *ManifoldSuite) TestInputs(c *gc.C) { 126 c.Assert(s.manifold.Inputs, jc.SameContents, expectedInputs) 127 } 128 129 func (s *ManifoldSuite) TestMissingInputs(c *gc.C) { 130 for _, input := range expectedInputs { 131 context := s.newContext(map[string]interface{}{ 132 input: dependency.ErrMissing, 133 }) 134 _, err := s.manifold.Start(context) 135 c.Assert(errors.Cause(err), gc.Equals, dependency.ErrMissing) 136 } 137 } 138 139 func (s *ManifoldSuite) TestStart(c *gc.C) { 140 w, err := s.manifold.Start(s.context) 141 c.Assert(err, jc.ErrorIsNil) 142 workertest.CleanKill(c, w) 143 144 s.CheckCallNames(c, "NewClient", "NewWorker") 145 s.CheckCall(c, 0, "NewClient", &s.apiCaller) 146 147 args := s.Calls()[1].Args 148 c.Assert(args, gc.HasLen, 1) 149 c.Assert(args[0], gc.FitsTypeOf, caasfirewaller.Config{}) 150 config := args[0].(caasfirewaller.Config) 151 152 c.Assert(config, jc.DeepEquals, caasfirewaller.Config{ 153 ControllerUUID: coretesting.ControllerTag.Id(), 154 ModelUUID: coretesting.ModelTag.Id(), 155 ApplicationGetter: &s.client, 156 ServiceExposer: &s.broker, 157 LifeGetter: &s.client, 158 CharmGetter: &s.client, 159 Logger: loggo.GetLogger("test"), 160 }) 161 }