github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/cmd/jujud/agent/util/apiagent_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package util_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 "github.com/juju/juju/cmd/jujud/agent/util" 15 "github.com/juju/juju/worker" 16 "github.com/juju/juju/worker/dependency" 17 dt "github.com/juju/juju/worker/dependency/testing" 18 ) 19 20 type AgentApiManifoldSuite struct { 21 testing.IsolationSuite 22 testing.Stub 23 manifold dependency.Manifold 24 worker worker.Worker 25 } 26 27 var _ = gc.Suite(&AgentApiManifoldSuite{}) 28 29 func (s *AgentApiManifoldSuite) SetUpTest(c *gc.C) { 30 s.IsolationSuite.SetUpTest(c) 31 s.Stub = testing.Stub{} 32 s.worker = &dummyWorker{} 33 s.manifold = util.AgentApiManifold(util.AgentApiManifoldConfig{ 34 AgentName: "agent-name", 35 APICallerName: "api-caller-name", 36 }, s.newWorker) 37 } 38 39 func (s *AgentApiManifoldSuite) newWorker(a agent.Agent, apiCaller base.APICaller) (worker.Worker, error) { 40 s.AddCall("newWorker", a, apiCaller) 41 if err := s.NextErr(); err != nil { 42 return nil, err 43 } 44 return s.worker, nil 45 } 46 47 func (s *AgentApiManifoldSuite) TestInputs(c *gc.C) { 48 c.Check(s.manifold.Inputs, jc.DeepEquals, []string{"agent-name", "api-caller-name"}) 49 } 50 51 func (s *AgentApiManifoldSuite) TestOutput(c *gc.C) { 52 c.Check(s.manifold.Output, gc.IsNil) 53 } 54 55 func (s *AgentApiManifoldSuite) TestStartAgentMissing(c *gc.C) { 56 context := dt.StubContext(nil, map[string]interface{}{ 57 "agent-name": dependency.ErrMissing, 58 }) 59 60 worker, err := s.manifold.Start(context) 61 c.Check(worker, gc.IsNil) 62 c.Check(err, gc.Equals, dependency.ErrMissing) 63 } 64 65 func (s *AgentApiManifoldSuite) TestStartApiConnMissing(c *gc.C) { 66 context := dt.StubContext(nil, map[string]interface{}{ 67 "agent-name": &dummyAgent{}, 68 "api-caller-name": dependency.ErrMissing, 69 }) 70 71 worker, err := s.manifold.Start(context) 72 c.Check(worker, gc.IsNil) 73 c.Check(err, gc.Equals, dependency.ErrMissing) 74 } 75 76 func (s *AgentApiManifoldSuite) TestStartFailure(c *gc.C) { 77 expectAgent := &dummyAgent{} 78 expectApiCaller := &dummyApiCaller{} 79 context := dt.StubContext(nil, map[string]interface{}{ 80 "agent-name": expectAgent, 81 "api-caller-name": expectApiCaller, 82 }) 83 s.SetErrors(errors.New("some error")) 84 85 worker, err := s.manifold.Start(context) 86 c.Check(worker, gc.IsNil) 87 c.Check(err, gc.ErrorMatches, "some error") 88 s.CheckCalls(c, []testing.StubCall{{ 89 FuncName: "newWorker", 90 Args: []interface{}{expectAgent, expectApiCaller}, 91 }}) 92 } 93 94 func (s *AgentApiManifoldSuite) TestStartSuccess(c *gc.C) { 95 expectAgent := &dummyAgent{} 96 expectApiCaller := &dummyApiCaller{} 97 context := dt.StubContext(nil, map[string]interface{}{ 98 "agent-name": expectAgent, 99 "api-caller-name": expectApiCaller, 100 }) 101 102 worker, err := s.manifold.Start(context) 103 c.Check(err, jc.ErrorIsNil) 104 c.Check(worker, gc.Equals, s.worker) 105 s.CheckCalls(c, []testing.StubCall{{ 106 FuncName: "newWorker", 107 Args: []interface{}{expectAgent, expectApiCaller}, 108 }}) 109 } 110 111 type dummyApiCaller struct { 112 base.APICaller 113 } 114 115 type dummyAgent struct { 116 agent.Agent 117 } 118 119 type dummyWorker struct { 120 worker.Worker 121 }