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 }