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