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  }