github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/gce/provider_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package gce_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/cloud"
    11  	"github.com/juju/juju/environs"
    12  	"github.com/juju/juju/provider/gce"
    13  )
    14  
    15  type providerSuite struct {
    16  	gce.BaseSuite
    17  
    18  	provider environs.EnvironProvider
    19  	spec     environs.CloudSpec
    20  }
    21  
    22  var _ = gc.Suite(&providerSuite{})
    23  
    24  func (s *providerSuite) SetUpTest(c *gc.C) {
    25  	s.BaseSuite.SetUpTest(c)
    26  
    27  	var err error
    28  	s.provider, err = environs.Provider("gce")
    29  	c.Check(err, jc.ErrorIsNil)
    30  
    31  	s.spec = gce.MakeTestCloudSpec()
    32  }
    33  
    34  func (s *providerSuite) TestRegistered(c *gc.C) {
    35  	c.Assert(s.provider, gc.Equals, gce.Provider)
    36  }
    37  
    38  func (s *providerSuite) TestOpen(c *gc.C) {
    39  	env, err := environs.Open(s.provider, environs.OpenParams{
    40  		Cloud:  s.spec,
    41  		Config: s.Config,
    42  	})
    43  	c.Check(err, jc.ErrorIsNil)
    44  
    45  	envConfig := env.Config()
    46  	c.Assert(envConfig.Name(), gc.Equals, "testmodel")
    47  }
    48  
    49  func (s *providerSuite) TestOpenInvalidCloudSpec(c *gc.C) {
    50  	s.spec.Name = ""
    51  	s.testOpenError(c, s.spec, `validating cloud spec: cloud name "" not valid`)
    52  }
    53  
    54  func (s *providerSuite) TestOpenMissingCredential(c *gc.C) {
    55  	s.spec.Credential = nil
    56  	s.testOpenError(c, s.spec, `validating cloud spec: missing credential not valid`)
    57  }
    58  
    59  func (s *providerSuite) TestOpenUnsupportedCredential(c *gc.C) {
    60  	credential := cloud.NewCredential(cloud.UserPassAuthType, map[string]string{})
    61  	s.spec.Credential = &credential
    62  	s.testOpenError(c, s.spec, `validating cloud spec: "userpass" auth-type not supported`)
    63  }
    64  
    65  func (s *providerSuite) testOpenError(c *gc.C, spec environs.CloudSpec, expect string) {
    66  	_, err := environs.Open(s.provider, environs.OpenParams{
    67  		Cloud:  spec,
    68  		Config: s.Config,
    69  	})
    70  	c.Assert(err, gc.ErrorMatches, expect)
    71  }
    72  
    73  func (s *providerSuite) TestPrepareConfig(c *gc.C) {
    74  	cfg, err := s.provider.PrepareConfig(environs.PrepareConfigParams{
    75  		Config: s.Config,
    76  		Cloud:  gce.MakeTestCloudSpec(),
    77  	})
    78  	c.Check(err, jc.ErrorIsNil)
    79  	c.Check(cfg, gc.NotNil)
    80  }
    81  
    82  func (s *providerSuite) TestValidate(c *gc.C) {
    83  	validCfg, err := s.provider.Validate(s.Config, nil)
    84  	c.Check(err, jc.ErrorIsNil)
    85  
    86  	validAttrs := validCfg.AllAttrs()
    87  	c.Assert(s.Config.AllAttrs(), gc.DeepEquals, validAttrs)
    88  }
    89  
    90  func (s *providerSuite) TestUpgradeConfig(c *gc.C) {
    91  	c.Assert(s.provider, gc.Implements, new(environs.ModelConfigUpgrader))
    92  	upgrader := s.provider.(environs.ModelConfigUpgrader)
    93  
    94  	_, ok := s.Config.StorageDefaultBlockSource()
    95  	c.Assert(ok, jc.IsFalse)
    96  
    97  	outConfig, err := upgrader.UpgradeConfig(s.Config)
    98  	c.Assert(err, jc.ErrorIsNil)
    99  	source, ok := outConfig.StorageDefaultBlockSource()
   100  	c.Assert(ok, jc.IsTrue)
   101  	c.Assert(source, gc.Equals, "gce")
   102  }