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 }