github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/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  	"fmt"
     8  	"io"
     9  
    10  	jc "github.com/juju/testing/checkers"
    11  	"github.com/juju/utils"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/environs"
    15  	"github.com/juju/juju/environs/config"
    16  	"github.com/juju/juju/environs/storage"
    17  	envtesting "github.com/juju/juju/environs/testing"
    18  	"github.com/juju/juju/provider/manual"
    19  	coretesting "github.com/juju/juju/testing"
    20  )
    21  
    22  type providerSuite struct {
    23  	coretesting.FakeJujuHomeSuite
    24  }
    25  
    26  var _ = gc.Suite(&providerSuite{})
    27  
    28  func (s *providerSuite) SetUpTest(c *gc.C) {
    29  	s.FakeJujuHomeSuite.SetUpTest(c)
    30  	s.PatchValue(manual.InitUbuntuUser, func(host, user, keys string, stdin io.Reader, stdout io.Writer) error {
    31  		return nil
    32  	})
    33  }
    34  
    35  func (s *providerSuite) TestPrepareForBootstrap(c *gc.C) {
    36  	minimal := manual.MinimalConfigValues()
    37  	minimal["use-sshstorage"] = true
    38  	delete(minimal, "storage-auth-key")
    39  	testConfig, err := config.New(config.UseDefaults, minimal)
    40  	c.Assert(err, jc.ErrorIsNil)
    41  	env, err := manual.ProviderInstance.PrepareForBootstrap(envtesting.BootstrapContext(c), testConfig)
    42  	c.Assert(err, jc.ErrorIsNil)
    43  	cfg := env.Config()
    44  	key, _ := cfg.UnknownAttrs()["storage-auth-key"].(string)
    45  	c.Assert(key, jc.Satisfies, utils.IsValidUUIDString)
    46  }
    47  
    48  func (s *providerSuite) TestPrepareUseSSHStorage(c *gc.C) {
    49  	minimal := manual.MinimalConfigValues()
    50  	minimal["use-sshstorage"] = false
    51  	testConfig, err := config.New(config.UseDefaults, minimal)
    52  	c.Assert(err, jc.ErrorIsNil)
    53  	_, err = manual.ProviderInstance.PrepareForBootstrap(envtesting.BootstrapContext(c), testConfig)
    54  	c.Assert(err, gc.ErrorMatches, "use-sshstorage must not be specified")
    55  
    56  	s.PatchValue(manual.NewSSHStorage, func(sshHost, storageDir, storageTmpdir string) (storage.Storage, error) {
    57  		return nil, fmt.Errorf("newSSHStorage failed")
    58  	})
    59  	minimal["use-sshstorage"] = true
    60  	testConfig, err = config.New(config.UseDefaults, minimal)
    61  	c.Assert(err, jc.ErrorIsNil)
    62  	_, err = manual.ProviderInstance.PrepareForBootstrap(envtesting.BootstrapContext(c), testConfig)
    63  	c.Assert(err, gc.ErrorMatches, "initialising SSH storage failed: newSSHStorage failed")
    64  }
    65  
    66  func (s *providerSuite) TestPrepareSetsUseSSHStorage(c *gc.C) {
    67  	attrs := manual.MinimalConfigValues()
    68  	delete(attrs, "use-sshstorage")
    69  	testConfig, err := config.New(config.UseDefaults, attrs)
    70  	c.Assert(err, jc.ErrorIsNil)
    71  
    72  	env, err := manual.ProviderInstance.PrepareForBootstrap(envtesting.BootstrapContext(c), testConfig)
    73  	c.Assert(err, jc.ErrorIsNil)
    74  	cfg := env.Config()
    75  	value := cfg.AllAttrs()["use-sshstorage"]
    76  	c.Assert(value, jc.IsTrue)
    77  }
    78  
    79  func (s *providerSuite) TestOpenDoesntSetUseSSHStorage(c *gc.C) {
    80  	attrs := manual.MinimalConfigValues()
    81  	delete(attrs, "use-sshstorage")
    82  	testConfig, err := config.New(config.UseDefaults, attrs)
    83  	c.Assert(err, jc.ErrorIsNil)
    84  
    85  	env, err := manual.ProviderInstance.Open(testConfig)
    86  	c.Assert(err, jc.ErrorIsNil)
    87  	cfg := env.Config()
    88  	_, ok := cfg.AllAttrs()["use-sshstorage"]
    89  	c.Assert(ok, jc.IsFalse)
    90  	ok = manual.EnvironUseSSHStorage(env)
    91  	c.Assert(ok, jc.IsFalse)
    92  }
    93  
    94  func (s *providerSuite) TestNullAlias(c *gc.C) {
    95  	p, err := environs.Provider("manual")
    96  	c.Assert(p, gc.NotNil)
    97  	c.Assert(err, jc.ErrorIsNil)
    98  	p, err = environs.Provider("null")
    99  	c.Assert(p, gc.NotNil)
   100  	c.Assert(err, jc.ErrorIsNil)
   101  }
   102  
   103  func (s *providerSuite) TestDisablesUpdatesByDefault(c *gc.C) {
   104  	p, err := environs.Provider("manual")
   105  	c.Assert(err, jc.ErrorIsNil)
   106  
   107  	attrs := manual.MinimalConfigValues()
   108  	testConfig, err := config.New(config.UseDefaults, attrs)
   109  	c.Assert(err, jc.ErrorIsNil)
   110  	c.Check(testConfig.EnableOSRefreshUpdate(), jc.IsTrue)
   111  	c.Check(testConfig.EnableOSUpgrade(), jc.IsTrue)
   112  
   113  	validCfg, err := p.Validate(testConfig, nil)
   114  	c.Assert(err, jc.ErrorIsNil)
   115  
   116  	// Unless specified, update should default to true,
   117  	// upgrade to false.
   118  	c.Check(validCfg.EnableOSRefreshUpdate(), jc.IsTrue)
   119  	c.Check(validCfg.EnableOSUpgrade(), jc.IsFalse)
   120  }
   121  
   122  func (s *providerSuite) TestDefaultsCanBeOverriden(c *gc.C) {
   123  	p, err := environs.Provider("manual")
   124  	c.Assert(err, jc.ErrorIsNil)
   125  
   126  	attrs := manual.MinimalConfigValues()
   127  	attrs["enable-os-refresh-update"] = true
   128  	attrs["enable-os-upgrade"] = true
   129  
   130  	testConfig, err := config.New(config.UseDefaults, attrs)
   131  	c.Assert(err, jc.ErrorIsNil)
   132  	validCfg, err := p.Validate(testConfig, nil)
   133  	c.Assert(err, jc.ErrorIsNil)
   134  
   135  	// Our preferences should not have been overwritten.
   136  	c.Check(validCfg.EnableOSRefreshUpdate(), jc.IsTrue)
   137  	c.Check(validCfg.EnableOSUpgrade(), jc.IsTrue)
   138  }