1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
"github.com/juju/testing"
8
jc "github.com/juju/testing/checkers"
11
coreagent "github.com/juju/juju/agent"
12
"github.com/juju/juju/worker"
13
"github.com/juju/juju/worker/agent"
16
type ManifoldSuite struct {
17
testing.IsolationSuite
20
var _ = gc.Suite(&ManifoldSuite{})
22
func (s *ManifoldSuite) TestInputs(c *gc.C) {
23
inputAgent := &dummyAgent{}
24
manifold := agent.Manifold(inputAgent)
25
c.Check(manifold.Inputs, gc.IsNil)
28
func (s *ManifoldSuite) TestOutput(c *gc.C) {
29
inputAgent := &dummyAgent{}
30
manifold := agent.Manifold(inputAgent)
32
agentWorker, err := manifold.Start(nil)
33
c.Check(err, jc.ErrorIsNil)
34
defer assertStop(c, agentWorker)
36
var outputAgent coreagent.Agent
37
err = manifold.Output(agentWorker, &outputAgent)
38
c.Check(err, jc.ErrorIsNil)
39
c.Check(outputAgent, jc.DeepEquals, inputAgent)
42
func (s *ManifoldSuite) TestOutputStoppedWorker(c *gc.C) {
43
inputAgent := &dummyAgent{}
44
manifold := agent.Manifold(inputAgent)
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)
52
var outputAgent coreagent.Agent
53
err = manifold.Output(agentWorker, &outputAgent)
54
c.Check(err, jc.ErrorIsNil)
55
c.Check(outputAgent, jc.DeepEquals, inputAgent)
58
func (s *ManifoldSuite) TestOutputBadWorker(c *gc.C) {
59
inputAgent := &dummyAgent{}
60
manifold := agent.Manifold(inputAgent)
62
var badWorker worker.Worker
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")
69
func (s *ManifoldSuite) TestOutputBadTarget(c *gc.C) {
70
inputAgent := &dummyAgent{}
71
manifold := agent.Manifold(inputAgent)
73
agentWorker, err := manifold.Start(nil)
74
c.Check(err, jc.ErrorIsNil)
75
defer assertStop(c, agentWorker)
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 {}")
82
type dummyAgent struct {
86
func assertStop(c *gc.C, w worker.Worker) {
87
c.Assert(worker.Stop(w), jc.ErrorIsNil)