diff --git a/distribution/tools/server-cli/src/test/java/org/elasticsearch/server/cli/ServerCliTests.java b/distribution/tools/server-cli/src/test/java/org/elasticsearch/server/cli/ServerCliTests.java index bacc89548c9a..41ed78669032 100644 --- a/distribution/tools/server-cli/src/test/java/org/elasticsearch/server/cli/ServerCliTests.java +++ b/distribution/tools/server-cli/src/test/java/org/elasticsearch/server/cli/ServerCliTests.java @@ -185,7 +185,7 @@ public class ServerCliTests extends CommandTestCase { } public void testElasticsearchSettingCanNotBeDuplicated() throws Exception { - assertUsage(containsString("setting [foo] already set, saw [bar] and [baz]"), "-E", "foo=bar", "-E", "foo=baz"); + assertUsage(containsString("setting [foo] set twice via command line -E"), "-E", "foo=bar", "-E", "foo=baz"); } public void testUnknownOption() throws Exception { diff --git a/server/src/main/java/org/elasticsearch/common/cli/EnvironmentAwareCommand.java b/server/src/main/java/org/elasticsearch/common/cli/EnvironmentAwareCommand.java index 4aebb0ef0117..2380463ef461 100644 --- a/server/src/main/java/org/elasticsearch/common/cli/EnvironmentAwareCommand.java +++ b/server/src/main/java/org/elasticsearch/common/cli/EnvironmentAwareCommand.java @@ -84,13 +84,7 @@ public abstract class EnvironmentAwareCommand extends Command { throw new UserException(ExitCodes.USAGE, "setting [" + kvp.key + "] must not be empty"); } if (settings.containsKey(kvp.key)) { - final String message = String.format( - Locale.ROOT, - "setting [%s] already set, saw [%s] and [%s]", - kvp.key, - settings.get(kvp.key), - kvp.value - ); + final String message = String.format(Locale.ROOT, "setting [%s] set twice via command line -E", kvp.key); throw new UserException(ExitCodes.USAGE, message); } settings.put(kvp.key, kvp.value); @@ -133,18 +127,17 @@ public abstract class EnvironmentAwareCommand extends Command { final Map settings, final String setting, final String key - ) { + ) throws UserException { final String value = sysprops.get(key); if (value != null) { if (settings.containsKey(setting)) { final String message = String.format( Locale.ROOT, - "duplicate setting [%s] found via command-line [%s] and system property [%s]", + "setting [%s] found via command-line -E and system property [%s]", setting, - settings.get(setting), - value + key ); - throw new IllegalArgumentException(message); + throw new UserException(ExitCodes.USAGE, message); } else { settings.put(setting, value); } diff --git a/server/src/test/java/org/elasticsearch/common/cli/EnvironmentAwareCommandTests.java b/server/src/test/java/org/elasticsearch/common/cli/EnvironmentAwareCommandTests.java index 0295cb731a58..0a3e2cdf9bb5 100644 --- a/server/src/test/java/org/elasticsearch/common/cli/EnvironmentAwareCommandTests.java +++ b/server/src/test/java/org/elasticsearch/common/cli/EnvironmentAwareCommandTests.java @@ -16,6 +16,7 @@ import org.elasticsearch.cli.Command; import org.elasticsearch.cli.CommandTestCase; import org.elasticsearch.cli.ProcessInfo; import org.elasticsearch.cli.Terminal; +import org.elasticsearch.cli.UserException; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.env.Environment; import org.junit.Before; @@ -127,4 +128,15 @@ public class EnvironmentAwareCommandTests extends CommandTestCase { }; execute("-Esimple.setting=original"); } + + public void testDuplicateCommandLineSetting() { + var e = expectThrows(UserException.class, () -> execute("-E", "my.setting=foo", "-E", "my.setting=bar")); + assertThat(e.getMessage(), equalTo("setting [my.setting] set twice via command line -E")); + } + + public void testConflictingPathCommandLineSettingWithSysprop() { + sysprops.put("es.path.data", "foo"); + var e = expectThrows(UserException.class, () -> execute("-E", "path.data=bar")); + assertThat(e.getMessage(), equalTo("setting [path.data] found via command-line -E and system property [es.path.data]")); + } }