Skip to content

Commit

Permalink
fix core config flag parsing where, in specific circumstances, the va…
Browse files Browse the repository at this point in the history
…lues from config.toml would be overwritten by defaults if any core.ip was provided as a cli flag
  • Loading branch information
ramin committed Jun 25, 2024
1 parent a357a3e commit b1913a7
Show file tree
Hide file tree
Showing 4 changed files with 161 additions and 8 deletions.
1 change: 1 addition & 0 deletions cmd/flags_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ func ParseNodeFlags(ctx context.Context, cmd *cobra.Command, network p2p.Network
if nodeConfig != "" {
// try to load config from given path
cfg, err := nodebuilder.LoadConfig(nodeConfig)

if err != nil {
return ctx, fmt.Errorf("cmd: while parsing '%s': %w", nodeConfigFlag, err)
}
Expand Down
9 changes: 7 additions & 2 deletions nodebuilder/core/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ import (
"github.com/celestiaorg/celestia-node/libs/utils"
)

const (
DefaultRPCPort = "26657"
DefaultGRPCPort = "9090"
)

var MetricsEnabled bool

// Config combines all configuration fields for managing the relationship with a Core node.
Expand All @@ -21,8 +26,8 @@ type Config struct {
func DefaultConfig() Config {
return Config{
IP: "",
RPCPort: "26657",
GRPCPort: "9090",
RPCPort: DefaultRPCPort,
GRPCPort: DefaultGRPCPort,
}
}

Expand Down
16 changes: 10 additions & 6 deletions nodebuilder/core/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@ func Flags() *flag.FlagSet {
)
flags.String(
coreRPCFlag,
"26657",
DefaultRPCPort,
"Set a custom RPC port for the core node connection. The --core.ip flag must also be provided.",
)
flags.String(
coreGRPCFlag,
"9090",
DefaultGRPCPort,
"Set a custom gRPC port for the core node connection. The --core.ip flag must also be provided.",
)
return flags
Expand All @@ -50,11 +50,15 @@ func ParseFlags(
return nil
}

rpc := cmd.Flag(coreRPCFlag).Value.String()
grpc := cmd.Flag(coreGRPCFlag).Value.String()
if cmd.Flag(coreRPCFlag).Changed {
rpc := cmd.Flag(coreRPCFlag).Value.String()
cfg.RPCPort = rpc
}
if cmd.Flag(coreGRPCFlag).Changed {
grpc := cmd.Flag(coreGRPCFlag).Value.String()
cfg.GRPCPort = grpc
}

cfg.IP = coreIP
cfg.RPCPort = rpc
cfg.GRPCPort = grpc
return cfg.Validate()
}
143 changes: 143 additions & 0 deletions nodebuilder/core/flags_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package core

import (
"testing"

"github.com/spf13/cobra"
"github.com/stretchr/testify/require"
)

func TestParseFlags(t *testing.T) {
tests := []struct {
name string
args []string
inputCfg Config // config that could be read from ctx
expectedCfg Config
expectError bool
}{
{
name: "no flags",
args: []string{},
inputCfg: Config{},
expectedCfg: Config{
IP: "",
RPCPort: "",
GRPCPort: "",
},
expectError: false,
},
{
name: "only core.ip",
args: []string{"--core.ip=127.0.0.1"},
inputCfg: Config{
RPCPort: DefaultRPCPort,
GRPCPort: DefaultGRPCPort,
},
expectedCfg: Config{
IP: "127.0.0.1",
RPCPort: DefaultRPCPort,
GRPCPort: DefaultGRPCPort,
},
expectError: false,
},
{
name: "no flags, values from input config.toml ",
args: []string{},
inputCfg: Config{
IP: "127.162.36.1",
RPCPort: "1234",
GRPCPort: "5678",
},
expectedCfg: Config{
IP: "127.162.36.1",
RPCPort: "1234",
GRPCPort: "5678",
},
expectError: false,
},
{
name: "only core.ip, with config.toml overridden defaults for ports",
args: []string{"--core.ip=127.0.0.1"},
inputCfg: Config{
RPCPort: "1234",
GRPCPort: "5678",
},
expectedCfg: Config{
IP: "127.0.0.1",
RPCPort: "1234",
GRPCPort: "5678",
},
expectError: false,
},
{
name: "core.ip and core.rpc.port",
args: []string{"--core.ip=127.0.0.1", "--core.rpc.port=12345"},
inputCfg: Config{
RPCPort: DefaultRPCPort,
GRPCPort: DefaultGRPCPort,
},
expectedCfg: Config{
IP: "127.0.0.1",
RPCPort: "12345",
GRPCPort: DefaultGRPCPort,
},
expectError: false,
},
{
name: "core.ip and core.grpc.port",
args: []string{"--core.ip=127.0.0.1", "--core.grpc.port=54321"},
inputCfg: Config{
RPCPort: DefaultRPCPort,
GRPCPort: DefaultGRPCPort,
},
expectedCfg: Config{
IP: "127.0.0.1",
RPCPort: DefaultRPCPort,
GRPCPort: "54321",
},
expectError: false,
},
{
name: "core.ip, core.rpc.port, and core.grpc.port",
args: []string{"--core.ip=127.0.0.1", "--core.rpc.port=12345", "--core.grpc.port=54321"},
expectedCfg: Config{
IP: "127.0.0.1",
RPCPort: "12345",
GRPCPort: "54321",
},
expectError: false,
},
{
name: "core.rpc.port without core.ip",
args: []string{"--core.rpc.port=12345"},
expectedCfg: Config{},
expectError: true,
},
{
name: "core.grpc.port without core.ip",
args: []string{"--core.grpc.port=54321"},
expectedCfg: Config{},
expectError: true,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cmd := &cobra.Command{}
flags := Flags()
cmd.Flags().AddFlagSet(flags)
cmd.SetArgs(tt.args)

err := cmd.Execute()
require.NoError(t, err)

err = ParseFlags(cmd, &tt.inputCfg)
if tt.expectError {
require.Error(t, err)
} else {
require.NoError(t, err)
require.Equal(t, tt.expectedCfg, tt.inputCfg)
}
})
}
}

0 comments on commit b1913a7

Please sign in to comment.