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 }