mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 13:28:01 -05:00
fix: Multiple network flags should prevent the BN to start (#14169)
* Implement Initial Logic * Include check in main.go * Add tests for multiple flags * remove usage of append * remove config/features dependency * Move ValidateNetworkFlags to config/features * Nit * removed NetworkFlags from cmd * remove usage of empty string literal * add comment * add flag validation to prysctl validator-exit --------- Co-authored-by: Manu NALEPA <enalepa@offchainlabs.com>
This commit is contained in:
@@ -212,6 +212,10 @@ func before(ctx *cli.Context) error {
|
||||
return errors.Wrap(err, "failed to set max fd limits")
|
||||
}
|
||||
|
||||
if err := features.ValidateNetworkFlags(ctx); err != nil {
|
||||
return errors.Wrap(err, "provided multiple network flags")
|
||||
}
|
||||
|
||||
return cmd.ValidateNoArgs(ctx)
|
||||
}
|
||||
|
||||
|
||||
@@ -175,6 +175,9 @@ var Commands = []*cli.Command{
|
||||
if err := cmd.LoadFlagsFromConfig(cliCtx, cliCtx.Command.Flags); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := features.ValidateNetworkFlags(cliCtx); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tos.VerifyTosAcceptedOrPrompt(cliCtx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -193,6 +193,10 @@ func main() {
|
||||
return errors.Wrap(err, "failed to setup debug")
|
||||
}
|
||||
|
||||
if err := features.ValidateNetworkFlags(ctx); err != nil {
|
||||
return errors.Wrap(err, "provided multiple network flags")
|
||||
}
|
||||
|
||||
return cmd.ValidateNoArgs(ctx)
|
||||
},
|
||||
After: func(ctx *cli.Context) error {
|
||||
|
||||
@@ -20,6 +20,8 @@ The process for implementing new features using this package is as follows:
|
||||
package features
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@@ -337,3 +339,25 @@ func logDisabled(flag cli.DocGenerationFlag) {
|
||||
}
|
||||
log.WithField(name, flag.GetUsage()).Warn(disabledFeatureFlag)
|
||||
}
|
||||
|
||||
// ValidateNetworkFlags validates provided flags and
|
||||
// prevents beacon node or validator to start
|
||||
// if more than one network flag is provided
|
||||
func ValidateNetworkFlags(ctx *cli.Context) error {
|
||||
networkFlagsCount := 0
|
||||
for _, flag := range NetworkFlags {
|
||||
if ctx.IsSet(flag.Names()[0]) {
|
||||
networkFlagsCount++
|
||||
if networkFlagsCount > 1 {
|
||||
// using a forLoop so future addition
|
||||
// doesn't require changes in this function
|
||||
var flagNames []string
|
||||
for _, flag := range NetworkFlags {
|
||||
flagNames = append(flagNames, "--"+flag.Names()[0])
|
||||
}
|
||||
return fmt.Errorf("cannot use more than one network flag at the same time. Possible network flags are: %s", strings.Join(flagNames, ", "))
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -46,3 +46,50 @@ func TestConfigureBeaconConfig(t *testing.T) {
|
||||
c := Get()
|
||||
assert.Equal(t, true, c.EnableSlasher)
|
||||
}
|
||||
|
||||
func TestValidateNetworkFlags(t *testing.T) {
|
||||
// Define the test cases
|
||||
tests := []struct {
|
||||
name string
|
||||
args []string
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "No network flags",
|
||||
args: []string{"command"},
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "One network flag",
|
||||
args: []string{"command", "--sepolia"},
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "Two network flags",
|
||||
args: []string{"command", "--sepolia", "--holesky"},
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "All network flags",
|
||||
args: []string{"command", "--sepolia", "--holesky", "--mainnet"},
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
// Create a new CLI app with the ValidateNetworkFlags function as the Before action
|
||||
app := &cli.App{
|
||||
Before: ValidateNetworkFlags,
|
||||
Action: func(c *cli.Context) error {
|
||||
return nil
|
||||
},
|
||||
// Set the network flags for the app
|
||||
Flags: NetworkFlags,
|
||||
}
|
||||
err := app.Run(tt.args)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("ValidateNetworkFlags() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user