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  }