github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/provider/local/config_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package local_test 5 6 import ( 7 "path/filepath" 8 9 "github.com/juju/utils" 10 gc "launchpad.net/gocheck" 11 12 "github.com/juju/juju/environs" 13 "github.com/juju/juju/environs/config" 14 "github.com/juju/juju/provider" 15 "github.com/juju/juju/provider/local" 16 "github.com/juju/juju/testing" 17 ) 18 19 type configSuite struct { 20 baseProviderSuite 21 } 22 23 var _ = gc.Suite(&configSuite{}) 24 25 func minimalConfigValues() map[string]interface{} { 26 return testing.FakeConfig().Merge(testing.Attrs{ 27 "name": "test", 28 "type": provider.Local, 29 }) 30 } 31 32 func minimalConfig(c *gc.C) *config.Config { 33 minimal := minimalConfigValues() 34 testConfig, err := config.New(config.NoDefaults, minimal) 35 c.Assert(err, gc.IsNil) 36 valid, err := local.Provider.Validate(testConfig, nil) 37 c.Assert(err, gc.IsNil) 38 return valid 39 } 40 41 func localConfig(c *gc.C, extra map[string]interface{}) *config.Config { 42 values := minimalConfigValues() 43 for key, value := range extra { 44 values[key] = value 45 } 46 testConfig, err := config.New(config.NoDefaults, values) 47 c.Assert(err, gc.IsNil) 48 valid, err := local.Provider.Validate(testConfig, nil) 49 c.Assert(err, gc.IsNil) 50 return valid 51 } 52 53 func (s *configSuite) TestDefaultNetworkBridge(c *gc.C) { 54 config := minimalConfig(c) 55 unknownAttrs := config.UnknownAttrs() 56 c.Assert(unknownAttrs["network-bridge"], gc.Equals, "lxcbr0") 57 } 58 59 func (s *configSuite) TestSetNetworkBridge(c *gc.C) { 60 config := localConfig(c, map[string]interface{}{ 61 "network-bridge": "br0", 62 }) 63 unknownAttrs := config.UnknownAttrs() 64 c.Assert(unknownAttrs["network-bridge"], gc.Equals, "br0") 65 } 66 67 func (s *configSuite) TestValidateConfig(c *gc.C) { 68 valid := minimalConfig(c) 69 expectedRootDir := filepath.Join(utils.Home(), ".juju", "test") 70 unknownAttrs := valid.UnknownAttrs() 71 c.Assert(unknownAttrs["root-dir"], gc.Equals, expectedRootDir) 72 } 73 74 func (s *configSuite) TestValidateConfigWithRootDir(c *gc.C) { 75 root := c.MkDir() 76 valid := localConfig(c, map[string]interface{}{ 77 "root-dir": root, 78 }) 79 unknownAttrs := valid.UnknownAttrs() 80 c.Assert(unknownAttrs["root-dir"], gc.Equals, root) 81 } 82 83 func (s *configSuite) TestValidateConfigWithTildeInRootDir(c *gc.C) { 84 valid := localConfig(c, map[string]interface{}{ 85 "root-dir": "~/.juju/foo", 86 }) 87 expectedRootDir := filepath.Join(utils.Home(), ".juju", "foo") 88 unknownAttrs := valid.UnknownAttrs() 89 c.Assert(unknownAttrs["root-dir"], gc.Equals, expectedRootDir) 90 } 91 92 func (s *configSuite) TestValidateConfigWithFloatPort(c *gc.C) { 93 // When the config values get serialized through JSON, the integers 94 // get coerced to float64 values. The parsing needs to handle this. 95 valid := localConfig(c, map[string]interface{}{ 96 "storage-port": float64(8040), 97 }) 98 unknownAttrs := valid.UnknownAttrs() 99 c.Assert(unknownAttrs["storage-port"], gc.Equals, int(8040)) 100 } 101 102 func (s *configSuite) TestNamespace(c *gc.C) { 103 testConfig := minimalConfig(c) 104 s.PatchEnvironment("USER", "tester") 105 c.Assert(local.ConfigNamespace(testConfig), gc.Equals, "tester-test") 106 } 107 108 func (s *configSuite) TestBootstrapAsRoot(c *gc.C) { 109 s.PatchValue(local.CheckIfRoot, func() bool { return true }) 110 env, err := local.Provider.Prepare(testing.Context(c), minimalConfig(c)) 111 c.Assert(err, gc.IsNil) 112 err = env.Bootstrap(testing.Context(c), environs.BootstrapParams{}) 113 c.Assert(err, gc.ErrorMatches, "bootstrapping a local environment must not be done as root") 114 }