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