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  }