[MM-30436] Add support for configuration custom defaults (#16265)
* [MM-30436] Add support for configuration custom defaults * Addressing review comments * Addressing PR comments * Soft fail if the configuration defaults cannot be read * Directly print error in log message * Fix linter Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
c82c37a36e
Коммит
6c857a4525
@@ -92,7 +92,7 @@ func setupTestHelper(dbStore store.Store, searchEngine *searchengine.Broker, ent
|
|||||||
}
|
}
|
||||||
memoryStore.Set(memoryConfig)
|
memoryStore.Set(memoryConfig)
|
||||||
|
|
||||||
configStore, err := config.NewStoreFromBacking(memoryStore)
|
configStore, err := config.NewStoreFromBacking(memoryStore, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -686,11 +686,11 @@ func TestMigrateConfig(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) {
|
th.TestForSystemAdminAndLocal(t, func(t *testing.T, client *model.Client4) {
|
||||||
f, err := config.NewStore("from.json", false)
|
f, err := config.NewStore("from.json", false, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer f.RemoveFile("from.json")
|
defer f.RemoveFile("from.json")
|
||||||
|
|
||||||
_, err = config.NewStore("to.json", false)
|
_, err = config.NewStore("to.json", false, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer f.RemoveFile("to.json")
|
defer f.RemoveFile("to.json")
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/mattermost/mattermost-server/v5/config"
|
"github.com/mattermost/mattermost-server/v5/config"
|
||||||
|
"github.com/mattermost/mattermost-server/v5/model"
|
||||||
"github.com/mattermost/mattermost-server/v5/store"
|
"github.com/mattermost/mattermost-server/v5/store"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -38,10 +39,13 @@ func StoreOverride(override interface{}) Option {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Config applies the given config dsn, whether a path to config.json or a database connection string.
|
// Config applies the given config dsn, whether a path to config.json
|
||||||
func Config(dsn string, watch bool) Option {
|
// or a database connection string. It receives as well a set of
|
||||||
|
// custom defaults that will be applied for any unset property of the
|
||||||
|
// config loaded from the dsn on top of the normal defaults
|
||||||
|
func Config(dsn string, watch bool, configDefaults *model.Config) Option {
|
||||||
return func(s *Server) error {
|
return func(s *Server) error {
|
||||||
configStore, err := config.NewStore(dsn, watch)
|
configStore, err := config.NewStore(dsn, watch, configDefaults)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to apply Config option")
|
return errors.Wrap(err, "failed to apply Config option")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ func NewServer(options ...Option) (*Server, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to load config")
|
return nil, errors.Wrap(err, "failed to load config")
|
||||||
}
|
}
|
||||||
configStore, err := config.NewStoreFromBacking(innerStore)
|
configStore, err := config.NewStoreFromBacking(innerStore, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to load config")
|
return nil, errors.Wrap(err, "failed to load config")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -386,7 +386,7 @@ func TestSentry(t *testing.T) {
|
|||||||
|
|
||||||
s, err := NewServer(func(server *Server) error {
|
s, err := NewServer(func(server *Server) error {
|
||||||
configStore, _ := config.NewFileStore("config.json", true)
|
configStore, _ := config.NewFileStore("config.json", true)
|
||||||
store, _ := config.NewStoreFromBacking(configStore)
|
store, _ := config.NewStoreFromBacking(configStore, nil)
|
||||||
server.configStore = store
|
server.configStore = store
|
||||||
server.UpdateConfig(func(cfg *model.Config) {
|
server.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.ListenAddress = ":0"
|
*cfg.ServiceSettings.ListenAddress = ":0"
|
||||||
@@ -437,7 +437,7 @@ func TestSentry(t *testing.T) {
|
|||||||
|
|
||||||
s, err := NewServer(func(server *Server) error {
|
s, err := NewServer(func(server *Server) error {
|
||||||
configStore, _ := config.NewFileStore("config.json", true)
|
configStore, _ := config.NewFileStore("config.json", true)
|
||||||
store, _ := config.NewStoreFromBacking(configStore)
|
store, _ := config.NewStoreFromBacking(configStore, nil)
|
||||||
server.configStore = store
|
server.configStore = store
|
||||||
server.UpdateConfig(func(cfg *model.Config) {
|
server.UpdateConfig(func(cfg *model.Config) {
|
||||||
*cfg.ServiceSettings.ListenAddress = ":0"
|
*cfg.ServiceSettings.ListenAddress = ":0"
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ func getConfigStore(command *cobra.Command) (*config.Store, error) {
|
|||||||
return nil, errors.Wrap(err, "failed to initialize i18n")
|
return nil, errors.Wrap(err, "failed to initialize i18n")
|
||||||
}
|
}
|
||||||
|
|
||||||
configStore, err := config.NewStore(getConfigDSN(command, config.GetEnvironment()), false)
|
configStore, err := config.NewStore(getConfigDSN(command, config.GetEnvironment()), false, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to initialize config store")
|
return nil, errors.Wrap(err, "failed to initialize config store")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -543,9 +543,9 @@ func TestConfigMigrate(t *testing.T) {
|
|||||||
sqlDSN := getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)
|
sqlDSN := getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource)
|
||||||
fileDSN := "config.json"
|
fileDSN := "config.json"
|
||||||
|
|
||||||
ds, err := config.NewStore(sqlDSN, false)
|
ds, err := config.NewStore(sqlDSN, false, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStore(fileDSN, false)
|
fs, err := config.NewStore(fileDSN, false, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ func InitDBCommandContext(configDSN string) (*app.App, error) {
|
|||||||
model.AppErrorInit(utils.T)
|
model.AppErrorInit(utils.T)
|
||||||
|
|
||||||
s, err := app.NewServer(
|
s, err := app.NewServer(
|
||||||
app.Config(configDSN, false),
|
app.Config(configDSN, false, nil),
|
||||||
app.StartSearchEngine,
|
app.StartSearchEngine,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ func TestPlugin(t *testing.T) {
|
|||||||
|
|
||||||
fs, err := config.NewFileStore(th.ConfigPath(), false)
|
fs, err := config.NewFileStore(th.ConfigPath(), false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
cfsStore, err := config.NewStoreFromBacking(fs)
|
cfsStore, err := config.NewStoreFromBacking(fs, nil)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.NotNil(t, cfsStore.Get().PluginSettings.PluginStates["testplugin"])
|
require.NotNil(t, cfsStore.Get().PluginSettings.PluginStates["testplugin"])
|
||||||
assert.True(t, cfsStore.Get().PluginSettings.PluginStates["testplugin"].Enable)
|
assert.True(t, cfsStore.Get().PluginSettings.PluginStates["testplugin"].Enable)
|
||||||
@@ -47,7 +47,7 @@ func TestPlugin(t *testing.T) {
|
|||||||
assert.Contains(t, output, "Disabled plugin: testplugin")
|
assert.Contains(t, output, "Disabled plugin: testplugin")
|
||||||
fs, err = config.NewFileStore(th.ConfigPath(), false)
|
fs, err = config.NewFileStore(th.ConfigPath(), false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
cfsStore, err = config.NewStoreFromBacking(fs)
|
cfsStore, err = config.NewStoreFromBacking(fs, nil)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
require.NotNil(t, cfsStore.Get().PluginSettings.PluginStates["testplugin"])
|
require.NotNil(t, cfsStore.Get().PluginSettings.PluginStates["testplugin"])
|
||||||
assert.False(t, cfsStore.Get().PluginSettings.PluginStates["testplugin"].Enable)
|
assert.False(t, cfsStore.Get().PluginSettings.PluginStates["testplugin"].Enable)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
package commands
|
package commands
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
@@ -15,6 +16,7 @@ import (
|
|||||||
"github.com/mattermost/mattermost-server/v5/config"
|
"github.com/mattermost/mattermost-server/v5/config"
|
||||||
"github.com/mattermost/mattermost-server/v5/manualtesting"
|
"github.com/mattermost/mattermost-server/v5/manualtesting"
|
||||||
"github.com/mattermost/mattermost-server/v5/mlog"
|
"github.com/mattermost/mattermost-server/v5/mlog"
|
||||||
|
"github.com/mattermost/mattermost-server/v5/model"
|
||||||
"github.com/mattermost/mattermost-server/v5/utils"
|
"github.com/mattermost/mattermost-server/v5/utils"
|
||||||
"github.com/mattermost/mattermost-server/v5/web"
|
"github.com/mattermost/mattermost-server/v5/web"
|
||||||
"github.com/mattermost/mattermost-server/v5/wsapi"
|
"github.com/mattermost/mattermost-server/v5/wsapi"
|
||||||
@@ -22,6 +24,8 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const CUSTOM_DEFAULTS_ENV_VAR = "MM_CUSTOM_DEFAULTS_PATH"
|
||||||
|
|
||||||
var serverCmd = &cobra.Command{
|
var serverCmd = &cobra.Command{
|
||||||
Use: "server",
|
Use: "server",
|
||||||
Short: "Run the Mattermost server",
|
Short: "Run the Mattermost server",
|
||||||
@@ -34,6 +38,27 @@ func init() {
|
|||||||
RootCmd.RunE = serverCmdF
|
RootCmd.RunE = serverCmdF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func loadCustomDefaults() (*model.Config, error) {
|
||||||
|
customDefaultsPath := os.Getenv(CUSTOM_DEFAULTS_ENV_VAR)
|
||||||
|
if customDefaultsPath == "" {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
file, err := os.Open(customDefaultsPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrapf(err, "unable to open custom defaults file at %q", customDefaultsPath)
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
var customDefaults *model.Config
|
||||||
|
err = json.NewDecoder(file).Decode(&customDefaults)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "unable to decode custom defaults configuration")
|
||||||
|
}
|
||||||
|
|
||||||
|
return customDefaults, nil
|
||||||
|
}
|
||||||
|
|
||||||
func serverCmdF(command *cobra.Command, args []string) error {
|
func serverCmdF(command *cobra.Command, args []string) error {
|
||||||
disableConfigWatch, _ := command.Flags().GetBool("disableconfigwatch")
|
disableConfigWatch, _ := command.Flags().GetBool("disableconfigwatch")
|
||||||
usedPlatform, _ := command.Flags().GetBool("platform")
|
usedPlatform, _ := command.Flags().GetBool("platform")
|
||||||
@@ -41,9 +66,15 @@ func serverCmdF(command *cobra.Command, args []string) error {
|
|||||||
interruptChan := make(chan os.Signal, 1)
|
interruptChan := make(chan os.Signal, 1)
|
||||||
|
|
||||||
if err := utils.TranslationsPreInit(); err != nil {
|
if err := utils.TranslationsPreInit(); err != nil {
|
||||||
return errors.Wrapf(err, "unable to load Mattermost translation files")
|
return errors.Wrap(err, "unable to load Mattermost translation files")
|
||||||
}
|
}
|
||||||
configStore, err := config.NewStore(getConfigDSN(command, config.GetEnvironment()), !disableConfigWatch)
|
|
||||||
|
customDefaults, err := loadCustomDefaults()
|
||||||
|
if err != nil {
|
||||||
|
mlog.Error("Error loading custom configuration defaults: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
configStore, err := config.NewStore(getConfigDSN(command, config.GetEnvironment()), !disableConfigWatch, customDefaults)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to load configuration")
|
return errors.Wrap(err, "failed to load configuration")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import (
|
|||||||
"github.com/mattermost/mattermost-server/v5/model"
|
"github.com/mattermost/mattermost-server/v5/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
var emptyConfig, readOnlyConfig, minimalConfig, invalidConfig, fixesRequiredConfig, ldapConfig, testConfig *model.Config
|
var emptyConfig, readOnlyConfig, minimalConfig, invalidConfig, fixesRequiredConfig, ldapConfig, testConfig, customConfigDefaults *model.Config
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
emptyConfig = &model.Config{}
|
emptyConfig = &model.Config{}
|
||||||
@@ -72,6 +72,14 @@ func init() {
|
|||||||
SiteURL: sToP("http://TestStoreNew"),
|
SiteURL: sToP("http://TestStoreNew"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
customConfigDefaults = &model.Config{
|
||||||
|
ServiceSettings: model.ServiceSettings{
|
||||||
|
SiteURL: model.NewString("http://custom.com"),
|
||||||
|
},
|
||||||
|
DisplaySettings: model.DisplaySettings{
|
||||||
|
ExperimentalTimezone: model.NewBool(false),
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMergeConfigs(t *testing.T) {
|
func TestMergeConfigs(t *testing.T) {
|
||||||
@@ -132,7 +140,7 @@ func TestMergeConfigs(t *testing.T) {
|
|||||||
func TestConfigEnvironmentOverrides(t *testing.T) {
|
func TestConfigEnvironmentOverrides(t *testing.T) {
|
||||||
memstore, err := config.NewMemoryStore()
|
memstore, err := config.NewMemoryStore()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
base, err := config.NewStoreFromBacking(memstore)
|
base, err := config.NewStoreFromBacking(memstore, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
originalConfig := &model.Config{}
|
originalConfig := &model.Config{}
|
||||||
originalConfig.ServiceSettings.SiteURL = newString("http://notoverriden.ca")
|
originalConfig.ServiceSettings.SiteURL = newString("http://notoverriden.ca")
|
||||||
@@ -161,7 +169,7 @@ func TestRemoveEnvironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
memstore, err := config.NewMemoryStore()
|
memstore, err := config.NewMemoryStore()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
base, err := config.NewStoreFromBacking(memstore)
|
base, err := config.NewStoreFromBacking(memstore, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
oldCfg := base.Get()
|
oldCfg := base.Get()
|
||||||
assert.Equal(t, "http://overridden.ca", *oldCfg.ServiceSettings.SiteURL)
|
assert.Equal(t, "http://overridden.ca", *oldCfg.ServiceSettings.SiteURL)
|
||||||
|
|||||||
@@ -115,12 +115,12 @@ func assertDatabaseNotEqualsConfig(t *testing.T, expectedCfg *model.Config) {
|
|||||||
assert.NotEqual(t, expectedCfg, actualCfg)
|
assert.NotEqual(t, expectedCfg, actualCfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTestDatabaseStore(t *testing.T) (*config.Store, error) {
|
func newTestDatabaseStore(t *testing.T, customDefaults *model.Config) (*config.Store, error) {
|
||||||
sqlSettings := mainHelper.GetSQLSettings()
|
sqlSettings := mainHelper.GetSQLSettings()
|
||||||
dss, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource))
|
dss, err := config.NewDatabaseStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
cStore, err := config.NewStoreFromBacking(dss)
|
cStore, err := config.NewStoreFromBacking(dss, customDefaults)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
return cStore, nil
|
return cStore, nil
|
||||||
@@ -133,18 +133,28 @@ func TestDatabaseStoreNew(t *testing.T) {
|
|||||||
sqlSettings := mainHelper.GetSQLSettings()
|
sqlSettings := mainHelper.GetSQLSettings()
|
||||||
|
|
||||||
t.Run("no existing configuration - initialization required", func(t *testing.T) {
|
t.Run("no existing configuration - initialization required", func(t *testing.T) {
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
assert.Equal(t, "", *ds.Get().ServiceSettings.SiteURL)
|
assert.Equal(t, "", *ds.Get().ServiceSettings.SiteURL)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("no existing configuration with custom defaults", func(t *testing.T) {
|
||||||
|
truncateTables(t)
|
||||||
|
ds, err := newTestDatabaseStore(t, customConfigDefaults)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer ds.Close()
|
||||||
|
|
||||||
|
assert.Equal(t, *customConfigDefaults.ServiceSettings.SiteURL, *ds.Get().ServiceSettings.SiteURL)
|
||||||
|
assert.Equal(t, *customConfigDefaults.DisplaySettings.ExperimentalTimezone, *ds.Get().DisplaySettings.ExperimentalTimezone)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("existing config, initialization required", func(t *testing.T) {
|
t.Run("existing config, initialization required", func(t *testing.T) {
|
||||||
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -152,11 +162,28 @@ func TestDatabaseStoreNew(t *testing.T) {
|
|||||||
assertDatabaseNotEqualsConfig(t, testConfig)
|
assertDatabaseNotEqualsConfig(t, testConfig)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("existing config with custom defaults, initialization required", func(t *testing.T) {
|
||||||
|
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
||||||
|
defer tearDown()
|
||||||
|
|
||||||
|
ds, err := newTestDatabaseStore(t, customConfigDefaults)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer ds.Close()
|
||||||
|
|
||||||
|
// already existing value should not be overwritten by the
|
||||||
|
// custom default value
|
||||||
|
assert.Equal(t, "http://TestStoreNew", *ds.Get().ServiceSettings.SiteURL)
|
||||||
|
// not existing value should be overwritten by the custom
|
||||||
|
// default value
|
||||||
|
assert.Equal(t, *customConfigDefaults.DisplaySettings.ExperimentalTimezone, *ds.Get().DisplaySettings.ExperimentalTimezone)
|
||||||
|
assertDatabaseNotEqualsConfig(t, testConfig)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("already minimally configured", func(t *testing.T) {
|
t.Run("already minimally configured", func(t *testing.T) {
|
||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -164,6 +191,21 @@ func TestDatabaseStoreNew(t *testing.T) {
|
|||||||
assertDatabaseEqualsConfig(t, minimalConfig)
|
assertDatabaseEqualsConfig(t, minimalConfig)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("already minimally configured with custom defaults", func(t *testing.T) {
|
||||||
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
|
defer tearDown()
|
||||||
|
|
||||||
|
ds, err := newTestDatabaseStore(t, customConfigDefaults)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer ds.Close()
|
||||||
|
|
||||||
|
// as the whole config has default values already, custom
|
||||||
|
// defaults should have no effect
|
||||||
|
assert.Equal(t, "http://minimal", *ds.Get().ServiceSettings.SiteURL)
|
||||||
|
assert.NotEqual(t, *customConfigDefaults.DisplaySettings.ExperimentalTimezone, *ds.Get().DisplaySettings.ExperimentalTimezone)
|
||||||
|
assertDatabaseEqualsConfig(t, minimalConfig)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("invalid url", func(t *testing.T) {
|
t.Run("invalid url", func(t *testing.T) {
|
||||||
_, err := config.NewDatabaseStore("")
|
_, err := config.NewDatabaseStore("")
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
@@ -187,7 +229,7 @@ func TestDatabaseStoreGet(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -205,7 +247,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -215,7 +257,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://override")
|
os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://override")
|
||||||
defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL")
|
defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL")
|
||||||
|
|
||||||
ds, err = newTestDatabaseStore(t)
|
ds, err = newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -223,11 +265,34 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
assert.Equal(t, map[string]interface{}{"ServiceSettings": map[string]interface{}{"SiteURL": true}}, ds.GetEnvironmentOverrides())
|
assert.Equal(t, map[string]interface{}{"ServiceSettings": map[string]interface{}{"SiteURL": true}}, ds.GetEnvironmentOverrides())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("get override for a string variable with a custom default value", func(t *testing.T) {
|
||||||
|
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
||||||
|
defer tearDown()
|
||||||
|
|
||||||
|
ds, err := newTestDatabaseStore(t, customConfigDefaults)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer ds.Close()
|
||||||
|
|
||||||
|
assert.Equal(t, "http://TestStoreNew", *ds.Get().ServiceSettings.SiteURL)
|
||||||
|
assert.Empty(t, ds.GetEnvironmentOverrides())
|
||||||
|
|
||||||
|
os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://override")
|
||||||
|
defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL")
|
||||||
|
|
||||||
|
ds, err = newTestDatabaseStore(t, customConfigDefaults)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer ds.Close()
|
||||||
|
|
||||||
|
// environment override should take priority over the custom default value
|
||||||
|
assert.Equal(t, "http://override", *ds.Get().ServiceSettings.SiteURL)
|
||||||
|
assert.Equal(t, map[string]interface{}{"ServiceSettings": map[string]interface{}{"SiteURL": true}}, ds.GetEnvironmentOverrides())
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("get override for a bool variable", func(t *testing.T) {
|
t.Run("get override for a bool variable", func(t *testing.T) {
|
||||||
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -237,7 +302,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
os.Setenv("MM_PLUGINSETTINGS_ENABLEUPLOADS", "true")
|
os.Setenv("MM_PLUGINSETTINGS_ENABLEUPLOADS", "true")
|
||||||
defer os.Unsetenv("MM_PLUGINSETTINGS_ENABLEUPLOADS")
|
defer os.Unsetenv("MM_PLUGINSETTINGS_ENABLEUPLOADS")
|
||||||
|
|
||||||
ds, err = newTestDatabaseStore(t)
|
ds, err = newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -249,7 +314,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -259,7 +324,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
os.Setenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM", "3000")
|
os.Setenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM", "3000")
|
||||||
defer os.Unsetenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM")
|
defer os.Unsetenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM")
|
||||||
|
|
||||||
ds, err = newTestDatabaseStore(t)
|
ds, err = newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -271,7 +336,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -281,7 +346,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
os.Setenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE", "123456")
|
os.Setenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE", "123456")
|
||||||
defer os.Unsetenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE")
|
defer os.Unsetenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE")
|
||||||
|
|
||||||
ds, err = newTestDatabaseStore(t)
|
ds, err = newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -293,7 +358,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -303,7 +368,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db")
|
os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db")
|
||||||
defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS")
|
defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS")
|
||||||
|
|
||||||
ds, err = newTestDatabaseStore(t)
|
ds, err = newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -318,7 +383,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
_, tearDown := setupConfigDatabase(t, testConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -328,7 +393,7 @@ func TestDatabaseStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db user:pwd@db2:5433/test-db2 user:pwd@db3:5434/test-db3")
|
os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db user:pwd@db2:5433/test-db2 user:pwd@db3:5434/test-db3")
|
||||||
defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS")
|
defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS")
|
||||||
|
|
||||||
ds, err = newTestDatabaseStore(t)
|
ds, err = newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -348,7 +413,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -362,7 +427,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -378,7 +443,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, ldapConfig, nil)
|
_, tearDown := setupConfigDatabase(t, ldapConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -395,7 +460,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -414,7 +479,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -433,7 +498,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, readOnlyConfig, nil)
|
_, tearDown := setupConfigDatabase(t, readOnlyConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -453,7 +518,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -476,7 +541,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -501,7 +566,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -518,7 +583,7 @@ func TestDatabaseStoreSet(t *testing.T) {
|
|||||||
activeID, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
activeID, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -549,7 +614,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -564,7 +629,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -586,7 +651,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://overridePersistEnvVariables")
|
os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://overridePersistEnvVariables")
|
||||||
defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL")
|
defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL")
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -607,7 +672,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
os.Setenv("MM_PLUGINSETTINGS_ENABLEUPLOADS", "true")
|
os.Setenv("MM_PLUGINSETTINGS_ENABLEUPLOADS", "true")
|
||||||
defer os.Unsetenv("MM_PLUGINSETTINGS_ENABLEUPLOADS")
|
defer os.Unsetenv("MM_PLUGINSETTINGS_ENABLEUPLOADS")
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -630,7 +695,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
os.Setenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM", "3000")
|
os.Setenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM", "3000")
|
||||||
defer os.Unsetenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM")
|
defer os.Unsetenv("MM_TEAMSETTINGS_MAXUSERSPERTEAM")
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -653,7 +718,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
os.Setenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE", "123456")
|
os.Setenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE", "123456")
|
||||||
defer os.Unsetenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE")
|
defer os.Unsetenv("MM_SERVICESETTINGS_TLSSTRICTTRANSPORTMAXAGE")
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -676,7 +741,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db")
|
os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db")
|
||||||
defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS")
|
defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS")
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -701,7 +766,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db")
|
os.Setenv("MM_SQLSETTINGS_DATASOURCEREPLICAS", "user:pwd@db:5432/test-db")
|
||||||
defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS")
|
defer os.Unsetenv("MM_SQLSETTINGS_DATASOURCEREPLICAS")
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -721,7 +786,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -749,7 +814,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, fixesRequiredConfig, nil)
|
_, tearDown := setupConfigDatabase(t, fixesRequiredConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -763,7 +828,7 @@ func TestDatabaseStoreLoad(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -787,7 +852,7 @@ func TestDatabaseGetFile(t *testing.T) {
|
|||||||
})
|
})
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -818,7 +883,7 @@ func TestDatabaseSetFile(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -871,7 +936,7 @@ func TestDatabaseHasFile(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -884,7 +949,7 @@ func TestDatabaseHasFile(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -902,7 +967,7 @@ func TestDatabaseHasFile(t *testing.T) {
|
|||||||
})
|
})
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -915,7 +980,7 @@ func TestDatabaseHasFile(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -930,7 +995,7 @@ func TestDatabaseRemoveFile(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -942,7 +1007,7 @@ func TestDatabaseRemoveFile(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
_, tearDown := setupConfigDatabase(t, minimalConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -966,7 +1031,7 @@ func TestDatabaseRemoveFile(t *testing.T) {
|
|||||||
})
|
})
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|
||||||
@@ -989,7 +1054,7 @@ func TestDatabaseStoreString(t *testing.T) {
|
|||||||
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
_, tearDown := setupConfigDatabase(t, emptyConfig, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
ds, err := newTestDatabaseStore(t)
|
ds, err := newTestDatabaseStore(t, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, ds)
|
require.NotNil(t, ds)
|
||||||
defer ds.Close()
|
defer ds.Close()
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ func TestFileStoreNew(t *testing.T) {
|
|||||||
|
|
||||||
fs, err := config.NewFileStore(path, false)
|
fs, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
configStore, err := config.NewStoreFromBacking(fs)
|
configStore, err := config.NewStoreFromBacking(fs, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer configStore.Close()
|
defer configStore.Close()
|
||||||
|
|
||||||
@@ -99,13 +99,32 @@ func TestFileStoreNew(t *testing.T) {
|
|||||||
assertFileNotEqualsConfig(t, testConfig, path)
|
assertFileNotEqualsConfig(t, testConfig, path)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("absolute path, initialization required, with custom defaults", func(t *testing.T) {
|
||||||
|
path, tearDown := setupConfigFile(t, testConfig)
|
||||||
|
defer tearDown()
|
||||||
|
|
||||||
|
fs, err := config.NewFileStore(path, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
configStore, err := config.NewStoreFromBacking(fs, customConfigDefaults)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer configStore.Close()
|
||||||
|
|
||||||
|
// already existing value should not be affected by the custom
|
||||||
|
// defaults
|
||||||
|
assert.Equal(t, "http://TestStoreNew", *configStore.Get().ServiceSettings.SiteURL)
|
||||||
|
// nonexisting value should be overwritten by the custom
|
||||||
|
// defaults
|
||||||
|
assert.Equal(t, *customConfigDefaults.DisplaySettings.ExperimentalTimezone, *configStore.Get().DisplaySettings.ExperimentalTimezone)
|
||||||
|
assertFileNotEqualsConfig(t, testConfig, path)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("absolute path, already minimally configured", func(t *testing.T) {
|
t.Run("absolute path, already minimally configured", func(t *testing.T) {
|
||||||
path, tearDown := setupConfigFile(t, minimalConfig)
|
path, tearDown := setupConfigFile(t, minimalConfig)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
fs, err := config.NewFileStore(path, false)
|
fs, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
configStore, err := config.NewStoreFromBacking(fs)
|
configStore, err := config.NewStoreFromBacking(fs, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer configStore.Close()
|
defer configStore.Close()
|
||||||
|
|
||||||
@@ -113,6 +132,23 @@ func TestFileStoreNew(t *testing.T) {
|
|||||||
assertFileEqualsConfig(t, minimalConfig, path)
|
assertFileEqualsConfig(t, minimalConfig, path)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("absolute path, already minimally configured, with custom defaults", func(t *testing.T) {
|
||||||
|
path, tearDown := setupConfigFile(t, minimalConfig)
|
||||||
|
defer tearDown()
|
||||||
|
|
||||||
|
fs, err := config.NewFileStore(path, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
configStore, err := config.NewStoreFromBacking(fs, customConfigDefaults)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer configStore.Close()
|
||||||
|
|
||||||
|
// as the whole config has default values already, custom
|
||||||
|
// defaults should have no effect
|
||||||
|
assert.Equal(t, "http://minimal", *configStore.Get().ServiceSettings.SiteURL)
|
||||||
|
assert.NotEqual(t, *customConfigDefaults.DisplaySettings.ExperimentalTimezone, *configStore.Get().DisplaySettings.ExperimentalTimezone)
|
||||||
|
assertFileEqualsConfig(t, minimalConfig, path)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("absolute path, file does not exist", func(t *testing.T) {
|
t.Run("absolute path, file does not exist", func(t *testing.T) {
|
||||||
_, tearDown := setupConfigFile(t, nil)
|
_, tearDown := setupConfigFile(t, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
@@ -124,7 +160,7 @@ func TestFileStoreNew(t *testing.T) {
|
|||||||
path := filepath.Join(tempDir, "does_not_exist")
|
path := filepath.Join(tempDir, "does_not_exist")
|
||||||
fs, err := config.NewFileStore(path, false)
|
fs, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
configStore, err := config.NewStoreFromBacking(fs)
|
configStore, err := config.NewStoreFromBacking(fs, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer configStore.Close()
|
defer configStore.Close()
|
||||||
|
|
||||||
@@ -132,6 +168,25 @@ func TestFileStoreNew(t *testing.T) {
|
|||||||
assertFileNotEqualsConfig(t, testConfig, path)
|
assertFileNotEqualsConfig(t, testConfig, path)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("absolute path, file does not exist, with custom defaults", func(t *testing.T) {
|
||||||
|
_, tearDown := setupConfigFile(t, nil)
|
||||||
|
defer tearDown()
|
||||||
|
|
||||||
|
tempDir, err := ioutil.TempDir("", "TestFileStoreNew")
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer os.RemoveAll(tempDir)
|
||||||
|
|
||||||
|
path := filepath.Join(tempDir, "does_not_exist")
|
||||||
|
fs, err := config.NewFileStore(path, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
configStore, err := config.NewStoreFromBacking(fs, customConfigDefaults)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer configStore.Close()
|
||||||
|
|
||||||
|
assert.Equal(t, *customConfigDefaults.ServiceSettings.SiteURL, *configStore.Get().ServiceSettings.SiteURL)
|
||||||
|
assert.Equal(t, *customConfigDefaults.DisplaySettings.ExperimentalTimezone, *configStore.Get().DisplaySettings.ExperimentalTimezone)
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("absolute path, path to file does not exist", func(t *testing.T) {
|
t.Run("absolute path, path to file does not exist", func(t *testing.T) {
|
||||||
_, tearDown := setupConfigFile(t, nil)
|
_, tearDown := setupConfigFile(t, nil)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
@@ -143,7 +198,7 @@ func TestFileStoreNew(t *testing.T) {
|
|||||||
path := filepath.Join(tempDir, "does/not/exist")
|
path := filepath.Join(tempDir, "does/not/exist")
|
||||||
fs, err := config.NewFileStore(path, false)
|
fs, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
configStore, err := config.NewStoreFromBacking(fs)
|
configStore, err := config.NewStoreFromBacking(fs, nil)
|
||||||
require.Nil(t, configStore)
|
require.Nil(t, configStore)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
@@ -165,7 +220,7 @@ func TestFileStoreNew(t *testing.T) {
|
|||||||
|
|
||||||
fs, err := config.NewFileStore(path, false)
|
fs, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
configStore, err := config.NewStoreFromBacking(fs)
|
configStore, err := config.NewStoreFromBacking(fs, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer configStore.Close()
|
defer configStore.Close()
|
||||||
|
|
||||||
@@ -184,7 +239,7 @@ func TestFileStoreNew(t *testing.T) {
|
|||||||
path := "TestFileStoreNew/a/b/c/config.json"
|
path := "TestFileStoreNew/a/b/c/config.json"
|
||||||
fs, err := config.NewFileStore(path, false)
|
fs, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
configStore, err := config.NewStoreFromBacking(fs)
|
configStore, err := config.NewStoreFromBacking(fs, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer configStore.Close()
|
defer configStore.Close()
|
||||||
|
|
||||||
@@ -199,7 +254,7 @@ func TestFileStoreGet(t *testing.T) {
|
|||||||
|
|
||||||
fs, err := config.NewFileStore(path, false)
|
fs, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
configStore, err := config.NewStoreFromBacking(fs)
|
configStore, err := config.NewStoreFromBacking(fs, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer configStore.Close()
|
defer configStore.Close()
|
||||||
|
|
||||||
@@ -225,7 +280,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -237,7 +292,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err = config.NewFileStore(path, false)
|
fsInner, err = config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err = config.NewStoreFromBacking(fsInner)
|
fs, err = config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -245,13 +300,40 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
assert.Equal(t, map[string]interface{}{"ServiceSettings": map[string]interface{}{"SiteURL": true}}, fs.GetEnvironmentOverrides())
|
assert.Equal(t, map[string]interface{}{"ServiceSettings": map[string]interface{}{"SiteURL": true}}, fs.GetEnvironmentOverrides())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("get override for a string variable, with custom defaults", func(t *testing.T) {
|
||||||
|
path, tearDown := setupConfigFile(t, testConfig)
|
||||||
|
defer tearDown()
|
||||||
|
|
||||||
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
fs, err := config.NewStoreFromBacking(fsInner, customConfigDefaults)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer fs.Close()
|
||||||
|
|
||||||
|
assert.Equal(t, "http://TestStoreNew", *fs.Get().ServiceSettings.SiteURL)
|
||||||
|
assert.Empty(t, fs.GetEnvironmentOverrides())
|
||||||
|
|
||||||
|
os.Setenv("MM_SERVICESETTINGS_SITEURL", "http://override")
|
||||||
|
defer os.Unsetenv("MM_SERVICESETTINGS_SITEURL")
|
||||||
|
|
||||||
|
fsInner, err = config.NewFileStore(path, false)
|
||||||
|
require.NoError(t, err)
|
||||||
|
fs, err = config.NewStoreFromBacking(fsInner, customConfigDefaults)
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer fs.Close()
|
||||||
|
|
||||||
|
// environment override should take priority over the custom default value
|
||||||
|
assert.Equal(t, "http://override", *fs.Get().ServiceSettings.SiteURL)
|
||||||
|
assert.Equal(t, map[string]interface{}{"ServiceSettings": map[string]interface{}{"SiteURL": true}}, fs.GetEnvironmentOverrides())
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("get override for a bool variable", func(t *testing.T) {
|
t.Run("get override for a bool variable", func(t *testing.T) {
|
||||||
path, tearDown := setupConfigFile(t, testConfig)
|
path, tearDown := setupConfigFile(t, testConfig)
|
||||||
defer tearDown()
|
defer tearDown()
|
||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -263,7 +345,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err = config.NewFileStore(path, false)
|
fsInner, err = config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err = config.NewStoreFromBacking(fsInner)
|
fs, err = config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -277,7 +359,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -289,7 +371,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err = config.NewFileStore(path, false)
|
fsInner, err = config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err = config.NewStoreFromBacking(fsInner)
|
fs, err = config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -303,7 +385,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -315,7 +397,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err = config.NewFileStore(path, false)
|
fsInner, err = config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err = config.NewStoreFromBacking(fsInner)
|
fs, err = config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -329,7 +411,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -341,7 +423,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err = config.NewFileStore(path, false)
|
fsInner, err = config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err = config.NewStoreFromBacking(fsInner)
|
fs, err = config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -358,7 +440,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -370,7 +452,7 @@ func TestFileStoreGetEnivironmentOverrides(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err = config.NewFileStore(path, false)
|
fsInner, err = config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err = config.NewStoreFromBacking(fsInner)
|
fs, err = config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -386,7 +468,7 @@ func TestFileStoreSet(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -407,7 +489,7 @@ func TestFileStoreSet(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -426,7 +508,7 @@ func TestFileStoreSet(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -447,7 +529,7 @@ func TestFileStoreSet(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -466,7 +548,7 @@ func TestFileStoreSet(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -488,7 +570,7 @@ func TestFileStoreSet(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -516,7 +598,7 @@ func TestFileStoreSet(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, true)
|
fsInner, err := config.NewFileStore(path, true)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -548,7 +630,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -565,7 +647,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -589,7 +671,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -614,7 +696,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -639,7 +721,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -664,7 +746,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -689,7 +771,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -716,7 +798,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -738,7 +820,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -759,7 +841,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -778,7 +860,7 @@ func TestFileStoreLoad(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -808,7 +890,7 @@ func TestFileStoreWatcherEmitter(t *testing.T) {
|
|||||||
t.Run("disabled", func(t *testing.T) {
|
t.Run("disabled", func(t *testing.T) {
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -832,7 +914,7 @@ func TestFileStoreWatcherEmitter(t *testing.T) {
|
|||||||
t.Run("enabled", func(t *testing.T) {
|
t.Run("enabled", func(t *testing.T) {
|
||||||
fsInner, err := config.NewFileStore(path, true)
|
fsInner, err := config.NewFileStore(path, true)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
@@ -857,7 +939,7 @@ func TestFileStoreSave(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore(path, false)
|
fsInner, err := config.NewFileStore(path, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer fs.Close()
|
defer fs.Close()
|
||||||
|
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ import "github.com/pkg/errors"
|
|||||||
|
|
||||||
// Migrate migrates SAML keys, certificates, and other config files from one store to another given their data source names.
|
// Migrate migrates SAML keys, certificates, and other config files from one store to another given their data source names.
|
||||||
func Migrate(from, to string) error {
|
func Migrate(from, to string) error {
|
||||||
source, err := NewStore(from, false)
|
source, err := NewStore(from, false, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to access source config %s", from)
|
return errors.Wrapf(err, "failed to access source config %s", from)
|
||||||
}
|
}
|
||||||
defer source.Close()
|
defer source.Close()
|
||||||
|
|
||||||
destination, err := NewStore(to, false)
|
destination, err := NewStore(to, false, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "failed to access destination config %s", to)
|
return errors.Wrapf(err, "failed to access destination config %s", to)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ func TestMigrate(t *testing.T) {
|
|||||||
|
|
||||||
sourcedb, err := config.NewDatabaseStore(sourceDSN)
|
sourcedb, err := config.NewDatabaseStore(sourceDSN)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
source, err := config.NewStoreFromBacking(sourcedb)
|
source, err := config.NewStoreFromBacking(sourcedb, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer source.Close()
|
defer source.Close()
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ func TestMigrate(t *testing.T) {
|
|||||||
|
|
||||||
destinationfile, err := config.NewFileStore(destinationDSN, false)
|
destinationfile, err := config.NewFileStore(destinationDSN, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
destination, err := config.NewStoreFromBacking(destinationfile)
|
destination, err := config.NewStoreFromBacking(destinationfile, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer destination.Close()
|
defer destination.Close()
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ func TestMigrate(t *testing.T) {
|
|||||||
|
|
||||||
sourcefile, err := config.NewFileStore(sourceDSN, false)
|
sourcefile, err := config.NewFileStore(sourceDSN, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
source, err := config.NewStoreFromBacking(sourcefile)
|
source, err := config.NewStoreFromBacking(sourcefile, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer source.Close()
|
defer source.Close()
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ func TestMigrate(t *testing.T) {
|
|||||||
|
|
||||||
destinationdb, err := config.NewDatabaseStore(destinationDSN)
|
destinationdb, err := config.NewDatabaseStore(destinationDSN)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
destination, err := config.NewStoreFromBacking(destinationdb)
|
destination, err := config.NewStoreFromBacking(destinationdb, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer destination.Close()
|
defer destination.Close()
|
||||||
|
|
||||||
|
|||||||
@@ -48,19 +48,19 @@ type BackingStore interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewStore creates a database or file store given a data source name by which to connect.
|
// NewStore creates a database or file store given a data source name by which to connect.
|
||||||
func NewStore(dsn string, watch bool) (*Store, error) {
|
func NewStore(dsn string, watch bool, customDefaults *model.Config) (*Store, error) {
|
||||||
backingStore, err := getBackingStore(dsn, watch)
|
backingStore, err := getBackingStore(dsn, watch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return NewStoreFromBacking(backingStore)
|
return NewStoreFromBacking(backingStore, customDefaults)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewStoreFromBacking(backingStore BackingStore) (*Store, error) {
|
func NewStoreFromBacking(backingStore BackingStore, customDefaults *model.Config) (*Store, error) {
|
||||||
store := &Store{
|
store := &Store{
|
||||||
backingStore: backingStore,
|
backingStore: backingStore,
|
||||||
|
configCustomDefaults: customDefaults,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := store.Load(); err != nil {
|
if err := store.Load(); err != nil {
|
||||||
@@ -90,7 +90,7 @@ func NewTestMemoryStore() *Store {
|
|||||||
panic("failed to initialize memory store: " + err.Error())
|
panic("failed to initialize memory store: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
configStore, err := NewStoreFromBacking(memoryStore)
|
configStore, err := NewStoreFromBacking(memoryStore, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic("failed to initialize config store: " + err.Error())
|
panic("failed to initialize config store: " + err.Error())
|
||||||
}
|
}
|
||||||
@@ -102,9 +102,10 @@ type Store struct {
|
|||||||
emitter
|
emitter
|
||||||
backingStore BackingStore
|
backingStore BackingStore
|
||||||
|
|
||||||
configLock sync.RWMutex
|
configLock sync.RWMutex
|
||||||
config *model.Config
|
config *model.Config
|
||||||
configNoEnv *model.Config
|
configNoEnv *model.Config
|
||||||
|
configCustomDefaults *model.Config
|
||||||
|
|
||||||
persistFeatureFlags bool
|
persistFeatureFlags bool
|
||||||
}
|
}
|
||||||
@@ -195,6 +196,18 @@ func (s *Store) loadLockedWithOld(oldCfg *model.Config, unlockOnce *sync.Once) e
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we have custom defaults set, the initial config is merged on
|
||||||
|
// top of them and we delete them not to be used again in the
|
||||||
|
// configuration reloads
|
||||||
|
if s.configCustomDefaults != nil {
|
||||||
|
var mErr error
|
||||||
|
loadedConfig, mErr = Merge(s.configCustomDefaults, loadedConfig, nil)
|
||||||
|
if mErr != nil {
|
||||||
|
return errors.Wrap(mErr, "failed to merge custom config defaults")
|
||||||
|
}
|
||||||
|
s.configCustomDefaults = nil
|
||||||
|
}
|
||||||
|
|
||||||
loadedConfig.SetDefaults()
|
loadedConfig.SetDefaults()
|
||||||
|
|
||||||
s.configNoEnv = loadedConfig.Clone()
|
s.configNoEnv = loadedConfig.Clone()
|
||||||
|
|||||||
@@ -28,25 +28,25 @@ func TestNewStore(t *testing.T) {
|
|||||||
require.NoError(t, os.Mkdir(filepath.Join(tempDir, "config"), 0700))
|
require.NoError(t, os.Mkdir(filepath.Join(tempDir, "config"), 0700))
|
||||||
|
|
||||||
t.Run("database dsn", func(t *testing.T) {
|
t.Run("database dsn", func(t *testing.T) {
|
||||||
ds, err := config.NewStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource), false)
|
ds, err := config.NewStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource), false, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
ds.Close()
|
ds.Close()
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("database dsn, watch ignored", func(t *testing.T) {
|
t.Run("database dsn, watch ignored", func(t *testing.T) {
|
||||||
ds, err := config.NewStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource), true)
|
ds, err := config.NewStore(getDsn(*sqlSettings.DriverName, *sqlSettings.DataSource), true, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
ds.Close()
|
ds.Close()
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("file dsn", func(t *testing.T) {
|
t.Run("file dsn", func(t *testing.T) {
|
||||||
fs, err := config.NewStore("config.json", false)
|
fs, err := config.NewStore("config.json", false, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs.Close()
|
fs.Close()
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("file dsn, watch", func(t *testing.T) {
|
t.Run("file dsn, watch", func(t *testing.T) {
|
||||||
fs, err := config.NewStore("config.json", true)
|
fs, err := config.NewStore("config.json", true, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fs.Close()
|
fs.Close()
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ func TestSendMailUsingConfig(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore("config.json", false)
|
fsInner, err := config.NewFileStore("config.json", false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
cfg := fs.Get()
|
cfg := fs.Get()
|
||||||
@@ -170,7 +170,7 @@ func TestSendMailWithEmbeddedFilesUsingConfig(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore("config.json", false)
|
fsInner, err := config.NewFileStore("config.json", false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
cfg := fs.Get()
|
cfg := fs.Get()
|
||||||
@@ -217,7 +217,7 @@ func TestSendMailUsingConfigAdvanced(t *testing.T) {
|
|||||||
|
|
||||||
fsInner, err := config.NewFileStore("config.json", false)
|
fsInner, err := config.NewFileStore("config.json", false)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
fs, err := config.NewStoreFromBacking(fsInner)
|
fs, err := config.NewStoreFromBacking(fsInner, nil)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
||||||
cfg := fs.Get()
|
cfg := fs.Get()
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user