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  }