mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 15:09:42 +00:00
Config: fix don't create empty dir when resolving path (#575)
* Config: fix don't create empty dir when resolving path * refactor migration of default config file * gracefully handle src == target on Move * create target directory on Move, if necessary * unify resolution of default config location * refactor the use of flagSet to be explicit * remove package variable * use empty config file path setting if not set in flags * resolve default file location the same way when showing the target and when loading default config file * don't migrate if target file is the same as source * rename configfile to configFile * add migrateConfig tests
This commit is contained in:
@@ -2,7 +2,6 @@ package engine
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"path/filepath"
|
||||
@@ -47,9 +46,6 @@ type Engine struct {
|
||||
// Vars for engine
|
||||
var (
|
||||
Bot *Engine
|
||||
|
||||
// Stores the set flags
|
||||
flagSet = make(map[string]bool)
|
||||
)
|
||||
|
||||
// New starts a new engine
|
||||
@@ -66,17 +62,15 @@ func New() (*Engine, error) {
|
||||
}
|
||||
|
||||
// NewFromSettings starts a new engine based on supplied settings
|
||||
func NewFromSettings(settings *Settings) (*Engine, error) {
|
||||
func NewFromSettings(settings *Settings, flagSet map[string]bool) (*Engine, error) {
|
||||
if settings == nil {
|
||||
return nil, errors.New("engine: settings is nil")
|
||||
}
|
||||
// collect flags
|
||||
flag.Visit(func(f *flag.Flag) { flagSet[f.Name] = true })
|
||||
|
||||
var b Engine
|
||||
var err error
|
||||
|
||||
b.Config, err = loadConfigWithSettings(settings)
|
||||
b.Config, err = loadConfigWithSettings(settings, flagSet)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load config. Err: %s", err)
|
||||
}
|
||||
@@ -96,13 +90,13 @@ func NewFromSettings(settings *Settings) (*Engine, error) {
|
||||
return nil, fmt.Errorf("unable to adjust runtime GOMAXPROCS value. Err: %s", err)
|
||||
}
|
||||
|
||||
validateSettings(&b, settings)
|
||||
validateSettings(&b, settings, flagSet)
|
||||
return &b, nil
|
||||
}
|
||||
|
||||
// loadConfigWithSettings creates configuration based on the provided settings
|
||||
func loadConfigWithSettings(settings *Settings) (*config.Config, error) {
|
||||
filePath, err := config.GetFilePath(settings.ConfigFile)
|
||||
func loadConfigWithSettings(settings *Settings, flagSet map[string]bool) (*config.Config, error) {
|
||||
filePath, err := config.GetAndMigrateDefaultPath(settings.ConfigFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -127,7 +121,7 @@ func loadConfigWithSettings(settings *Settings) (*config.Config, error) {
|
||||
}
|
||||
|
||||
// validateSettings validates and sets all bot settings
|
||||
func validateSettings(b *Engine, s *Settings) {
|
||||
func validateSettings(b *Engine, s *Settings, flagSet map[string]bool) {
|
||||
b.Settings.Verbose = s.Verbose
|
||||
b.Settings.EnableDryRun = s.EnableDryRun
|
||||
b.Settings.EnableAllExchanges = s.EnableAllExchanges
|
||||
|
||||
@@ -51,12 +51,12 @@ func TestLoadConfigWithSettings(t *testing.T) {
|
||||
tt := tt
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
// prepare the 'flags'
|
||||
flagSet = make(map[string]bool)
|
||||
flagSet := make(map[string]bool)
|
||||
for _, v := range tt.flags {
|
||||
flagSet[v] = true
|
||||
}
|
||||
// Run the test
|
||||
got, err := loadConfigWithSettings(tt.settings)
|
||||
got, err := loadConfigWithSettings(tt.settings, flagSet)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("loadConfigWithSettings() error = %v, wantErr %v", err, tt.wantErr)
|
||||
return
|
||||
@@ -77,7 +77,7 @@ func TestStartStopDoesNotCausePanic(t *testing.T) {
|
||||
botOne, err := NewFromSettings(&Settings{
|
||||
ConfigFile: config.TestFile,
|
||||
EnableDryRun: true,
|
||||
})
|
||||
}, make(map[string]bool))
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ func dryrunParamInteraction(param string) {
|
||||
return
|
||||
}
|
||||
|
||||
if !Bot.Settings.EnableDryRun && !flagSet["dryrun"] {
|
||||
if !Bot.Settings.EnableDryRun {
|
||||
log.Warnf(log.Global,
|
||||
"Command line argument '-%s' induces dry run mode."+
|
||||
" Set -dryrun=false if you wish to override this.",
|
||||
|
||||
@@ -183,13 +183,12 @@ func TestDryRunParamInteraction(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
// Now set dryrun mode to false (via flagset and the previously enabled
|
||||
// setting), enable exchange verbose mode and verify that verbose mode
|
||||
// Now set dryrun mode to true,
|
||||
// enable exchange verbose mode and verify that verbose mode
|
||||
// will be set on Bitfinex
|
||||
bot.Settings.EnableDryRun = false
|
||||
bot.Settings.EnableDryRun = true
|
||||
bot.Settings.CheckParamInteraction = true
|
||||
bot.Settings.EnableExchangeVerbose = true
|
||||
flagSet["dryrun"] = true
|
||||
if err = bot.LoadExchange(testExchange, false, nil); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
@@ -199,8 +198,8 @@ func TestDryRunParamInteraction(t *testing.T) {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if bot.Settings.EnableDryRun ||
|
||||
if !bot.Settings.EnableDryRun ||
|
||||
!exchCfg.Verbose {
|
||||
t.Error("dryrun should be false and verbose should be true")
|
||||
t.Error("dryrun should be true and verbose should be true")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user