launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/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 gc "launchpad.net/gocheck" 10 "launchpad.net/goyaml" 11 12 "launchpad.net/juju-core/environs/config" 13 "launchpad.net/juju-core/juju/osenv" 14 "launchpad.net/juju-core/testing" 15 jc "launchpad.net/juju-core/testing/checkers" 16 "launchpad.net/juju-core/utils" 17 ) 18 19 type EnvironProviderSuite struct { 20 providerSuite 21 } 22 23 var _ = gc.Suite(&EnvironProviderSuite{}) 24 25 func (suite *EnvironProviderSuite) TestSecretAttrsReturnsSensitiveMAASAttributes(c *gc.C) { 26 testJujuHome := c.MkDir() 27 defer osenv.SetJujuHome(osenv.SetJujuHome(testJujuHome)) 28 const oauth = "aa:bb:cc" 29 attrs := testing.FakeConfig().Merge(testing.Attrs{ 30 "type": "maas", 31 "maas-oauth": oauth, 32 "maas-server": "http://maas.testing.invalid/maas/", 33 }) 34 config, err := config.New(config.NoDefaults, attrs) 35 c.Assert(err, gc.IsNil) 36 37 secretAttrs, err := suite.makeEnviron().Provider().SecretAttrs(config) 38 c.Assert(err, gc.IsNil) 39 40 expectedAttrs := map[string]string{"maas-oauth": oauth} 41 c.Check(secretAttrs, gc.DeepEquals, expectedAttrs) 42 } 43 44 func (suite *EnvironProviderSuite) TestUnknownAttrsContainAgentName(c *gc.C) { 45 testJujuHome := c.MkDir() 46 defer osenv.SetJujuHome(osenv.SetJujuHome(testJujuHome)) 47 attrs := testing.FakeConfig().Merge(testing.Attrs{ 48 "type": "maas", 49 "maas-oauth": "aa:bb:cc", 50 "maas-server": "http://maas.testing.invalid/maas/", 51 }) 52 config, err := config.New(config.NoDefaults, attrs) 53 c.Assert(err, gc.IsNil) 54 55 environ, err := suite.makeEnviron().Provider().Prepare(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 _, err = suite.makeEnviron().Provider().Prepare(config) 80 c.Assert(err, gc.Equals, errAgentNameAlreadySet) 81 } 82 83 // create a temporary file with the given content. The file will be cleaned 84 // up at the end of the test calling this method. 85 func createTempFile(c *gc.C, content []byte) string { 86 file, err := ioutil.TempFile(c.MkDir(), "") 87 c.Assert(err, gc.IsNil) 88 filename := file.Name() 89 err = ioutil.WriteFile(filename, content, 0644) 90 c.Assert(err, gc.IsNil) 91 return filename 92 } 93 94 // PublicAddress and PrivateAddress return the hostname of the machine read 95 // from the file _MAASInstanceFilename. 96 func (suite *EnvironProviderSuite) TestPrivatePublicAddressReadsHostnameFromMachineFile(c *gc.C) { 97 hostname := "myhostname" 98 info := machineInfo{hostname} 99 yaml, err := goyaml.Marshal(info) 100 c.Assert(err, gc.IsNil) 101 // Create a temporary file to act as the file where the instanceID 102 // is stored. 103 filename := createTempFile(c, yaml) 104 // "Monkey patch" the value of _MAASInstanceFilename with the path 105 // to the temporary file. 106 old_MAASInstanceFilename := _MAASInstanceFilename 107 _MAASInstanceFilename = filename 108 defer func() { _MAASInstanceFilename = old_MAASInstanceFilename }() 109 110 provider := suite.makeEnviron().Provider() 111 publicAddress, err := provider.PublicAddress() 112 c.Assert(err, gc.IsNil) 113 c.Check(publicAddress, gc.Equals, hostname) 114 privateAddress, err := provider.PrivateAddress() 115 c.Assert(err, gc.IsNil) 116 c.Check(privateAddress, gc.Equals, hostname) 117 } 118 119 func (suite *EnvironProviderSuite) TestOpenReturnsNilInterfaceUponFailure(c *gc.C) { 120 testJujuHome := c.MkDir() 121 defer osenv.SetJujuHome(osenv.SetJujuHome(testJujuHome)) 122 const oauth = "wrongly-formatted-oauth-string" 123 attrs := testing.FakeConfig().Merge(testing.Attrs{ 124 "type": "maas", 125 "maas-oauth": oauth, 126 "maas-server": "http://maas.testing.invalid/maas/", 127 }) 128 config, err := config.New(config.NoDefaults, attrs) 129 c.Assert(err, gc.IsNil) 130 env, err := suite.makeEnviron().Provider().Open(config) 131 // When Open() fails (i.e. returns a non-nil error), it returns an 132 // environs.Environ interface object with a nil value and a nil 133 // type. 134 c.Check(env, gc.Equals, nil) 135 c.Check(err, gc.ErrorMatches, ".*malformed maas-oauth.*") 136 }