refactor(server): audit QA (backport #21442) (#21485)

This commit is contained in:
mergify[bot]
2024-08-30 19:06:25 +02:00
committed by GitHub
parent f6a91e90fe
commit e3c86d1537
4 changed files with 165 additions and 17 deletions
+4 -3
View File
@@ -362,9 +362,10 @@ func QueryBlockResultsCmd() *cobra.Command {
func BootstrapStateCmd[T types.Application](appCreator types.AppCreator[T]) *cobra.Command {
cmd := &cobra.Command{
Use: "bootstrap-state",
Short: "Bootstrap CometBFT state at an arbitrary block height using a light client",
Args: cobra.NoArgs,
Use: "bootstrap-state",
Short: "Bootstrap CometBFT state at an arbitrary block height using a light client",
Args: cobra.NoArgs,
Example: fmt.Sprintf("%s bootstrap-state --height 1000000", version.AppName),
RunE: func(cmd *cobra.Command, args []string) error {
serverCtx := GetServerContextFromCmd(cmd)
logger := log.NewLogger(cmd.OutOrStdout())
+53
View File
@@ -10,6 +10,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
pruningtypes "cosmossdk.io/store/pruning/types"
sdk "github.com/cosmos/cosmos-sdk/types"
)
@@ -21,15 +23,29 @@ func TestDefaultConfig(t *testing.T) {
func TestGetAndSetMinimumGas(t *testing.T) {
cfg := DefaultConfig()
// Test case 1: Single coin
input := sdk.DecCoins{sdk.NewInt64DecCoin("foo", 5)}
cfg.SetMinGasPrices(input)
require.Equal(t, "5.000000000000000000foo", cfg.MinGasPrices)
require.EqualValues(t, cfg.GetMinGasPrices(), input)
// Test case 2: Multiple coins
input = sdk.DecCoins{sdk.NewInt64DecCoin("bar", 1), sdk.NewInt64DecCoin("foo", 5)}
cfg.SetMinGasPrices(input)
require.Equal(t, "1.000000000000000000bar,5.000000000000000000foo", cfg.MinGasPrices)
require.EqualValues(t, cfg.GetMinGasPrices(), input)
// Test case 4: Empty DecCoins
input = sdk.DecCoins{}
cfg.SetMinGasPrices(input)
require.Equal(t, "", cfg.MinGasPrices)
require.EqualValues(t, cfg.GetMinGasPrices(), input)
// Test case 5: Invalid string (should panic)
cfg.MinGasPrices = "invalid,gas,prices"
require.Panics(t, func() {
cfg.GetMinGasPrices()
}, "GetMinGasPrices should panic with invalid input")
}
func TestIndexEventsMarshalling(t *testing.T) {
@@ -238,3 +254,40 @@ func TestAppConfig(t *testing.T) {
require.NoError(t, v.Unmarshal(appCfg))
require.EqualValues(t, appCfg, defAppConfig)
}
func TestValidateBasic(t *testing.T) {
cfg := DefaultConfig()
// Test case 1: Valid MinGasPrices
cfg.MinGasPrices = "0.01stake"
err := cfg.ValidateBasic()
require.NoError(t, err)
// Test case 2: Default configuration (MinGasPrices is empty)
cfg.MinGasPrices = ""
err = cfg.ValidateBasic()
require.Error(t, err)
require.Contains(t, err.Error(), "set min gas price in app.toml or flag or env variable")
// Test case 3: Invalid pruning and state sync combination
cfg = DefaultConfig()
cfg.MinGasPrices = "0.01stake"
cfg.Pruning = pruningtypes.PruningOptionEverything
cfg.StateSync.SnapshotInterval = 1000
err = cfg.ValidateBasic()
require.Error(t, err)
require.Contains(t, err.Error(), "cannot enable state sync snapshots with 'everything' pruning setting")
}
func TestGetConfig(t *testing.T) {
v := viper.New()
v.Set("minimum-gas-prices", "0.01stake")
v.Set("api.enable", true)
v.Set("grpc.max-recv-msg-size", 5*1024*1024)
cfg, err := GetConfig(v)
require.NoError(t, err)
require.Equal(t, "0.01stake", cfg.MinGasPrices)
require.True(t, cfg.API.Enable)
require.Equal(t, 5*1024*1024, cfg.GRPC.MaxRecvMsgSize)
}
+10 -13
View File
@@ -126,7 +126,7 @@ type StartCmdOptions[T types.Application] struct {
// AddFlags add custom flags to start cmd
AddFlags func(cmd *cobra.Command)
// StartCommandHandler can be used to customize the start command handler
StartCommandHandler func(svrCtx *Context, clientCtx client.Context, appCreator types.AppCreator[T], inProcessConsensus bool, opts StartCmdOptions[T]) error
StartCommandHandler func(svrCtx *Context, clientCtx client.Context, appCreator types.AppCreator[T], withCMT bool, opts StartCmdOptions[T]) error
}
// StartCmd runs the service passed in, either stand-alone or in-process with
@@ -415,31 +415,28 @@ func getAndValidateConfig(svrCtx *Context) (serverconfig.Config, error) {
// getGenDocProvider returns a function which returns the genesis doc from the genesis file.
func getGenDocProvider(cfg *cmtcfg.Config) func() (node.ChecksummedGenesisDoc, error) {
return func() (node.ChecksummedGenesisDoc, error) {
defaultGenesisDoc := node.ChecksummedGenesisDoc{
Sha256Checksum: []byte{},
}
appGenesis, err := genutiltypes.AppGenesisFromFile(cfg.GenesisFile())
if err != nil {
return node.ChecksummedGenesisDoc{
Sha256Checksum: []byte{},
}, err
return defaultGenesisDoc, err
}
gen, err := appGenesis.ToGenesisDoc()
if err != nil {
return node.ChecksummedGenesisDoc{
Sha256Checksum: []byte{},
}, err
return defaultGenesisDoc, err
}
genbz, err := gen.AppState.MarshalJSON()
if err != nil {
return node.ChecksummedGenesisDoc{
Sha256Checksum: []byte{},
}, err
return defaultGenesisDoc, err
}
bz, err := json.Marshal(genbz)
if err != nil {
return node.ChecksummedGenesisDoc{
Sha256Checksum: []byte{},
}, err
return defaultGenesisDoc, err
}
sum := sha256.Sum256(bz)