MM-28859 Add feature flag managment system using split.io and remove viper. (#15954)

* Add feature flag managment system using split.io and remove viper.

* Fixing tests.

* Attempt to fix postgres tests.

* Fix watch filepath for advanced logging.

* Review fixes.

* Some error wrapping.

* Remove unessisary store interface.

* Desanitize SplitKey

* Simplify.

* Review feedback.

* Rename split mlog adatper to split logger.

* fsInner

* Style.

* Restore oldcfg test.

* Downgrading non-actionable feature flag errors to warnings.

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Christopher Speller
2020-10-29 15:54:39 -07:00
коммит произвёл GitHub
родитель 8bb772638c
Коммит 1aadd36644
423 изменённых файлов: 37646 добавлений и 20257 удалений

Просмотреть файл

@@ -76,61 +76,63 @@ func init() {
func TestMergeConfigs(t *testing.T) {
t.Run("merge two default configs with different salts/keys", func(t *testing.T) {
base, err := config.NewMemoryStore()
require.NoError(t, err)
patch, err := config.NewMemoryStore()
base := &model.Config{}
base.SetDefaults()
patch := &model.Config{}
patch.SetDefaults()
merged, err := config.Merge(base, patch, nil)
require.NoError(t, err)
merged, err := config.Merge(base.Get(), patch.Get(), nil)
require.NoError(t, err)
assert.Equal(t, patch.Get(), merged)
assert.Equal(t, patch, merged)
})
t.Run("merge identical configs", func(t *testing.T) {
base, err := config.NewMemoryStore()
require.NoError(t, err)
patch := base.Get().Clone()
base := &model.Config{}
base.SetDefaults()
patch := base.Clone()
merged, err := config.Merge(base.Get(), patch, nil)
merged, err := config.Merge(base, patch, nil)
require.NoError(t, err)
assert.Equal(t, base.Get(), merged)
assert.Equal(t, base, merged)
assert.Equal(t, patch, merged)
})
t.Run("merge configs with a different setting", func(t *testing.T) {
base, err := config.NewMemoryStore()
require.NoError(t, err)
patch := base.Get().Clone()
base := &model.Config{}
base.SetDefaults()
patch := base.Clone()
patch.ServiceSettings.SiteURL = newString("http://newhost.ca")
merged, err := config.Merge(base.Get(), patch, nil)
merged, err := config.Merge(base, patch, nil)
require.NoError(t, err)
assert.NotEqual(t, base.Get(), merged)
assert.NotEqual(t, base, merged)
assert.Equal(t, patch, merged)
})
t.Run("merge default config with changes from a mostly nil patch", func(t *testing.T) {
base, err := config.NewMemoryStore()
require.NoError(t, err)
base := &model.Config{}
base.SetDefaults()
patch := &model.Config{}
patch.ServiceSettings.SiteURL = newString("http://newhost.ca")
patch.GoogleSettings.Enable = newBool(true)
expected := base.Get().Clone()
expected := base.Clone()
expected.ServiceSettings.SiteURL = newString("http://newhost.ca")
expected.GoogleSettings.Enable = newBool(true)
merged, err := config.Merge(base.Get(), patch, nil)
merged, err := config.Merge(base, patch, nil)
require.NoError(t, err)
assert.NotEqual(t, base.Get(), merged)
assert.NotEqual(t, base, merged)
assert.NotEqual(t, patch, merged)
assert.Equal(t, expected, merged)
})
}
func TestConfigEnvironmentOverrides(t *testing.T) {
base, err := config.NewMemoryStore()
memstore, err := config.NewMemoryStore()
require.NoError(t, err)
base, err := config.NewStoreFromBacking(memstore)
require.NoError(t, err)
originalConfig := &model.Config{}
originalConfig.ServiceSettings.SiteURL = newString("http://notoverriden.ca")
@@ -157,7 +159,9 @@ func TestRemoveEnvironmentOverrides(t *testing.T) {
os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://overridden.ca")
defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL")
base, err := config.NewMemoryStore()
memstore, err := config.NewMemoryStore()
require.NoError(t, err)
base, err := config.NewStoreFromBacking(memstore)
require.NoError(t, err)
oldCfg := base.Get()
assert.Equal(t, "http://overridden.ca", *oldCfg.ServiceSettings.SiteURL)
@@ -165,22 +169,5 @@ func TestRemoveEnvironmentOverrides(t *testing.T) {
assert.Equal(t, "", *newCfg.ServiceSettings.SiteURL)
}
func TestRemoveNonPersistable(t *testing.T) {
os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://overridden.ca")
defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL")
base, err := config.NewMemoryStore()
require.NoError(t, err)
oldCfg := base.Get()
assert.Equal(t, "http://overridden.ca", *oldCfg.ServiceSettings.SiteURL)
oldCfg.FeatureFlags = &model.FeatureFlags{
TestFeature: "teststring",
}
newCfg := base.RemoveNonPersistable(oldCfg)
assert.Equal(t, "", *newCfg.ServiceSettings.SiteURL)
assert.Nil(t, newCfg.FeatureFlags)
}
func newBool(b bool) *bool { return &b }
func newString(s string) *string { return &s }