You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2017/08/02 15:59:53 UTC
geode git commit: GEODE-3339: Refactoring
ClusterConfigurationServiceEndToEndDUnitTest
Repository: geode
Updated Branches:
refs/heads/develop 56ea940d3 -> 67026df70
GEODE-3339: Refactoring ClusterConfigurationServiceEndToEndDUnitTest
* this closes #675
Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/67026df7
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/67026df7
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/67026df7
Branch: refs/heads/develop
Commit: 67026df70ca75a2a00b24e50b3de46b4ac116cb0
Parents: 56ea940
Author: YehEmily <em...@gmail.com>
Authored: Tue Aug 1 10:30:09 2017 -0700
Committer: Jinmei Liao <ji...@pivotal.io>
Committed: Wed Aug 2 08:58:39 2017 -0700
----------------------------------------------------------------------
...erConfigurationServiceEndToEndDUnitTest.java | 468 -------------------
.../commands/ClusterConfigurationDUnitTest.java | 144 ++++++
2 files changed, 144 insertions(+), 468 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/geode/blob/67026df7/geode-assembly/src/test/java/org/apache/geode/management/internal/configuration/ClusterConfigurationServiceEndToEndDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-assembly/src/test/java/org/apache/geode/management/internal/configuration/ClusterConfigurationServiceEndToEndDUnitTest.java b/geode-assembly/src/test/java/org/apache/geode/management/internal/configuration/ClusterConfigurationServiceEndToEndDUnitTest.java
deleted file mode 100644
index 415ac3e..0000000
--- a/geode-assembly/src/test/java/org/apache/geode/management/internal/configuration/ClusterConfigurationServiceEndToEndDUnitTest.java
+++ /dev/null
@@ -1,468 +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.configuration;
-
-import static org.apache.geode.cache.RegionShortcut.PARTITION;
-import static org.apache.geode.cache.RegionShortcut.REPLICATE;
-import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
-import static org.apache.geode.distributed.ConfigurationProperties.HTTP_SERVICE_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_BIND_ADDRESS;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.JMX_MANAGER_START;
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
-import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
-import static org.apache.geode.distributed.ConfigurationProperties.NAME;
-import static org.apache.geode.internal.AvailablePortHelper.getRandomAvailableTCPPorts;
-import static org.apache.geode.internal.lang.StringUtils.isBlank;
-import static org.apache.geode.management.internal.cli.CliUtil.getAllNormalMembers;
-import static org.apache.geode.test.dunit.Assert.assertEquals;
-import static org.apache.geode.test.dunit.Assert.assertFalse;
-import static org.apache.geode.test.dunit.Assert.assertNotNull;
-import static org.apache.geode.test.dunit.Assert.assertTrue;
-import static org.apache.geode.test.dunit.Host.getHost;
-import static org.apache.geode.test.dunit.IgnoredException.addIgnoredException;
-import static org.apache.geode.test.dunit.LogWriterUtils.getLogWriter;
-import static org.apache.geode.test.dunit.Wait.waitForCriterion;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.cache.RegionShortcut;
-import org.apache.geode.cache.wan.GatewaySender.OrderPolicy;
-import org.apache.geode.distributed.Locator;
-import org.apache.geode.distributed.internal.InternalLocator;
-import org.apache.geode.internal.ClassBuilder;
-import org.apache.geode.internal.admin.remote.ShutdownAllRequest;
-import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.management.cli.Result.Status;
-import org.apache.geode.management.internal.cli.HeadlessGfsh;
-import org.apache.geode.management.internal.cli.commands.CliCommandTestBase;
-import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.cli.result.CommandResult;
-import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
-import org.apache.geode.test.dunit.SerializableCallable;
-import org.apache.geode.test.dunit.VM;
-import org.apache.geode.test.dunit.WaitCriterion;
-import org.apache.geode.test.junit.categories.DistributedTest;
-import org.apache.geode.test.junit.categories.FlakyTest;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Set;
-
-@Category(DistributedTest.class)
-public class ClusterConfigurationServiceEndToEndDUnitTest extends CliCommandTestBase {
-
- private static final int TIMEOUT = 10000;
- private static final int INTERVAL = 500;
-
- private static final String REGION1 = "R1";
- private static final String REGION2 = "R2";
- private static final String INDEX1 = "ID1";
-
- private static Set<String> serverNames;
- private static Set<String> jarFileNames;
-
- private transient ClassBuilder classBuilder;
- private transient String jmxHost;
- private transient int jmxPort;
- private transient int httpPort;
- private transient String locatorString;
-
- @Override
- public final void postSetUpCliCommandTestBase() throws Exception {
- disconnectAllFromDS();
-
- addIgnoredException("EntryDestroyedException");
-
- serverNames = new HashSet<>();
- jarFileNames = new HashSet<>();
-
- this.classBuilder = new ClassBuilder();
-
- Object[] result = setup();
- int locatorPort = (Integer) result[0];
-
- this.jmxHost = (String) result[1];
- this.jmxPort = (Integer) result[2];
- this.httpPort = (Integer) result[3];
- this.locatorString = "localHost[" + locatorPort + "]";
- }
-
- @Override
- public final void preTearDownCliCommandTestBase() throws Exception {
- // shutdown everything
- shutdownAll();
-
- serverNames.clear();
- jarFileNames.clear();
-
- serverNames = null;
- jarFileNames = null;
- }
-
- @Category(FlakyTest.class) // GEODE-1606
- @Test
- public void testStartServerAndExecuteCommands() throws Exception {
- final HeadlessGfsh gfsh = new HeadlessGfsh("gfsh2", 300, this.gfshDir);
- assertNotNull(gfsh);
- connect(jmxHost, jmxPort, httpPort, gfsh);
-
- serverNames.addAll(startServers(gfsh, locatorString, 2, "Server", 1));
- doCreateCommands();
- serverNames.addAll(startServers(gfsh, locatorString, 1, "NewMember", 4));
-
- verifyRegionCreateOnAllMembers(REGION1);
- verifyRegionCreateOnAllMembers(REGION2);
- verifyIndexCreationOnAllMembers(INDEX1);
- verifyAsyncEventQueueCreation();
- }
-
- private Set<String> startServers(final HeadlessGfsh gfsh, final String locatorString,
- final int numServers, final String serverNamePrefix, final int startNum)
- throws ClassNotFoundException, IOException {
- Set<String> serverNames = new HashSet<>();
-
- final int[] serverPorts = getRandomAvailableTCPPorts(numServers);
- for (int i = 0; i < numServers; i++) {
- int port = serverPorts[i];
- String serverName = serverNamePrefix + Integer.toString(i + startNum) + "-" + port;
-
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.START_SERVER);
- csb.addOption(CliStrings.START_SERVER__NAME, serverName);
- csb.addOption(CliStrings.START_SERVER__LOCATORS, locatorString);
- csb.addOption(CliStrings.START_SERVER__SERVER_PORT, Integer.toString(port));
-
- CommandResult cmdResult = executeCommand(gfsh, csb.getCommandString());
-
- assertEquals(Status.OK, cmdResult.getStatus());
- }
- return serverNames;
- }
-
- private void doCreateCommands() throws IOException {
- createRegion(REGION1, REPLICATE, null);
- createRegion(REGION2, PARTITION, null);
- createIndex(INDEX1, "AAPL", REGION1, null);
- createAndDeployJar(
- this.temporaryFolder.getRoot().getCanonicalPath() + File.separator + "Deploy1.jar");
- createAsyncEventQueue("q1");
- final String autoCompact = "true";
- final String allowForceCompaction = "true";
- final String compactionThreshold = "50";
- final String duCritical = "90";
- final String duWarning = "85";
- final String maxOplogSize = "1000";
- final String queueSize = "300";
- final String timeInterval = "10";
- final String writeBufferSize = "100";
- final String diskStoreName = "ds1";
- final String diskDirs = "ds1";
-
- createDiskStore(diskStoreName, diskDirs, autoCompact, allowForceCompaction, compactionThreshold,
- duCritical, duWarning, maxOplogSize, queueSize, timeInterval, writeBufferSize);
- }
-
- private void executeAndVerifyCommand(final String commandString) {
- CommandResult cmdResult = executeCommand(commandString);
- getLogWriter().info("Command Result : \n" + commandResultToString(cmdResult));
- assertEquals(Status.OK, cmdResult.getStatus());
- assertFalse(cmdResult.failedToPersist());
- }
-
- private void createRegion(final String regionName, final RegionShortcut regionShortCut,
- final String group) {
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.CREATE_REGION);
- csb.addOption(CliStrings.CREATE_REGION__REGION, regionName);
- csb.addOption(CliStrings.CREATE_REGION__REGIONSHORTCUT, regionShortCut.name());
- executeAndVerifyCommand(csb.getCommandString());
- }
-
- private void destroyRegion(final String regionName) {
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DESTROY_REGION);
- csb.addOption(CliStrings.DESTROY_REGION__REGION, regionName);
- executeAndVerifyCommand(csb.getCommandString());
- }
-
- private void stopServer(final String serverName) {
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.STOP_SERVER);
- csb.addOption(CliStrings.STOP_SERVER__MEMBER, serverName);
- executeAndVerifyCommand(csb.getCommandString());
- }
-
- private void createAsyncEventQueue(final String queueName) throws IOException {
- String queueCommandsJarName = "testEndToEndSC-QueueCommands.jar";
- final File jarFile = new File(queueCommandsJarName);
-
- try {
- ClassBuilder classBuilder = new ClassBuilder();
- byte[] jarBytes =
- classBuilder.createJarFromClassContent("com/qcdunit/QueueCommandsDUnitTestListener",
- "package com.qcdunit;" + "import java.util.List; import java.util.Properties;"
- + "import org.apache.geode.internal.cache.xmlcache.Declarable2; import org.apache.geode.cache.asyncqueue.AsyncEvent;"
- + "import org.apache.geode.cache.asyncqueue.AsyncEventListener;"
- + "public class QueueCommandsDUnitTestListener implements Declarable2, AsyncEventListener {"
- + "Properties props;"
- + "public boolean processEvents(List<AsyncEvent> events) { return true; }"
- + "public void close() {}"
- + "public void init(final Properties props) {this.props = props;}"
- + "public Properties getConfig() {return this.props;}}");
-
- FileUtils.writeByteArrayToFile(jarFile, jarBytes);
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DEPLOY);
- csb.addOption(CliStrings.JAR, queueCommandsJarName);
- executeAndVerifyCommand(csb.getCommandString());
-
- csb = new CommandStringBuilder(CliStrings.CREATE_ASYNC_EVENT_QUEUE);
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__ID, queueName);
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__LISTENER,
- "com.qcdunit.QueueCommandsDUnitTestListener");
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__BATCH_SIZE, "100");
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__BATCHTIMEINTERVAL, "200");
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISPATCHERTHREADS, "4");
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__ENABLEBATCHCONFLATION, "true");
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISKSYNCHRONOUS, "true");
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__FORWARD_EXPIRATION_DESTROY, "false");
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__MAXIMUM_QUEUE_MEMORY, "1000");
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__ORDERPOLICY, OrderPolicy.KEY.toString());
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__PERSISTENT, "true");
- csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__PARALLEL, "true");
-
- executeAndVerifyCommand(csb.getCommandString());
-
- } finally {
- FileUtils.deleteQuietly(jarFile);
- }
- }
-
- private void createDiskStore(final String diskStoreName, final String diskDirs,
- final String autoCompact, final String allowForceCompaction, final String compactionThreshold,
- final String duCritical, final String duWarning, final String maxOplogSize,
- final String queueSize, final String timeInterval, final String writeBufferSize) {
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.CREATE_DISK_STORE);
- csb.addOption(CliStrings.CREATE_DISK_STORE__NAME, diskStoreName);
- csb.addOption(CliStrings.CREATE_DISK_STORE__DIRECTORY_AND_SIZE, diskDirs);
- csb.addOptionWithValueCheck(CliStrings.CREATE_DISK_STORE__AUTO_COMPACT, autoCompact);
- csb.addOptionWithValueCheck(CliStrings.CREATE_DISK_STORE__ALLOW_FORCE_COMPACTION,
- allowForceCompaction);
- csb.addOptionWithValueCheck(CliStrings.CREATE_DISK_STORE__COMPACTION_THRESHOLD,
- compactionThreshold);
- csb.addOptionWithValueCheck(CliStrings.CREATE_DISK_STORE__DISK_USAGE_CRITICAL_PCT, duCritical);
- csb.addOptionWithValueCheck(CliStrings.CREATE_DISK_STORE__DISK_USAGE_WARNING_PCT, duWarning);
- csb.addOptionWithValueCheck(CliStrings.CREATE_DISK_STORE__MAX_OPLOG_SIZE, maxOplogSize);
- csb.addOptionWithValueCheck(CliStrings.CREATE_DISK_STORE__QUEUE_SIZE, queueSize);
- csb.addOptionWithValueCheck(CliStrings.CREATE_DISK_STORE__TIME_INTERVAL, timeInterval);
- csb.addOptionWithValueCheck(CliStrings.CREATE_DISK_STORE__WRITE_BUFFER_SIZE, writeBufferSize);
- executeAndVerifyCommand(csb.getCommandString());
- }
-
- private void destroyDiskStore(final String diskStoreName, final String group) {
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DESTROY_DISK_STORE);
- csb.addOption(CliStrings.DESTROY_DISK_STORE__NAME, diskStoreName);
- csb.addOptionWithValueCheck(CliStrings.GROUP, group);
- executeAndVerifyCommand(csb.toString());
- }
-
- private void createIndex(final String indexName, final String expression, final String regionName,
- final String group) {
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.CREATE_INDEX);
- csb.addOption(CliStrings.CREATE_INDEX__NAME, indexName);
- csb.addOption(CliStrings.CREATE_INDEX__EXPRESSION, expression);
- csb.addOption(CliStrings.CREATE_INDEX__REGION, regionName);
- executeAndVerifyCommand(csb.getCommandString());
- }
-
- private void destroyIndex(final String indexName, final String regionName, final String group) {
- if (isBlank(indexName) && isBlank(regionName) && isBlank(group)) {
- return;
- }
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DESTROY_INDEX);
- if (!isBlank(indexName)) {
- csb.addOption(CliStrings.DESTROY_INDEX__NAME, indexName);
- }
-
- if (!isBlank(regionName)) {
- csb.addOption(CliStrings.DESTROY_INDEX__REGION, regionName);
- }
-
- if (!isBlank(group)) {
- csb.addOption(CliStrings.GROUP, group);
- }
- executeAndVerifyCommand(csb.getCommandString());
- }
-
- private void createAndDeployJar(final String jarName) throws IOException {
- File newDeployableJarFile = new File(jarName);
- this.classBuilder.writeJarFromName("ShareConfigClass", newDeployableJarFile);
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DEPLOY);
- csb.addOption(CliStrings.JAR, jarName);
- executeAndVerifyCommand(csb.getCommandString());
- jarFileNames.add(jarName);
- }
-
- private Object[] setup() throws IOException {
- final int[] ports = getRandomAvailableTCPPorts(3);
- final int locator1Port = ports[0];
-
- final String locator1Name = "locator1-" + locator1Port;
- final String locatorLogPath = this.temporaryFolder.getRoot().getCanonicalPath() + File.separator
- + "locator-" + locator1Port + ".log";
-
- VM locatorAndMgr = getHost(0).getVM(3);
- Object[] result = (Object[]) locatorAndMgr.invoke(new SerializableCallable() {
- @Override
- public Object call() throws IOException {
- int httpPort;
- int jmxPort;
- String jmxHost;
-
- try {
- jmxHost = InetAddress.getLocalHost().getHostName();
- } catch (UnknownHostException ignore) {
- jmxHost = "localhost";
- }
-
- final int[] ports = getRandomAvailableTCPPorts(2);
-
- jmxPort = ports[0];
- httpPort = ports[1];
-
- final File locatorLogFile = new File(locatorLogPath);
-
- final Properties locatorProps = new Properties();
- locatorProps.setProperty(NAME, locator1Name);
- locatorProps.setProperty(MCAST_PORT, "0");
- locatorProps.setProperty(LOG_LEVEL, "config");
- locatorProps.setProperty(ENABLE_CLUSTER_CONFIGURATION, "true");
- locatorProps.setProperty(JMX_MANAGER, "true");
- locatorProps.setProperty(JMX_MANAGER_START, "true");
- locatorProps.setProperty(JMX_MANAGER_BIND_ADDRESS, String.valueOf(jmxHost));
- locatorProps.setProperty(JMX_MANAGER_PORT, String.valueOf(jmxPort));
- locatorProps.setProperty(HTTP_SERVICE_PORT, String.valueOf(httpPort));
-
- final InternalLocator locator = (InternalLocator) Locator.startLocatorAndDS(locator1Port,
- locatorLogFile, null, locatorProps);
-
- WaitCriterion wc = new WaitCriterion() {
- @Override
- public boolean done() {
- return locator.isSharedConfigurationRunning();
- }
-
- @Override
- public String description() {
- return "Waiting for shared configuration to be started";
- }
- };
- waitForCriterion(wc, TIMEOUT, INTERVAL, true);
-
- final Object[] result = new Object[4];
- result[0] = locator1Port;
- result[1] = jmxHost;
- result[2] = jmxPort;
- result[3] = httpPort;
- return result;
- }
- });
-
- HeadlessGfsh gfsh = getDefaultShell();
- String jmxHost = (String) result[1];
- int jmxPort = (Integer) result[2];
- int httpPort = (Integer) result[3];
-
- connect(jmxHost, jmxPort, httpPort, gfsh);
-
- // Create a cache in VM 1
- VM dataMember = getHost(0).getVM(1);
- dataMember.invoke(new SerializableCallable() {
- @Override
- public Object call() {
- Properties localProps = new Properties();
- localProps.setProperty(MCAST_PORT, "0");
- localProps.setProperty(LOCATORS, "localhost[" + locator1Port + "]");
- localProps.setProperty(NAME, "DataMember");
- getSystem(localProps);
- InternalCache cache = getCache();
- assertNotNull(cache);
- return getAllNormalMembers(cache);
- }
- });
- return result;
- }
-
- private void shutdownAll() throws IOException {
- VM locatorAndMgr = getHost(0).getVM(3);
- locatorAndMgr.invoke(new SerializableCallable() {
- @Override
- public Object call() throws Exception {
- InternalCache cache = (InternalCache) CacheFactory.getAnyInstance();
- ShutdownAllRequest.send(cache.getInternalDistributedSystem().getDistributionManager(), -1);
- return null;
- }
- });
-
- locatorAndMgr.invoke(SharedConfigurationTestUtils.cleanupLocator);
-
- // Clean up the directories
- if (!serverNames.isEmpty()) {
- for (String serverName : serverNames) {
- final File serverDir = new File(serverName);
- FileUtils.cleanDirectory(serverDir);
- FileUtils.deleteDirectory(serverDir);
- }
- }
- serverNames.clear();
- }
-
- private void verifyRegionCreateOnAllMembers(final String regionName) {
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DESCRIBE_REGION);
- csb.addOption(CliStrings.DESCRIBE_REGION__NAME, regionName);
- CommandResult cmdResult = executeCommand(csb.getCommandString());
- String resultAsString = commandResultToString(cmdResult);
-
- for (String serverName : serverNames) {
- assertTrue(resultAsString.contains(serverName));
- }
- }
-
- private void verifyIndexCreationOnAllMembers(final String indexName) {
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.LIST_INDEX);
- CommandResult cmdResult = executeCommand(csb.getCommandString());
- String resultAsString = commandResultToString(cmdResult);
-
- for (String serverName : serverNames) {
- assertTrue(resultAsString.contains(serverName));
- }
- }
-
- private void verifyAsyncEventQueueCreation() {
- CommandStringBuilder csb = new CommandStringBuilder(CliStrings.LIST_ASYNC_EVENT_QUEUES);
- CommandResult cmdResult = executeCommand(csb.toString());
- String resultAsString = commandResultToString(cmdResult);
-
- for (String serverName : serverNames) {
- assertTrue(resultAsString.contains(serverName));
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/geode/blob/67026df7/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/ClusterConfigurationDUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/ClusterConfigurationDUnitTest.java b/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/ClusterConfigurationDUnitTest.java
new file mode 100644
index 0000000..80263dd
--- /dev/null
+++ b/geode-web/src/test/java/org/apache/geode/management/internal/cli/commands/ClusterConfigurationDUnitTest.java
@@ -0,0 +1,144 @@
+/*
+ * 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 static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import org.apache.geode.cache.wan.GatewaySender;
+import org.apache.geode.internal.ClassBuilder;
+import org.apache.geode.management.internal.cli.i18n.CliStrings;
+import org.apache.geode.management.internal.cli.util.CommandStringBuilder;
+import org.apache.geode.test.dunit.rules.GfshShellConnectionRule;
+import org.apache.geode.test.dunit.rules.LocatorServerStartupRule;
+import org.apache.geode.test.dunit.rules.MemberVM;
+import org.apache.geode.test.junit.categories.DistributedTest;
+
+@Category(DistributedTest.class)
+@RunWith(Parameterized.class)
+public class ClusterConfigurationDUnitTest {
+ @Rule
+ public LocatorServerStartupRule startupRule = new LocatorServerStartupRule();
+
+ @Rule
+ public GfshShellConnectionRule gfsh = new GfshShellConnectionRule();
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Parameterized.Parameter
+ public boolean connectOverHttp;
+
+ @Parameterized.Parameters
+ public static Collection<Boolean> data() {
+ return Arrays.asList(true, false);
+ }
+
+ // TODO mark GEODE-1606 resolved after
+ @Test
+ public void testStartServerAndExecuteCommands() throws Exception {
+ MemberVM locator = startupRule.startLocatorVM(0);
+ if (connectOverHttp) {
+ gfsh.connectAndVerify(locator.getHttpPort(), GfshShellConnectionRule.PortType.http);
+ } else {
+ gfsh.connectAndVerify(locator);
+ }
+
+ MemberVM server1 = startupRule.startServerVM(1, locator.getPort());
+ MemberVM server2 = startupRule.startServerVM(2, locator.getPort());
+
+ // create regions, index and asyncEventQueue
+ gfsh.executeAndVerifyCommand("create region --name=R1 --type=REPLICATE");
+ gfsh.executeAndVerifyCommand("create region --name=R2 --type=PARTITION");
+ gfsh.executeAndVerifyCommand("create index --name=ID1 --expression=AAPL --region=R1");
+ createAsyncEventQueue("Q1");
+
+ MemberVM server3 = startupRule.startServerVM(3, locator.getPort());
+
+ gfsh.executeAndVerifyCommand("describe region --name=R1");
+ verifyContainsAllServerNames(gfsh.getGfshOutput(), server1.getName(), server2.getName(),
+ server3.getName());
+
+ gfsh.executeAndVerifyCommand("describe region --name=R2");
+ verifyContainsAllServerNames(gfsh.getGfshOutput(), server1.getName(), server2.getName(),
+ server3.getName());
+
+ gfsh.executeAndVerifyCommand("list indexes");
+ verifyContainsAllServerNames(gfsh.getGfshOutput(), server1.getName(), server2.getName(),
+ server3.getName());
+
+ gfsh.executeAndVerifyCommand("list async-event-queues");
+ verifyContainsAllServerNames(gfsh.getGfshOutput(), server1.getName(), server2.getName(),
+ server3.getName());
+ }
+
+ private void verifyContainsAllServerNames(String result, String... serverNames) {
+ for (String serverName : serverNames) {
+ assertTrue(result.contains(serverName));
+ }
+ }
+
+ private void createAsyncEventQueue(final String queueName) throws Exception {
+ String queueCommandsJarName = "testEndToEndSC-QueueCommands.jar";
+ final File jarFile = temporaryFolder.newFile(queueCommandsJarName);
+ ClassBuilder classBuilder = new ClassBuilder();
+ byte[] jarBytes =
+ classBuilder.createJarFromClassContent("com/qcdunit/QueueCommandsDUnitTestListener",
+ "package com.qcdunit;" + "import java.util.List; import java.util.Properties;"
+ + "import org.apache.geode.internal.cache.xmlcache.Declarable2; import org.apache.geode.cache.asyncqueue.AsyncEvent;"
+ + "import org.apache.geode.cache.asyncqueue.AsyncEventListener;"
+ + "public class QueueCommandsDUnitTestListener implements Declarable2, AsyncEventListener {"
+ + "Properties props;"
+ + "public boolean processEvents(List<AsyncEvent> events) { return true; }"
+ + "public void close() {}"
+ + "public void init(final Properties props) {this.props = props;}"
+ + "public Properties getConfig() {return this.props;}}");
+
+ FileUtils.writeByteArrayToFile(jarFile, jarBytes);
+ CommandStringBuilder csb = new CommandStringBuilder(CliStrings.DEPLOY);
+ csb.addOption(CliStrings.JAR, jarFile.getAbsolutePath());
+ gfsh.executeAndVerifyCommand(csb.getCommandString());
+
+ csb = new CommandStringBuilder(CliStrings.CREATE_ASYNC_EVENT_QUEUE);
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__ID, queueName);
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__LISTENER,
+ "com.qcdunit.QueueCommandsDUnitTestListener");
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__BATCH_SIZE, "100");
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__BATCHTIMEINTERVAL, "200");
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISPATCHERTHREADS, "4");
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__ENABLEBATCHCONFLATION, "true");
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISKSYNCHRONOUS, "true");
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__FORWARD_EXPIRATION_DESTROY, "false");
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__MAXIMUM_QUEUE_MEMORY, "1000");
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__ORDERPOLICY,
+ GatewaySender.OrderPolicy.KEY.toString());
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__PERSISTENT, "true");
+ csb.addOption(CliStrings.CREATE_ASYNC_EVENT_QUEUE__PARALLEL, "true");
+
+ gfsh.executeAndVerifyCommand(csb.getCommandString());
+ }
+}