github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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) TestPrepareForBootstrapCloudEndpointAndRegion(c *gc.C) { 37 ctx, err := s.testPrepareForBootstrap(c, "endpoint", "region") 38 c.Assert(err, jc.ErrorIsNil) 39 s.CheckCall(c, 0, "InitUbuntuUser", "endpoint", "", "", ctx.GetStdin(), ctx.GetStdout()) 40 } 41 42 func (s *providerSuite) TestPrepareForBootstrapUserHost(c *gc.C) { 43 ctx, err := s.testPrepareForBootstrap(c, "user@host", "") 44 c.Assert(err, jc.ErrorIsNil) 45 s.CheckCall(c, 0, "InitUbuntuUser", "host", "user", "", ctx.GetStdin(), ctx.GetStdout()) 46 } 47 48 func (s *providerSuite) TestPrepareForBootstrapNoCloudEndpoint(c *gc.C) { 49 _, err := s.testPrepareForBootstrap(c, "", "region") 50 c.Assert(err, gc.ErrorMatches, 51 `missing address of host to bootstrap: please specify "juju bootstrap manual/\[user@\]<host>"`) 52 } 53 54 func (s *providerSuite) testPrepareForBootstrap(c *gc.C, endpoint, region string) (environs.BootstrapContext, error) { 55 minimal := manual.MinimalConfigValues() 56 testConfig, err := config.New(config.UseDefaults, minimal) 57 c.Assert(err, jc.ErrorIsNil) 58 cloudSpec := environs.CloudSpec{ 59 Endpoint: endpoint, 60 Region: region, 61 } 62 testConfig, err = manual.ProviderInstance.PrepareConfig(environs.PrepareConfigParams{ 63 Config: testConfig, 64 Cloud: cloudSpec, 65 }) 66 if err != nil { 67 return nil, err 68 } 69 env, err := manual.ProviderInstance.Open(environs.OpenParams{ 70 Cloud: cloudSpec, 71 Config: testConfig, 72 }) 73 if err != nil { 74 return nil, err 75 } 76 ctx := envtesting.BootstrapContext(c) 77 return ctx, env.PrepareForBootstrap(ctx) 78 } 79 80 func (s *providerSuite) TestNullAlias(c *gc.C) { 81 p, err := environs.Provider("manual") 82 c.Assert(p, gc.NotNil) 83 c.Assert(err, jc.ErrorIsNil) 84 p, err = environs.Provider("null") 85 c.Assert(p, gc.NotNil) 86 c.Assert(err, jc.ErrorIsNil) 87 } 88 89 func (s *providerSuite) TestDisablesUpdatesByDefault(c *gc.C) { 90 p, err := environs.Provider("manual") 91 c.Assert(err, jc.ErrorIsNil) 92 93 attrs := manual.MinimalConfigValues() 94 testConfig, err := config.New(config.NoDefaults, attrs) 95 c.Assert(err, jc.ErrorIsNil) 96 c.Check(testConfig.EnableOSRefreshUpdate(), jc.IsTrue) 97 c.Check(testConfig.EnableOSUpgrade(), jc.IsTrue) 98 99 validCfg, err := p.Validate(testConfig, nil) 100 c.Assert(err, jc.ErrorIsNil) 101 102 // Unless specified, update should default to true, 103 // upgrade to false. 104 c.Check(validCfg.EnableOSRefreshUpdate(), jc.IsTrue) 105 c.Check(validCfg.EnableOSUpgrade(), jc.IsFalse) 106 } 107 108 func (s *providerSuite) TestDefaultsCanBeOverriden(c *gc.C) { 109 p, err := environs.Provider("manual") 110 c.Assert(err, jc.ErrorIsNil) 111 112 attrs := manual.MinimalConfigValues() 113 attrs["enable-os-refresh-update"] = true 114 attrs["enable-os-upgrade"] = true 115 116 testConfig, err := config.New(config.UseDefaults, attrs) 117 c.Assert(err, jc.ErrorIsNil) 118 validCfg, err := p.Validate(testConfig, nil) 119 c.Assert(err, jc.ErrorIsNil) 120 121 // Our preferences should not have been overwritten. 122 c.Check(validCfg.EnableOSRefreshUpdate(), jc.IsTrue) 123 c.Check(validCfg.EnableOSUpgrade(), jc.IsTrue) 124 } 125 126 func (s *providerSuite) TestSchema(c *gc.C) { 127 vals := map[string]interface{}{"endpoint": "http://foo.com/bar"} 128 129 p, err := environs.Provider("manual") 130 c.Assert(err, jc.ErrorIsNil) 131 err = p.CloudSchema().Validate(vals) 132 c.Assert(err, jc.ErrorIsNil) 133 }