github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/secretspruner/manifold_test.go (about) 1 // Copyright 2023 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package secretspruner_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 "github.com/juju/juju/worker/secretspruner" 18 "github.com/juju/juju/worker/secretspruner/mocks" 19 ) 20 21 type manifoldSuite struct { 22 testing.IsolationSuite 23 config secretspruner.ManifoldConfig 24 } 25 26 var _ = gc.Suite(&manifoldSuite{}) 27 28 func (s *manifoldSuite) SetUpTest(c *gc.C) { 29 s.IsolationSuite.SetUpTest(c) 30 s.config = s.validConfig() 31 } 32 33 func (s *manifoldSuite) validConfig() secretspruner.ManifoldConfig { 34 return secretspruner.ManifoldConfig{ 35 APICallerName: "api-caller", 36 Logger: loggo.GetLogger("test"), 37 NewWorker: func(config secretspruner.Config) (worker.Worker, error) { 38 return nil, nil 39 }, 40 NewUserSecretsFacade: func(base.APICaller) secretspruner.SecretsFacade { return nil }, 41 } 42 } 43 44 func (s *manifoldSuite) TestValid(c *gc.C) { 45 c.Check(s.config.Validate(), jc.ErrorIsNil) 46 } 47 48 func (s *manifoldSuite) TestMissingAPICallerName(c *gc.C) { 49 s.config.APICallerName = "" 50 s.checkNotValid(c, "empty APICallerName not valid") 51 } 52 53 func (s *manifoldSuite) TestMissingLogger(c *gc.C) { 54 s.config.Logger = nil 55 s.checkNotValid(c, "nil Logger not valid") 56 } 57 func (s *manifoldSuite) TestMissingNewWorker(c *gc.C) { 58 s.config.NewWorker = nil 59 s.checkNotValid(c, "nil NewWorker not valid") 60 } 61 62 func (s *manifoldSuite) TestMissingNewFacade(c *gc.C) { 63 s.config.NewUserSecretsFacade = nil 64 s.checkNotValid(c, "nil NewUserSecretsFacade not valid") 65 } 66 67 func (s *manifoldSuite) checkNotValid(c *gc.C, expect string) { 68 err := s.config.Validate() 69 c.Check(err, gc.ErrorMatches, expect) 70 c.Check(err, jc.ErrorIs, errors.NotValid) 71 } 72 73 func (s *manifoldSuite) TestStart(c *gc.C) { 74 ctrl := gomock.NewController(c) 75 defer ctrl.Finish() 76 77 facade := mocks.NewMockSecretsFacade(ctrl) 78 s.config.NewUserSecretsFacade = func(base.APICaller) secretspruner.SecretsFacade { 79 return facade 80 } 81 82 called := false 83 s.config.NewWorker = func(config secretspruner.Config) (worker.Worker, error) { 84 called = true 85 mc := jc.NewMultiChecker() 86 mc.AddExpr(`_.Logger`, gc.NotNil) 87 c.Check(config, mc, secretspruner.Config{SecretsFacade: facade}) 88 return nil, nil 89 } 90 manifold := secretspruner.Manifold(s.config) 91 w, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{ 92 "api-caller": struct{ base.APICaller }{&mockAPICaller{}}, 93 })) 94 c.Assert(w, gc.IsNil) 95 c.Assert(err, jc.ErrorIsNil) 96 c.Assert(called, jc.IsTrue) 97 } 98 99 type mockAPICaller struct { 100 base.APICaller 101 } 102 103 func (*mockAPICaller) BestFacadeVersion(facade string) int { 104 return 1 105 }