mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-06-28 17:34:17 -04:00
This commit improves the error cases when command line settings are found that are duplicates or conflict with special system properties.
This commit is contained in:
parent
6924c4e7de
commit
d94f06670a
3 changed files with 18 additions and 13 deletions
|
@ -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 {
|
||||
|
|
|
@ -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<String, String> 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);
|
||||
}
|
||||
|
|
|
@ -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]"));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue