Remove defaults from Config object at runtime
This change fixes a bug where the default values that are populated during an `airshipctl config init` were getting mixed in with user specified values at runtime. For example, a user with two contexts defined in their airship config file would actually see a third phantom context with default values in the output of `airshipctl config get-context`. Also fixes a number of the config cmd and pkg unit tests that were affected by this bug. Change-Id: Iac591d4c2a616090028eb730576478edefb82544 Closes: #447
This commit is contained in:
parent
7f95156110
commit
585af5a516
@ -72,6 +72,8 @@ func TestConfigSetManagementConfigurationInsecure(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
|
conf.ManagementConfiguration[config.AirshipDefaultManagementConfiguration] = config.NewManagementConfiguration()
|
||||||
|
|
||||||
settings := func() (*config.Config, error) {
|
settings := func() (*config.Config, error) {
|
||||||
return conf, nil
|
return conf, nil
|
||||||
}
|
}
|
||||||
@ -96,6 +98,8 @@ func TestConfigSetManagementConfigurationType(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
|
conf.ManagementConfiguration[config.AirshipDefaultManagementConfiguration] = config.NewManagementConfiguration()
|
||||||
|
|
||||||
settings := func() (*config.Config, error) {
|
settings := func() (*config.Config, error) {
|
||||||
return conf, nil
|
return conf, nil
|
||||||
}
|
}
|
||||||
@ -130,6 +134,8 @@ func TestConfigSetManagementConfigurationUseProxy(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
|
conf.ManagementConfiguration[config.AirshipDefaultManagementConfiguration] = config.NewManagementConfiguration()
|
||||||
|
|
||||||
settings := func() (*config.Config, error) {
|
settings := func() (*config.Config, error) {
|
||||||
return conf, nil
|
return conf, nil
|
||||||
}
|
}
|
||||||
@ -149,6 +155,8 @@ func TestConfigSetManagementConfigurationMultipleOptions(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
|
conf.ManagementConfiguration[config.AirshipDefaultManagementConfiguration] = config.NewManagementConfiguration()
|
||||||
|
|
||||||
settings := func() (*config.Config, error) {
|
settings := func() (*config.Config, error) {
|
||||||
return conf, nil
|
return conf, nil
|
||||||
}
|
}
|
||||||
|
@ -139,7 +139,7 @@ func (test setManifestTest) run(t *testing.T) {
|
|||||||
|
|
||||||
afterRunConf := test.inputConfig
|
afterRunConf := test.inputConfig
|
||||||
// Find the Manifest Created or Modified
|
// Find the Manifest Created or Modified
|
||||||
afterRunManifest, _ := afterRunConf.Manifests[test.manifestName]
|
afterRunManifest := afterRunConf.Manifests[test.manifestName]
|
||||||
require.NotNil(t, afterRunManifest)
|
require.NotNil(t, afterRunManifest)
|
||||||
assert.EqualValues(t, afterRunManifest.TargetPath, test.manifestTargetPath)
|
assert.EqualValues(t, afterRunManifest.TargetPath, test.manifestTargetPath)
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ type Factory func() (*Config, error)
|
|||||||
// CreateFactory returns function which creates ready to use Config object
|
// CreateFactory returns function which creates ready to use Config object
|
||||||
func CreateFactory(airshipConfigPath *string) Factory {
|
func CreateFactory(airshipConfigPath *string) Factory {
|
||||||
return func() (*Config, error) {
|
return func() (*Config, error) {
|
||||||
cfg := NewConfig()
|
cfg := NewEmptyConfig()
|
||||||
|
|
||||||
var acp string
|
var acp string
|
||||||
if airshipConfigPath != nil {
|
if airshipConfigPath != nil {
|
||||||
|
@ -90,7 +90,7 @@ func TestLoadConfig(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
assert.Len(t, conf.Contexts, 4)
|
assert.Len(t, conf.Contexts, 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPersistConfig(t *testing.T) {
|
func TestPersistConfig(t *testing.T) {
|
||||||
@ -183,13 +183,14 @@ func TestCurrentContextManagementConfig(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
|
conf.ManagementConfiguration[defaultString] = testutil.DummyManagementConfiguration()
|
||||||
|
|
||||||
managementConfig, err := conf.CurrentContextManagementConfig()
|
managementConfig, err := conf.CurrentContextManagementConfig()
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
assert.Nil(t, managementConfig)
|
assert.Nil(t, managementConfig)
|
||||||
|
|
||||||
conf.CurrentContext = currentContextName
|
conf.CurrentContext = currentContextName
|
||||||
conf.Contexts[currentContextName].ManagementConfiguration = defaultString
|
conf.Contexts[currentContextName].ManagementConfiguration = defaultString
|
||||||
conf.Contexts[currentContextName].Manifest = defaultString
|
|
||||||
|
|
||||||
managementConfig, err = conf.CurrentContextManagementConfig()
|
managementConfig, err = conf.CurrentContextManagementConfig()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -234,7 +235,7 @@ func TestGetContexts(t *testing.T) {
|
|||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
contexts := conf.GetContexts()
|
contexts := conf.GetContexts()
|
||||||
assert.Len(t, contexts, 4)
|
assert.Len(t, contexts, 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetContext(t *testing.T) {
|
func TestGetContext(t *testing.T) {
|
||||||
@ -292,6 +293,8 @@ func TestCurrentContextManifest(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
|
conf.Manifests[defaultString] = testutil.DummyManifest()
|
||||||
|
|
||||||
conf.CurrentContext = currentContextName
|
conf.CurrentContext = currentContextName
|
||||||
conf.Contexts[currentContextName].Manifest = defaultString
|
conf.Contexts[currentContextName].Manifest = defaultString
|
||||||
|
|
||||||
@ -304,6 +307,8 @@ func TestCurrentTargetPath(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
|
conf.Manifests[defaultString] = testutil.DummyManifest()
|
||||||
|
|
||||||
conf.CurrentContext = currentContextName
|
conf.CurrentContext = currentContextName
|
||||||
conf.Contexts[currentContextName].Manifest = defaultString
|
conf.Contexts[currentContextName].Manifest = defaultString
|
||||||
|
|
||||||
@ -316,6 +321,8 @@ func TestCurrentPhaseRepositoryDir(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
|
conf.Manifests[defaultString] = testutil.DummyManifest()
|
||||||
|
|
||||||
conf.CurrentContext = currentContextName
|
conf.CurrentContext = currentContextName
|
||||||
conf.Contexts[currentContextName].Manifest = defaultString
|
conf.Contexts[currentContextName].Manifest = defaultString
|
||||||
|
|
||||||
@ -336,6 +343,8 @@ func TestCurrentInventoryRepositoryDir(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
|
conf.Manifests[defaultString] = testutil.DummyManifest()
|
||||||
|
|
||||||
conf.CurrentContext = currentContextName
|
conf.CurrentContext = currentContextName
|
||||||
conf.Contexts[currentContextName].Manifest = defaultString
|
conf.Contexts[currentContextName].Manifest = defaultString
|
||||||
|
|
||||||
@ -454,6 +463,8 @@ func TestManagementConfigurationByName(t *testing.T) {
|
|||||||
conf, cleanupConfig := testutil.InitConfig(t)
|
conf, cleanupConfig := testutil.InitConfig(t)
|
||||||
defer cleanupConfig(t)
|
defer cleanupConfig(t)
|
||||||
|
|
||||||
|
conf.ManagementConfiguration[defaultString] = testutil.DummyManagementConfiguration()
|
||||||
|
|
||||||
mgmtCfg, err := conf.GetManagementConfiguration(config.AirshipDefaultContext)
|
mgmtCfg, err := conf.GetManagementConfiguration(config.AirshipDefaultContext)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, conf.ManagementConfiguration[config.AirshipDefaultContext], mgmtCfg)
|
assert.Equal(t, conf.ManagementConfiguration[config.AirshipDefaultContext], mgmtCfg)
|
||||||
@ -471,6 +482,8 @@ func TestGetManifests(t *testing.T) {
|
|||||||
conf, cleanup := testutil.InitConfig(t)
|
conf, cleanup := testutil.InitConfig(t)
|
||||||
defer cleanup(t)
|
defer cleanup(t)
|
||||||
|
|
||||||
|
conf.Manifests["dummy_manifest"] = testutil.DummyManifest()
|
||||||
|
|
||||||
manifests := conf.GetManifests()
|
manifests := conf.GetManifests()
|
||||||
require.NotNil(t, manifests)
|
require.NotNil(t, manifests)
|
||||||
|
|
||||||
|
@ -59,6 +59,16 @@ func NewConfig() *Config {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewEmptyConfig returns an initialized Config object with no default values
|
||||||
|
func NewEmptyConfig() *Config {
|
||||||
|
return &Config{
|
||||||
|
ManagementConfiguration: map[string]*ManagementConfiguration{},
|
||||||
|
Manifests: map[string]*Manifest{},
|
||||||
|
Contexts: map[string]*Context{},
|
||||||
|
fileSystem: fs.NewDocumentFs(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NewContext is a convenience function that returns a new Context
|
// NewContext is a convenience function that returns a new Context
|
||||||
func NewContext() *Context {
|
func NewContext() *Context {
|
||||||
return &Context{}
|
return &Context{}
|
||||||
|
@ -115,11 +115,14 @@ func InitConfig(t *testing.T) (conf *config.Config, cleanup func(*testing.T)) {
|
|||||||
err := ioutil.WriteFile(configPath, []byte(testConfigYAML), 0600)
|
err := ioutil.WriteFile(configPath, []byte(testConfigYAML), 0600)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
conf = config.NewConfig()
|
|
||||||
|
|
||||||
cfg, err := config.CreateFactory(&configPath)()
|
cfg, err := config.CreateFactory(&configPath)()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
cfg.Permissions = config.Permissions{
|
||||||
|
DirectoryPermission: config.AirshipDefaultDirectoryPermission,
|
||||||
|
FilePermission: config.AirshipDefaultFilePermission,
|
||||||
|
}
|
||||||
|
|
||||||
return cfg, cleanup
|
return cfg, cleanup
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user