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 }