[#493] cmd/node: Add .env file for tests
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
db7a7f9bd3
commit
25a13d3611
3 changed files with 56 additions and 16 deletions
|
@ -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)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
1
config/example/node.env
Normal file
|
@ -0,0 +1 @@
|
||||||
|
NEOFS_LOGGER_LEVEL=debug
|
Loading…
Reference in a new issue