github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/applicationscaler/manifold_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package applicationscaler_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 "gopkg.in/juju/worker.v1" 12 "gopkg.in/juju/worker.v1/dependency" 13 dt "gopkg.in/juju/worker.v1/dependency/testing" 14 15 "github.com/juju/juju/api/base" 16 "github.com/juju/juju/worker/applicationscaler" 17 ) 18 19 type ManifoldSuite struct { 20 testing.IsolationSuite 21 } 22 23 var _ = gc.Suite(&ManifoldSuite{}) 24 25 func (s *ManifoldSuite) TestInputs(c *gc.C) { 26 manifold := applicationscaler.Manifold(applicationscaler.ManifoldConfig{ 27 APICallerName: "washington the terrible", 28 }) 29 c.Check(manifold.Inputs, jc.DeepEquals, []string{"washington the terrible"}) 30 } 31 32 func (s *ManifoldSuite) TestOutput(c *gc.C) { 33 manifold := applicationscaler.Manifold(applicationscaler.ManifoldConfig{}) 34 c.Check(manifold.Output, gc.IsNil) 35 } 36 37 func (s *ManifoldSuite) TestStartMissingAPICaller(c *gc.C) { 38 manifold := applicationscaler.Manifold(applicationscaler.ManifoldConfig{ 39 APICallerName: "api-caller", 40 }) 41 context := dt.StubContext(nil, map[string]interface{}{ 42 "api-caller": dependency.ErrMissing, 43 }) 44 45 worker, err := manifold.Start(context) 46 c.Check(errors.Cause(err), gc.Equals, dependency.ErrMissing) 47 c.Check(worker, gc.IsNil) 48 } 49 50 func (s *ManifoldSuite) TestStartFacadeError(c *gc.C) { 51 expectCaller := &fakeCaller{} 52 manifold := applicationscaler.Manifold(applicationscaler.ManifoldConfig{ 53 APICallerName: "api-caller", 54 NewFacade: func(apiCaller base.APICaller) (applicationscaler.Facade, error) { 55 c.Check(apiCaller, gc.Equals, expectCaller) 56 return nil, errors.New("blort") 57 }, 58 }) 59 context := dt.StubContext(nil, map[string]interface{}{ 60 "api-caller": expectCaller, 61 }) 62 63 worker, err := manifold.Start(context) 64 c.Check(err, gc.ErrorMatches, "blort") 65 c.Check(worker, gc.IsNil) 66 } 67 68 func (s *ManifoldSuite) TestStartWorkerError(c *gc.C) { 69 expectFacade := &fakeFacade{} 70 manifold := applicationscaler.Manifold(applicationscaler.ManifoldConfig{ 71 APICallerName: "api-caller", 72 NewFacade: func(_ base.APICaller) (applicationscaler.Facade, error) { 73 return expectFacade, nil 74 }, 75 NewWorker: func(config applicationscaler.Config) (worker.Worker, error) { 76 c.Check(config.Validate(), jc.ErrorIsNil) 77 c.Check(config.Facade, gc.Equals, expectFacade) 78 return nil, errors.New("splot") 79 }, 80 }) 81 context := dt.StubContext(nil, map[string]interface{}{ 82 "api-caller": &fakeCaller{}, 83 }) 84 85 worker, err := manifold.Start(context) 86 c.Check(err, gc.ErrorMatches, "splot") 87 c.Check(worker, gc.IsNil) 88 } 89 90 func (s *ManifoldSuite) TestSuccess(c *gc.C) { 91 expectWorker := &fakeWorker{} 92 manifold := applicationscaler.Manifold(applicationscaler.ManifoldConfig{ 93 APICallerName: "api-caller", 94 NewFacade: func(_ base.APICaller) (applicationscaler.Facade, error) { 95 return &fakeFacade{}, nil 96 }, 97 NewWorker: func(_ applicationscaler.Config) (worker.Worker, error) { 98 return expectWorker, nil 99 }, 100 }) 101 context := dt.StubContext(nil, map[string]interface{}{ 102 "api-caller": &fakeCaller{}, 103 }) 104 105 worker, err := manifold.Start(context) 106 c.Check(err, jc.ErrorIsNil) 107 c.Check(worker, gc.Equals, expectWorker) 108 } 109 110 type fakeCaller struct { 111 base.APICaller 112 } 113 114 type fakeFacade struct { 115 applicationscaler.Facade 116 } 117 118 type fakeWorker struct { 119 worker.Worker 120 }