github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/provider/manual/provider_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package manual_test
     5  
     6  import (
     7  	"io"
     8  
     9  	"github.com/juju/testing"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/environs"
    14  	"github.com/juju/juju/environs/config"
    15  	envtesting "github.com/juju/juju/environs/testing"
    16  	"github.com/juju/juju/provider/manual"
    17  	coretesting "github.com/juju/juju/testing"
    18  )
    19  
    20  type providerSuite struct {
    21  	coretesting.FakeJujuXDGDataHomeSuite
    22  	testing.Stub
    23  }
    24  
    25  var _ = gc.Suite(&providerSuite{})
    26  
    27  func (s *providerSuite) SetUpTest(c *gc.C) {
    28  	s.FakeJujuXDGDataHomeSuite.SetUpTest(c)
    29  	s.Stub.ResetCalls()
    30  	s.PatchValue(manual.InitUbuntuUser, func(host, user, keys string, stdin io.Reader, stdout io.Writer) error {
    31  		s.AddCall("InitUbuntuUser", host, user, keys, stdin, stdout)
    32  		return s.NextErr()
    33  	})
    34  }
    35  
    36  func (s *providerSuite) TestPrepareForCreateEnvironment(c *gc.C) {
    37  	testConfig, err := config.New(config.UseDefaults, manual.MinimalConfigValues())
    38  	c.Assert(err, jc.ErrorIsNil)
    39  	cfg, err := manual.ProviderInstance.PrepareForCreateEnvironment(testConfig)
    40  	c.Assert(err, jc.ErrorIsNil)
    41  	c.Assert(cfg, gc.Equals, testConfig)
    42  }
    43  
    44  func (s *providerSuite) TestPrepareForBootstrapCloudEndpointAndRegion(c *gc.C) {
    45  	ctx, err := s.testPrepareForBootstrap(c, "endpoint", "region")
    46  	c.Assert(err, jc.ErrorIsNil)
    47  	s.CheckCall(c, 0, "InitUbuntuUser", "endpoint", "", "public auth key\n", ctx.GetStdin(), ctx.GetStdout())
    48  }
    49  
    50  func (s *providerSuite) TestPrepareForBootstrapCloudRegionOnly(c *gc.C) {
    51  	ctx, err := s.testPrepareForBootstrap(c, "", "region")
    52  	c.Assert(err, jc.ErrorIsNil)
    53  	s.CheckCall(c, 0, "InitUbuntuUser", "region", "", "public auth key\n", ctx.GetStdin(), ctx.GetStdout())
    54  }
    55  
    56  func (s *providerSuite) TestPrepareForBootstrapNoCloudEndpointOrRegion(c *gc.C) {
    57  	_, err := s.testPrepareForBootstrap(c, "", "")
    58  	c.Assert(err, gc.ErrorMatches,
    59  		`missing address of host to bootstrap: please specify "juju bootstrap manual/<host>"`)
    60  }
    61  
    62  func (s *providerSuite) testPrepareForBootstrap(c *gc.C, endpoint, region string) (environs.BootstrapContext, error) {
    63  	minimal := manual.MinimalConfigValues()
    64  	testConfig, err := config.New(config.UseDefaults, minimal)
    65  	c.Assert(err, jc.ErrorIsNil)
    66  	testConfig, err = manual.ProviderInstance.BootstrapConfig(environs.BootstrapConfigParams{
    67  		Config:        testConfig,
    68  		CloudEndpoint: endpoint,
    69  		CloudRegion:   region,
    70  	})
    71  	if err != nil {
    72  		return nil, err
    73  	}
    74  	ctx := envtesting.BootstrapContext(c)
    75  	_, err = manual.ProviderInstance.PrepareForBootstrap(ctx, testConfig)
    76  	return ctx, err
    77  }
    78  
    79  func (s *providerSuite) TestNullAlias(c *gc.C) {
    80  	p, err := environs.Provider("manual")
    81  	c.Assert(p, gc.NotNil)
    82  	c.Assert(err, jc.ErrorIsNil)
    83  	p, err = environs.Provider("null")
    84  	c.Assert(p, gc.NotNil)
    85  	c.Assert(err, jc.ErrorIsNil)
    86  }
    87  
    88  func (s *providerSuite) TestDisablesUpdatesByDefault(c *gc.C) {
    89  	p, err := environs.Provider("manual")
    90  	c.Assert(err, jc.ErrorIsNil)
    91  
    92  	attrs := manual.MinimalConfigValues()
    93  	testConfig, err := config.New(config.UseDefaults, attrs)
    94  	c.Assert(err, jc.ErrorIsNil)
    95  	c.Check(testConfig.EnableOSRefreshUpdate(), jc.IsTrue)
    96  	c.Check(testConfig.EnableOSUpgrade(), jc.IsTrue)
    97  
    98  	validCfg, err := p.Validate(testConfig, nil)
    99  	c.Assert(err, jc.ErrorIsNil)
   100  
   101  	// Unless specified, update should default to true,
   102  	// upgrade to false.
   103  	c.Check(validCfg.EnableOSRefreshUpdate(), jc.IsTrue)
   104  	c.Check(validCfg.EnableOSUpgrade(), jc.IsFalse)
   105  }
   106  
   107  func (s *providerSuite) TestDefaultsCanBeOverriden(c *gc.C) {
   108  	p, err := environs.Provider("manual")
   109  	c.Assert(err, jc.ErrorIsNil)
   110  
   111  	attrs := manual.MinimalConfigValues()
   112  	attrs["enable-os-refresh-update"] = true
   113  	attrs["enable-os-upgrade"] = true
   114  
   115  	testConfig, err := config.New(config.UseDefaults, attrs)
   116  	c.Assert(err, jc.ErrorIsNil)
   117  	validCfg, err := p.Validate(testConfig, nil)
   118  	c.Assert(err, jc.ErrorIsNil)
   119  
   120  	// Our preferences should not have been overwritten.
   121  	c.Check(validCfg.EnableOSRefreshUpdate(), jc.IsTrue)
   122  	c.Check(validCfg.EnableOSUpgrade(), jc.IsTrue)
   123  }