github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/caasmodelconfigmanager/manifold_test.go (about)

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