You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2018/03/21 04:10:58 UTC
ignite git commit: IGNITE-7864 Control utility: Added confirm on
dangerous operations.
Repository: ignite
Updated Branches:
refs/heads/master 70a3ae9d9 -> a50f5f71e
IGNITE-7864 Control utility: Added confirm on dangerous operations.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a50f5f71
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a50f5f71
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a50f5f71
Branch: refs/heads/master
Commit: a50f5f71ef20cbb26437197c7a7ea61e499f4db9
Parents: 70a3ae9
Author: Sergey Kosarev <ma...@gmail.com>
Authored: Wed Mar 21 11:11:01 2018 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Wed Mar 21 11:11:01 2018 +0700
----------------------------------------------------------------------
.../ignite/internal/commandline/Arguments.java | 22 +-
.../ignite/internal/commandline/Command.java | 65 ++++
.../internal/commandline/CommandHandler.java | 369 ++++++++++++-------
.../commandline/CommandHandlerParsingTest.java | 28 +-
.../ignite/util/GridCommandHandlerTest.java | 98 +++--
5 files changed, 383 insertions(+), 199 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/a50f5f71/modules/core/src/main/java/org/apache/ignite/internal/commandline/Arguments.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/Arguments.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/Arguments.java
index 6a9a3f7..23c8eec 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/Arguments.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/Arguments.java
@@ -22,7 +22,7 @@ package org.apache.ignite.internal.commandline;
*/
public class Arguments {
/** Command. */
- private String cmd;
+ private Command cmd;
/** Host. */
private String host;
@@ -36,6 +36,9 @@ public class Arguments {
/** Password. */
private String pwd;
+ /** Force option is used for auto confirmation. */
+ private boolean force;
+
/**
* Action for baseline command.
*/
@@ -54,9 +57,12 @@ public class Arguments {
* @param pwd Password.
* @param baselineAct Baseline action.
* @param baselineArgs Baseline args.
+ * @param force Force flag.
*/
- public Arguments(String cmd, String host, String port, String user, String pwd, String baselineAct,
- String baselineArgs) {
+ public Arguments(Command cmd, String host, String port, String user, String pwd,
+ String baselineAct, String baselineArgs,
+ boolean force
+ ) {
this.cmd = cmd;
this.host = host;
this.port = port;
@@ -64,12 +70,13 @@ public class Arguments {
this.pwd = pwd;
this.baselineAct = baselineAct;
this.baselineArgs = baselineArgs;
+ this.force = force;
}
/**
* @return command
*/
- public String command() {
+ public Command command() {
return cmd;
}
@@ -114,4 +121,11 @@ public class Arguments {
public String baselineArguments() {
return baselineArgs;
}
+
+ /**
+ * @return Force option.
+ */
+ public boolean force() {
+ return force;
+ }
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a50f5f71/modules/core/src/main/java/org/apache/ignite/internal/commandline/Command.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/Command.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/Command.java
new file mode 100644
index 0000000..e73a24f
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/Command.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.commandline;
+
+/**
+ * Command.
+ */
+public enum Command {
+ /** */
+ ACTIVATE("--activate"),
+
+ /** */
+ DEACTIVATE("--deactivate"),
+
+ /** */
+ STATE("--state"),
+
+ /** */
+ BASELINE("--baseline");
+
+ /** */
+ private final String text;
+
+ /**
+ * @param text Text.
+ */
+ Command(String text) {
+ this.text = text;
+ }
+
+ /**
+ * @param text Command text.
+ * @return Command for the text.
+ */
+ public static Command of(String text) {
+ for (Command cmd : Command.values()) {
+ if (cmd.text().equalsIgnoreCase(text))
+ return cmd;
+ }
+
+ return null;
+ }
+
+ /**
+ * @return Command text.
+ */
+ public String text() {
+ return text;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a50f5f71/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
index 5895ad2..5993f59 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
@@ -23,6 +23,7 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Scanner;
import org.apache.ignite.internal.client.GridClient;
import org.apache.ignite.internal.client.GridClientAuthenticationException;
import org.apache.ignite.internal.client.GridClientClosedException;
@@ -50,6 +51,10 @@ import org.jetbrains.annotations.NotNull;
import static org.apache.ignite.internal.IgniteVersionUtils.ACK_VER_STR;
import static org.apache.ignite.internal.IgniteVersionUtils.COPYRIGHT;
+import static org.apache.ignite.internal.commandline.Command.ACTIVATE;
+import static org.apache.ignite.internal.commandline.Command.BASELINE;
+import static org.apache.ignite.internal.commandline.Command.DEACTIVATE;
+import static org.apache.ignite.internal.commandline.Command.STATE;
import static org.apache.ignite.internal.visor.baseline.VisorBaselineOperation.ADD;
import static org.apache.ignite.internal.visor.baseline.VisorBaselineOperation.COLLECT;
import static org.apache.ignite.internal.visor.baseline.VisorBaselineOperation.REMOVE;
@@ -88,6 +93,9 @@ public class CommandHandler {
private static final String BASELINE_REMOVE = "remove";
/** */
+ private static final String BASELINE_COLLECT = "collect";
+
+ /** */
private static final String BASELINE_SET = "set";
/** */
@@ -96,32 +104,32 @@ public class CommandHandler {
/** */
private static final String DELIM = "--------------------------------------------------------------------------------";
- /** */
- static final String CMD_ACTIVATE = "--activate";
+ /** Force option is used for auto confirmation. */
+ private static final String CMD_FORCE = "--force";
/** */
- static final String CMD_BASE_LINE = "--baseline";
+ public static final int EXIT_CODE_OK = 0;
/** */
- static final String CMD_DEACTIVATE = "--deactivate";
+ public static final int EXIT_CODE_INVALID_ARGUMENTS = 1;
/** */
- static final String CMD_STATE = "--state";
+ public static final int EXIT_CODE_CONNECTION_FAILED = 2;
/** */
- public static final int EXIT_CODE_OK = 0;
+ public static final int ERR_AUTHENTICATION_FAILED = 3;
/** */
- public static final int EXIT_CODE_INVALID_ARGUMENTS = 1;
+ public static final int EXIT_CODE_UNEXPECTED_ERROR = 4;
/** */
- public static final int EXIT_CODE_CONNECTION_FAILED = 2;
+ private static final Scanner IN = new Scanner(System.in);
/** */
- public static final int ERR_AUTHENTICATION_FAILED = 3;
+ private Iterator<String> argsIt;
/** */
- public static final int EXIT_CODE_UNEXPECTED_ERROR = 4;
+ private String peekedArg;
/**
* Output specified string to console.
@@ -133,6 +141,18 @@ public class CommandHandler {
}
/**
+ * Provides a prompt, then reads a single line of text from the console.
+ *
+ * @param prompt text
+ * @return A string containing the line read from the console
+ */
+ private String readLine(String prompt) {
+ System.out.print(prompt);
+
+ return IN.nextLine();
+ }
+
+ /**
* Output empty line.
*/
private void nl() {
@@ -167,119 +187,56 @@ public class CommandHandler {
}
/**
- * Extract next argument.
+ * Requests interactive user confirmation if forthcoming operation is dangerous.
*
- * @param it Arguments iterator.
- * @param err Error message.
- * @return Next argument value.
+ * @param args Arguments.
+ * @return {@code true} if operation confirmed (or not needed), {@code false} otherwise.
*/
- private String nextArg(Iterator<String> it, String err) {
- if (it.hasNext()) {
- String arg = it.next();
-
- if (arg.startsWith("--"))
- throw new IllegalArgumentException("Unexpected argument: " + arg);
+ private boolean confirm(Arguments args) {
+ String prompt = confirmationPrompt(args);
- return arg;
- }
+ if (prompt == null)
+ return true;
- throw new IllegalArgumentException(err);
+ return "y".equalsIgnoreCase(readLine(prompt));
}
/**
- * Parses and validates arguments.
- *
- * @param rawArgs Array of arguments.
- * @return Arguments bean.
- * @throws IllegalArgumentException In case arguments aren't valid.
+ * @param args Arguments.
+ * @return Prompt text if confirmation needed, otherwise {@code null}.
*/
- @NotNull Arguments parseAndValidate(String... rawArgs) {
- String host = DFLT_HOST;
-
- String port = DFLT_PORT;
-
- String user = null;
-
- String pwd = null;
-
- String baselineAct = "";
-
- String baselineArgs = "";
+ private String confirmationPrompt(Arguments args) {
+ if (args.force())
+ return null;
- List<String> commands = new ArrayList<>();
+ String str = null;
- Iterator<String> it = Arrays.asList(rawArgs).iterator();
-
- while (it.hasNext()) {
- String str = it.next().toLowerCase();
-
- switch (str) {
- case CMD_HOST:
- host = nextArg(it, "Expected host name");
- break;
-
- case CMD_PORT:
- port = nextArg(it, "Expected port number");
-
- try {
- int p = Integer.parseInt(port);
-
- if (p <= 0 || p > 65535)
- throw new IllegalArgumentException("Invalid value for port: " + port);
- }
- catch (NumberFormatException ignored) {
- throw new IllegalArgumentException("Invalid value for port: " + port);
- }
- break;
-
- case CMD_USER:
- user = nextArg(it, "Expected user name");
- break;
-
- case CMD_PASSWORD:
- pwd = nextArg(it, "Expected password");
- break;
-
- case CMD_ACTIVATE:
- case CMD_DEACTIVATE:
- case CMD_STATE:
- commands.add(str);
- break;
-
- case CMD_BASE_LINE:
- commands.add(CMD_BASE_LINE);
-
- if (it.hasNext()) {
- baselineAct = it.next().toLowerCase();
-
- if (BASELINE_ADD.equals(baselineAct) || BASELINE_REMOVE.equals(baselineAct) ||
- BASELINE_SET.equals(baselineAct) || BASELINE_SET_VERSION.equals(baselineAct))
- baselineArgs = nextArg(it, "Expected baseline arguments");
- else
- throw new IllegalArgumentException("Unexpected argument for " + CMD_BASE_LINE + ": "
- + baselineAct);
- }
+ switch (args.command()) {
+ case DEACTIVATE:
+ str = "Warning: the command will deactivate a cluster.";
+ break;
- }
+ case BASELINE:
+ if (!BASELINE_COLLECT.equals(args.baselineAction()))
+ str = "Warning: the command will perform changes in baseline.";
}
- int sz = commands.size();
-
- if (sz < 1)
- throw new IllegalArgumentException("No action was specified");
-
- if (sz > 1)
- throw new IllegalArgumentException("Only one action can be specified, but found: " + sz);
-
- String cmd = commands.get(0);
-
- boolean hasUsr = F.isEmpty(user);
- boolean hasPwd = F.isEmpty(pwd);
+ return str == null ? null : str + "\nPress 'y' to continue...";
+ }
- if (hasUsr != hasPwd)
- throw new IllegalArgumentException("Both user and password should be specified");
+ /**
+ * @param rawArgs Arguments.
+ */
+ private void initArgIterator(List<String> rawArgs) {
+ argsIt = rawArgs.iterator();
+ peekedArg = null;
+ }
- return new Arguments(cmd, host, port, user, pwd, baselineAct, baselineArgs);
+ /**
+ * @return Returns {@code true} if the iteration has more elements.
+ */
+ private boolean hasNextArg() {
+ return peekedArg != null || argsIt.hasNext();
}
/**
@@ -393,8 +350,9 @@ public class CommandHandler {
baselineVersion(client, baselineArgs);
break;
- default:
+ case BASELINE_COLLECT:
baselinePrint(client);
+ break;
}
}
@@ -597,38 +555,189 @@ public class CommandHandler {
* Print command usage.
*
* @param desc Command description.
- * @param cmd Command.
+ * @param args Arguments.
*/
- private void usage(String desc, String cmd) {
+ private void usage(String desc, Command cmd, String... args) {
log(desc);
- log(" control.sh [--host HOST_OR_IP] [--port PORT] [--user USER] [--password PASSWORD] " + cmd);
+ log(" control.sh [--host HOST_OR_IP] [--port PORT] [--user USER] [--password PASSWORD] " + cmd.text() + String.join("", args));
nl();
}
/**
+ * Extract next argument.
+ *
+ * @param err Error message.
+ * @return Next argument value.
+ */
+ private String nextArg(String err) {
+ if (peekedArg != null) {
+ String res = peekedArg;
+
+ peekedArg = null;
+
+ return res;
+ }
+
+ if (argsIt.hasNext())
+ return argsIt.next();
+
+ throw new IllegalArgumentException(err);
+ }
+
+ /**
+ * Returns the next argument in the iteration, without advancing the iteration.
+ *
+ * @return Next argument value or {@code null} if no next argument.
+ */
+ private String peekNextArg() {
+ if (peekedArg == null && argsIt.hasNext())
+ peekedArg = argsIt.next();
+
+ return peekedArg;
+ }
+
+ /**
+ * Parses and validates arguments.
+ *
+ * @param rawArgs Array of arguments.
+ * @return Arguments bean.
+ * @throws IllegalArgumentException In case arguments aren't valid.
+ */
+ @NotNull Arguments parseAndValidate(List<String> rawArgs) {
+ String host = DFLT_HOST;
+
+ String port = DFLT_PORT;
+
+ String user = null;
+
+ String pwd = null;
+
+ String baselineAct = "";
+
+ String baselineArgs = "";
+
+ boolean force = false;
+
+ List<Command> commands = new ArrayList<>();
+
+ initArgIterator(rawArgs);
+
+ while (hasNextArg()) {
+ String str = nextArg("").toLowerCase();
+
+ Command cmd = Command.of(str);
+
+ if (cmd != null) {
+ switch (cmd) {
+ case ACTIVATE:
+ case DEACTIVATE:
+ case STATE:
+ commands.add(Command.of(str));
+ break;
+
+ case BASELINE:
+ commands.add(BASELINE);
+
+ baselineAct = BASELINE_COLLECT; //default baseline action
+
+ str = peekNextArg();
+
+ if (str != null) {
+ str = str.toLowerCase();
+
+ if (BASELINE_ADD.equals(str) || BASELINE_REMOVE.equals(str) ||
+ BASELINE_SET.equals(str) || BASELINE_SET_VERSION.equals(str)) {
+ baselineAct = nextArg("Expected baseline action");
+
+ baselineArgs = nextArg("Expected baseline arguments");
+ }
+ }
+ }
+ }
+ else {
+ switch (str) {
+ case CMD_HOST:
+ host = nextArg("Expected host name");
+ break;
+
+ case CMD_PORT:
+ port = nextArg("Expected port number");
+
+ try {
+ int p = Integer.parseInt(port);
+
+ if (p <= 0 || p > 65535)
+ throw new IllegalArgumentException("Invalid value for port: " + port);
+ }
+ catch (NumberFormatException ignored) {
+ throw new IllegalArgumentException("Invalid value for port: " + port);
+ }
+ break;
+
+ case CMD_USER:
+ user = nextArg("Expected user name");
+ break;
+
+ case CMD_PASSWORD:
+ pwd = nextArg("Expected password");
+ break;
+
+ case CMD_FORCE:
+ force = true;
+ break;
+ default:
+ throw new IllegalArgumentException("Unexpected argument: " + str);
+ }
+ }
+ }
+
+ int sz = commands.size();
+
+ if (sz < 1)
+ throw new IllegalArgumentException("No action was specified");
+
+ if (sz > 1)
+ throw new IllegalArgumentException("Only one action can be specified, but found: " + sz);
+
+ Command cmd = commands.get(0);
+
+ boolean hasUsr = F.isEmpty(user);
+ boolean hasPwd = F.isEmpty(pwd);
+
+ if (hasUsr != hasPwd)
+ throw new IllegalArgumentException("Both user and password should be specified");
+
+ return new Arguments(cmd, host, port, user, pwd, baselineAct, baselineArgs, force);
+ }
+
+ /**
* Parse and execute command.
*
* @param rawArgs Arguments to parse and execute.
* @return Exit code.
*/
- public int execute(String... rawArgs) {
+ public int execute(List<String> rawArgs) {
log("Control utility [ver. " + ACK_VER_STR + "]");
log(COPYRIGHT);
log("User: " + System.getProperty("user.name"));
log(DELIM);
try {
- if (F.isEmpty(rawArgs) || (rawArgs.length == 1 && CMD_HELP.equalsIgnoreCase(rawArgs[0]))) {
+ if (F.isEmpty(rawArgs) || (rawArgs.size() == 1 && CMD_HELP.equalsIgnoreCase(rawArgs.get(0)))) {
log("This utility can do the following commands:");
- usage(" Activate cluster:", CMD_ACTIVATE);
- usage(" Deactivate cluster:", CMD_DEACTIVATE);
- usage(" Print current cluster state:", CMD_STATE);
- usage(" Print cluster baseline topology:", CMD_BASE_LINE);
- usage(" Add nodes into baseline topology:", CMD_BASE_LINE + " add consistentId1[,consistentId2,....,consistentIdN]");
- usage(" Remove nodes from baseline topology:", CMD_BASE_LINE + " remove consistentId1[,consistentId2,....,consistentIdN]");
- usage(" Set baseline topology:", CMD_BASE_LINE + " set consistentId1[,consistentId2,....,consistentIdN]");
- usage(" Set baseline topology based on version:", CMD_BASE_LINE + " version topologyVersion");
+ usage(" Activate cluster:", ACTIVATE);
+ usage(" Deactivate cluster:", DEACTIVATE, " [--force]");
+ usage(" Print current cluster state:", STATE);
+ usage(" Print cluster baseline topology:", BASELINE);
+ usage(" Add nodes into baseline topology:", BASELINE, " add consistentId1[,consistentId2,....,consistentIdN] [--force]");
+ usage(" Remove nodes from baseline topology:", BASELINE, " remove consistentId1[,consistentId2,....,consistentIdN] [--force]");
+ usage(" Set baseline topology:", BASELINE, " set consistentId1[,consistentId2,....,consistentIdN] [--force]");
+ usage(" Set baseline topology based on version:", BASELINE, " version topologyVersion [--force]");
+
+ log("By default cluster deactivation and changes in baseline topology commands request interactive confirmation. ");
+ log(" --force option can be used to execute commands without prompting for confirmation.");
+ nl();
log("Default values:");
log(" HOST_OR_IP=" + DFLT_HOST);
@@ -647,6 +756,12 @@ public class CommandHandler {
Arguments args = parseAndValidate(rawArgs);
+ if (!confirm(args)) {
+ log("Operation canceled.");
+
+ return EXIT_CODE_OK;
+ }
+
GridClientConfiguration cfg = new GridClientConfiguration();
cfg.setServers(Collections.singletonList(args.host() + ":" + args.port()));
@@ -659,19 +774,19 @@ public class CommandHandler {
try (GridClient client = GridClientFactory.start(cfg)) {
switch (args.command()) {
- case CMD_ACTIVATE:
+ case ACTIVATE:
activate(client);
break;
- case CMD_DEACTIVATE:
+ case DEACTIVATE:
deactivate(client);
break;
- case CMD_STATE:
+ case STATE:
state(client);
break;
- case CMD_BASE_LINE:
+ case BASELINE:
baseline(client, args.baselineAction(), args.baselineArguments());
break;
}
@@ -699,7 +814,7 @@ public class CommandHandler {
public static void main(String[] args) {
CommandHandler hnd = new CommandHandler();
- System.exit(hnd.execute(args));
+ System.exit(hnd.execute(Arrays.asList(args)));
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a50f5f71/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
index 1ba8b3d..cfbf1a6 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
@@ -21,10 +21,7 @@ package org.apache.ignite.internal.commandline;
import junit.framework.TestCase;
-import static org.apache.ignite.internal.commandline.CommandHandler.CMD_ACTIVATE;
-import static org.apache.ignite.internal.commandline.CommandHandler.CMD_BASE_LINE;
-import static org.apache.ignite.internal.commandline.CommandHandler.CMD_DEACTIVATE;
-import static org.apache.ignite.internal.commandline.CommandHandler.CMD_STATE;
+import static java.util.Arrays.asList;
import static org.apache.ignite.internal.commandline.CommandHandler.DFLT_HOST;
import static org.apache.ignite.internal.commandline.CommandHandler.DFLT_PORT;
@@ -32,18 +29,15 @@ import static org.apache.ignite.internal.commandline.CommandHandler.DFLT_PORT;
* Tests Command Handler parsing arguments.
*/
public class CommandHandlerParsingTest extends TestCase {
- /** Commands to test. */
- private static final String[] Commands = new String[] {CMD_STATE, CMD_ACTIVATE, CMD_DEACTIVATE, CMD_BASE_LINE};
-
/**
* Test parsing and validation for user and password arguments
*/
public void testParseAndValidateUserAndPassword() {
CommandHandler hnd = new CommandHandler();
- for (String cmd : Commands) {
+ for (Command cmd : Command.values()) {
try {
- hnd.parseAndValidate("--user");
+ hnd.parseAndValidate(asList("--user"));
fail("expected exception: Expected user name");
}
@@ -52,7 +46,7 @@ public class CommandHandlerParsingTest extends TestCase {
}
try {
- hnd.parseAndValidate("--password");
+ hnd.parseAndValidate(asList("--password"));
fail("expected exception: Expected password");
}
@@ -61,7 +55,7 @@ public class CommandHandlerParsingTest extends TestCase {
}
try {
- hnd.parseAndValidate("--user", "testUser", cmd);
+ hnd.parseAndValidate(asList("--user", "testUser", cmd.text()));
fail("expected exception: Both user and password should be specified");
}
@@ -70,7 +64,7 @@ public class CommandHandlerParsingTest extends TestCase {
}
try {
- hnd.parseAndValidate("--password", "testPass", cmd);
+ hnd.parseAndValidate(asList("--password", "testPass", cmd.text()));
fail("expected exception: Both user and password should be specified");
}
@@ -78,7 +72,7 @@ public class CommandHandlerParsingTest extends TestCase {
e.printStackTrace();
}
- Arguments args = hnd.parseAndValidate("--user", "testUser", "--password", "testPass", cmd);
+ Arguments args = hnd.parseAndValidate(asList("--user", "testUser", "--password", "testPass", cmd.text()));
assertEquals("testUser", args.user());
assertEquals("testPass", args.password());
@@ -92,21 +86,21 @@ public class CommandHandlerParsingTest extends TestCase {
public void testHostAndPort() {
CommandHandler hnd = new CommandHandler();
- for (String cmd : Commands) {
- Arguments args = hnd.parseAndValidate(cmd);
+ for (Command cmd : Command.values()) {
+ Arguments args = hnd.parseAndValidate(asList(cmd.text()));
assertEquals(cmd, args.command());
assertEquals(DFLT_HOST, args.host());
assertEquals(DFLT_PORT, args.port());
- args = hnd.parseAndValidate("--port", "12345", "--host", "test-host", cmd);
+ args = hnd.parseAndValidate(asList("--port", "12345", "--host", "test-host", cmd.text()));
assertEquals(cmd, args.command());
assertEquals("test-host", args.host());
assertEquals("12345", args.port());
try {
- hnd.parseAndValidate("--port", "wrong-port", cmd);
+ hnd.parseAndValidate(asList("--port", "wrong-port", cmd.text()));
fail("expected exception: Invalid value for port:");
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/a50f5f71/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java b/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
index 0be131b..d5051d7 100644
--- a/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
@@ -18,6 +18,8 @@
package org.apache.ignite.util;
import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.configuration.ConnectorConfiguration;
@@ -85,22 +87,30 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest {
public void testActivate() throws Exception {
Ignite ignite = startGrids(1);
- assertFalse(ignite.active());
+ assertFalse(ignite.cluster().active());
- CommandHandler cmd = new CommandHandler();
+ assertEquals(EXIT_CODE_OK, execute("--activate"));
- assertEquals(EXIT_CODE_OK, execute(cmd, "--activate"));
+ assertTrue(ignite.cluster().active());
+ }
- assertTrue(ignite.active());
+ /**
+ * @param args Arguments.
+ * @return Result of execution.
+ */
+ protected int execute(String... args) {
+ return execute(new ArrayList<>(Arrays.asList(args)));
}
/**
- * @param cmd CommandHandler
- * @param args arguments
- * @return result of execution
+ * @param args Arguments.
+ * @return Result of execution
*/
- protected int execute(CommandHandler cmd, String... args) {
- return cmd.execute(args);
+ protected int execute(ArrayList<String> args) {
+ // Add force to avoid interactive confirmation
+ args.add("--force");
+
+ return new CommandHandler().execute(args);
}
/**
@@ -111,17 +121,15 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest {
public void testDeactivate() throws Exception {
Ignite ignite = startGrids(1);
- assertFalse(ignite.active());
-
- ignite.active(true);
+ assertFalse(ignite.cluster().active());
- assertTrue(ignite.active());
+ ignite.cluster().active(true);
- CommandHandler cmd = new CommandHandler();
+ assertTrue(ignite.cluster().active());
- assertEquals(EXIT_CODE_OK, execute(cmd, "--deactivate"));
+ assertEquals(EXIT_CODE_OK, execute("--deactivate"));
- assertFalse(ignite.active());
+ assertFalse(ignite.cluster().active());
}
/**
@@ -132,15 +140,13 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest {
public void testState() throws Exception {
Ignite ignite = startGrids(1);
- assertFalse(ignite.active());
-
- CommandHandler cmd = new CommandHandler();
+ assertFalse(ignite.cluster().active());
- assertEquals(EXIT_CODE_OK, execute(cmd, "--state"));
+ assertEquals(EXIT_CODE_OK, execute("--state"));
- ignite.active(true);
+ ignite.cluster().active(true);
- assertEquals(EXIT_CODE_OK, execute(cmd, "--state"));
+ assertEquals(EXIT_CODE_OK, execute("--state"));
}
/**
@@ -151,13 +157,11 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest {
public void testBaselineCollect() throws Exception {
Ignite ignite = startGrids(1);
- assertFalse(ignite.active());
+ assertFalse(ignite.cluster().active());
- ignite.active(true);
+ ignite.cluster().active(true);
- CommandHandler cmd = new CommandHandler();
-
- assertEquals(EXIT_CODE_OK, execute(cmd, "--baseline"));
+ assertEquals(EXIT_CODE_OK, execute("--baseline"));
assertEquals(1, ignite.cluster().currentBaselineTopology().size());
}
@@ -189,16 +193,14 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest {
public void testBaselineAdd() throws Exception {
Ignite ignite = startGrids(1);
- assertFalse(ignite.active());
-
- ignite.active(true);
+ assertFalse(ignite.cluster().active());
- CommandHandler cmd = new CommandHandler();
+ ignite.cluster().active(true);
Ignite other = startGrid(2);
- assertEquals(EXIT_CODE_OK, execute(cmd, "--baseline", "add", consistentIds(other)));
- assertEquals(EXIT_CODE_OK, execute(cmd, "--baseline", "add", consistentIds(other)));
+ assertEquals(EXIT_CODE_OK, execute("--baseline", "add", consistentIds(other)));
+ assertEquals(EXIT_CODE_OK, execute("--baseline", "add", consistentIds(other)));
assertEquals(2, ignite.cluster().currentBaselineTopology().size());
}
@@ -212,18 +214,16 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest {
Ignite ignite = startGrids(1);
Ignite other = startGrid("nodeToStop");
- assertFalse(ignite.active());
+ assertFalse(ignite.cluster().active());
- ignite.active(true);
+ ignite.cluster().active(true);
String offlineNodeConsId = consistentIds(other);
stopGrid("nodeToStop");
- CommandHandler cmd = new CommandHandler();
-
- assertEquals(EXIT_CODE_OK, execute(cmd, "--baseline"));
- assertEquals(EXIT_CODE_OK, execute(cmd, "--baseline", "remove", offlineNodeConsId));
+ assertEquals(EXIT_CODE_OK, execute("--baseline"));
+ assertEquals(EXIT_CODE_OK, execute("--baseline", "remove", offlineNodeConsId));
assertEquals(1, ignite.cluster().currentBaselineTopology().size());
}
@@ -236,19 +236,17 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest {
public void testBaselineSet() throws Exception {
Ignite ignite = startGrids(1);
- assertFalse(ignite.active());
+ assertFalse(ignite.cluster().active());
- ignite.active(true);
+ ignite.cluster().active(true);
Ignite other = startGrid(2);
- CommandHandler cmd = new CommandHandler();
-
- assertEquals(EXIT_CODE_OK, execute(cmd, "--baseline", "set", consistentIds(ignite, other)));
+ assertEquals(EXIT_CODE_OK, execute("--baseline", "set", consistentIds(ignite, other)));
assertEquals(2, ignite.cluster().currentBaselineTopology().size());
- assertEquals(EXIT_CODE_UNEXPECTED_ERROR, execute(cmd, "--baseline", "set", "invalidConsistentId"));
+ assertEquals(EXIT_CODE_UNEXPECTED_ERROR, execute("--baseline", "set", "invalidConsistentId"));
}
/**
@@ -259,17 +257,15 @@ public class GridCommandHandlerTest extends GridCommonAbstractTest {
public void testBaselineVersion() throws Exception {
Ignite ignite = startGrids(1);
- assertFalse(ignite.active());
-
- ignite.active(true);
+ assertFalse(ignite.cluster().active());
- CommandHandler cmd = new CommandHandler();
+ ignite.cluster().active(true);
startGrid(2);
- assertEquals(EXIT_CODE_OK, execute(cmd, "--baseline"));
+ assertEquals(EXIT_CODE_OK, execute("--baseline"));
- assertEquals(EXIT_CODE_OK, execute(cmd, "--baseline", "version", String.valueOf(ignite.cluster().topologyVersion())));
+ assertEquals(EXIT_CODE_OK, execute("--baseline", "version", String.valueOf(ignite.cluster().topologyVersion())));
assertEquals(2, ignite.cluster().currentBaselineTopology().size());
}