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  }