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  }