frostfs-node/cmd/frostfs-node/config/calls_test.go

83 lines
2.0 KiB
Go

package config_test
import (
"os"
"strings"
"testing"
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config"
configtest "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/test"
configViper "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common/config"
"github.com/stretchr/testify/require"
)
func TestConfigCommon(t *testing.T) {
configtest.ForEachFileType("test/config", func(c *config.Config) {
val := c.Value("value")
require.NotNil(t, val)
val = c.Value("non-existent value")
require.Nil(t, val)
sub := c.Sub("section")
require.NotNil(t, sub)
const nonExistentSub = "non-existent sub-section"
val = c.Sub(nonExistentSub).Value("value")
require.Nil(t, val)
})
}
func TestConfigEnv(t *testing.T) {
const (
name = "name"
section = "section"
value = "some value"
)
envName := strings.ToUpper(
strings.Join([]string{config.EnvPrefix, section, name}, configViper.EnvSeparator))
err := os.Setenv(envName, value)
require.NoError(t, err)
c := configtest.EmptyConfig()
require.Equal(t, value, c.Sub(section).Value(name))
}
func TestConfig_SubValue(t *testing.T) {
configtest.ForEachFileType("test/config", func(c *config.Config) {
c = c.
Sub("section").
Sub("sub").
Sub("sub")
// get subsection 1
sub := c.Sub("sub1")
// get subsection 2
c.Sub("sub2")
// sub should not be corrupted
require.Equal(t, "val1", sub.Value("key"))
})
}
func TestConfig_SetDefault(t *testing.T) {
configtest.ForEachFileType("test/config", func(c *config.Config) {
c = c.Sub("with_default")
s := c.Sub("custom")
s.SetDefault(c.Sub("default"))
require.Equal(t, int64(42), config.Int(s, "missing"))
require.Equal(t, "b", config.String(s, "overridden"))
require.Equal(t, false, config.Bool(s, "overridden_with_default"))
// Default can be set only once.
s = s.Sub("sub")
require.Equal(t, int64(123), config.Int(s, "missing"))
require.Equal(t, "y", config.String(s, "overridden"))
})
}