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

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package provisioner_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/dependency"
    12  	dt "github.com/juju/worker/v3/dependency/testing"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	"github.com/juju/juju/agent"
    16  	apiprovisioner "github.com/juju/juju/api/agent/provisioner"
    17  	"github.com/juju/juju/api/base"
    18  	apitesting "github.com/juju/juju/api/base/testing"
    19  	"github.com/juju/juju/environs"
    20  	"github.com/juju/juju/worker/common"
    21  	"github.com/juju/juju/worker/provisioner"
    22  )
    23  
    24  type ManifoldSuite struct {
    25  	testing.IsolationSuite
    26  	stub testing.Stub
    27  }
    28  
    29  var _ = gc.Suite(&ManifoldSuite{})
    30  
    31  func (s *ManifoldSuite) makeManifold() dependency.Manifold {
    32  	fakeNewProvFunc := func(
    33  		*apiprovisioner.State,
    34  		agent.Config,
    35  		provisioner.Logger,
    36  		environs.Environ,
    37  		common.CredentialAPI,
    38  	) (provisioner.Provisioner, error) {
    39  		s.stub.AddCall("NewProvisionerFunc")
    40  		return struct{ provisioner.Provisioner }{}, nil
    41  	}
    42  	return provisioner.Manifold(provisioner.ManifoldConfig{
    43  		AgentName:                    "agent",
    44  		APICallerName:                "api-caller",
    45  		Logger:                       loggo.GetLogger("test"),
    46  		EnvironName:                  "environ",
    47  		NewProvisionerFunc:           fakeNewProvFunc,
    48  		NewCredentialValidatorFacade: func(base.APICaller) (common.CredentialAPI, error) { return nil, nil },
    49  	})
    50  }
    51  
    52  func (s *ManifoldSuite) SetUpTest(c *gc.C) {
    53  	s.stub.ResetCalls()
    54  }
    55  
    56  func (s *ManifoldSuite) TestManifold(c *gc.C) {
    57  	manifold := s.makeManifold()
    58  	c.Check(manifold.Inputs, jc.SameContents, []string{"agent", "api-caller", "environ"})
    59  	c.Check(manifold.Output, gc.IsNil)
    60  	c.Check(manifold.Start, gc.NotNil)
    61  }
    62  
    63  func (s *ManifoldSuite) TestMissingAgent(c *gc.C) {
    64  	manifold := s.makeManifold()
    65  	w, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{
    66  		"agent":      dependency.ErrMissing,
    67  		"api-caller": struct{ base.APICaller }{},
    68  		"environ":    struct{ environs.Environ }{},
    69  	}))
    70  	c.Check(w, gc.IsNil)
    71  	c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
    72  }
    73  
    74  func (s *ManifoldSuite) TestMissingAPICaller(c *gc.C) {
    75  	manifold := s.makeManifold()
    76  	w, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{
    77  		"agent":      struct{ agent.Agent }{},
    78  		"api-caller": dependency.ErrMissing,
    79  		"environ":    struct{ environs.Environ }{},
    80  	}))
    81  	c.Check(w, gc.IsNil)
    82  	c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
    83  }
    84  
    85  func (s *ManifoldSuite) TestMissingEnviron(c *gc.C) {
    86  	manifold := s.makeManifold()
    87  	w, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{
    88  		"agent":      struct{ agent.Agent }{},
    89  		"api-caller": struct{ base.APICaller }{},
    90  		"environ":    dependency.ErrMissing,
    91  	}))
    92  	c.Check(w, gc.IsNil)
    93  	c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing)
    94  }
    95  
    96  func (s *ManifoldSuite) TestStarts(c *gc.C) {
    97  	manifold := s.makeManifold()
    98  	w, err := manifold.Start(dt.StubContext(nil, map[string]interface{}{
    99  		"agent":      new(fakeAgent),
   100  		"api-caller": apitesting.APICallerFunc(nil),
   101  		"environ":    struct{ environs.Environ }{},
   102  	}))
   103  	c.Check(w, gc.NotNil)
   104  	c.Check(err, jc.ErrorIsNil)
   105  	s.stub.CheckCallNames(c, "NewProvisionerFunc")
   106  }
   107  
   108  type fakeAgent struct {
   109  	agent.Agent
   110  }
   111  
   112  func (a *fakeAgent) CurrentConfig() agent.Config {
   113  	return nil
   114  }