summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/app.go2
-rw-r--r--app/app_test.go23
-rw-r--r--utils/config.go10
3 files changed, 32 insertions, 3 deletions
diff --git a/app/app.go b/app/app.go
index 80dc5a8ab..354e8ebf6 100644
--- a/app/app.go
+++ b/app/app.go
@@ -253,7 +253,9 @@ func (a *App) Config() *model.Config {
}
func (a *App) UpdateConfig(f func(*model.Config)) {
+ old := utils.Cfg.Clone()
f(utils.Cfg)
+ utils.InvokeGlobalConfigListeners(old, utils.Cfg)
}
func (a *App) PersistConfig() {
diff --git a/app/app_test.go b/app/app_test.go
index ac39b49fe..17189956d 100644
--- a/app/app_test.go
+++ b/app/app_test.go
@@ -10,6 +10,9 @@ import (
l4g "github.com/alecthomas/log4go"
+ "github.com/stretchr/testify/assert"
+
+ "github.com/mattermost/mattermost-server/model"
"github.com/mattermost/mattermost-server/store/storetest"
"github.com/mattermost/mattermost-server/utils"
)
@@ -49,3 +52,23 @@ func TestAppRace(t *testing.T) {
a.Shutdown()
}
}
+
+func TestUpdateConfig(t *testing.T) {
+ th := Setup()
+ defer th.TearDown()
+
+ prev := *th.App.Config().ServiceSettings.SiteURL
+ defer th.App.UpdateConfig(func(cfg *model.Config) {
+ *cfg.ServiceSettings.SiteURL = prev
+ })
+
+ listener := utils.AddConfigListener(func(old, current *model.Config) {
+ assert.Equal(t, prev, *old.ServiceSettings.SiteURL)
+ assert.Equal(t, "foo", *current.ServiceSettings.SiteURL)
+ })
+ defer utils.RemoveConfigListener(listener)
+
+ th.App.UpdateConfig(func(cfg *model.Config) {
+ *cfg.ServiceSettings.SiteURL = "foo"
+ })
+}
diff --git a/utils/config.go b/utils/config.go
index f87eacf39..9a59a2dc0 100644
--- a/utils/config.go
+++ b/utils/config.go
@@ -414,13 +414,17 @@ func LoadGlobalConfig(fileName string) *model.Config {
SetDefaultRolesBasedOnConfig()
SetSiteURL(*Cfg.ServiceSettings.SiteURL)
- for _, listener := range cfgListeners {
- listener(&oldConfig, config)
- }
+ InvokeGlobalConfigListeners(&oldConfig, config)
return config
}
+func InvokeGlobalConfigListeners(old, current *model.Config) {
+ for _, listener := range cfgListeners {
+ listener(old, current)
+ }
+}
+
func RegenerateClientConfig() {
ClientCfg = getClientConfig(Cfg)
}