github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/firewaller/manifold_test.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package firewaller_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  	gc "gopkg.in/check.v1"
    14  
    15  	"github.com/juju/juju/api"
    16  	"github.com/juju/juju/api/base"
    17  	"github.com/juju/juju/api/controller/remoterelations"
    18  	"github.com/juju/juju/environs"
    19  	"github.com/juju/juju/environs/config"
    20  	coretesting "github.com/juju/juju/testing"
    21  	"github.com/juju/juju/worker/common"
    22  	"github.com/juju/juju/worker/firewaller"
    23  )
    24  
    25  type ManifoldSuite struct {
    26  	testing.IsolationSuite
    27  }
    28  
    29  var _ = gc.Suite(&ManifoldSuite{})
    30  
    31  func (s *ManifoldSuite) TestManifoldFirewallModeNone(c *gc.C) {
    32  	ctx := &mockDependencyContext{
    33  		env: &mockEnviron{
    34  			config: coretesting.CustomModelConfig(c, coretesting.Attrs{
    35  				"firewall-mode": config.FwNone,
    36  			}),
    37  		},
    38  	}
    39  
    40  	manifold := firewaller.Manifold(validConfig())
    41  	_, err := manifold.Start(ctx)
    42  	c.Assert(err, gc.Equals, dependency.ErrUninstall)
    43  }
    44  
    45  type mockDependencyContext struct {
    46  	dependency.Context
    47  	env *mockEnviron
    48  }
    49  
    50  func (m *mockDependencyContext) Get(name string, out interface{}) error {
    51  	if name == "environ" {
    52  		*(out.(*environs.Environ)) = m.env
    53  	}
    54  	return nil
    55  }
    56  
    57  type mockEnviron struct {
    58  	environs.Environ
    59  	config *config.Config
    60  }
    61  
    62  func (e *mockEnviron) Config() *config.Config {
    63  	return e.config
    64  }
    65  
    66  type ManifoldConfigSuite struct {
    67  	testing.IsolationSuite
    68  	config firewaller.ManifoldConfig
    69  }
    70  
    71  var _ = gc.Suite(&ManifoldConfigSuite{})
    72  
    73  func (s *ManifoldConfigSuite) SetUpTest(c *gc.C) {
    74  	s.IsolationSuite.SetUpTest(c)
    75  	s.config = validConfig()
    76  }
    77  
    78  func validConfig() firewaller.ManifoldConfig {
    79  	return firewaller.ManifoldConfig{
    80  		AgentName:                    "agent",
    81  		APICallerName:                "api-caller",
    82  		EnvironName:                  "environ",
    83  		Logger:                       loggo.GetLogger("test"),
    84  		NewControllerConnection:      func(*api.Info) (api.Connection, error) { return nil, nil },
    85  		NewFirewallerFacade:          func(base.APICaller) (firewaller.FirewallerAPI, error) { return nil, nil },
    86  		NewFirewallerWorker:          func(firewaller.Config) (worker.Worker, error) { return nil, nil },
    87  		NewRemoteRelationsFacade:     func(base.APICaller) *remoterelations.Client { return nil },
    88  		NewCredentialValidatorFacade: func(base.APICaller) (common.CredentialAPI, error) { return nil, nil },
    89  	}
    90  }
    91  
    92  func (s *ManifoldConfigSuite) TestValid(c *gc.C) {
    93  	c.Check(s.config.Validate(), jc.ErrorIsNil)
    94  }
    95  
    96  func (s *ManifoldConfigSuite) TestMissingAgentName(c *gc.C) {
    97  	s.config.AgentName = ""
    98  	s.checkNotValid(c, "empty AgentName not valid")
    99  }
   100  
   101  func (s *ManifoldConfigSuite) TestMissingAPICallerName(c *gc.C) {
   102  	s.config.APICallerName = ""
   103  	s.checkNotValid(c, "empty APICallerName not valid")
   104  }
   105  
   106  func (s *ManifoldConfigSuite) TestMissingEnvironName(c *gc.C) {
   107  	s.config.EnvironName = ""
   108  	s.checkNotValid(c, "empty EnvironName not valid")
   109  }
   110  
   111  func (s *ManifoldConfigSuite) TestMissingLogger(c *gc.C) {
   112  	s.config.Logger = nil
   113  	s.checkNotValid(c, "nil Logger not valid")
   114  }
   115  
   116  func (s *ManifoldConfigSuite) TestMissingNewFirewallerFacade(c *gc.C) {
   117  	s.config.NewFirewallerFacade = nil
   118  	s.checkNotValid(c, "nil NewFirewallerFacade not valid")
   119  }
   120  
   121  func (s *ManifoldConfigSuite) TestMissingNewFirewallerWorker(c *gc.C) {
   122  	s.config.NewFirewallerWorker = nil
   123  	s.checkNotValid(c, "nil NewFirewallerWorker not valid")
   124  }
   125  
   126  func (s *ManifoldConfigSuite) TestMissingNewControllerConnection(c *gc.C) {
   127  	s.config.NewControllerConnection = nil
   128  	s.checkNotValid(c, "nil NewControllerConnection not valid")
   129  }
   130  
   131  func (s *ManifoldConfigSuite) TestMissingNewRemoteRelationsFacade(c *gc.C) {
   132  	s.config.NewRemoteRelationsFacade = nil
   133  	s.checkNotValid(c, "nil NewRemoteRelationsFacade not valid")
   134  }
   135  
   136  func (s *ManifoldConfigSuite) TestMissingNewCredentialValidatorFacade(c *gc.C) {
   137  	s.config.NewCredentialValidatorFacade = nil
   138  	s.checkNotValid(c, "nil NewCredentialValidatorFacade not valid")
   139  }
   140  
   141  func (s *ManifoldConfigSuite) checkNotValid(c *gc.C, expect string) {
   142  	err := s.config.Validate()
   143  	c.Check(err, gc.ErrorMatches, expect)
   144  	c.Check(err, jc.Satisfies, errors.IsNotValid)
   145  }