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);
   }
 }

Reply via email to