github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/caas/kubernetes/provider/provider_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package provider_test 5 6 import ( 7 "github.com/juju/testing" 8 jc "github.com/juju/testing/checkers" 9 "github.com/juju/utils/v3" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/caas" 13 "github.com/juju/juju/caas/kubernetes/provider" 14 k8stesting "github.com/juju/juju/caas/kubernetes/provider/testing" 15 "github.com/juju/juju/cloud" 16 "github.com/juju/juju/environs" 17 environscloudspec "github.com/juju/juju/environs/cloudspec" 18 "github.com/juju/juju/environs/config" 19 coretesting "github.com/juju/juju/testing" 20 ) 21 22 func fakeConfig(c *gc.C, attrs ...coretesting.Attrs) *config.Config { 23 cfg, err := coretesting.ModelConfig(c).Apply(fakeConfigAttrs(attrs...)) 24 c.Assert(err, jc.ErrorIsNil) 25 return cfg 26 } 27 28 func fakeConfigAttrs(attrs ...coretesting.Attrs) coretesting.Attrs { 29 merged := coretesting.FakeConfig().Merge(coretesting.Attrs{ 30 "type": "kubernetes", 31 "uuid": utils.MustNewUUID().String(), 32 "operator-storage": "", 33 "workload-storage": "", 34 }) 35 for _, attrs := range attrs { 36 merged = merged.Merge(attrs) 37 } 38 return merged 39 } 40 41 func fakeCloudSpec() environscloudspec.CloudSpec { 42 cred := fakeCredential() 43 return environscloudspec.CloudSpec{ 44 Type: "kubernetes", 45 Name: "k8s", 46 Endpoint: "host1", 47 Credential: &cred, 48 } 49 } 50 51 func fakeCredential() cloud.Credential { 52 return cloud.NewCredential(cloud.UserPassAuthType, map[string]string{ 53 "username": "user1", 54 "password": "password1", 55 }) 56 } 57 58 type providerSuite struct { 59 testing.IsolationSuite 60 dialStub testing.Stub 61 provider caas.ContainerEnvironProvider 62 } 63 64 var _ = gc.Suite(&providerSuite{}) 65 66 func (s *providerSuite) SetUpTest(c *gc.C) { 67 s.IsolationSuite.SetUpTest(c) 68 s.dialStub.ResetCalls() 69 s.provider = provider.NewProvider() 70 } 71 72 func (s *providerSuite) TestRegistered(c *gc.C) { 73 provider, err := environs.Provider("kubernetes") 74 c.Assert(err, jc.ErrorIsNil) 75 c.Assert(provider, gc.NotNil) 76 } 77 78 func (s *providerSuite) TestOpen(c *gc.C) { 79 s.PatchValue(&provider.NewK8sClients, k8stesting.NoopFakeK8sClients) 80 config := fakeConfig(c) 81 broker, err := s.provider.Open(environs.OpenParams{ 82 Cloud: fakeCloudSpec(), 83 Config: config, 84 }) 85 c.Check(err, jc.ErrorIsNil) 86 c.Assert(broker, gc.NotNil) 87 } 88 89 func (s *providerSuite) TestOpenInvalidCloudSpec(c *gc.C) { 90 spec := fakeCloudSpec() 91 spec.Name = "" 92 s.testOpenError(c, spec, `validating cloud spec: cloud name "" not valid`) 93 } 94 95 func (s *providerSuite) TestOpenMissingCredential(c *gc.C) { 96 spec := fakeCloudSpec() 97 spec.Credential = nil 98 s.testOpenError(c, spec, `validating cloud spec: missing credential not valid`) 99 } 100 101 func (s *providerSuite) TestOpenUnsupportedCredential(c *gc.C) { 102 credential := cloud.NewCredential(cloud.OAuth1AuthType, map[string]string{}) 103 spec := fakeCloudSpec() 104 spec.Credential = &credential 105 s.testOpenError(c, spec, `validating cloud spec: "oauth1" auth-type not supported`) 106 } 107 108 func (s *providerSuite) testOpenError(c *gc.C, spec environscloudspec.CloudSpec, expect string) { 109 _, err := s.provider.Open(environs.OpenParams{ 110 Cloud: spec, 111 Config: fakeConfig(c), 112 }) 113 c.Assert(err, gc.ErrorMatches, expect) 114 } 115 116 func (s *providerSuite) TestPrepareConfig(c *gc.C) { 117 cfg, err := s.provider.PrepareConfig(environs.PrepareConfigParams{ 118 Config: fakeConfig(c), 119 Cloud: fakeCloudSpec(), 120 }) 121 c.Check(err, jc.ErrorIsNil) 122 c.Check(cfg, gc.NotNil) 123 } 124 125 func (s *providerSuite) TestValidate(c *gc.C) { 126 config := fakeConfig(c) 127 validCfg, err := s.provider.Validate(config, nil) 128 c.Check(err, jc.ErrorIsNil) 129 130 validAttrs := validCfg.AllAttrs() 131 c.Assert(config.AllAttrs(), gc.DeepEquals, validAttrs) 132 }