fix config cli option (#7850)

This commit is contained in:
Chris
2017-11-16 08:40:26 -06:00
committed by GitHub
parent 6eb4b4604c
commit bf6bb9bce9
8 changed files with 85 additions and 19 deletions

View File

@@ -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)

View File

@@ -29,3 +29,9 @@ func StoreOverride(override interface{}) Option {
}
}
}
func ConfigFile(file string) Option {
return func(a *App) {
a.configFile = file
}
}

View File

@@ -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")
}

View File

@@ -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()
}

View File

@@ -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 {

View File

@@ -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" {

View File

@@ -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

View File

@@ -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")