You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2017/08/11 21:30:27 UTC
geode git commit: GEODE-3270: Refactoring (renaming) StatusCommands
Repository: geode
Updated Branches:
refs/heads/develop 957d583e5 -> 359e3fff6
GEODE-3270: Refactoring (renaming) StatusCommands
This closes #694
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/359e3fff
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/359e3fff
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/359e3fff
Branch: refs/heads/develop
Commit: 359e3fff6482ecfb375939d387f4dad3a636246b
Parents: 957d583
Author: YehEmily <em...@gmail.com>
Authored: Mon Aug 7 14:32:43 2017 -0700
Committer: Kirk Lund <kl...@apache.org>
Committed: Fri Aug 11 14:16:59 2017 -0700
----------------------------------------------------------------------
...deStatusClusterConfigServiceCommandTest.java | 391 +++++++++++++++++++
.../shell/GfshExitCodeStatusCommandsTest.java | 391 -------------------
.../StatusClusterConfigServiceCommand.java | 82 ++++
.../internal/cli/commands/StatusCommands.java | 82 ----
.../internal/security/TestCommand.java | 2 +-
5 files changed, 474 insertions(+), 474 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/359e3fff/geode-assembly/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExitCodeStatusClusterConfigServiceCommandTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExitCodeStatusClusterConfigServiceCommandTest.java b/geode-assembly/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExitCodeStatusClusterConfigServiceCommandTest.java
new file mode 100755
index 0000000..15b4f8b
--- /dev/null
+++ b/geode-assembly/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExitCodeStatusClusterConfigServiceCommandTest.java
@@ -0,0 +1,391 @@
+/*
+ * 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.geode.management.internal.cli.shell;
+
+import static java.util.concurrent.TimeUnit.MINUTES;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
+import org.junit.Assume;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import org.apache.geode.internal.AvailablePort;
+import org.apache.geode.internal.ExitCode;
+import org.apache.geode.internal.process.PidFile;
+import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
+import org.apache.geode.management.internal.cli.util.ThreePhraseGenerator;
+import org.apache.geode.test.dunit.rules.gfsh.GfshExecution;
+import org.apache.geode.test.dunit.rules.gfsh.GfshRule;
+import org.apache.geode.test.dunit.rules.gfsh.GfshScript;
+import org.apache.geode.test.junit.categories.AcceptanceTest;
+
+// Originally created in response to GEODE-2971
+
+@Category(AcceptanceTest.class)
+@RunWith(JUnitParamsRunner.class)
+public class GfshExitCodeStatusClusterConfigServiceCommandTest {
+ private static File toolsJar;
+ private static final ThreePhraseGenerator nameGenerator = new ThreePhraseGenerator();
+ private static final String memberControllerName = "member-controller";
+
+ @Rule
+ public GfshRule gfsh = new GfshRule();
+ private String locatorName;
+ private String serverName;
+
+ private int locatorPort;
+
+ // Some test configuration shorthands
+ private static final TestConfiguration LOCATOR_ONLINE_BUT_NOT_CONNECTED =
+ new TestConfiguration(true, false, false);
+ private static final TestConfiguration LOCATOR_ONLINE_AND_CONNECTED =
+ new TestConfiguration(true, false, true);
+ private static final TestConfiguration BOTH_ONLINE_BUT_NOT_CONNECTED =
+ new TestConfiguration(true, true, false);
+ private static final TestConfiguration BOTH_ONLINE_AND_CONNECTED =
+ new TestConfiguration(true, true, true);
+
+ @BeforeClass
+ public static void classSetup() {
+ File javaHome = new File(System.getProperty("java.home"));
+ String toolsPath =
+ javaHome.getName().equalsIgnoreCase("jre") ? "../lib/tools.jar" : "lib/tools.jar";
+ toolsJar = new File(javaHome, toolsPath);
+ }
+
+ @Before
+ public void setup() {
+ locatorName = "locator-" + nameGenerator.generate('-');
+ serverName = "server-" + nameGenerator.generate('-');
+ locatorPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
+ }
+
+ @Test
+ @Parameters(
+ value = {"status locator --port=-10", "status locator --pid=-1", "status server --pid=-1"})
+ public void statusCommandWithInvalidOptionValueShouldFail(String cmd) {
+ GfshScript.of(cmd).withName("test-frame").awaitAtMost(1, MINUTES)
+ .expectExitCode(ExitCode.FATAL.getValue()).execute(gfsh);
+ }
+
+
+ @Test
+ @Parameters(value = {"status locator --host=somehostname", "status locator --port=10334",
+ "status locator --dir=.", "status server --dir=.", "status locator --name=some-locator-name",
+ "status server --name=some-server-name", "status locator --pid=100",
+ "status server --pid=100"})
+ public void statusCommandWithValidOptionValueShouldFailWithNoMembers(String cmd) {
+ GfshScript.of(cmd).withName("test-frame").awaitAtMost(1, MINUTES)
+ .expectExitCode(ExitCode.FATAL.getValue()).execute(gfsh);
+ }
+
+
+ @Test
+ public void onlineStatusCommandShouldFailWhenNotConnected_locator_name() {
+ TestConfiguration config = LOCATOR_ONLINE_BUT_NOT_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusLocatorCommandByName();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.FATAL);
+ }
+
+
+ @Test
+ public void onlineStatusCommandShouldFailWhenNotConnected_server_name() {
+ TestConfiguration config = BOTH_ONLINE_BUT_NOT_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusServerCommandByName();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.FATAL);
+ }
+
+ @Test
+ public void offlineStatusCommandShouldSucceedWhenNotConnected_locator_port() {
+ // --host defaults to localhost, so `status locator --port=xxx` should still succeed.
+ TestConfiguration config = LOCATOR_ONLINE_BUT_NOT_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusLocatorCommandByPort();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+ @Test
+ public void offlineStatusCommandShouldSucceedWhenNotConnected_locator_host_and_port() {
+ // Since this is still local to the testing VM's machine, `status locator --host=localhost
+ // --port=xxx` should succeed
+ TestConfiguration config = LOCATOR_ONLINE_BUT_NOT_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusLocatorCommandByHostAndPort();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+
+
+ @Test
+ public void onlineStatusCommandShouldSucceedWhenConnected_locator_name() {
+ TestConfiguration config = LOCATOR_ONLINE_AND_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusLocatorCommandByName();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+
+ @Test
+ public void onlineStatusCommandShouldSucceedWhenConnected_server_name() {
+ TestConfiguration config = BOTH_ONLINE_AND_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusServerCommandByName();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+ @Test
+ public void onlineStatusCommandShouldSucceedWhenConnected_locator_port() {
+ TestConfiguration config = LOCATOR_ONLINE_AND_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusLocatorCommandByPort();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+ @Test
+ public void onlineStatusCommandShouldSucceedWhenConnected_locator_host_and_port() {
+ TestConfiguration config = LOCATOR_ONLINE_AND_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusLocatorCommandByHostAndPort();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+
+
+ @Test
+ public void offlineStatusCommandShouldSucceedWhenConnected_locator_dir() {
+ TestConfiguration config = LOCATOR_ONLINE_AND_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusLocatorCommandByDir();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+ @Test
+ public void offlineStatusCommandShouldSucceedWhenConnected_server_dir() {
+ TestConfiguration config = BOTH_ONLINE_AND_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusServerCommandByDir();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+ @Test
+ public void offlineStatusCommandShouldSucceedWhenConnected_locator_pid() throws IOException {
+ Assume.assumeTrue(toolsJar.exists());
+ TestConfiguration config = LOCATOR_ONLINE_AND_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusLocatorCommandByPid();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+ @Test
+ public void offlineStatusCommandShouldSucceedWhenConnected_server_pid() throws IOException {
+ Assume.assumeTrue(toolsJar.exists());
+ TestConfiguration config = BOTH_ONLINE_AND_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusServerCommandByPid();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+
+
+ @Test
+ public void offlineStatusCommandShouldSucceedEvenWhenNotConnected_locator_dir() {
+ TestConfiguration config = LOCATOR_ONLINE_BUT_NOT_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusLocatorCommandByDir();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+ @Test
+ public void offlineStatusCommandShouldSucceedEvenWhenNotConnected_server_dir() {
+ TestConfiguration config = BOTH_ONLINE_BUT_NOT_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusServerCommandByDir();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+ @Test
+ public void offlineStatusCommandShouldSucceedEvenWhenNotConnected_locator_pid()
+ throws IOException {
+ Assume.assumeTrue(toolsJar.exists());
+ TestConfiguration config = LOCATOR_ONLINE_BUT_NOT_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusLocatorCommandByPid();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+ @Test
+ public void offlineStatusCommandShouldSucceedEvenWhenNotConnected_server_pid()
+ throws IOException {
+ Assume.assumeTrue(toolsJar.exists());
+ TestConfiguration config = BOTH_ONLINE_BUT_NOT_CONNECTED;
+ config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
+
+ String statusCommand = statusServerCommandByPid();
+ executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
+ }
+
+
+
+ private String startLocatorCommand() {
+ return new CommandStringBuilder("start locator").addOption("name", locatorName)
+ .addOption("port", String.valueOf(locatorPort)).toString();
+ }
+
+
+ private String startServerCommand() {
+ return new CommandStringBuilder("start server").addOption("name", serverName).toString();
+ }
+
+
+ private String connectCommand() {
+ return new CommandStringBuilder("connect")
+ .addOption("locator", String.format("localhost[%d]", locatorPort)).toString();
+ }
+
+
+ private String statusServerCommandByName() {
+ return new CommandStringBuilder("status server").addOption("name", serverName).toString();
+ }
+
+ private String statusServerCommandByDir() {
+ String serverDir = gfsh.getTemporaryFolder().getRoot().toPath().resolve(memberControllerName)
+ .resolve(serverName).toAbsolutePath().toString();
+ return new CommandStringBuilder("status server").addOption("dir", serverDir).toString();
+ }
+
+
+ private String statusServerCommandByPid() throws IOException {
+ int serverPid = snoopMemberFile(serverName, "server.pid");
+ return new CommandStringBuilder("status server").addOption("pid", String.valueOf(serverPid))
+ .toString();
+ }
+
+ private String statusLocatorCommandByName() {
+ return new CommandStringBuilder("status locator").addOption("name", locatorName).toString();
+ }
+
+ private String statusLocatorCommandByPort() {
+ return new CommandStringBuilder("status locator").addOption("port", String.valueOf(locatorPort))
+ .toString();
+ }
+
+ private String statusLocatorCommandByHostAndPort() {
+ return new CommandStringBuilder("status locator").addOption("host", "localhost")
+ .addOption("port", String.valueOf(locatorPort)).toString();
+ }
+
+ private String statusLocatorCommandByDir() {
+ String locatorDir = gfsh.getTemporaryFolder().getRoot().toPath().resolve(memberControllerName)
+ .resolve(locatorName).toAbsolutePath().toString();
+ return new CommandStringBuilder("status locator").addOption("dir", locatorDir).toString();
+ }
+
+
+ private String statusLocatorCommandByPid() throws IOException {
+ int locatorPid = snoopMemberFile(locatorName, "locator.pid");
+ return new CommandStringBuilder("status locator").addOption("pid", String.valueOf(locatorPid))
+ .toString();
+ }
+
+ private int snoopMemberFile(String memberName, String pidFileEndsWith) throws IOException {
+ File directory = gfsh.getTemporaryFolder().getRoot().toPath().resolve(memberControllerName)
+ .resolve(memberName).toFile();
+ File[] files = directory.listFiles();
+ if (files == null) {
+ throw new RuntimeException(String.format(
+ "Expected directory ('%s') for member '%s' either does not denote a directory, or an I/O error occurred.",
+ directory.toString(), memberName));
+ }
+ File pidFile = Arrays.stream(files).filter(file -> file.getName().endsWith(pidFileEndsWith))
+ .findFirst().orElseThrow(() -> new RuntimeException(String
+ .format("Expected member '%s' to have pid file but could not find it.", memberName)));
+ return new PidFile(pidFile).readPid();
+ }
+
+ private void executeScriptWithExpectedExitCode(String statusCommand, TestConfiguration config,
+ ExitCode expectedExit) {
+
+ String[] gfshScriptCommands = config.connectedToLocator
+ ? new String[] {connectCommand(), statusCommand} : new String[] {statusCommand};
+ GfshScript gfshScript = GfshScript.of(gfshScriptCommands).withName("test-frame")
+ .awaitAtMost(1, MINUTES).expectExitCode(expectedExit.getValue());
+ if (toolsJar.exists()) {
+ gfshScript.addToClasspath(toolsJar.getAbsolutePath());
+ }
+ gfshScript.execute(gfsh);
+ }
+
+
+ private static class TestConfiguration {
+ TestConfiguration(boolean locatorStarted, boolean serverStarted, boolean connectedToLocator) {
+ this.locatorStarted = locatorStarted;
+ this.serverStarted = serverStarted;
+ this.connectedToLocator = connectedToLocator;
+ }
+
+ private boolean locatorStarted;
+ private boolean serverStarted;
+ private boolean connectedToLocator;
+
+ void startNecessaryMembers(String startLocator, String startServer, GfshRule gfsh) {
+ if (!locatorStarted && !serverStarted) {
+ return;
+ }
+
+ List<String> commands = new ArrayList<>();
+ if (locatorStarted) {
+ commands.add(startLocator);
+ }
+ if (serverStarted) {
+ commands.add(startServer);
+ }
+
+ GfshExecution exec = GfshScript.of(commands.toArray(new String[] {}))
+ .withName(memberControllerName).awaitAtMost(1, MINUTES).execute(gfsh);
+ if (exec.getProcess().exitValue() != 0) {
+ throw new RuntimeException(
+ "The locator and server launcher exited with non-zero exit code. This failure is beyond the scope of this test.");
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/359e3fff/geode-assembly/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExitCodeStatusCommandsTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExitCodeStatusCommandsTest.java b/geode-assembly/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExitCodeStatusCommandsTest.java
deleted file mode 100755
index bc309dd..0000000
--- a/geode-assembly/src/test/java/org/apache/geode/management/internal/cli/shell/GfshExitCodeStatusCommandsTest.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * 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.geode.management.internal.cli.shell;
-
-import static java.util.concurrent.TimeUnit.MINUTES;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import junitparams.JUnitParamsRunner;
-import junitparams.Parameters;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.junit.runner.RunWith;
-
-import org.apache.geode.internal.AvailablePort;
-import org.apache.geode.internal.ExitCode;
-import org.apache.geode.internal.process.PidFile;
-import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
-import org.apache.geode.management.internal.cli.util.ThreePhraseGenerator;
-import org.apache.geode.test.dunit.rules.gfsh.GfshExecution;
-import org.apache.geode.test.dunit.rules.gfsh.GfshRule;
-import org.apache.geode.test.dunit.rules.gfsh.GfshScript;
-import org.apache.geode.test.junit.categories.AcceptanceTest;
-
-// Originally created in response to GEODE-2971
-
-@Category(AcceptanceTest.class)
-@RunWith(JUnitParamsRunner.class)
-public class GfshExitCodeStatusCommandsTest {
- private static File toolsJar;
- private static final ThreePhraseGenerator nameGenerator = new ThreePhraseGenerator();
- private static final String memberControllerName = "member-controller";
-
- @Rule
- public GfshRule gfsh = new GfshRule();
- private String locatorName;
- private String serverName;
-
- private int locatorPort;
-
- // Some test configuration shorthands
- private static final TestConfiguration LOCATOR_ONLINE_BUT_NOT_CONNECTED =
- new TestConfiguration(true, false, false);
- private static final TestConfiguration LOCATOR_ONLINE_AND_CONNECTED =
- new TestConfiguration(true, false, true);
- private static final TestConfiguration BOTH_ONLINE_BUT_NOT_CONNECTED =
- new TestConfiguration(true, true, false);
- private static final TestConfiguration BOTH_ONLINE_AND_CONNECTED =
- new TestConfiguration(true, true, true);
-
- @BeforeClass
- public static void classSetup() {
- File javaHome = new File(System.getProperty("java.home"));
- String toolsPath =
- javaHome.getName().equalsIgnoreCase("jre") ? "../lib/tools.jar" : "lib/tools.jar";
- toolsJar = new File(javaHome, toolsPath);
- }
-
- @Before
- public void setup() {
- locatorName = "locator-" + nameGenerator.generate('-');
- serverName = "server-" + nameGenerator.generate('-');
- locatorPort = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET);
- }
-
- @Test
- @Parameters(
- value = {"status locator --port=-10", "status locator --pid=-1", "status server --pid=-1"})
- public void statusCommandWithInvalidOptionValueShouldFail(String cmd) {
- GfshScript.of(cmd).withName("test-frame").awaitAtMost(1, MINUTES)
- .expectExitCode(ExitCode.FATAL.getValue()).execute(gfsh);
- }
-
-
- @Test
- @Parameters(value = {"status locator --host=somehostname", "status locator --port=10334",
- "status locator --dir=.", "status server --dir=.", "status locator --name=some-locator-name",
- "status server --name=some-server-name", "status locator --pid=100",
- "status server --pid=100"})
- public void statusCommandWithValidOptionValueShouldFailWithNoMembers(String cmd) {
- GfshScript.of(cmd).withName("test-frame").awaitAtMost(1, MINUTES)
- .expectExitCode(ExitCode.FATAL.getValue()).execute(gfsh);
- }
-
-
- @Test
- public void onlineStatusCommandShouldFailWhenNotConnected_locator_name() {
- TestConfiguration config = LOCATOR_ONLINE_BUT_NOT_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusLocatorCommandByName();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.FATAL);
- }
-
-
- @Test
- public void onlineStatusCommandShouldFailWhenNotConnected_server_name() {
- TestConfiguration config = BOTH_ONLINE_BUT_NOT_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusServerCommandByName();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.FATAL);
- }
-
- @Test
- public void offlineStatusCommandShouldSucceedWhenNotConnected_locator_port() {
- // --host defaults to localhost, so `status locator --port=xxx` should still succeed.
- TestConfiguration config = LOCATOR_ONLINE_BUT_NOT_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusLocatorCommandByPort();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
- @Test
- public void offlineStatusCommandShouldSucceedWhenNotConnected_locator_host_and_port() {
- // Since this is still local to the testing VM's machine, `status locator --host=localhost
- // --port=xxx` should succeed
- TestConfiguration config = LOCATOR_ONLINE_BUT_NOT_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusLocatorCommandByHostAndPort();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
-
-
- @Test
- public void onlineStatusCommandShouldSucceedWhenConnected_locator_name() {
- TestConfiguration config = LOCATOR_ONLINE_AND_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusLocatorCommandByName();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
-
- @Test
- public void onlineStatusCommandShouldSucceedWhenConnected_server_name() {
- TestConfiguration config = BOTH_ONLINE_AND_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusServerCommandByName();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
- @Test
- public void onlineStatusCommandShouldSucceedWhenConnected_locator_port() {
- TestConfiguration config = LOCATOR_ONLINE_AND_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusLocatorCommandByPort();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
- @Test
- public void onlineStatusCommandShouldSucceedWhenConnected_locator_host_and_port() {
- TestConfiguration config = LOCATOR_ONLINE_AND_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusLocatorCommandByHostAndPort();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
-
-
- @Test
- public void offlineStatusCommandShouldSucceedWhenConnected_locator_dir() {
- TestConfiguration config = LOCATOR_ONLINE_AND_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusLocatorCommandByDir();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
- @Test
- public void offlineStatusCommandShouldSucceedWhenConnected_server_dir() {
- TestConfiguration config = BOTH_ONLINE_AND_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusServerCommandByDir();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
- @Test
- public void offlineStatusCommandShouldSucceedWhenConnected_locator_pid() throws IOException {
- Assume.assumeTrue(toolsJar.exists());
- TestConfiguration config = LOCATOR_ONLINE_AND_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusLocatorCommandByPid();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
- @Test
- public void offlineStatusCommandShouldSucceedWhenConnected_server_pid() throws IOException {
- Assume.assumeTrue(toolsJar.exists());
- TestConfiguration config = BOTH_ONLINE_AND_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusServerCommandByPid();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
-
-
- @Test
- public void offlineStatusCommandShouldSucceedEvenWhenNotConnected_locator_dir() {
- TestConfiguration config = LOCATOR_ONLINE_BUT_NOT_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusLocatorCommandByDir();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
- @Test
- public void offlineStatusCommandShouldSucceedEvenWhenNotConnected_server_dir() {
- TestConfiguration config = BOTH_ONLINE_BUT_NOT_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusServerCommandByDir();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
- @Test
- public void offlineStatusCommandShouldSucceedEvenWhenNotConnected_locator_pid()
- throws IOException {
- Assume.assumeTrue(toolsJar.exists());
- TestConfiguration config = LOCATOR_ONLINE_BUT_NOT_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusLocatorCommandByPid();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
- @Test
- public void offlineStatusCommandShouldSucceedEvenWhenNotConnected_server_pid()
- throws IOException {
- Assume.assumeTrue(toolsJar.exists());
- TestConfiguration config = BOTH_ONLINE_BUT_NOT_CONNECTED;
- config.startNecessaryMembers(startLocatorCommand(), startServerCommand(), gfsh);
-
- String statusCommand = statusServerCommandByPid();
- executeScriptWithExpectedExitCode(statusCommand, config, ExitCode.NORMAL);
- }
-
-
-
- private String startLocatorCommand() {
- return new CommandStringBuilder("start locator").addOption("name", locatorName)
- .addOption("port", String.valueOf(locatorPort)).toString();
- }
-
-
- private String startServerCommand() {
- return new CommandStringBuilder("start server").addOption("name", serverName).toString();
- }
-
-
- private String connectCommand() {
- return new CommandStringBuilder("connect")
- .addOption("locator", String.format("localhost[%d]", locatorPort)).toString();
- }
-
-
- private String statusServerCommandByName() {
- return new CommandStringBuilder("status server").addOption("name", serverName).toString();
- }
-
- private String statusServerCommandByDir() {
- String serverDir = gfsh.getTemporaryFolder().getRoot().toPath().resolve(memberControllerName)
- .resolve(serverName).toAbsolutePath().toString();
- return new CommandStringBuilder("status server").addOption("dir", serverDir).toString();
- }
-
-
- private String statusServerCommandByPid() throws IOException {
- int serverPid = snoopMemberFile(serverName, "server.pid");
- return new CommandStringBuilder("status server").addOption("pid", String.valueOf(serverPid))
- .toString();
- }
-
- private String statusLocatorCommandByName() {
- return new CommandStringBuilder("status locator").addOption("name", locatorName).toString();
- }
-
- private String statusLocatorCommandByPort() {
- return new CommandStringBuilder("status locator").addOption("port", String.valueOf(locatorPort))
- .toString();
- }
-
- private String statusLocatorCommandByHostAndPort() {
- return new CommandStringBuilder("status locator").addOption("host", "localhost")
- .addOption("port", String.valueOf(locatorPort)).toString();
- }
-
- private String statusLocatorCommandByDir() {
- String locatorDir = gfsh.getTemporaryFolder().getRoot().toPath().resolve(memberControllerName)
- .resolve(locatorName).toAbsolutePath().toString();
- return new CommandStringBuilder("status locator").addOption("dir", locatorDir).toString();
- }
-
-
- private String statusLocatorCommandByPid() throws IOException {
- int locatorPid = snoopMemberFile(locatorName, "locator.pid");
- return new CommandStringBuilder("status locator").addOption("pid", String.valueOf(locatorPid))
- .toString();
- }
-
- private int snoopMemberFile(String memberName, String pidFileEndsWith) throws IOException {
- File directory = gfsh.getTemporaryFolder().getRoot().toPath().resolve(memberControllerName)
- .resolve(memberName).toFile();
- File[] files = directory.listFiles();
- if (files == null) {
- throw new RuntimeException(String.format(
- "Expected directory ('%s') for member '%s' either does not denote a directory, or an I/O error occurred.",
- directory.toString(), memberName));
- }
- File pidFile = Arrays.stream(files).filter(file -> file.getName().endsWith(pidFileEndsWith))
- .findFirst().orElseThrow(() -> new RuntimeException(String
- .format("Expected member '%s' to have pid file but could not find it.", memberName)));
- return new PidFile(pidFile).readPid();
- }
-
- private void executeScriptWithExpectedExitCode(String statusCommand, TestConfiguration config,
- ExitCode expectedExit) {
-
- String[] gfshScriptCommands = config.connectedToLocator
- ? new String[] {connectCommand(), statusCommand} : new String[] {statusCommand};
- GfshScript gfshScript = GfshScript.of(gfshScriptCommands).withName("test-frame")
- .awaitAtMost(1, MINUTES).expectExitCode(expectedExit.getValue());
- if (toolsJar.exists()) {
- gfshScript.addToClasspath(toolsJar.getAbsolutePath());
- }
- gfshScript.execute(gfsh);
- }
-
-
- private static class TestConfiguration {
- TestConfiguration(boolean locatorStarted, boolean serverStarted, boolean connectedToLocator) {
- this.locatorStarted = locatorStarted;
- this.serverStarted = serverStarted;
- this.connectedToLocator = connectedToLocator;
- }
-
- private boolean locatorStarted;
- private boolean serverStarted;
- private boolean connectedToLocator;
-
- void startNecessaryMembers(String startLocator, String startServer, GfshRule gfsh) {
- if (!locatorStarted && !serverStarted) {
- return;
- }
-
- List<String> commands = new ArrayList<>();
- if (locatorStarted) {
- commands.add(startLocator);
- }
- if (serverStarted) {
- commands.add(startServer);
- }
-
- GfshExecution exec = GfshScript.of(commands.toArray(new String[] {}))
- .withName(memberControllerName).awaitAtMost(1, MINUTES).execute(gfsh);
- if (exec.getProcess().exitValue() != 0) {
- throw new RuntimeException(
- "The locator and server launcher exited with non-zero exit code. This failure is beyond the scope of this test.");
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/359e3fff/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommand.java
new file mode 100644
index 0000000..6a0fc1e
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommand.java
@@ -0,0 +1,82 @@
+/*
+ * 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.geode.management.internal.cli.commands;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.shell.core.annotation.CliCommand;
+
+import org.apache.geode.cache.execute.ResultCollector;
+import org.apache.geode.distributed.DistributedMember;
+import org.apache.geode.internal.cache.GemFireCacheImpl;
+import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.management.cli.CliMetaData;
+import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.cli.Result.Status;
+import org.apache.geode.management.internal.cli.CliUtil;
+import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
+import org.apache.geode.management.internal.cli.functions.FetchSharedConfigurationStatusFunction;
+import org.apache.geode.management.internal.cli.i18n.CliStrings;
+import org.apache.geode.management.internal.cli.result.ResultBuilder;
+import org.apache.geode.management.internal.cli.result.TabularResultData;
+import org.apache.geode.management.internal.configuration.domain.SharedConfigurationStatus;
+import org.apache.geode.management.internal.security.ResourceOperation;
+import org.apache.geode.security.ResourcePermission.Operation;
+import org.apache.geode.security.ResourcePermission.Resource;
+
+public class StatusClusterConfigServiceCommand implements GfshCommand {
+ private static final FetchSharedConfigurationStatusFunction fetchSharedConfigStatusFunction =
+ new FetchSharedConfigurationStatusFunction();
+
+ @SuppressWarnings("unchecked")
+ @CliCommand(value = CliStrings.STATUS_SHARED_CONFIG, help = CliStrings.STATUS_SHARED_CONFIG_HELP)
+ @CliMetaData(relatedTopic = CliStrings.TOPIC_GEODE_LOCATOR)
+ @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ)
+ public Result statusSharedConfiguration() {
+ final InternalCache cache = GemFireCacheImpl.getInstance();
+ final Set<DistributedMember> locators = new HashSet<DistributedMember>(
+ cache.getDistributionManager().getAllHostedLocatorsWithSharedConfiguration().keySet());
+ if (locators.isEmpty()) {
+ return ResultBuilder.createInfoResult(CliStrings.NO_LOCATORS_WITH_SHARED_CONFIG);
+ } else {
+ return ResultBuilder.buildResult(getSharedConfigurationStatus(locators));
+ }
+ }
+
+ private TabularResultData getSharedConfigurationStatus(Set<DistributedMember> locators) {
+ boolean isSharedConfigRunning = false;
+ ResultCollector<?, ?> rc =
+ CliUtil.executeFunction(fetchSharedConfigStatusFunction, null, locators);
+ List<CliFunctionResult> results = (List<CliFunctionResult>) rc.getResult();
+ TabularResultData table = ResultBuilder.createTabularResultData();
+ table.setHeader("Status of shared configuration on locators");
+
+ for (CliFunctionResult result : results) {
+ table.accumulate(CliStrings.STATUS_SHARED_CONFIG_NAME_HEADER, result.getMemberIdOrName());
+ String status = (String) result.getSerializables()[0];
+ table.accumulate(CliStrings.STATUS_SHARED_CONFIG_STATUS, status);
+ if (SharedConfigurationStatus.RUNNING.name().equals(status)) {
+ isSharedConfigRunning = true;
+ }
+ }
+
+ if (!isSharedConfigRunning) {
+ table.setStatus(Status.ERROR);
+ }
+ return table;
+ }
+}
http://git-wip-us.apache.org/repos/asf/geode/blob/359e3fff/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusCommands.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusCommands.java
deleted file mode 100644
index 0b0b78b..0000000
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusCommands.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.geode.management.internal.cli.commands;
-
-import org.apache.geode.cache.execute.ResultCollector;
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.management.cli.CliMetaData;
-import org.apache.geode.management.cli.Result;
-import org.apache.geode.management.cli.Result.Status;
-import org.apache.geode.management.internal.cli.CliUtil;
-import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
-import org.apache.geode.management.internal.cli.functions.FetchSharedConfigurationStatusFunction;
-import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.cli.result.ResultBuilder;
-import org.apache.geode.management.internal.cli.result.TabularResultData;
-import org.apache.geode.management.internal.configuration.domain.SharedConfigurationStatus;
-import org.apache.geode.management.internal.security.ResourceOperation;
-import org.apache.geode.security.ResourcePermission.Operation;
-import org.apache.geode.security.ResourcePermission.Resource;
-import org.springframework.shell.core.CommandMarker;
-import org.springframework.shell.core.annotation.CliCommand;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-public class StatusCommands implements GfshCommand {
- static final FetchSharedConfigurationStatusFunction fetchSharedConfigStatusFunction =
- new FetchSharedConfigurationStatusFunction();
-
- @SuppressWarnings("unchecked")
- @CliCommand(value = CliStrings.STATUS_SHARED_CONFIG, help = CliStrings.STATUS_SHARED_CONFIG_HELP)
- @CliMetaData(relatedTopic = CliStrings.TOPIC_GEODE_LOCATOR)
- @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ)
- public Result statusSharedConfiguration() {
- final InternalCache cache = GemFireCacheImpl.getInstance();
- final Set<DistributedMember> locators = new HashSet<DistributedMember>(
- cache.getDistributionManager().getAllHostedLocatorsWithSharedConfiguration().keySet());
- if (locators.isEmpty()) {
- return ResultBuilder.createInfoResult(CliStrings.NO_LOCATORS_WITH_SHARED_CONFIG);
- } else {
- return ResultBuilder.buildResult(getSharedConfigurationStatus(locators));
- }
- }
-
- private TabularResultData getSharedConfigurationStatus(Set<DistributedMember> locators) {
- boolean isSharedConfigRunning = false;
- ResultCollector<?, ?> rc =
- CliUtil.executeFunction(fetchSharedConfigStatusFunction, null, locators);
- List<CliFunctionResult> results = (List<CliFunctionResult>) rc.getResult();
- TabularResultData table = ResultBuilder.createTabularResultData();
- table.setHeader("Status of shared configuration on locators");
-
- for (CliFunctionResult result : results) {
- table.accumulate(CliStrings.STATUS_SHARED_CONFIG_NAME_HEADER, result.getMemberIdOrName());
- String status = (String) result.getSerializables()[0];
- table.accumulate(CliStrings.STATUS_SHARED_CONFIG_STATUS, status);
- if (SharedConfigurationStatus.RUNNING.name().equals(status)) {
- isSharedConfigRunning = true;
- }
- }
-
- if (!isSharedConfigRunning) {
- table.setStatus(Status.ERROR);
- }
- return table;
- }
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/359e3fff/geode-core/src/test/java/org/apache/geode/management/internal/security/TestCommand.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/security/TestCommand.java b/geode-core/src/test/java/org/apache/geode/management/internal/security/TestCommand.java
index 178b6b0..195b04a 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/security/TestCommand.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/security/TestCommand.java
@@ -249,7 +249,7 @@ public class TestCommand {
createTestCommand("describe region --name=value", clusterRead);
createTestCommand("list regions", clusterRead);
- // StatusCommands
+ // StatusClusterConfigServiceCommand
createTestCommand("status cluster-config-service", clusterRead);
// Shell Commands