github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/cmd/jujud/agent/machine/apiworkers_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package machine_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  	"launchpad.net/tomb"
    10  
    11  	"github.com/juju/juju/api"
    12  	"github.com/juju/juju/cmd/jujud/agent/machine"
    13  	"github.com/juju/juju/testing"
    14  	"github.com/juju/juju/worker"
    15  	"github.com/juju/juju/worker/dependency"
    16  	dt "github.com/juju/juju/worker/dependency/testing"
    17  )
    18  
    19  type APIWorkersSuite struct {
    20  	testing.BaseSuite
    21  	manifold    dependency.Manifold
    22  	startCalled bool
    23  }
    24  
    25  var _ = gc.Suite(&APIWorkersSuite{})
    26  
    27  func (s *APIWorkersSuite) SetUpTest(c *gc.C) {
    28  	s.startCalled = false
    29  	s.manifold = machine.APIWorkersManifold(machine.APIWorkersConfig{
    30  		APICallerName:   "api-caller",
    31  		StartAPIWorkers: s.startAPIWorkers,
    32  	})
    33  }
    34  
    35  func (s *APIWorkersSuite) startAPIWorkers(api.Connection) (worker.Worker, error) {
    36  	s.startCalled = true
    37  	return new(mockWorker), nil
    38  }
    39  
    40  func (s *APIWorkersSuite) TestInputs(c *gc.C) {
    41  	c.Assert(s.manifold.Inputs, jc.SameContents, []string{
    42  		"api-caller",
    43  	})
    44  }
    45  
    46  func (s *APIWorkersSuite) TestStartNoStartAPIWorkers(c *gc.C) {
    47  	manifold := machine.APIWorkersManifold(machine.APIWorkersConfig{})
    48  	worker, err := manifold.Start(dt.StubContext(nil, nil))
    49  	c.Check(worker, gc.IsNil)
    50  	c.Check(err, gc.ErrorMatches, "StartAPIWorkers not specified")
    51  	c.Check(s.startCalled, jc.IsFalse)
    52  }
    53  
    54  func (s *APIWorkersSuite) TestStartAPIMissing(c *gc.C) {
    55  	context := dt.StubContext(nil, map[string]interface{}{
    56  		"api-caller": dependency.ErrMissing,
    57  	})
    58  	worker, err := s.manifold.Start(context)
    59  	c.Check(worker, gc.IsNil)
    60  	c.Check(err, gc.Equals, dependency.ErrMissing)
    61  	c.Check(s.startCalled, jc.IsFalse)
    62  }
    63  
    64  func (s *APIWorkersSuite) TestStartSuccess(c *gc.C) {
    65  	context := dt.StubContext(nil, map[string]interface{}{
    66  		"api-caller": new(mockAPIConn),
    67  	})
    68  	worker, err := s.manifold.Start(context)
    69  	c.Check(worker, gc.Not(gc.IsNil))
    70  	c.Check(err, jc.ErrorIsNil)
    71  	c.Check(s.startCalled, jc.IsTrue)
    72  }
    73  
    74  type mockAPIConn struct {
    75  	api.Connection
    76  }
    77  
    78  type mockWorker struct {
    79  	tomb tomb.Tomb
    80  }
    81  
    82  func (w *mockWorker) Kill() {
    83  	w.tomb.Kill(nil)
    84  	w.tomb.Done()
    85  }
    86  
    87  func (w *mockWorker) Wait() error {
    88  	return w.tomb.Wait()
    89  }