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