launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/provider/maas/config_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 gc "launchpad.net/gocheck" 8 9 "launchpad.net/juju-core/environs" 10 "launchpad.net/juju-core/testing" 11 "launchpad.net/juju-core/testing/testbase" 12 "launchpad.net/juju-core/utils" 13 ) 14 15 type configSuite struct { 16 testbase.LoggingSuite 17 } 18 19 var _ = gc.Suite(&configSuite{}) 20 21 // copyAttrs copies values from src into dest. If src contains a key that was 22 // already in dest, its value in dest will still be updated to the one from 23 // src. 24 func copyAttrs(src, dest map[string]interface{}) { 25 for k, v := range src { 26 dest[k] = v 27 } 28 } 29 30 // newConfig creates a MAAS environment config from attributes. 31 func newConfig(values map[string]interface{}) (*maasEnvironConfig, error) { 32 attrs := testing.FakeConfig().Merge(testing.Attrs{ 33 "name": "testenv", 34 "type": "maas", 35 }).Merge(values) 36 env, err := environs.NewFromAttrs(attrs) 37 if err != nil { 38 return nil, err 39 } 40 return env.(*maasEnviron).ecfg(), nil 41 } 42 43 func (*configSuite) TestParsesMAASSettings(c *gc.C) { 44 server := "http://maas.testing.invalid/maas/" 45 oauth := "consumer-key:resource-token:resource-secret" 46 future := "futurama" 47 uuid, err := utils.NewUUID() 48 c.Assert(err, gc.IsNil) 49 ecfg, err := newConfig(map[string]interface{}{ 50 "maas-server": server, 51 "maas-oauth": oauth, 52 "maas-agent-name": uuid.String(), 53 "future-key": future, 54 }) 55 c.Assert(err, gc.IsNil) 56 c.Check(ecfg.maasServer(), gc.Equals, server) 57 c.Check(ecfg.maasOAuth(), gc.DeepEquals, oauth) 58 c.Check(ecfg.maasAgentName(), gc.Equals, uuid.String()) 59 c.Check(ecfg.UnknownAttrs()["future-key"], gc.DeepEquals, future) 60 } 61 62 func (*configSuite) TestMaasAgentNameDefault(c *gc.C) { 63 ecfg, err := newConfig(map[string]interface{}{ 64 "maas-server": "http://maas.testing.invalid/maas/", 65 "maas-oauth": "consumer-key:resource-token:resource-secret", 66 }) 67 c.Assert(err, gc.IsNil) 68 c.Check(ecfg.maasAgentName(), gc.Equals, "") 69 } 70 71 func (*configSuite) TestChecksWellFormedMaasServer(c *gc.C) { 72 _, err := newConfig(map[string]interface{}{ 73 "maas-server": "This should have been a URL.", 74 "maas-oauth": "consumer-key:resource-token:resource-secret", 75 }) 76 c.Assert(err, gc.NotNil) 77 c.Check(err, gc.ErrorMatches, ".*malformed maas-server.*") 78 } 79 80 func (*configSuite) TestChecksWellFormedMaasOAuth(c *gc.C) { 81 _, err := newConfig(map[string]interface{}{ 82 "maas-server": "http://maas.testing.invalid/maas/", 83 "maas-oauth": "This should have been a 3-part token.", 84 }) 85 c.Assert(err, gc.NotNil) 86 c.Check(err, gc.ErrorMatches, ".*malformed maas-oauth.*") 87 } 88 89 func (*configSuite) TestValidateUpcallsEnvironsConfigValidate(c *gc.C) { 90 // The base Validate() function will not allow an environment to 91 // change its name. Trigger that error so as to prove that the 92 // environment provider's Validate() calls the base Validate(). 93 baseAttrs := map[string]interface{}{ 94 "maas-server": "http://maas.testing.invalid/maas/", 95 "maas-oauth": "consumer-key:resource-token:resource-secret", 96 } 97 oldCfg, err := newConfig(baseAttrs) 98 c.Assert(err, gc.IsNil) 99 newName := oldCfg.Name() + "-but-different" 100 newCfg, err := oldCfg.Apply(map[string]interface{}{"name": newName}) 101 c.Assert(err, gc.IsNil) 102 103 _, err = maasEnvironProvider{}.Validate(newCfg, oldCfg.Config) 104 105 c.Assert(err, gc.NotNil) 106 c.Check(err, gc.ErrorMatches, ".*cannot change name.*") 107 } 108 109 func (*configSuite) TestValidateCannotChangeAgentName(c *gc.C) { 110 baseAttrs := map[string]interface{}{ 111 "maas-server": "http://maas.testing.invalid/maas/", 112 "maas-oauth": "consumer-key:resource-token:resource-secret", 113 "maas-agent-name": "1234-5678", 114 } 115 oldCfg, err := newConfig(baseAttrs) 116 c.Assert(err, gc.IsNil) 117 newCfg, err := oldCfg.Apply(map[string]interface{}{ 118 "maas-agent-name": "9876-5432", 119 }) 120 c.Assert(err, gc.IsNil) 121 _, err = maasEnvironProvider{}.Validate(newCfg, oldCfg.Config) 122 c.Assert(err, gc.ErrorMatches, "cannot change maas-agent-name") 123 }