Skip to content

Commit 16cc6cc

Browse files
authored
Feat/configtests (#6)
1 parent 9665eb5 commit 16cc6cc

5 files changed

Lines changed: 327 additions & 21 deletions

File tree

.serverdata/mh/Game.ini

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,3 @@ ServerLagReportColor2=
5454
ChatFeedWebhookURL=
5555
ChatFeedColor=
5656
ServerPassword=
57-

cmd/main.go

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ var saveParam string
2828
var profileParam string
2929

3030
func init() {
31-
flag.StringVar(&addressParam, "address", "localhost", "RCON address, excluding port")
32-
flag.UintVar(&portParam, "port", 7778, "RCON port")
31+
flag.StringVar(&addressParam, "address", config.DefaultAddr, "RCON address, excluding port")
32+
flag.UintVar(&portParam, "port", config.DefaultPort, "RCON port")
3333
flag.StringVar(&passwordParam, "pw", "", "RCON password, if not provided will attempt to load from env variables, if unavailable will prompt")
3434
flag.UintVar(&logLevelParam, "log", logger.LevelWarning, "sets log level (syslog severity tiers) for execution")
3535
flag.StringVar(&inputCmdParam, "cmd", "", "command to execute, if provided will not enter into interactive mode")
@@ -105,8 +105,17 @@ func Execute() {
105105
flag.Parse()
106106
logLevel := uint8(logLevelParam)
107107
logger.Setup(logLevel)
108-
109-
resolvedAddress, resolvedPort, resolvedPassword, err := config.Resolve(profileParam, addressParam, portParam, passwordParam)
108+
configBasePath, err := os.UserConfigDir()
109+
if err != nil {
110+
logger.Critical.Fatal(err)
111+
}
112+
resolvedAddress, resolvedPort, resolvedPassword, err := config.Resolve(
113+
configBasePath,
114+
profileParam,
115+
addressParam,
116+
portParam,
117+
passwordParam,
118+
)
110119
if err != nil {
111120
logger.Critical.Fatal(err)
112121
}
@@ -121,7 +130,7 @@ func Execute() {
121130

122131
// TODO: consider moving to config lib
123132
if saveParam != "" {
124-
cfg, loadErr := config.Load()
133+
cfg, loadErr := config.Load(configBasePath)
125134
if loadErr != nil {
126135
logger.Critical.Fatal(errors.Join(errors.New("failed to load config for saving"), loadErr))
127136
}
@@ -142,10 +151,10 @@ func Execute() {
142151
}
143152

144153
cfg.SetProfile(saveParam, newProfile)
145-
if saveErr := cfg.Save(); saveErr != nil {
154+
if saveErr := cfg.Save(configBasePath); saveErr != nil {
146155
logger.Critical.Fatal(errors.Join(errors.New("failed to save config file"), saveErr))
147156
}
148-
configFilePath, pathErr := config.GetConfigPath()
157+
configFilePath, pathErr := config.BuildConfigPath(configBasePath)
149158
if pathErr != nil {
150159
logger.Critical.Fatal(errors.Join(errors.New("failed to get config file path for display"), pathErr))
151160
}

internal/config/config.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,22 @@ type Config struct {
2222
const (
2323
configDirName = "tcprcon"
2424
configFileName = "config.json"
25+
DefaultAddr = "localhost"
26+
DefaultPort = 7778
2527
)
2628

27-
func GetConfigPath() (string, error) {
28-
configDir, err := os.UserConfigDir()
29-
if err != nil {
30-
return "", err
29+
func BuildConfigPath(basePath string) (string, error) {
30+
if basePath == "" {
31+
return "", ErrUndefinedConfigBasePath
3132
}
3233

33-
fullPath := filepath.Join(configDir, configDirName)
34+
fullPath := filepath.Join(basePath, configDirName)
3435
return filepath.Join(fullPath, configFileName), nil
3536
}
3637

37-
func Load() (*Config, error) {
38-
path, err := GetConfigPath()
38+
func Load(baseConfigPath string) (*Config, error) {
39+
40+
path, err := BuildConfigPath(baseConfigPath)
3941
if err != nil {
4042
return nil, err
4143
}
@@ -62,8 +64,8 @@ func Load() (*Config, error) {
6264
return &cfg, nil
6365
}
6466

65-
func (source *Config) Save() error {
66-
path, err := GetConfigPath()
67+
func (source *Config) Save(configBasePath string) error {
68+
path, err := BuildConfigPath(configBasePath)
6769
if err != nil {
6870
return err
6971
}
@@ -97,8 +99,8 @@ func (source *Config) SetProfile(name string, p Profile) {
9799
source.Profiles[name] = p
98100
}
99101

100-
func Resolve(profileName string, addrFlag string, portFlag uint, pwFlag string) (string, uint, string, error) {
101-
cfg, err := Load()
102+
func Resolve(configBasePath string, profileName string, addrFlag string, portFlag uint, pwFlag string) (string, uint, string, error) {
103+
cfg, err := Load(configBasePath)
102104
if err != nil {
103105
return "", 0, "", err
104106
}
@@ -116,10 +118,10 @@ func Resolve(profileName string, addrFlag string, portFlag uint, pwFlag string)
116118
// only override if the flags are still at their default values
117119
// NOTE: this logic assumes defaults are "localhost", 7778, and ""
118120
// TODO: this "default" handling can introduce bugs, rethink this at some point
119-
if finalAddr == "localhost" && p.Address != "" {
121+
if finalAddr == DefaultAddr && p.Address != "" {
120122
finalAddr = p.Address
121123
}
122-
if finalPort == 7778 && p.Port != 0 {
124+
if finalPort == DefaultPort && p.Port != 0 {
123125
finalPort = p.Port
124126
}
125127
if finalPw == "" && p.Password != "" {

0 commit comments

Comments
 (0)