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 }