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 60 additions and 9 deletions

View file

@ -137,6 +137,8 @@ func SetConfigCmd(cmd *cobra.Command, args []string) error {
return wCtx.AwaitTx() return wCtx.AwaitTx()
} }
const maxECSum = 256
func validateConfig(args map[string]any, forceFlag bool) error { func validateConfig(args map[string]any, forceFlag bool) error {
var sumEC int64 var sumEC int64
_, okData := args[netmap.MaxECDataCountConfig] _, okData := args[netmap.MaxECDataCountConfig]
@ -147,19 +149,34 @@ func validateConfig(args map[string]any, forceFlag bool) error {
} }
for k, v := range args { for k, v := range args {
value, ok := v.(int64) switch k {
if !ok || value < 0 { case netmap.ContainerFeeConfig, netmap.ContainerAliasFeeConfig,
return fmt.Errorf("%s must be >= 0, got %v", k, v) netmap.EpochDurationConfig, netmap.IrCandidateFeeConfig,
} netmap.MaxObjectSizeConfig, netmap.WithdrawFeeConfig,
netmap.MaxECDataCountConfig, netmap.MaxECParityCountConfig:
value, ok := v.(int64)
if !ok {
return fmt.Errorf("%s has an invalid type. Expected type: int", k)
}
if k == netmap.MaxECDataCountConfig || k == netmap.MaxECParityCountConfig { if value < 0 {
sumEC += value return fmt.Errorf("%s must be >= 0, got %v", k, v)
}
if k == netmap.MaxECDataCountConfig || k == netmap.MaxECParityCountConfig {
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 > maxECSum && !forceFlag {
return fmt.Errorf("the sum of %s and %s must be <= 256, got %d", return fmt.Errorf("the sum of %s and %s must be <= %d, got %d",
netmap.MaxECDataCountConfig, netmap.MaxECParityCountConfig, sumEC) netmap.MaxECDataCountConfig, netmap.MaxECParityCountConfig, maxECSum, sumEC)
} }
return nil return nil
} }

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))
}