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