github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/worker/agent/manifold_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package agent_test 5 6 import ( 7 "github.com/juju/testing" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 coreagent "github.com/juju/juju/agent" 12 "github.com/juju/juju/worker" 13 "github.com/juju/juju/worker/agent" 14 ) 15 16 type ManifoldSuite struct { 17 testing.IsolationSuite 18 } 19 20 var _ = gc.Suite(&ManifoldSuite{}) 21 22 func (s *ManifoldSuite) TestInputs(c *gc.C) { 23 inputAgent := &dummyAgent{} 24 manifold := agent.Manifold(inputAgent) 25 c.Check(manifold.Inputs, gc.IsNil) 26 } 27 28 func (s *ManifoldSuite) TestOutput(c *gc.C) { 29 inputAgent := &dummyAgent{} 30 manifold := agent.Manifold(inputAgent) 31 32 agentWorker, err := manifold.Start(nil) 33 c.Check(err, jc.ErrorIsNil) 34 defer assertStop(c, agentWorker) 35 36 var outputAgent coreagent.Agent 37 err = manifold.Output(agentWorker, &outputAgent) 38 c.Check(err, jc.ErrorIsNil) 39 c.Check(outputAgent, jc.DeepEquals, inputAgent) 40 } 41 42 func (s *ManifoldSuite) TestOutputStoppedWorker(c *gc.C) { 43 inputAgent := &dummyAgent{} 44 manifold := agent.Manifold(inputAgent) 45 46 agentWorker, err := manifold.Start(nil) 47 c.Check(err, jc.ErrorIsNil) 48 // The lifetime is irrelevant -- the output func will still function 49 // whether the (degenerate) worker is alive or not -- so no defer here. 50 assertStop(c, agentWorker) 51 52 var outputAgent coreagent.Agent 53 err = manifold.Output(agentWorker, &outputAgent) 54 c.Check(err, jc.ErrorIsNil) 55 c.Check(outputAgent, jc.DeepEquals, inputAgent) 56 } 57 58 func (s *ManifoldSuite) TestOutputBadWorker(c *gc.C) { 59 inputAgent := &dummyAgent{} 60 manifold := agent.Manifold(inputAgent) 61 62 var badWorker worker.Worker 63 64 var outputAgent coreagent.Agent 65 err := manifold.Output(badWorker, &outputAgent) 66 c.Check(err.Error(), gc.Equals, "expected *agent.agentWorker->*agent.Agent; got <nil>->*agent.Agent") 67 } 68 69 func (s *ManifoldSuite) TestOutputBadTarget(c *gc.C) { 70 inputAgent := &dummyAgent{} 71 manifold := agent.Manifold(inputAgent) 72 73 agentWorker, err := manifold.Start(nil) 74 c.Check(err, jc.ErrorIsNil) 75 defer assertStop(c, agentWorker) 76 77 var outputNonsense interface{} 78 err = manifold.Output(agentWorker, &outputNonsense) 79 c.Check(err.Error(), gc.Equals, "expected *agent.agentWorker->*agent.Agent; got *agent.agentWorker->*interface {}") 80 } 81 82 type dummyAgent struct { 83 coreagent.Agent 84 } 85 86 func assertStop(c *gc.C, w worker.Worker) { 87 c.Assert(worker.Stop(w), jc.ErrorIsNil) 88 }