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  }