summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris <ccbrown112@gmail.com>2017-11-16 08:40:26 -0600
committerGitHub <noreply@github.com>2017-11-16 08:40:26 -0600
commitbf6bb9bce9723799991478e5aea745686045ad65 (patch)
treef9d84501c5db96563f53410aaa546aac8085157f
parent6eb4b4604c79b0052cb7ab8ac97c9b90fa61e918 (diff)
downloadchat-bf6bb9bce9723799991478e5aea745686045ad65.tar.gz
chat-bf6bb9bce9723799991478e5aea745686045ad65.tar.bz2
chat-bf6bb9bce9723799991478e5aea745686045ad65.zip
fix config cli option (#7850)
-rw-r--r--app/app.go23
-rw-r--r--app/options.go6
-rw-r--r--cmd/platform/config_test.go29
-rw-r--r--cmd/platform/init.go2
-rw-r--r--cmd/platform/platform_test.go2
-rw-r--r--cmd/platform/server.go2
-rw-r--r--utils/config.go21
-rw-r--r--utils/config_test.go19
8 files changed, 85 insertions, 19 deletions
diff --git a/app/app.go b/app/app.go
index 81db20830..4be897f59 100644
--- a/app/app.go
+++ b/app/app.go
@@ -48,7 +48,8 @@ type App struct {
Mfa einterfaces.MfaInterface
Saml einterfaces.SamlInterface
- newStore func() store.Store
+ configFile string
+ newStore func() store.Store
sessionCache *utils.Cache
}
@@ -63,27 +64,29 @@ func New(options ...Option) *App {
panic("Only one App should exist at a time. Did you forget to call Shutdown()?")
}
- if utils.T == nil {
- utils.TranslationsPreInit()
- }
- utils.LoadGlobalConfig("config.json")
- utils.InitTranslations(utils.Cfg.LocalizationSettings)
-
- l4g.Info(utils.T("api.server.new_server.init.info"))
-
app := &App{
goroutineExitSignal: make(chan struct{}, 1),
Srv: &Server{
Router: mux.NewRouter(),
},
sessionCache: utils.NewLru(model.SESSION_CACHE_SIZE),
+ configFile: "config.json",
}
- app.initEnterprise()
for _, option := range options {
option(app)
}
+ if utils.T == nil {
+ utils.TranslationsPreInit()
+ }
+ utils.LoadGlobalConfig(app.configFile)
+ utils.InitTranslations(utils.Cfg.LocalizationSettings)
+
+ l4g.Info(utils.T("api.server.new_server.init.info"))
+
+ app.initEnterprise()
+
if app.newStore == nil {
app.newStore = func() store.Store {
return store.NewLayeredStore(sqlstore.NewSqlSupplier(app.Config().SqlSettings, app.Metrics), app.Metrics, app.Cluster)
diff --git a/app/options.go b/app/options.go
index 34fa92d93..9b40806f3 100644
--- a/app/options.go
+++ b/app/options.go
@@ -29,3 +29,9 @@ func StoreOverride(override interface{}) Option {
}
}
}
+
+func ConfigFile(file string) Option {
+ return func(a *App) {
+ a.configFile = file
+ }
+}
diff --git a/cmd/platform/config_test.go b/cmd/platform/config_test.go
new file mode 100644
index 000000000..781e40de8
--- /dev/null
+++ b/cmd/platform/config_test.go
@@ -0,0 +1,29 @@
+// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+package main
+
+import (
+ "io/ioutil"
+ "os"
+ "path/filepath"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "github.com/mattermost/mattermost-server/model"
+)
+
+func TestConfigValidate(t *testing.T) {
+ dir, err := ioutil.TempDir("", "")
+ require.NoError(t, err)
+ defer os.RemoveAll(dir)
+
+ path := filepath.Join(dir, "config.json")
+ config := &model.Config{}
+ config.SetDefaults()
+ require.NoError(t, ioutil.WriteFile(path, []byte(config.ToJson()), 0600))
+
+ assert.Contains(t, checkCommand(t, "--config", path, "config", "validate"), "The document is valid")
+}
diff --git a/cmd/platform/init.go b/cmd/platform/init.go
index a5db40a57..a25b39383 100644
--- a/cmd/platform/init.go
+++ b/cmd/platform/init.go
@@ -32,7 +32,7 @@ func initDBCommandContext(configFileLocation string) (*app.App, error) {
utils.ConfigureCmdLineLog()
- a := app.New()
+ a := app.New(app.ConfigFile(configFileLocation))
if model.BuildEnterpriseReady == "true" {
a.LoadLicense()
}
diff --git a/cmd/platform/platform_test.go b/cmd/platform/platform_test.go
index 8a2839c7e..9ee68a7aa 100644
--- a/cmd/platform/platform_test.go
+++ b/cmd/platform/platform_test.go
@@ -35,7 +35,7 @@ func checkCommand(t *testing.T, args ...string) string {
require.NoError(t, err)
output, err := exec.Command(path, execArgs(t, args)...).CombinedOutput()
require.NoError(t, err, string(output))
- return string(output)
+ return strings.TrimSpace(strings.TrimSuffix(strings.TrimSpace(string(output)), "PASS"))
}
func runCommand(t *testing.T, args ...string) error {
diff --git a/cmd/platform/server.go b/cmd/platform/server.go
index 01f5a0da1..36118d007 100644
--- a/cmd/platform/server.go
+++ b/cmd/platform/server.go
@@ -64,7 +64,7 @@ func runServer(configFileLocation string) {
l4g.Error("Problem with file storage settings: " + err.Error())
}
- a := app.New()
+ a := app.New(app.ConfigFile(configFileLocation))
defer a.Shutdown()
if model.BuildEnterpriseReady == "true" {
diff --git a/utils/config.go b/utils/config.go
index 9a59a2dc0..1dea32535 100644
--- a/utils/config.go
+++ b/utils/config.go
@@ -70,11 +70,20 @@ func RemoveConfigListener(id string) {
delete(cfgListeners, id)
}
+// FindConfigFile attempts to find an existing configuration file. fileName can be an absolute or
+// relative path or name such as "/opt/mattermost/config.json" or simply "config.json". An empty
+// string is returned if no configuration is found.
func FindConfigFile(fileName string) (path string) {
- for _, dir := range []string{"./config", "../config", "../../config", "."} {
- path, _ := filepath.Abs(filepath.Join(dir, fileName))
- if _, err := os.Stat(path); err == nil {
- return path
+ if filepath.IsAbs(fileName) {
+ if _, err := os.Stat(fileName); err == nil {
+ return fileName
+ }
+ } else {
+ for _, dir := range []string{"./config", "../config", "../../config", "."} {
+ path, _ := filepath.Abs(filepath.Join(dir, fileName))
+ if _, err := os.Stat(path); err == nil {
+ return path
+ }
}
}
return ""
@@ -310,8 +319,8 @@ func ReadConfigFile(path string, allowEnvironmentOverrides bool) (*model.Config,
}
// EnsureConfigFile will attempt to locate a config file with the given name. If it does not exist,
-// it will attempt to locate a default config file, and copy it. In either case, the config file
-// path is returned.
+// it will attempt to locate a default config file, and copy it to a file named fileName in the same
+// directory. In either case, the config file path is returned.
func EnsureConfigFile(fileName string) (string, error) {
if configFile := FindConfigFile(fileName); configFile != "" {
return configFile, nil
diff --git a/utils/config_test.go b/utils/config_test.go
index 92d3c6fd4..157fd7fed 100644
--- a/utils/config_test.go
+++ b/utils/config_test.go
@@ -4,7 +4,9 @@
package utils
import (
+ "io/ioutil"
"os"
+ "path/filepath"
"strings"
"testing"
"time"
@@ -21,6 +23,23 @@ func TestConfig(t *testing.T) {
InitTranslations(Cfg.LocalizationSettings)
}
+func TestFindConfigFile(t *testing.T) {
+ dir, err := ioutil.TempDir("", "")
+ require.NoError(t, err)
+ defer os.RemoveAll(dir)
+
+ path := filepath.Join(dir, "config.json")
+ require.NoError(t, ioutil.WriteFile(path, []byte("{}"), 0600))
+
+ assert.Equal(t, path, FindConfigFile(path))
+
+ prevDir, err := os.Getwd()
+ require.NoError(t, err)
+ defer os.Chdir(prevDir)
+ os.Chdir(dir)
+ assert.Equal(t, path, FindConfigFile(path))
+}
+
func TestConfigFromEnviroVars(t *testing.T) {
os.Setenv("MM_TEAMSETTINGS_SITENAME", "From Enviroment")
os.Setenv("MM_TEAMSETTINGS_CUSTOMBRANDTEXT", "Custom Brand")