github.com/Pankov404/juju@v0.0.0-20150703034450-be266991dceb/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 "github.com/juju/juju/worker" 12 "github.com/juju/juju/worker/agent" 13 ) 14 15 type ManifoldSuite struct { 16 testing.IsolationSuite 17 } 18 19 var _ = gc.Suite(&ManifoldSuite{}) 20 21 func (s *ManifoldSuite) TestInputs(c *gc.C) { 22 inputAgent := &dummyAgent{} 23 manifold := agent.Manifold(inputAgent) 24 c.Check(manifold.Inputs, gc.IsNil) 25 } 26 27 func (s *ManifoldSuite) TestOutput(c *gc.C) { 28 inputAgent := &dummyAgent{} 29 manifold := agent.Manifold(inputAgent) 30 31 agentWorker, err := manifold.Start(nil) 32 c.Check(err, jc.ErrorIsNil) 33 defer assertStop(c, agentWorker) 34 35 var outputAgent agent.Agent 36 err = manifold.Output(agentWorker, &outputAgent) 37 c.Check(err, jc.ErrorIsNil) 38 c.Check(outputAgent, jc.DeepEquals, inputAgent) 39 } 40 41 func (s *ManifoldSuite) TestOutputStoppedWorker(c *gc.C) { 42 inputAgent := &dummyAgent{} 43 manifold := agent.Manifold(inputAgent) 44 45 agentWorker, err := manifold.Start(nil) 46 c.Check(err, jc.ErrorIsNil) 47 // The lifetime is irrelevant -- the output func will still function 48 // whether the (degenerate) worker is alive or not -- so no defer here. 49 assertStop(c, agentWorker) 50 51 var outputAgent agent.Agent 52 err = manifold.Output(agentWorker, &outputAgent) 53 c.Check(err, jc.ErrorIsNil) 54 c.Check(outputAgent, jc.DeepEquals, inputAgent) 55 } 56 57 func (s *ManifoldSuite) TestOutputBadWorker(c *gc.C) { 58 inputAgent := &dummyAgent{} 59 manifold := agent.Manifold(inputAgent) 60 61 var badWorker worker.Worker 62 63 var outputAgent agent.Agent 64 err := manifold.Output(badWorker, &outputAgent) 65 c.Check(err.Error(), gc.Equals, "expected *agent.agentWorker->*agent.Agent; got <nil>->*agent.Agent") 66 } 67 68 func (s *ManifoldSuite) TestOutputBadTarget(c *gc.C) { 69 inputAgent := &dummyAgent{} 70 manifold := agent.Manifold(inputAgent) 71 72 agentWorker, err := manifold.Start(nil) 73 c.Check(err, jc.ErrorIsNil) 74 defer assertStop(c, agentWorker) 75 76 var outputNonsense interface{} 77 err = manifold.Output(agentWorker, &outputNonsense) 78 c.Check(err.Error(), gc.Equals, "expected *agent.agentWorker->*agent.Agent; got *agent.agentWorker->*interface {}") 79 } 80 81 type dummyAgent struct { 82 agent.Agent 83 } 84 85 func assertStop(c *gc.C, w worker.Worker) { 86 c.Assert(worker.Stop(w), jc.ErrorIsNil) 87 }