Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion cli/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ import (
"gopkg.in/yaml.v3"
)

var errRelayConfiguredTwice = errors.New("relay is specified in both cli flags and config file")
var (
errRelayConfiguredTwice = errors.New("relay is specified in both cli flags and config file")
errNoRelaysSpecified = errors.New("no relays specified, provide via --relays and/or --config")
)

type RelayConfigYAML struct {
URL string `yaml:"url"`
Expand Down Expand Up @@ -136,6 +139,10 @@ func MergeRelayConfigs(relays []types.RelayEntry, configMap map[string]types.Rel
configs = append(configs, config)
}

if len(configs) == 0 {
return nil, errNoRelaysSpecified
}

return configs, nil
}

Expand Down
40 changes: 32 additions & 8 deletions cli/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -416,17 +416,41 @@ relays:
}

func TestMergeRelayConfigs_DuplicateDetection(t *testing.T) {
cliRelay, err := types.NewRelayEntry("https://0x9000009807ed12c1f08bf4e81c6da3ba8e3fc3d953898ce0102433094e5f22f21102ec057841fcb81978ed1ea0fa8246@relay.example.com")
relay, err := types.NewRelayEntry("https://0x9000009807ed12c1f08bf4e81c6da3ba8e3fc3d953898ce0102433094e5f22f21102ec057841fcb81978ed1ea0fa8246@relay.example.com")
require.NoError(t, err)

t.Run("Error when no relays in cli or config", func(t *testing.T) {
_, err := MergeRelayConfigs([]types.RelayEntry{}, map[string]types.RelayConfig{})
require.Error(t, err)
require.ErrorIs(t, err, errNoRelaysSpecified)
})

t.Run("Success with config only and empty cli relays", func(t *testing.T) {
configMap := map[string]types.RelayConfig{
relay.String(): {
RelayEntry: relay,
EnableTimingGames: true,
},
}
configs, err := MergeRelayConfigs([]types.RelayEntry{}, configMap)
require.NoError(t, err)
require.Len(t, configs, 1)
})

t.Run("Success with cli relays only and empty config map", func(t *testing.T) {
configs, err := MergeRelayConfigs([]types.RelayEntry{relay}, map[string]types.RelayConfig{})
require.NoError(t, err)
require.Len(t, configs, 1)
})

t.Run("Error when same relay in both CLI and config", func(t *testing.T) {
configMap := map[string]types.RelayConfig{
cliRelay.String(): {
RelayEntry: cliRelay,
relay.String(): {
RelayEntry: relay,
EnableTimingGames: true,
},
}
_, err := MergeRelayConfigs([]types.RelayEntry{cliRelay}, configMap)
_, err := MergeRelayConfigs([]types.RelayEntry{relay}, configMap)
require.Error(t, err)
require.Contains(t, err.Error(), "relay is specified in both cli flags and config file")
})
Expand All @@ -442,21 +466,21 @@ func TestMergeRelayConfigs_DuplicateDetection(t *testing.T) {
},
}

configs, err := MergeRelayConfigs([]types.RelayEntry{cliRelay}, configMap)
configs, err := MergeRelayConfigs([]types.RelayEntry{relay}, configMap)
require.NoError(t, err)
require.Len(t, configs, 2)
})

t.Run("Success with CLI only", func(t *testing.T) {
configs, err := MergeRelayConfigs([]types.RelayEntry{cliRelay}, map[string]types.RelayConfig{})
configs, err := MergeRelayConfigs([]types.RelayEntry{relay}, map[string]types.RelayConfig{})
require.NoError(t, err)
require.Len(t, configs, 1)
})

t.Run("Success with config only", func(t *testing.T) {
configMap := map[string]types.RelayConfig{
cliRelay.String(): {
RelayEntry: cliRelay,
relay.String(): {
RelayEntry: relay,
EnableTimingGames: true,
},
}
Expand Down
4 changes: 0 additions & 4 deletions cli/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,10 +161,6 @@ func setupRelays(cmd *cli.Command) (*RelaySetupResult, error) {
}
}

if len(relays) == 0 {
log.Fatal("no relays specified")
}

// load configuration via config file
var configMap map[string]serverTypes.RelayConfig
var timeoutGetHeaderMs uint64 = 950
Expand Down
Loading