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