// parseSettingsCompatible parses setting strings in a way that is // compatible with the behavior before this CL based on the issue // http://pad.lv/1194945. Until then setting an option to an empty // string caused it to reset to the default value. We now allow // empty strings as actual values, but we want to preserve the API // behavior. func parseSettingsCompatible(ch *state.Charm, settings map[string]string) (charm.Settings, error) { setSettings := map[string]string{} unsetSettings := charm.Settings{} // Split settings into those which set and those which unset a value. for name, value := range settings { if value == "" { unsetSettings[name] = nil continue } setSettings[name] = value } // Validate the settings. changes, err := ch.Config().ParseSettingsStrings(setSettings) if err != nil { return nil, err } // Validate the unsettings and merge them into the changes. unsetSettings, err = ch.Config().ValidateSettings(unsetSettings) if err != nil { return nil, err } for name := range unsetSettings { changes[name] = nil } return changes, nil }
func assertCustomCharm(c *gc.C, ch *state.Charm, series string, meta *charm.Meta, config *charm.Config, revision int) { // Check Charm interface method results. c.Assert(ch.Meta(), gc.DeepEquals, meta) c.Assert(ch.Config(), gc.DeepEquals, config) c.Assert(ch.Revision(), gc.DeepEquals, revision) // Test URL matches charm and expected series. url := ch.URL() c.Assert(url.Series, gc.Equals, series) c.Assert(url.Revision, gc.Equals, ch.Revision()) // Ignore the BundleURL and BundleSHA256 methods, they're irrelevant. }
func assertCharm(c *gc.C, bun charm.Bundle, sch *state.Charm) { actual := bun.(*corecharm.Bundle) c.Assert(actual.Revision(), gc.Equals, sch.Revision()) c.Assert(actual.Meta(), gc.DeepEquals, sch.Meta()) c.Assert(actual.Config(), gc.DeepEquals, sch.Config()) }