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 }