func (*environSuite) TestSetConfigUpdatesConfig(c *gc.C) { origAttrs := coretesting.Attrs{ "server-name": "http://maas2.testing.invalid", "maas-oauth": "a:b:c", "admin-secret": "secret", } cfg := getSimpleTestConfig(c, origAttrs) env, err := maas.NewEnviron(cfg) c.Check(err, gc.IsNil) c.Check(env.Name(), gc.Equals, "testenv") anotherServer := "http://maas.testing.invalid" anotherOauth := "c:d:e" anotherSecret := "secret2" newAttrs := coretesting.Attrs{ "server-name": anotherServer, "maas-oauth": anotherOauth, "admin-secret": anotherSecret, } cfg2 := getSimpleTestConfig(c, newAttrs) errSetConfig := env.SetConfig(cfg2) c.Check(errSetConfig, gc.IsNil) c.Check(env.Name(), gc.Equals, "testenv") authClient, _ := gomaasapi.NewAuthenticatedClient(anotherServer, anotherOauth, maas.APIVersion) maasClient := gomaasapi.NewMAAS(*authClient) MAASServer := maas.GetMAASClient(env) c.Check(MAASServer, gc.DeepEquals, maasClient) }
func (*environSuite) TestSetConfigAllowsEmptyFromNilAgentName(c *gc.C) { // bug #1256179 is that when using an older version of Juju (<1.16.2) // we didn't include maas-agent-name in the database, so it was 'nil' // in the OldConfig. However, when setting an environment, we would set // it to "" (because maasEnvironConfig.Validate ensures it is a 'valid' // string). We can't create that from NewEnviron or newConfig because // both of them Validate the contents. 'cmd/juju/environment // SetEnvironmentCommand' instead uses conn.State.EnvironConfig() which // just reads the content of the database into a map, so we just create // the map ourselves. // Even though we use 'nil' here, it actually stores it as "" because // 1.16.2 already validates the value baseCfg := getSimpleTestConfig(c, coretesting.Attrs{"maas-agent-name": ""}) c.Check(baseCfg.UnknownAttrs()["maas-agent-name"], gc.Equals, "") env, err := maas.NewEnviron(baseCfg) c.Assert(err, gc.IsNil) provider := env.Provider() attrs := coretesting.FakeConfig() // These are attrs we need to make it a valid Config, but would usually // be set by other infrastructure attrs["type"] = "maas" nilCfg, err := config.New(config.NoDefaults, attrs) c.Assert(err, gc.IsNil) validatedConfig, err := provider.Validate(baseCfg, nilCfg) c.Assert(err, gc.IsNil) c.Check(validatedConfig.UnknownAttrs()["maas-agent-name"], gc.Equals, "") // However, you can't set it to an actual value if you haven't been using a value valueCfg := getSimpleTestConfig(c, coretesting.Attrs{"maas-agent-name": "agent-name"}) _, err = provider.Validate(valueCfg, nilCfg) c.Check(err, gc.ErrorMatches, ".*cannot change maas-agent-name.*") }
func (*environSuite) TestNewEnvironSetsConfig(c *gc.C) { cfg := getSimpleTestConfig(c, nil) env, err := maas.NewEnviron(cfg) c.Check(err, gc.IsNil) c.Check(env.Name(), gc.Equals, "testenv") }
func (*environSuite) TestSetConfigAllowsChangingNilAgentNameToEmptyString(c *gc.C) { oldCfg := getSimpleTestConfig(c, nil) newCfgTwo := getSimpleTestConfig(c, coretesting.Attrs{"maas-agent-name": ""}) env, err := maas.NewEnviron(oldCfg) c.Assert(err, gc.IsNil) err = env.SetConfig(newCfgTwo) c.Assert(err, gc.IsNil) c.Check(maas.MAASAgentName(env), gc.Equals, "") }
func (*environSuite) TestSetConfigValidatesFirst(c *gc.C) { // SetConfig() validates the config change and disallows, for example, // changes in the environment name. oldCfg := getSimpleTestConfig(c, coretesting.Attrs{"name": "old-name"}) newCfg := getSimpleTestConfig(c, coretesting.Attrs{"name": "new-name"}) env, err := maas.NewEnviron(oldCfg) c.Assert(err, gc.IsNil) // SetConfig() fails, even though both the old and the new config are // individually valid. err = env.SetConfig(newCfg) c.Assert(err, gc.NotNil) c.Check(err, gc.ErrorMatches, ".*cannot change name.*") // The old config is still in place. The new config never took effect. c.Check(env.Name(), gc.Equals, "old-name") }
func (*environSuite) TestSetConfigRefusesChangingAgentName(c *gc.C) { oldCfg := getSimpleTestConfig(c, coretesting.Attrs{"maas-agent-name": "agent-one"}) newCfgTwo := getSimpleTestConfig(c, coretesting.Attrs{"maas-agent-name": "agent-two"}) env, err := maas.NewEnviron(oldCfg) c.Assert(err, gc.IsNil) // SetConfig() fails, even though both the old and the new config are // individually valid. err = env.SetConfig(newCfgTwo) c.Assert(err, gc.NotNil) c.Check(err, gc.ErrorMatches, ".*cannot change maas-agent-name.*") // The old config is still in place. The new config never took effect. c.Check(maas.MAASAgentName(env), gc.Equals, "agent-one") // It also refuses to set it to the empty string: err = env.SetConfig(getSimpleTestConfig(c, coretesting.Attrs{"maas-agent-name": ""})) c.Check(err, gc.ErrorMatches, ".*cannot change maas-agent-name.*") // And to nil err = env.SetConfig(getSimpleTestConfig(c, nil)) c.Check(err, gc.ErrorMatches, ".*cannot change maas-agent-name.*") }