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 }