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 }