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  }