[#493] cmd/node: Add .env file for tests

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2021-06-01 12:47:01 +03:00 committed by Alex Vanin
parent db7a7f9bd3
commit 25a13d3611
3 changed files with 56 additions and 16 deletions

View file

@ -1,34 +1,30 @@
package loggerconfig_test package loggerconfig_test
import ( import (
"os"
"testing" "testing"
"github.com/nspcc-dev/neofs-node/cmd/neofs-node/config" "github.com/nspcc-dev/neofs-node/cmd/neofs-node/config"
"github.com/nspcc-dev/neofs-node/cmd/neofs-node/config/internal"
loggerconfig "github.com/nspcc-dev/neofs-node/cmd/neofs-node/config/logger" loggerconfig "github.com/nspcc-dev/neofs-node/cmd/neofs-node/config/logger"
configtest "github.com/nspcc-dev/neofs-node/cmd/neofs-node/config/test" configtest "github.com/nspcc-dev/neofs-node/cmd/neofs-node/config/test"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestLoggerSection_Level(t *testing.T) { func TestLoggerSection_Level(t *testing.T) {
configtest.ForEachFileType("../../../../config/example/node", func(c *config.Config) { t.Run("defaults", func(t *testing.T) {
v := loggerconfig.Level(c)
require.Equal(t, "debug", v)
})
v := loggerconfig.Level(configtest.EmptyConfig()) v := loggerconfig.Level(configtest.EmptyConfig())
require.Equal(t, loggerconfig.LevelDefault, v) require.Equal(t, loggerconfig.LevelDefault, v)
})
const path = "../../../../config/example/node"
var fileConfigTest = func(c *config.Config) {
v := loggerconfig.Level(c)
require.Equal(t, "debug", v)
}
configtest.ForEachFileType(path, fileConfigTest)
t.Run("ENV", func(t *testing.T) { t.Run("ENV", func(t *testing.T) {
// TODO: read from file configtest.ForEnvFileType(path, fileConfigTest)
err := os.Setenv(
internal.Env("logger", "level"),
"debug",
)
require.NoError(t, err)
v := loggerconfig.Level(configtest.EmptyConfig())
require.Equal(t, "debug", v)
}) })
} }

View file

@ -1,15 +1,30 @@
package configtest package configtest
import "github.com/nspcc-dev/neofs-node/cmd/neofs-node/config" import (
"bufio"
"os"
"strings"
"github.com/nspcc-dev/neofs-node/cmd/neofs-node/config"
)
func fromFile(path string) *config.Config { func fromFile(path string) *config.Config {
var p config.Prm var p config.Prm
os.Clearenv() // ENVs have priority over config files so we do this in tests
return config.New(p, return config.New(p,
config.WithConfigFile(path), 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)) { func forEachFile(paths []string, f func(*config.Config)) {
for i := range paths { for i := range paths {
f(fromFile(paths[i])) f(fromFile(paths[i]))
@ -26,9 +41,37 @@ func ForEachFileType(pref string, f func(*config.Config)) {
}, f) }, 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. // EmptyConfig returns config without any values and sections.
func EmptyConfig() *config.Config { func EmptyConfig() *config.Config {
var p config.Prm var p config.Prm
return config.New(p) 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.Split(scanner.Text(), "=")
if len(pair) != 2 {
continue
}
err = os.Setenv(pair[0], pair[1])
if err != nil {
panic("can't set environment variable")
}
}
}

1
config/example/node.env Normal file
View file

@ -0,0 +1 @@
NEOFS_LOGGER_LEVEL=debug