github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/worker/util/api_test.go (about) 1 // Copyright 2015 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/api/base" 13 "github.com/juju/juju/worker" 14 "github.com/juju/juju/worker/dependency" 15 dt "github.com/juju/juju/worker/dependency/testing" 16 "github.com/juju/juju/worker/util" 17 ) 18 19 type ApiManifoldSuite struct { 20 testing.IsolationSuite 21 testing.Stub 22 manifold dependency.Manifold 23 worker worker.Worker 24 } 25 26 var _ = gc.Suite(&ApiManifoldSuite{}) 27 28 func (s *ApiManifoldSuite) SetUpTest(c *gc.C) { 29 s.IsolationSuite.SetUpTest(c) 30 s.Stub = testing.Stub{} 31 s.worker = &dummyWorker{} 32 s.manifold = util.ApiManifold(util.ApiManifoldConfig{ 33 APICallerName: "api-caller-name", 34 }, s.newWorker) 35 } 36 37 func (s *ApiManifoldSuite) newWorker(apiCaller base.APICaller) (worker.Worker, error) { 38 s.AddCall("newWorker", apiCaller) 39 if err := s.NextErr(); err != nil { 40 return nil, err 41 } 42 return s.worker, nil 43 } 44 45 func (s *ApiManifoldSuite) TestInputs(c *gc.C) { 46 c.Check(s.manifold.Inputs, jc.DeepEquals, []string{"api-caller-name"}) 47 } 48 49 func (s *ApiManifoldSuite) TestOutput(c *gc.C) { 50 c.Check(s.manifold.Output, gc.IsNil) 51 } 52 53 func (s *ApiManifoldSuite) TestStartApiMissing(c *gc.C) { 54 getResource := dt.StubGetResource(dt.StubResources{ 55 "api-caller-name": dt.StubResource{Error: dependency.ErrMissing}, 56 }) 57 58 worker, err := s.manifold.Start(getResource) 59 c.Check(worker, gc.IsNil) 60 c.Check(err, gc.Equals, dependency.ErrMissing) 61 } 62 63 func (s *ApiManifoldSuite) TestStartFailure(c *gc.C) { 64 expectApiCaller := &dummyApiCaller{} 65 getResource := dt.StubGetResource(dt.StubResources{ 66 "api-caller-name": dt.StubResource{Output: expectApiCaller}, 67 }) 68 s.SetErrors(errors.New("some error")) 69 70 worker, err := s.manifold.Start(getResource) 71 c.Check(worker, gc.IsNil) 72 c.Check(err, gc.ErrorMatches, "some error") 73 s.CheckCalls(c, []testing.StubCall{{ 74 FuncName: "newWorker", 75 Args: []interface{}{expectApiCaller}, 76 }}) 77 } 78 79 func (s *ApiManifoldSuite) TestStartSuccess(c *gc.C) { 80 expectApiCaller := &dummyApiCaller{} 81 getResource := dt.StubGetResource(dt.StubResources{ 82 "api-caller-name": dt.StubResource{Output: expectApiCaller}, 83 }) 84 85 worker, err := s.manifold.Start(getResource) 86 c.Check(err, jc.ErrorIsNil) 87 c.Check(worker, gc.Equals, s.worker) 88 s.CheckCalls(c, []testing.StubCall{{ 89 FuncName: "newWorker", 90 Args: []interface{}{expectApiCaller}, 91 }}) 92 }