github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/provider/maas/environprovider_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package maas
     5  
     6  import (
     7  	"io/ioutil"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	"github.com/juju/utils"
    11  	gc "launchpad.net/gocheck"
    12  
    13  	"github.com/juju/juju/environs/config"
    14  	"github.com/juju/juju/juju/osenv"
    15  	"github.com/juju/juju/testing"
    16  )
    17  
    18  type EnvironProviderSuite struct {
    19  	providerSuite
    20  }
    21  
    22  var _ = gc.Suite(&EnvironProviderSuite{})
    23  
    24  func (suite *EnvironProviderSuite) TestSecretAttrsReturnsSensitiveMAASAttributes(c *gc.C) {
    25  	testJujuHome := c.MkDir()
    26  	defer osenv.SetJujuHome(osenv.SetJujuHome(testJujuHome))
    27  	const oauth = "aa:bb:cc"
    28  	attrs := testing.FakeConfig().Merge(testing.Attrs{
    29  		"type":        "maas",
    30  		"maas-oauth":  oauth,
    31  		"maas-server": "http://maas.testing.invalid/maas/",
    32  	})
    33  	config, err := config.New(config.NoDefaults, attrs)
    34  	c.Assert(err, gc.IsNil)
    35  
    36  	secretAttrs, err := suite.makeEnviron().Provider().SecretAttrs(config)
    37  	c.Assert(err, gc.IsNil)
    38  
    39  	expectedAttrs := map[string]string{"maas-oauth": oauth}
    40  	c.Check(secretAttrs, gc.DeepEquals, expectedAttrs)
    41  }
    42  
    43  func (suite *EnvironProviderSuite) TestUnknownAttrsContainAgentName(c *gc.C) {
    44  	testJujuHome := c.MkDir()
    45  	defer osenv.SetJujuHome(osenv.SetJujuHome(testJujuHome))
    46  	attrs := testing.FakeConfig().Merge(testing.Attrs{
    47  		"type":        "maas",
    48  		"maas-oauth":  "aa:bb:cc",
    49  		"maas-server": "http://maas.testing.invalid/maas/",
    50  	})
    51  	config, err := config.New(config.NoDefaults, attrs)
    52  	c.Assert(err, gc.IsNil)
    53  
    54  	ctx := testing.Context(c)
    55  	environ, err := suite.makeEnviron().Provider().Prepare(ctx, config)
    56  	c.Assert(err, gc.IsNil)
    57  
    58  	preparedConfig := environ.Config()
    59  	unknownAttrs := preparedConfig.UnknownAttrs()
    60  
    61  	uuid, ok := unknownAttrs["maas-agent-name"]
    62  
    63  	c.Assert(ok, jc.IsTrue)
    64  	c.Assert(uuid, jc.Satisfies, utils.IsValidUUIDString)
    65  }
    66  
    67  func (suite *EnvironProviderSuite) TestAgentNameShouldNotBeSetByHand(c *gc.C) {
    68  	testJujuHome := c.MkDir()
    69  	defer osenv.SetJujuHome(osenv.SetJujuHome(testJujuHome))
    70  	attrs := testing.FakeConfig().Merge(testing.Attrs{
    71  		"type":            "maas",
    72  		"maas-oauth":      "aa:bb:cc",
    73  		"maas-server":     "http://maas.testing.invalid/maas/",
    74  		"maas-agent-name": "foobar",
    75  	})
    76  	config, err := config.New(config.NoDefaults, attrs)
    77  	c.Assert(err, gc.IsNil)
    78  
    79  	ctx := testing.Context(c)
    80  	_, err = suite.makeEnviron().Provider().Prepare(ctx, config)
    81  	c.Assert(err, gc.Equals, errAgentNameAlreadySet)
    82  }
    83  
    84  // create a temporary file with the given content.  The file will be cleaned
    85  // up at the end of the test calling this method.
    86  func createTempFile(c *gc.C, content []byte) string {
    87  	file, err := ioutil.TempFile(c.MkDir(), "")
    88  	c.Assert(err, gc.IsNil)
    89  	filename := file.Name()
    90  	err = ioutil.WriteFile(filename, content, 0644)
    91  	c.Assert(err, gc.IsNil)
    92  	return filename
    93  }
    94  
    95  func (suite *EnvironProviderSuite) TestOpenReturnsNilInterfaceUponFailure(c *gc.C) {
    96  	testJujuHome := c.MkDir()
    97  	defer osenv.SetJujuHome(osenv.SetJujuHome(testJujuHome))
    98  	const oauth = "wrongly-formatted-oauth-string"
    99  	attrs := testing.FakeConfig().Merge(testing.Attrs{
   100  		"type":        "maas",
   101  		"maas-oauth":  oauth,
   102  		"maas-server": "http://maas.testing.invalid/maas/",
   103  	})
   104  	config, err := config.New(config.NoDefaults, attrs)
   105  	c.Assert(err, gc.IsNil)
   106  	env, err := suite.makeEnviron().Provider().Open(config)
   107  	// When Open() fails (i.e. returns a non-nil error), it returns an
   108  	// environs.Environ interface object with a nil value and a nil
   109  	// type.
   110  	c.Check(env, gc.Equals, nil)
   111  	c.Check(err, gc.ErrorMatches, ".*malformed maas-oauth.*")
   112  }