github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/secretsdrainworker/manifold_test.go (about) 1 // Copyright 2023 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package secretsdrainworker_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 dt "github.com/juju/worker/v3/dependency/testing" 13 "go.uber.org/mock/gomock" 14 gc "gopkg.in/check.v1" 15 16 "github.com/juju/juju/api/base" 17 jujusecrets "github.com/juju/juju/secrets" 18 "github.com/juju/juju/worker/secretsdrainworker" 19 "github.com/juju/juju/worker/secretsdrainworker/mocks" 20 ) 21 22 type ManifoldSuite struct { 23 testing.IsolationSuite 24 config secretsdrainworker.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() secretsdrainworker.ManifoldConfig { 35 return secretsdrainworker.ManifoldConfig{ 36 APICallerName: "api-caller", 37 Logger: loggo.GetLogger("test"), 38 NewWorker: func(config secretsdrainworker.Config) (worker.Worker, error) { 39 return nil, nil 40 }, 41 NewSecretsDrainFacade: func(base.APICaller) secretsdrainworker.SecretsDrainFacade { return nil }, 42 NewBackendsClient: func(base.APICaller) (jujusecrets.BackendsClient, error) { 43 return nil, nil 44 }, 45 } 46 } 47 48 func (s *ManifoldSuite) TestValid(c *gc.C) { 49 c.Check(s.config.Validate(), jc.ErrorIsNil) 50 } 51 52 func (s *ManifoldSuite) TestMissingAPICallerName(c *gc.C) { 53 s.config.APICallerName = "" 54 s.checkNotValid(c, "empty APICallerName not valid") 55 } 56 57 func (s *ManifoldSuite) TestMissingLogger(c *gc.C) { 58 s.config.Logger = nil 59 s.checkNotValid(c, "nil Logger not valid") 60 } 61 func (s *ManifoldSuite) TestMissingNewWorker(c *gc.C) { 62 s.config.NewWorker = nil 63 s.checkNotValid(c, "nil NewWorker not valid") 64 } 65 66 func (s *ManifoldSuite) TestMissingNewFacade(c *gc.C) { 67 s.config.NewSecretsDrainFacade = nil 68 s.checkNotValid(c, "nil NewSecretsDrainFacade not valid") 69 } 70 71 func (s *ManifoldSuite) TestMissingNewBackendsClient(c *gc.C) { 72 s.config.NewBackendsClient = nil 73 s.checkNotValid(c, "nil NewBackendsClient not valid") 74 } 75 76 func (s *ManifoldSuite) checkNotValid(c *gc.C, expect string) { 77 err := s.config.Validate() 78 c.Check(err, gc.ErrorMatches, expect) 79 c.Check(err, jc.Satisfies, errors.IsNotValid) 80 } 81 82 func (s *ManifoldSuite) TestStart(c *gc.C) { 83 ctrl := gomock.NewController(c) 84 defer ctrl.Finish() 85 86 facade := mocks.NewMockSecretsDrainFacade(ctrl) 87 s.config.NewSecretsDrainFacade = func(base.APICaller) secretsdrainworker.SecretsDrainFacade { 88 return facade 89 } 90 91 backendClients := mocks.NewMockBackendsClient(ctrl) 92 s.config.NewBackendsClient = func(base.APICaller) (jujusecrets.BackendsClient, error) { 93 return backendClients, nil 94 } 95 96 called := false 97 s.config.NewWorker = func(config secretsdrainworker.Config) (worker.Worker, error) { 98 called = true 99 mc := jc.NewMultiChecker() 100 mc.AddExpr(`_.Facade`, gc.NotNil) 101 mc.AddExpr(`_.Logger`, gc.NotNil) 102 mc.AddExpr(`_.SecretsBackendGetter`, gc.NotNil) 103 c.Check(config, mc, secretsdrainworker.Config{SecretsDrainFacade: facade}) 104 return nil, nil 105 } 106 manifold := secretsdrainworker.Manifold(s.config) 107 w, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{ 108 "api-caller": struct{ base.APICaller }{&mockAPICaller{}}, 109 })) 110 c.Assert(w, gc.IsNil) 111 c.Assert(err, jc.ErrorIsNil) 112 c.Assert(called, jc.IsTrue) 113 } 114 115 type mockAPICaller struct { 116 base.APICaller 117 } 118 119 func (*mockAPICaller) BestFacadeVersion(facade string) int { 120 return 1 121 }