github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/caasbroker/broker_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasbroker_test 5 6 import ( 7 "github.com/juju/errors" 8 jc "github.com/juju/testing/checkers" 9 "github.com/juju/utils" 10 gc "gopkg.in/check.v1" 11 "gopkg.in/juju/worker.v1/workertest" 12 13 "github.com/juju/juju/caas" 14 "github.com/juju/juju/environs" 15 coretesting "github.com/juju/juju/testing" 16 "github.com/juju/juju/worker/caasbroker" 17 ) 18 19 type TrackerSuite struct { 20 coretesting.BaseSuite 21 } 22 23 var _ = gc.Suite(&TrackerSuite{}) 24 25 func (s *TrackerSuite) TestValidateObserver(c *gc.C) { 26 config := caasbroker.Config{} 27 s.testValidate(c, config, func(err error) { 28 c.Check(err, jc.Satisfies, errors.IsNotValid) 29 c.Check(err, gc.ErrorMatches, "nil ConfigAPI not valid") 30 }) 31 } 32 33 func (s *TrackerSuite) TestValidateNewBrokerFunc(c *gc.C) { 34 config := caasbroker.Config{ 35 ConfigAPI: &runContext{}, 36 } 37 s.testValidate(c, config, func(err error) { 38 c.Check(err, jc.Satisfies, errors.IsNotValid) 39 c.Check(err, gc.ErrorMatches, "nil NewContainerBrokerFunc not valid") 40 }) 41 } 42 43 func (s *TrackerSuite) testValidate(c *gc.C, config caasbroker.Config, check func(err error)) { 44 err := config.Validate() 45 check(err) 46 47 tracker, err := caasbroker.NewTracker(config) 48 c.Check(tracker, gc.IsNil) 49 check(err) 50 } 51 52 func (s *TrackerSuite) TestCloudSpecFails(c *gc.C) { 53 fix := &fixture{ 54 observerErrs: []error{ 55 errors.New("no you"), 56 }, 57 } 58 fix.Run(c, func(context *runContext) { 59 tracker, err := caasbroker.NewTracker(caasbroker.Config{ 60 ConfigAPI: context, 61 NewContainerBrokerFunc: newMockBroker, 62 }) 63 c.Check(err, gc.ErrorMatches, "cannot get cloud information: no you") 64 c.Check(tracker, gc.IsNil) 65 context.CheckCallNames(c, "CloudSpec") 66 }) 67 } 68 69 func (s *TrackerSuite) validFixture() *fixture { 70 cloudSpec := environs.CloudSpec{ 71 Name: "foo", 72 Type: "bar", 73 Region: "baz", 74 } 75 cfg := coretesting.FakeConfig() 76 cfg["type"] = "kubernetes" 77 cfg["uuid"] = utils.MustNewUUID().String() 78 return &fixture{cloud: cloudSpec, config: cfg} 79 } 80 81 func (s *TrackerSuite) TestSuccess(c *gc.C) { 82 fix := s.validFixture() 83 fix.Run(c, func(context *runContext) { 84 tracker, err := caasbroker.NewTracker(caasbroker.Config{ 85 ConfigAPI: context, 86 NewContainerBrokerFunc: newMockBroker, 87 }) 88 c.Assert(err, jc.ErrorIsNil) 89 defer workertest.CleanKill(c, tracker) 90 91 gotBroker := tracker.Broker() 92 c.Assert(gotBroker, gc.NotNil) 93 }) 94 } 95 96 func (s *TrackerSuite) TestInitialise(c *gc.C) { 97 fix := s.validFixture() 98 fix.Run(c, func(context *runContext) { 99 tracker, err := caasbroker.NewTracker(caasbroker.Config{ 100 ConfigAPI: context, 101 NewContainerBrokerFunc: func(args environs.OpenParams) (caas.Broker, error) { 102 c.Assert(args.Cloud, jc.DeepEquals, fix.cloud) 103 c.Assert(args.Config.Name(), jc.DeepEquals, "testmodel") 104 return nil, errors.NotValidf("cloud spec") 105 }, 106 }) 107 c.Check(err, gc.ErrorMatches, `cannot create caas broker: cloud spec not valid`) 108 c.Check(tracker, gc.IsNil) 109 context.CheckCallNames(c, "CloudSpec", "Model") 110 }) 111 }