This is an automated email from the ASF dual-hosted git repository.
jinmeiliao pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new bde6e8b GEODE-3530: refactor ListClientCommandDUnitTest (#2129)
bde6e8b is described below
commit bde6e8b32e54adba8172dd09cc67a459aec1fd6d
Author: FSOUTHERLAND <[email protected]>
AuthorDate: Mon Jul 16 08:57:36 2018 -0700
GEODE-3530: refactor ListClientCommandDUnitTest (#2129)
Co-authored-by: Jinmei Liao <[email protected]>
---
.../geode/test/dunit/rules/ClusterStartupRule.java | 5 +-
.../apache/geode/test/dunit/rules/MemberVM.java | 6 +
.../geode/test/junit/rules/MemberStarterRule.java | 26 ++
.../cli/commands/ClientCommandsTestUtils.java | 140 -------
.../cli/commands/ListClientCommandDUnitTest.java | 458 ++++++---------------
5 files changed, 156 insertions(+), 479 deletions(-)
diff --git
a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
index 67cdc89..602c727 100644
---
a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
+++
b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/ClusterStartupRule.java
@@ -296,7 +296,10 @@ public class ClusterStartupRule extends ExternalResource
implements Serializable
}
/**
- * gracefully stop the member inside this vm
+ * gracefully stop the member/client inside this vm
+ *
+ * if this vm is a server/locator, it stops them
+ * if this vm is a client, it closes the client cache.
*
* @param index vm index
*/
diff --git
a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/MemberVM.java
b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/MemberVM.java
index f1aaf81..78a0f62 100644
--- a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/MemberVM.java
+++ b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/MemberVM.java
@@ -166,6 +166,12 @@ public class MemberVM extends VMProvider implements Member
{
.waitUntilRegionIsReadyOnExactlyThisManyServers(regionPath,
serverCount));
}
+
+ public void waitTillClientsAreReadyOnServers(String serverName, int
serverPort, int clientCount) {
+ vm.invoke(() ->
ClusterStartupRule.memberStarter.waitTillClientsAreReadyOnServer(serverName,
+ serverPort, clientCount));
+ }
+
public void waitUntilDiskStoreIsReadyOnExactlyThisManyServers(String
diskstoreName,
int serverCount) {
vm.invoke(() -> ClusterStartupRule.memberStarter
diff --git
a/geode-core/src/test/java/org/apache/geode/test/junit/rules/MemberStarterRule.java
b/geode-core/src/test/java/org/apache/geode/test/junit/rules/MemberStarterRule.java
index f451dd4..b8b85ef 100644
---
a/geode-core/src/test/java/org/apache/geode/test/junit/rules/MemberStarterRule.java
+++
b/geode-core/src/test/java/org/apache/geode/test/junit/rules/MemberStarterRule.java
@@ -25,6 +25,7 @@ import static
org.apache.geode.distributed.ConfigurationProperties.MAX_WAIT_TIME
import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
import static org.apache.geode.distributed.ConfigurationProperties.NAME;
import static
org.apache.geode.distributed.ConfigurationProperties.SECURITY_MANAGER;
+import static
org.apache.geode.management.internal.ManagementConstants.OBJECTNAME__CLIENTSERVICE_MXBEAN;
import static org.awaitility.Awaitility.await;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
@@ -32,6 +33,7 @@ import static org.junit.Assert.assertThat;
import java.io.File;
import java.io.IOException;
+import java.text.MessageFormat;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -42,6 +44,8 @@ import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
+import javax.management.ObjectName;
+
import org.apache.commons.lang.ArrayUtils;
import org.assertj.core.api.Assertions;
import org.awaitility.core.ConditionTimeoutException;
@@ -53,9 +57,12 @@ import
org.apache.geode.distributed.internal.membership.gms.MembershipManagerHel
import org.apache.geode.internal.AvailablePortHelper;
import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.internal.net.SocketCreatorFactory;
+import org.apache.geode.management.CacheServerMXBean;
import org.apache.geode.management.DistributedRegionMXBean;
import org.apache.geode.management.DistributedSystemMXBean;
import org.apache.geode.management.ManagementService;
+import org.apache.geode.management.internal.MBeanJMXAdapter;
+import org.apache.geode.management.internal.SystemManagementService;
import org.apache.geode.management.internal.cli.CliUtil;
import org.apache.geode.security.SecurityManager;
import
org.apache.geode.test.junit.rules.serializable.SerializableExternalResource;
@@ -295,6 +302,25 @@ public abstract class MemberStarterRule<T> extends
SerializableExternalResource
WAIT_UNTIL_TIMEOUT, TimeUnit.SECONDS);
}
+ public void waitTillClientsAreReadyOnServer(String serverName, int
serverPort, int clientCount) {
+ waitTillCacheServerIsReady(serverName, serverPort);
+ CacheServerMXBean bean = getCacheServerMXBean(serverName, serverPort);
+ await().atMost(1, TimeUnit.MINUTES).until(() -> bean.getClientIds().length
== clientCount);
+ }
+
+ public void waitTillCacheServerIsReady(String serverName, int serverPort) {
+ await().atMost(1, TimeUnit.MINUTES)
+ .until(() -> getCacheServerMXBean(serverName, serverPort) != null);
+ }
+
+ public CacheServerMXBean getCacheServerMXBean(String serverName, int
serverPort) {
+ SystemManagementService managementService = (SystemManagementService)
getManagementService();
+ String objectName = MessageFormat.format(OBJECTNAME__CLIENTSERVICE_MXBEAN,
+ String.valueOf(serverPort), serverName);
+ ObjectName cacheServerMBeanName =
MBeanJMXAdapter.getObjectName(objectName);
+ return managementService.getMBeanProxy(cacheServerMBeanName,
CacheServerMXBean.class);
+ }
+
public void waitUntilGatewaySendersAreReadyOnExactlyThisManyServers(int
exactGatewaySenderCount)
throws Exception {
DistributedSystemMXBean dsMXBean =
getManagementService().getDistributedSystemMXBean();
diff --git
a/geode-cq/src/test/java/org/apache/geode/management/internal/cli/commands/ClientCommandsTestUtils.java
b/geode-cq/src/test/java/org/apache/geode/management/internal/cli/commands/ClientCommandsTestUtils.java
deleted file mode 100644
index 038e1c0..0000000
---
a/geode-cq/src/test/java/org/apache/geode/management/internal/cli/commands/ClientCommandsTestUtils.java
+++ /dev/null
@@ -1,140 +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 static
org.apache.geode.distributed.ConfigurationProperties.ENABLE_NETWORK_PARTITION_DETECTION;
-import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
-import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
-import static
org.apache.geode.test.dunit.DistributedTestUtils.getDUnitLocatorPort;
-import static org.apache.geode.test.dunit.LogWriterUtils.getLogWriter;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.commons.lang.exception.ExceptionUtils;
-
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.CacheFactory;
-import org.apache.geode.cache.client.ClientCacheFactory;
-import org.apache.geode.cache.query.CqAttributesFactory;
-import org.apache.geode.cache.query.QueryService;
-import org.apache.geode.cache.server.CacheServer;
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
-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.result.CompositeResultData;
-import org.apache.geode.management.internal.cli.result.TabularResultData;
-import org.apache.geode.test.dunit.VM;
-
-class ClientCommandsTestUtils extends CliCommandTestBase {
- static Properties getServerProperties() {
- Properties p = new Properties();
- p.setProperty(LOCATORS, "localhost[" + getDUnitLocatorPort() + "]");
- p.setProperty(ENABLE_NETWORK_PARTITION_DETECTION, "false");
- return p;
- }
-
- static String getDistributedMemberId() {
- return
GemFireCacheImpl.getInstance().getDistributedSystem().getDistributedMember().getId();
- }
-
- static DistributedMember getMember(final VM vm) {
- return vm.invoke("Get Member",
- () ->
GemFireCacheImpl.getInstance().getDistributedSystem().getDistributedMember());
- }
-
- static void closeNonDurableClient(final VM vm) {
- vm.invoke("Stop client", () ->
ClientCacheFactory.getAnyInstance().close(true));
- }
-
- static void closeCacheServer(final VM vm) {
- vm.invoke("Stop client", () -> {
- for (CacheServer cacheServer :
CacheFactory.getAnyInstance().getCacheServers()) {
- cacheServer.stop();
- }
- });
- }
-
- static Properties getNonDurableClientProps() {
- Properties p = new Properties();
- p.setProperty(MCAST_PORT, "0");
- p.setProperty(LOCATORS, "");
- return p;
- }
-
- static void setupCqsOnVM(String cq1, String cq2, String cq3, String
regionName, VM vm) {
- vm.invoke("setup CQs", () -> {
- Cache cache = GemFireCacheImpl.getInstance();
- QueryService qs = cache.getQueryService();
- CqAttributesFactory cqAf = new CqAttributesFactory();
- try {
- qs.newCq(cq1, "select * from /" + regionName, cqAf.create(),
true).execute();
- qs.newCq(cq2, "select * from /" + regionName + " where id = 1",
cqAf.create(), true)
- .execute();
- qs.newCq(cq3, "select * from /" + regionName + " where id > 2",
cqAf.create(), true)
- .execute();
- cache.getLogger()
- .info("setupCqs on vm created cqs = " +
cache.getQueryService().getCqs().length);
- } catch (Exception e) {
- cache.getLogger().info("setupCqs on vm Exception " +
ExceptionUtils.getStackTrace(e));
- }
- return true;
- });
- }
-
- static void verifyClientStats(CommandResult commandResultForClient, String
serverName) {
- CompositeResultData resultData = (CompositeResultData)
commandResultForClient.getResultData();
- CompositeResultData.SectionResultData section =
resultData.retrieveSection("InfoSection");
- assertNotNull(section);
-
- for (int i = 0; i < 1; i++) {
- TabularResultData tableResultData = section.retrieveTableByIndex(i);
- getLogWriter().info("testDescribeClientWithServers getHeader=" +
tableResultData.getHeader());
- assertNotNull(tableResultData);
- List<String> minConn =
tableResultData.retrieveAllValues(CliStrings.DESCRIBE_CLIENT_MIN_CONN);
- List<String> maxConn =
tableResultData.retrieveAllValues(CliStrings.DESCRIBE_CLIENT_MAX_CONN);
- List<String> redundancy =
-
tableResultData.retrieveAllValues(CliStrings.DESCRIBE_CLIENT_REDUNDANCY);
- List<String> numCqs =
tableResultData.retrieveAllValues(CliStrings.DESCRIBE_CLIENT_CQs);
- getLogWriter().info("testDescribeClientWithServers getHeader numCqs =" +
numCqs);
-
- assertTrue(minConn.contains("1"));
- assertTrue(maxConn.contains("-1"));
- assertTrue(redundancy.contains("1"));
- assertTrue(numCqs.contains("3"));
- String puts =
section.retrieveString(CliStrings.DESCRIBE_CLIENT_COLUMN_PUTS);
- assertTrue(puts.equals("2"));
- String queue =
section.retrieveString(CliStrings.DESCRIBE_CLIENT_COLUMN_QUEUE_SIZE);
- assertTrue(queue.equals("1"));
- String calls =
section.retrieveString(CliStrings.DESCRIBE_CLIENT_COLUMN_LISTENER_CALLS);
- assertTrue(calls.equals("1"));
- String primServer =
section.retrieveString(CliStrings.DESCRIBE_CLIENT_COLUMN_PRIMARY_SERVERS);
- assertTrue(primServer.equals(serverName));
- String durable =
section.retrieveString(CliStrings.DESCRIBE_CLIENT_COLUMN_DURABLE);
- assertTrue(durable.equals("No"));
- String threads =
section.retrieveString(CliStrings.DESCRIBE_CLIENT_COLUMN_THREADS);
- assertTrue(Integer.parseInt(threads) > 0);
- String cpu =
section.retrieveString(CliStrings.DESCRIBE_CLIENT_COLUMN_CPU);
- assertTrue(Integer.parseInt(cpu) > 0);
- String upTime =
section.retrieveString(CliStrings.DESCRIBE_CLIENT_COLUMN_UP_TIME);
- assertTrue(Integer.parseInt(upTime) >= 0);
- String prcTime =
section.retrieveString(CliStrings.DESCRIBE_CLIENT_COLUMN_PROCESS_CPU_TIME);
- assertTrue(Long.parseLong(prcTime) > 0);
- }
- }
-}
diff --git
a/geode-cq/src/test/java/org/apache/geode/management/internal/cli/commands/ListClientCommandDUnitTest.java
b/geode-cq/src/test/java/org/apache/geode/management/internal/cli/commands/ListClientCommandDUnitTest.java
index 352b7e2..2858d5d 100644
---
a/geode-cq/src/test/java/org/apache/geode/management/internal/cli/commands/ListClientCommandDUnitTest.java
+++
b/geode-cq/src/test/java/org/apache/geode/management/internal/cli/commands/ListClientCommandDUnitTest.java
@@ -12,391 +12,173 @@
* 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.apache.geode.distributed.ConfigurationProperties.LOG_FILE;
-import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL;
-import static
org.apache.geode.distributed.ConfigurationProperties.STATISTIC_ARCHIVE_FILE;
-import static
org.apache.geode.distributed.ConfigurationProperties.STATISTIC_SAMPLING_ENABLED;
-import static org.apache.geode.test.dunit.LogWriterUtils.getLogWriter;
-import static org.apache.geode.test.dunit.NetworkUtils.getServerHostName;
-import static org.junit.Assert.assertEquals;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
import java.util.List;
import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-
-import javax.management.ObjectName;
import org.apache.commons.lang.exception.ExceptionUtils;
-import org.awaitility.Awaitility;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
-import org.apache.geode.cache.AttributesFactory;
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.DataPolicy;
import org.apache.geode.cache.Region;
-import org.apache.geode.cache.Scope;
+import org.apache.geode.cache.RegionShortcut;
import org.apache.geode.cache.client.ClientCache;
-import org.apache.geode.cache.client.ClientCacheFactory;
import org.apache.geode.cache.client.ClientRegionFactory;
import org.apache.geode.cache.client.ClientRegionShortcut;
import org.apache.geode.cache.client.PoolManager;
import org.apache.geode.cache.client.internal.PoolImpl;
-import org.apache.geode.cache.server.CacheServer;
-import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.OSProcess;
-import org.apache.geode.internal.cache.DistributedRegion;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.internal.cache.tier.sockets.CacheServerTestUtil;
-import org.apache.geode.management.CacheServerMXBean;
-import org.apache.geode.management.ManagementService;
-import org.apache.geode.management.cli.Result;
-import org.apache.geode.management.internal.SystemManagementService;
-import org.apache.geode.management.internal.cli.LogWrapper;
-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.result.CompositeResultData;
-import org.apache.geode.management.internal.cli.result.TabularResultData;
-import org.apache.geode.test.dunit.Host;
-import org.apache.geode.test.dunit.SerializableRunnableIF;
-import org.apache.geode.test.dunit.VM;
+import org.apache.geode.test.dunit.rules.ClientVM;
+import org.apache.geode.test.dunit.rules.ClusterStartupRule;
+import org.apache.geode.test.dunit.rules.MemberVM;
import org.apache.geode.test.junit.categories.DistributedTest;
-import org.apache.geode.test.junit.categories.FlakyTest;
import org.apache.geode.test.junit.categories.GfshTest;
+import org.apache.geode.test.junit.rules.GfshCommandRule;
-@Category({DistributedTest.class, FlakyTest.class, GfshTest.class}) //
GEODE-908 GEODE-3530
-@SuppressWarnings("serial")
-public class ListClientCommandDUnitTest extends CliCommandTestBase {
-
- private final String regionName = "stocks";
- private int port0 = 0;
- private int port1 = 0;
-
- @Test // FlakyTest: GEODE-908
- public void testListClient() throws Exception {
- setupSystemForListClient();
- final VM manager = Host.getHost(0).getVM(0);
+@Category({DistributedTest.class, GfshTest.class})
+public class ListClientCommandDUnitTest {
+ @ClassRule
+ public static ClusterStartupRule cluster = new ClusterStartupRule(6);
- String commandString = CliStrings.LIST_CLIENTS;
- getLogWriter().info("testListClient commandStr=" + commandString);
+ @ClassRule
+ public static GfshCommandRule gfsh = new GfshCommandRule();
- waitForListClientMbean();
+ private static final String REGION_NAME = "stocks";
- final VM server1 = Host.getHost(0).getVM(1);
-
- final DistributedMember serverMember =
ClientCommandsTestUtils.getMember(server1);
-
- String[] clientIds = manager.invoke("get client Ids", () -> {
- final SystemManagementService service =
- (SystemManagementService)
ManagementService.getManagementService(getCache());
- final ObjectName cacheServerMBeanName =
service.getCacheServerMBeanName(port0, serverMember);
- CacheServerMXBean bean = service.getMBeanProxy(cacheServerMBeanName,
CacheServerMXBean.class);
- return bean.getClientIds();
- });
+ public static final int locatorID = 0, server1ID = 1, server2ID = 2,
client1ID = 3, client2ID = 4;
- String serverName = server1.invoke("get distributed member Id",
- ClientCommandsTestUtils::getDistributedMemberId);
+ private static MemberVM locator, server1, server2;
- CommandResult commandResult = executeCommand(commandString);
- getLogWriter().info("testListClient commandResult=" + commandResult);
+ private static ClientVM client1, client2;
- String resultAsString = commandResultToString(commandResult);
- getLogWriter().info("testListClient resultAsString=" + resultAsString);
- assertTrue(Result.Status.OK.equals(commandResult.getStatus()));
+ @BeforeClass
+ public static void setup() throws Exception {
+ locator = cluster.startLocatorVM(locatorID);
+ int locatorPort = locator.getPort();
+ server1 = cluster.startServerVM(server1ID,
+ r -> r.withRegion(RegionShortcut.REPLICATE, REGION_NAME)
+ .withConnectionToLocator(locatorPort));
+ server2 = cluster.startServerVM(server2ID,
+ r -> r.withRegion(RegionShortcut.REPLICATE, REGION_NAME)
+ .withConnectionToLocator(locatorPort));
- CompositeResultData resultData = (CompositeResultData)
commandResult.getResultData();
- CompositeResultData.SectionResultData section =
resultData.retrieveSection("section1");
- assertNotNull(section);
- TabularResultData tableResultData =
section.retrieveTable("TableForClientList");
- assertNotNull(tableResultData);
-
- List<String> serverNames =
-
tableResultData.retrieveAllValues(CliStrings.LIST_CLIENT_COLUMN_SERVERS);
- List<String> clientNames =
-
tableResultData.retrieveAllValues(CliStrings.LIST_CLIENT_COLUMN_Clients);
-
- getLogWriter().info("testListClients serverNames : " + serverNames);
- getLogWriter().info("testListClients clientNames : " + clientNames);
- assertEquals(2, serverNames.size());
- assertEquals(2, clientNames.size());
- assertTrue(clientNames.contains(clientIds[0]));
- assertTrue(clientNames.contains(clientIds[1]));
- serverName = serverName.replace(":", "-");
- getLogWriter().info("testListClients serverName : " + serverName);
- for (String str : serverNames) {
- assertTrue(str.contains(serverName));
- }
- ClientCommandsTestUtils.closeNonDurableClient(Host.getHost(0).getVM(2));
- ClientCommandsTestUtils.closeCacheServer(Host.getHost(0).getVM(1));
- ClientCommandsTestUtils.closeCacheServer(Host.getHost(0).getVM(3));
+ gfsh.connectAndVerify(locator);
}
@Test
- public void testListClientForServers() throws Exception {
- setupSystem();
-
- final VM manager = Host.getHost(0).getVM(0);
-
- String commandString = CliStrings.LIST_CLIENTS;
- System.out.println("testListClientForServers commandStr=" + commandString);
-
- final VM server1 = Host.getHost(0).getVM(1);
- final VM server2 = Host.getHost(0).getVM(3);
-
- final DistributedMember serverMember =
ClientCommandsTestUtils.getMember(server1);
-
- String[] clientIds = manager.invoke("get client Ids", () -> {
- final SystemManagementService service =
- (SystemManagementService)
ManagementService.getManagementService(getCache());
- final ObjectName cacheServerMBeanName =
service.getCacheServerMBeanName(port0, serverMember);
- CacheServerMXBean bean = service.getMBeanProxy(cacheServerMBeanName,
CacheServerMXBean.class);
- return bean.getClientIds();
+ public void testTwoClientsConnectToOneServer() throws Exception {
+ int server1port = server1.getPort();
+ Properties client1props = new Properties();
+ client1props.setProperty("name", "client-1");
+ client1 = cluster.startClientVM(client1ID, client1props, cf -> {
+ cf.addPoolServer("localhost", server1port);
+ cf.setPoolSubscriptionEnabled(true);
+ });
+ Properties client2props = new Properties();
+ client2props.setProperty("name", "client-2");
+ client2 = cluster.startClientVM(client2ID, client2props, cf -> {
+ cf.addPoolServer("localhost", server1port);
+ cf.setPoolSubscriptionEnabled(true);
});
- String serverName1 = server1.invoke("get distributed member Id",
- ClientCommandsTestUtils::getDistributedMemberId);
-
- String serverName2 = server2.invoke("get distributed member Id",
- ClientCommandsTestUtils::getDistributedMemberId);
-
- CommandResult commandResult = executeCommand(commandString);
- System.out.println("testListClientForServers commandResult=" +
commandResult);
-
- String resultAsString = commandResultToString(commandResult);
- System.out.println("testListClientForServers resultAsString=" +
resultAsString);
- assertTrue(Result.Status.OK.equals(commandResult.getStatus()));
-
- CompositeResultData resultData = (CompositeResultData)
commandResult.getResultData();
- CompositeResultData.SectionResultData section =
resultData.retrieveSection("section1");
- assertNotNull(section);
- TabularResultData tableResultData =
section.retrieveTable("TableForClientList");
- assertNotNull(tableResultData);
-
- List<String> serverNames =
-
tableResultData.retrieveAllValues(CliStrings.LIST_CLIENT_COLUMN_SERVERS);
- List<String> clientNames =
-
tableResultData.retrieveAllValues(CliStrings.LIST_CLIENT_COLUMN_Clients);
-
- serverName1 = serverName1.replace(":", "-");
- serverName2 = serverName2.replace(":", "-");
-
- System.out.println("testListClientForServers serverNames : " +
serverNames);
- System.out.println("testListClientForServers serverName1 : " +
serverName1);
- System.out.println("testListClientForServers serverName2 : " +
serverName2);
- System.out.println("testListClientForServers clientNames : " +
clientNames);
-
- for (String client : clientIds) {
- assertTrue(clientNames.contains(client));
+ MemberVM.invokeInEveryMember(() -> {
+ ClientCache clientCache = ClusterStartupRule.getClientCache();
+ ClientRegionFactory<Object, Object> regionFactory =
+ clientCache.createClientRegionFactory(ClientRegionShortcut.LOCAL)
+ .setPoolName(clientCache.getDefaultPool().getName());
+ Region<Object, Object> dataRegion = regionFactory.create(REGION_NAME);
+ assertNotNull(dataRegion);
+ dataRegion.put("k1", "v1");
+ dataRegion.put("k2", "v2");
+ }, client1, client2);
+
+ locator.waitTillClientsAreReadyOnServers("server-1", server1port, 2);
+
+ CommandResult result =
+ gfsh.executeAndAssertThat("list
clients").statusIsSuccess().getCommandResult();
+
+ List<String> clientList =
+ result.getColumnFromTableContent("Client Name / ID", "section1",
"TableForClientList");
+ assertThat(clientList).hasSize(2);
+ try {
+ assertThat(clientList.get(0)).contains("client-1");
+ assertThat(clientList.get(1)).contains("client-2");
+ } catch (AssertionError e) {
+ assertThat(clientList.get(0)).contains("client-2");
+ assertThat(clientList.get(1)).contains("client-1");
}
- for (String server : serverNames) {
- assertTrue(server.contains(serverName1) || server.contains(serverName2));
- }
+ assertThat(
+ result.getColumnFromTableContent("Server Name / ID", "section1",
"TableForClientList"))
+ .hasSize(2)
+ .containsExactlyInAnyOrder("member=server-1,port=" + server1port,
+ "member=server-1,port=" + server1port);
- ClientCommandsTestUtils.closeNonDurableClient(Host.getHost(0).getVM(2));
- ClientCommandsTestUtils.closeCacheServer(Host.getHost(0).getVM(1));
- ClientCommandsTestUtils.closeCacheServer(Host.getHost(0).getVM(3));
+ // shutdown the clients
+ cluster.stopMember(client1ID);
+ cluster.stopMember(client2ID);
}
- private void setupSystem() throws Exception {
- disconnectAllFromDS();
-
setUpJmxManagerOnVm0ThenConnect(ClientCommandsTestUtils.getServerProperties());
-
- final VM manager = Host.getHost(0).getVM(0);
- final VM server1 = Host.getHost(0).getVM(1);
- final VM client1 = Host.getHost(0).getVM(2);
- final VM server2 = Host.getHost(0).getVM(3);
-
- port0 = startCacheServer(server1, regionName);
- port1 = startCacheServer(server2, regionName);
- startNonDurableClient(client1, server1, port0);
- startNonDurableClient(client1, server2, port1);
-
- waitForListClientMbean3();
-
- manager.invoke("get client Id", () -> {
- Cache cache = GemFireCacheImpl.getInstance();
- SystemManagementService service =
- (SystemManagementService)
ManagementService.getExistingManagementService(cache);
- DistributedMember serverMember =
ClientCommandsTestUtils.getMember(server1);
- final ObjectName cacheServerMBeanName =
service.getCacheServerMBeanName(port0, serverMember);
- CacheServerMXBean bean = service.getMBeanProxy(cacheServerMBeanName,
CacheServerMXBean.class);
- return bean.getClientIds()[0];
+ @Test
+ public void oneClientConnectToTwoServers() throws Exception {
+ int server1port = server1.getPort();
+ int server2port = server2.getPort();
+ Properties client1props = new Properties();
+ client1props.setProperty("name", "client-1");
+ client1 = cluster.startClientVM(client1ID, client1props, cf -> {
+ cf.addPoolServer("localhost", server1port);
+ cf.setPoolSubscriptionEnabled(true);
});
- }
-
- private void setupSystemForListClient() throws Exception {
- disconnectAllFromDS();
-
setUpJmxManagerOnVm0ThenConnect(ClientCommandsTestUtils.getServerProperties());
-
- final VM server1 = Host.getHost(0).getVM(1);
- final VM client1 = Host.getHost(0).getVM(2);
- final VM client2 = Host.getHost(0).getVM(3);
- port0 = startCacheServer(server1, regionName);
- startNonDurableClient(client1, server1, port0);
- startNonDurableClient(client2, server1, port0);
- }
-
- private int startCacheServer(VM server, final String regionName) {
-
- return server.invoke("setup CacheServer", () -> {
- getSystem(ClientCommandsTestUtils.getServerProperties());
+ client1.invoke(() -> {
+ String poolName = "new_pool_" + System.currentTimeMillis();
+ try {
+ PoolImpl p = (PoolImpl) PoolManager.createFactory()
+ .addServer("localhost",
server2port).setThreadLocalConnections(true)
+
.setMinConnections(1).setSubscriptionEnabled(true).setPingInterval(1)
+
.setStatisticInterval(1).setMinConnections(1).setSubscriptionRedundancy(1)
+ .create(poolName);
+ assertNotNull(p);
+ } catch (Exception eee) {
+ System.err.println("Exception in creating pool " + poolName + "
Exception =="
+ + ExceptionUtils.getStackTrace(eee));
+ }
- GemFireCacheImpl cache = (GemFireCacheImpl) getCache();
- AttributesFactory factory = new AttributesFactory();
- factory.setScope(Scope.DISTRIBUTED_ACK);
- factory.setDataPolicy(DataPolicy.REPLICATE);
- Region region = createRootRegion(regionName, factory.create());
- assertTrue(region instanceof DistributedRegion);
- CacheServer cacheServer = cache.addCacheServer();
- cacheServer.setPort(0);
- cacheServer.start();
- return cacheServer.getPort();
+ // create the region
+ ClientCache clientCache = ClusterStartupRule.getClientCache();
+ ClientRegionFactory<Object, Object> regionFactory =
+ clientCache.createClientRegionFactory(ClientRegionShortcut.LOCAL)
+ .setPoolName(clientCache.getDefaultPool().getName());
+ Region<Object, Object> dataRegion = regionFactory.create(REGION_NAME);
+ assertNotNull(dataRegion);
+ dataRegion.put("k1", "v1");
+ dataRegion.put("k2", "v2");
});
- }
-
- private void waitForListClientMbean3() {
- final VM manager = Host.getHost(0).getVM(0);
- final VM server1 = Host.getHost(0).getVM(1);
- final VM server2 = Host.getHost(0).getVM(3);
+ locator.waitTillClientsAreReadyOnServers("server-1", server1port, 1);
+ locator.waitTillClientsAreReadyOnServers("server-2", server2port, 1);
- final DistributedMember serverMember1 =
ClientCommandsTestUtils.getMember(server1);
- final DistributedMember serverMember2 =
ClientCommandsTestUtils.getMember(server2);
+ CommandResult result =
+ gfsh.executeAndAssertThat("list
clients").statusIsSuccess().getCommandResult();
- assertNotNull(serverMember1);
+ List<String> clientList =
+ result.getColumnFromTableContent("Client Name / ID", "section1",
"TableForClientList");
+ assertThat(clientList).hasSize(1);
+ assertThat(clientList.get(0)).contains("client-1");
- manager.invoke(() -> Awaitility.waitAtMost(2 * 60, TimeUnit.SECONDS)
- .pollDelay(2, TimeUnit.SECONDS).until(() -> {
- final SystemManagementService service =
- (SystemManagementService)
ManagementService.getManagementService(getCache());
- if (service == null) {
- getLogWriter().info("waitForListClientMbean3 Still probing for
service");
- return false;
- } else {
- final ObjectName cacheServerMBeanName1 =
- service.getCacheServerMBeanName(port0, serverMember1);
- final ObjectName cacheServerMBeanName2 =
- service.getCacheServerMBeanName(port1, serverMember2);
- CacheServerMXBean bean1 =
- service.getMBeanProxy(cacheServerMBeanName1,
CacheServerMXBean.class);
- CacheServerMXBean bean2 =
- service.getMBeanProxy(cacheServerMBeanName2,
CacheServerMXBean.class);
- try {
- if (bean1 != null && bean2 != null) {
- if (bean1.getClientIds().length > 0 &&
bean2.getClientIds().length > 0) {
- return true;
- }
- }
- return false;
-
- } catch (Exception e) {
- LogWrapper.getInstance(cache)
- .warning("waitForListClientMbean3 Exception in
waitForListClientMbean ::: "
- + ExceptionUtils.getStackTrace(e));
- }
- return false;
- }
- }));
- }
-
- private void startNonDurableClient(VM client, final VM server, final int
port) {
- client.invoke("start non-durable client", () -> {
- Cache cache = GemFireCacheImpl.getInstance();
- if (cache == null) {
-
- Properties props = ClientCommandsTestUtils.getNonDurableClientProps();
- props.setProperty(LOG_FILE, "client_" + OSProcess.getId() + ".log");
- props.setProperty(LOG_LEVEL, "fine");
- props.setProperty(STATISTIC_ARCHIVE_FILE, "client_" +
OSProcess.getId() + ".gfs");
- props.setProperty(STATISTIC_SAMPLING_ENABLED, "true");
-
- getSystem(props);
-
- final ClientCacheFactory ccf = new ClientCacheFactory(props);
- ccf.addPoolServer(getServerHostName(server.getHost()), port);
- ccf.setPoolSubscriptionEnabled(true);
- ccf.setPoolPingInterval(1);
- ccf.setPoolStatisticInterval(1);
- ccf.setPoolSubscriptionRedundancy(1);
- ccf.setPoolMinConnections(1);
-
- ClientCache clientCache = getClientCache(ccf);
- // Create region
- if (clientCache.getRegion(Region.SEPARATOR + regionName) == null
- && clientCache.getRegion(regionName) == null) {
- ClientRegionFactory<Object, Object> regionFactory =
- clientCache.createClientRegionFactory(ClientRegionShortcut.LOCAL)
- .setPoolName(clientCache.getDefaultPool().getName());
- Region<Object, Object> dataRegion = regionFactory.create(regionName);
- assertNotNull(dataRegion);
- dataRegion.put("k1", "v1");
- dataRegion.put("k2", "v2");
- }
- } else {
- String poolName = "new_pool_" + System.currentTimeMillis();
- try {
- PoolImpl p = (PoolImpl) PoolManager.createFactory()
- .addServer(getServerHostName(server.getHost()),
port).setThreadLocalConnections(true)
-
.setMinConnections(1).setSubscriptionEnabled(true).setPingInterval(1)
-
.setStatisticInterval(1).setMinConnections(1).setSubscriptionRedundancy(1)
- .create(poolName);
- System.out.println("Created new pool pool " + poolName);
- assertNotNull(p);
- } catch (Exception eee) {
- System.err.println("Exception in creating pool " + poolName + "
Exception =="
- + ExceptionUtils.getStackTrace(eee));
- }
- }
- });
- }
-
- private void waitForListClientMbean() {
- final VM manager = Host.getHost(0).getVM(0);
- final VM server1 = Host.getHost(0).getVM(1);
- final DistributedMember serverMember =
ClientCommandsTestUtils.getMember(server1);
- assertNotNull(serverMember);
- manager.invoke(() -> Awaitility.waitAtMost(2 * 60, TimeUnit.SECONDS)
- .pollDelay(2, TimeUnit.SECONDS).until(() -> {
- final SystemManagementService service =
- (SystemManagementService)
ManagementService.getManagementService(getCache());
- if (service == null) {
- getLogWriter().info("waitForListClientMbean Still probing for
service");
- return false;
- } else {
- final ObjectName cacheServerMBeanName =
- service.getCacheServerMBeanName(port0, serverMember);
- CacheServerMXBean bean =
- service.getMBeanProxy(cacheServerMBeanName,
CacheServerMXBean.class);
- try {
- if (bean != null) {
- if (bean.getClientIds().length > 1) {
- return true;
- }
- }
- return false;
- } catch (Exception e) {
- LogWrapper.getInstance(cache)
- .warning("waitForListClientMbean Exception in
waitForListClientMbean ::: "
- + ExceptionUtils.getStackTrace(e));
- }
- return false;
- }
- }));
- }
+ List<String> serverList =
+ result.getColumnFromTableContent("Server Name / ID", "section1",
"TableForClientList");
+ assertThat(serverList).hasSize(1);
+ assertThat(serverList.get(0)).contains("server-1").contains("server-2");
- @Override
- public final void postTearDownCacheTestCase() throws Exception {
- Host.getHost(0).getVM(0).invoke((SerializableRunnableIF)
CacheServerTestUtil::closeCache);
- Host.getHost(0).getVM(1).invoke((SerializableRunnableIF)
CacheServerTestUtil::closeCache);
- Host.getHost(0).getVM(2).invoke((SerializableRunnableIF)
CacheServerTestUtil::closeCache);
- Host.getHost(0).getVM(3).invoke((SerializableRunnableIF)
CacheServerTestUtil::closeCache);
+ // shutdown the clients
+ cluster.stopMember(client1ID);
}
}