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  }