From 1aa88159ca566c2308f6414975934873431f8266 Mon Sep 17 00:00:00 2001 From: Leonard Lyubich Date: Fri, 21 May 2021 20:28:06 +0300 Subject: [PATCH] [#493] node/config: Change Sub implementation In some cases viper doesn't interpret `section.value` as a subsection with `section` name, but value is value still can be accessed through full pathname. Fix `Config.Sub` method implementation in order to always interpret configuration like described above as a subsection. From now method never returns nil, therefore an additional check has been removed from the `Value` method. Signed-off-by: Leonard Lyubich --- cmd/neofs-node/config/calls.go | 19 +++++++++---------- cmd/neofs-node/config/calls_test.go | 3 --- cmd/neofs-node/config/config.go | 10 ++++++++-- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/cmd/neofs-node/config/calls.go b/cmd/neofs-node/config/calls.go index 1541557e..56ffd437 100644 --- a/cmd/neofs-node/config/calls.go +++ b/cmd/neofs-node/config/calls.go @@ -1,14 +1,17 @@ package config import ( - "github.com/spf13/viper" + "strings" ) -// Sub returns sub-section of the Config by name. +// Sub returns subsection of the Config by name. +// +// Returns nil if subsection if missing. func (x *Config) Sub(name string) *Config { - return (*Config)( - (*viper.Viper)(x).Sub(name), - ) + return &Config{ + v: x.v, + path: append(x.path, name), + } } // Value returns configuration value by name. @@ -20,9 +23,5 @@ func (x *Config) Sub(name string) *Config { // // Returns nil if config is nil. func (x *Config) Value(name string) interface{} { - if x != nil { - return (*viper.Viper)(x).Get(name) - } - - return nil + return x.v.Get(strings.Join(append(x.path, name), separator)) } diff --git a/cmd/neofs-node/config/calls_test.go b/cmd/neofs-node/config/calls_test.go index 61d91250..e6da971b 100644 --- a/cmd/neofs-node/config/calls_test.go +++ b/cmd/neofs-node/config/calls_test.go @@ -21,9 +21,6 @@ func TestConfigCommon(t *testing.T) { const nonExistentSub = "non-existent sub-section" - sub = c.Sub(nonExistentSub) - require.Nil(t, sub) - val = c.Sub(nonExistentSub).Value("value") require.Nil(t, val) }) diff --git a/cmd/neofs-node/config/config.go b/cmd/neofs-node/config/config.go index 2a560fd1..d3b06d30 100644 --- a/cmd/neofs-node/config/config.go +++ b/cmd/neofs-node/config/config.go @@ -13,7 +13,11 @@ import ( // Sub-trees are named configuration sub-sections, // leaves are named configuration values. // Names are of string type. -type Config viper.Viper +type Config struct { + v *viper.Viper + + path []string +} const ( separator = "." @@ -49,5 +53,7 @@ func New(_ Prm, opts ...Option) *Config { } } - return (*Config)(v) + return &Config{ + v: v, + } }