adm/morph: Fix set-config parameter validation #1167

Merged
fyrchik merged 2 commits from achuprov/frostfs-node:bugfix/set-config-error into master 2024-06-11 15:15:27 +00:00
2 changed files with 55 additions and 6 deletions
Showing only changes of commit 4331bd1143 - Show all commits

View file

@ -147,14 +147,29 @@ func validateConfig(args map[string]any, forceFlag bool) error {
} }
for k, v := range args { for k, v := range args {
switch k {
case netmap.ContainerFeeConfig, netmap.ContainerAliasFeeConfig,
netmap.EpochDurationConfig, netmap.IrCandidateFeeConfig,
fyrchik marked this conversation as resolved Outdated

Why don't we cast it inside case branches? The results are only used there.

Why don't we cast it inside `case` branches? The results are only used there.

fixed

fixed
netmap.MaxObjectSizeConfig, netmap.WithdrawFeeConfig,
netmap.MaxECDataCountConfig, netmap.MaxECParityCountConfig:
value, ok := v.(int64) value, ok := v.(int64)
if !ok || value < 0 { if !ok {
return fmt.Errorf("%s has an invalid type. Expected type: int", k)
}
if value < 0 {
return fmt.Errorf("%s must be >= 0, got %v", k, v) return fmt.Errorf("%s must be >= 0, got %v", k, v)
} }
if k == netmap.MaxECDataCountConfig || k == netmap.MaxECParityCountConfig { if k == netmap.MaxECDataCountConfig || k == netmap.MaxECParityCountConfig {
sumEC += value sumEC += value
} }
case netmap.HomomorphicHashingDisabledKey, netmap.MaintenanceModeAllowedConfig:
_, ok := v.(bool)
if !ok {
return fmt.Errorf("%s has an invalid type. Expected type: bool", k)
}
}
} }
if sumEC > 256 && !forceFlag { if sumEC > 256 && !forceFlag {

View file

@ -0,0 +1,34 @@
package config
import (
"testing"
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/netmap"
"github.com/stretchr/testify/require"
)
func Test_ValidateConfig(t *testing.T) {
testArgs := make(map[string]any)
testArgs[netmap.MaxECDataCountConfig] = int64(11)
require.Error(t, validateConfig(testArgs, false))
testArgs[netmap.MaxECParityCountConfig] = int64(256)
require.Error(t, validateConfig(testArgs, false))
require.NoError(t, validateConfig(testArgs, true))
testArgs[netmap.MaxECParityCountConfig] = int64(-1)
require.Error(t, validateConfig(testArgs, false))
testArgs[netmap.MaxECParityCountConfig] = int64(55)
require.NoError(t, validateConfig(testArgs, false))
testArgs[netmap.HomomorphicHashingDisabledKey] = "1"
require.Error(t, validateConfig(testArgs, false))
testArgs[netmap.HomomorphicHashingDisabledKey] = true
require.NoError(t, validateConfig(testArgs, false))
testArgs["not-well-known-configuration-key"] = "key"
require.NoError(t, validateConfig(testArgs, false))
}