diff --git a/teku/src/main/java/tech/pegasys/teku/cli/BeaconNodeCommand.java b/teku/src/main/java/tech/pegasys/teku/cli/BeaconNodeCommand.java index 47b3b405da3..4d5ca4bd89e 100644 --- a/teku/src/main/java/tech/pegasys/teku/cli/BeaconNodeCommand.java +++ b/teku/src/main/java/tech/pegasys/teku/cli/BeaconNodeCommand.java @@ -243,8 +243,12 @@ public int parse(final String[] args) { final AdditionalParamsProvider additionalParamsProvider = additionalParamsProvider(commandLine, configFile); - final Map additionalParams = - additionalParamsProvider.getAdditionalParams(potentialAdditionalParams); + final Map additionalParams; + try { + additionalParams = additionalParamsProvider.getAdditionalParams(potentialAdditionalParams); + } catch (ParameterException e) { + return handleParseException(e, args); + } // build new argument list by concatenating original args and the additional params final String[] enrichedArgs = diff --git a/teku/src/test/java/tech/pegasys/teku/cli/BeaconNodeCommandTest.java b/teku/src/test/java/tech/pegasys/teku/cli/BeaconNodeCommandTest.java index 25525f054a2..e00a3e385bf 100644 --- a/teku/src/test/java/tech/pegasys/teku/cli/BeaconNodeCommandTest.java +++ b/teku/src/test/java/tech/pegasys/teku/cli/BeaconNodeCommandTest.java @@ -93,6 +93,19 @@ public void unknownOptionShouldDisplayShortHelpMessage() { assertThat(str).doesNotContain("Default"); } + @Test + public void unknownOptionInConfigFileShouldDisplayShortHelpMessage() throws IOException { + final Path configFile = createInvalidConfigFile(); + final String[] args = {CONFIG_FILE_OPTION_NAME, configFile.toString()}; + + beaconNodeCommand.parse(args); + String str = getCommandLineOutput(); + assertThat(str).contains("Unknown option"); + assertThat(str).contains("To display full help:"); + assertThat(str).contains("--help"); + assertThat(str).doesNotContain("Default"); + } + @Test public void unmatchedOptionsNotAllowedAsOptionParameters() { final String[] args = {"--eth1-endpoints http://localhost:8545 --foo"}; @@ -320,7 +333,7 @@ public void shouldSetNatMethod() { } private Path createConfigFile() throws IOException { - final URL configFile = this.getClass().getResource("/complete_config.yaml"); + final URL configFile = BeaconNodeCommandTest.class.getResource("/complete_config.yaml"); final String updatedConfig = Resources.toString(configFile, UTF_8) .replace( @@ -329,6 +342,13 @@ private Path createConfigFile() throws IOException { return createTempFile(updatedConfig.getBytes(UTF_8)); } + private Path createInvalidConfigFile() throws IOException { + final URL configFile = BeaconNodeCommandTest.class.getResource("/complete_config.yaml"); + final String updatedConfig = + Resources.toString(configFile, UTF_8).replace("network:", "xnetwork:"); + return createTempFile(updatedConfig.getBytes(UTF_8)); + } + private String[] createCliArgs() { return new String[] { "--network",