frostfs-node/cmd/neofs-node/config/test/config.go
Elizaveta Chichindaeva cc7a723d77 [#1320] English Check
Signed-off-by: Elizaveta Chichindaeva <elizaveta@nspcc.ru>
2022-05-11 10:40:02 +03:00

80 lines
1.5 KiB
Go

package configtest
import (
"bufio"
"os"
"strings"
"github.com/nspcc-dev/neofs-node/cmd/neofs-node/config"
)
func fromFile(path string) *config.Config {
var p config.Prm
os.Clearenv() // ENVs have priority over config files, so we do this in tests
return config.New(p,
config.WithConfigFile(path),
)
}
func fromEnvFile(path string) *config.Config {
var p config.Prm
loadEnv(path) // github.com/joho/godotenv can do that as well
return config.New(p)
}
func forEachFile(paths []string, f func(*config.Config)) {
for i := range paths {
f(fromFile(paths[i]))
}
}
// ForEachFileType passes configs read from next files:
// - `<pref>.yaml`;
// - `<pref>.json`.
func ForEachFileType(pref string, f func(*config.Config)) {
forEachFile([]string{
pref + ".yaml",
pref + ".json",
}, f)
}
// ForEnvFileType creates config from `<pref>.env` file.
func ForEnvFileType(pref string, f func(*config.Config)) {
f(fromEnvFile(pref + ".env"))
}
// EmptyConfig returns config without any values and sections.
func EmptyConfig() *config.Config {
var p config.Prm
return config.New(p)
}
// loadEnv reads .env file, parses `X=Y` records and sets OS ENVs.
func loadEnv(path string) {
f, err := os.Open(path)
if err != nil {
panic("can't open .env file")
}
defer f.Close()
scanner := bufio.NewScanner(f)
for scanner.Scan() {
pair := strings.SplitN(scanner.Text(), "=", 2)
if len(pair) != 2 {
continue
}
pair[1] = strings.Trim(pair[1], `"`)
err = os.Setenv(pair[0], pair[1])
if err != nil {
panic("can't set environment variable")
}
}
}