Repository: helix
Updated Branches:
  refs/heads/master 993beb383 -> 8cd7aee6f


Use polling verifier instead of hard-coded sleep in tests to reduce test time.


Project: http://git-wip-us.apache.org/repos/asf/helix/repo
Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/8cd7aee6
Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/8cd7aee6
Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/8cd7aee6

Branch: refs/heads/master
Commit: 8cd7aee6fcc795f2849c55adf89ae320c320d465
Parents: 993beb3
Author: Lei Xia <[email protected]>
Authored: Mon Jun 18 17:33:16 2018 -0700
Committer: Junkai Xue <[email protected]>
Committed: Tue Jul 17 15:27:40 2018 -0700

----------------------------------------------------------------------
 .../TestAlertingRebalancerFailure.java          |   4 +-
 .../integration/TestBatchEnableInstances.java   |   4 +-
 .../integration/TestBatchMessageHandling.java   |   2 +-
 .../integration/TestBucketizedResource.java     |  22 ++--
 .../controller/TestClusterMaintenanceMode.java  |   9 +-
 .../rebalancer/TestAutoRebalance.java           |   6 +-
 .../TestAutoRebalancePartitionLimit.java        |  12 +--
 .../TestAutoRebalanceWithDisabledInstance.java  |  16 ++-
 .../handling/TestBatchMessageModeConfigs.java   |   6 +-
 .../TestClusterStatusMonitorLifecycle.java      | 105 +++++++++++++------
 .../mbeans/TestClusterAggregateMetrics.java     |   8 +-
 .../apache/helix/tools/TestHelixAdminCli.java   |  15 +--
 12 files changed, 127 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/TestAlertingRebalancerFailure.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/TestAlertingRebalancerFailure.java
 
b/helix-core/src/test/java/org/apache/helix/integration/TestAlertingRebalancerFailure.java
index ed5be3d..e732c85 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/TestAlertingRebalancerFailure.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/TestAlertingRebalancerFailure.java
@@ -206,7 +206,9 @@ public class TestAlertingRebalancerFailure extends 
ZkStandAloneCMTestBase {
       setDomainId(_participants[i].getInstanceName(), configAccessor);
     }
     _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, testDb, replicas);
-    Thread.sleep(1000);
+
+    Assert.assertTrue(_clusterVerifier.verify());
+
     // Verify that rebalance error state is removed
     checkRebalanceFailureGauge(false);
 

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/TestBatchEnableInstances.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/TestBatchEnableInstances.java
 
b/helix-core/src/test/java/org/apache/helix/integration/TestBatchEnableInstances.java
index 9861518..6a5a304 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/TestBatchEnableInstances.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/TestBatchEnableInstances.java
@@ -27,7 +27,7 @@ public class TestBatchEnableInstances extends TaskTestBase {
   public void testOldEnableDisable() throws InterruptedException {
     _gSetupTool.getClusterManagementTool()
         .enableInstance(CLUSTER_NAME, _participants[0].getInstanceName(), 
false);
-    Thread.sleep(2000);
+    Assert.assertTrue(_clusterVerifier.verify());
 
     ExternalView externalView = _gSetupTool.getClusterManagementTool()
         .getResourceExternalView(CLUSTER_NAME, 
WorkflowGenerator.DEFAULT_TGT_DB);
@@ -44,7 +44,7 @@ public class TestBatchEnableInstances extends TaskTestBase {
     _gSetupTool.getClusterManagementTool().enableInstance(CLUSTER_NAME,
         Arrays.asList(_participants[0].getInstanceName(), 
_participants[1].getInstanceName()),
         false);
-    Thread.sleep(2000);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
 
     ExternalView externalView = _gSetupTool.getClusterManagementTool()
         .getResourceExternalView(CLUSTER_NAME, 
WorkflowGenerator.DEFAULT_TGT_DB);

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java
 
b/helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java
index d7c3a2d..713e1e4 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/TestBatchMessageHandling.java
@@ -57,7 +57,7 @@ public class TestBatchMessageHandling extends 
ZkStandAloneCMTestBase {
     _gSetupTool.getClusterManagementTool().addResource(CLUSTER_NAME, dbName, 
idealState);
     _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, dbName, 1);
 
-    Thread.sleep(1000L);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
 
     int numOfOnlines = 0;
     int numOfErrors = 0;

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java
 
b/helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java
index 314c5bc..27a7729 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/TestBucketizedResource.java
@@ -231,7 +231,7 @@ public class TestBucketizedResource extends ZkTestBase {
     Assert.assertTrue(_clusterVerifier.verifyByPolling());
 
     // add an external view listener
-    TestExternalViewListener listener = new TestExternalViewListener();
+    final TestExternalViewListener listener = new TestExternalViewListener();
     controller.addExternalViewChangeListener(listener);
 
     // remove "TestDB0"
@@ -239,14 +239,13 @@ public class TestBucketizedResource extends ZkTestBase {
     Assert.assertTrue(_clusterVerifier.verifyByPolling());
 
     // wait callback to finish
-    int waitTime =0;
-    do {
-      Thread.sleep(100);
-      waitTime += 100;
-      if (waitTime > 30000) {
-        break;
+    TestHelper.verify(new TestHelper.Verifier() {
+      @Override public boolean verify() throws Exception {
+        return listener.cbCnt > 0;
       }
-    } while (listener.cbCnt == 0);
+    }, 20000);
+    Assert.assertTrue(listener.cbCnt > 0);
+
     listener.cbCnt = 0;
 
     // add a new db
@@ -264,7 +263,12 @@ public class TestBucketizedResource extends ZkTestBase {
 
     Assert.assertTrue(_clusterVerifier.verifyByPolling());
 
-    Thread.sleep(200);
+    TestHelper.verify(new TestHelper.Verifier() {
+      @Override public boolean verify() throws Exception {
+        return listener.cbCnt > 0;
+      }
+    }, 20000);
+
     Assert.assertTrue(listener.cbCnt > 0);
 
     // clean up

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java
 
b/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java
index daa3fc4..4e4771b 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java
@@ -34,7 +34,6 @@ public class TestClusterMaintenanceMode extends TaskTestBase {
   @Test
   public void testMaintenanceModeAddNewInstance() throws InterruptedException {
     _gSetupTool.getClusterManagementTool().enableMaintenanceMode(CLUSTER_NAME, 
true, "Test");
-    Thread.sleep(2000);
     ExternalView prevExternalView = _gSetupTool.getClusterManagementTool()
         .getResourceExternalView(CLUSTER_NAME, 
WorkflowGenerator.DEFAULT_TGT_DB);
     String instanceName = PARTICIPANT_PREFIX + "_" + (_startPort + 10);
@@ -44,7 +43,7 @@ public class TestClusterMaintenanceMode extends TaskTestBase {
     _newInstance.syncStart();
     _gSetupTool.getClusterManagementTool()
         .rebalance(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB, 3);
-    Thread.sleep(3000);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
     ExternalView newExternalView = _gSetupTool.getClusterManagementTool()
         .getResourceExternalView(CLUSTER_NAME, 
WorkflowGenerator.DEFAULT_TGT_DB);
     Assert.assertEquals(prevExternalView.getRecord().getMapFields(),
@@ -58,7 +57,7 @@ public class TestClusterMaintenanceMode extends TaskTestBase {
             IdealState.RebalanceMode.FULL_AUTO.name());
     _gSetupTool.getClusterManagementTool()
         .rebalance(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB + 1, 3);
-    Thread.sleep(2000);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
     ExternalView externalView = _gSetupTool.getClusterManagementTool()
         .getResourceExternalView(CLUSTER_NAME, 
WorkflowGenerator.DEFAULT_TGT_DB + 1);
     Assert.assertNull(externalView);
@@ -67,7 +66,7 @@ public class TestClusterMaintenanceMode extends TaskTestBase {
   @Test (dependsOnMethods = "testMaintenanceModeAddNewResource")
   public void testMaintenanceModeInstanceDown() throws InterruptedException {
     _participants[0].syncStop();
-    Thread.sleep(2000);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
     ExternalView externalView = _gSetupTool.getClusterManagementTool()
         .getResourceExternalView(CLUSTER_NAME, 
WorkflowGenerator.DEFAULT_TGT_DB);
     for (Map<String, String> stateMap : 
externalView.getRecord().getMapFields().values()) {
@@ -80,7 +79,7 @@ public class TestClusterMaintenanceMode extends TaskTestBase {
     _participants[0] =
         new MockParticipantManager(ZK_ADDR, CLUSTER_NAME, 
_participants[0].getInstanceName());
     _participants[0].syncStart();
-    Thread.sleep(2000);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
     ExternalView externalView = _gSetupTool.getClusterManagementTool()
         .getResourceExternalView(CLUSTER_NAME, 
WorkflowGenerator.DEFAULT_TGT_DB);
     for (Map<String, String> stateMap : 
externalView.getRecord().getMapFields().values()) {

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java
 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java
index 7c06e9d..7ad8358 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalance.java
@@ -157,10 +157,10 @@ public class TestAutoRebalance extends 
ZkStandAloneCMTestBase {
           new MockParticipantManager(ZK_ADDR, CLUSTER_NAME, 
storageNodeName.replace(':', '_'));
       participant.syncStart();
     }
-    Thread.sleep(1000);
+    Thread.sleep(100);
     result =
-        ClusterStateVerifier.verifyByZkCallback(new 
ExternalViewBalancedVerifier(_gZkClient,
-            CLUSTER_NAME, TEST_DB));
+        ClusterStateVerifier.verifyByPolling(new 
ExternalViewBalancedVerifier(_gZkClient,
+            CLUSTER_NAME, TEST_DB), 10000, 100);
     Assert.assertTrue(result);
 
     result =

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalancePartitionLimit.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalancePartitionLimit.java
 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalancePartitionLimit.java
index a50e998..2527a66 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalancePartitionLimit.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalancePartitionLimit.java
@@ -76,10 +76,10 @@ public class TestAutoRebalancePartitionLimit extends 
ZkStandAloneCMTestBase {
       String instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + i);
       _participants[i] = new MockParticipantManager(ZK_ADDR, CLUSTER_NAME, 
instanceName);
       _participants[i].syncStart();
-      Thread.sleep(2000);
+      Thread.sleep(100);
       boolean result =
-          ClusterStateVerifier.verifyByZkCallback(new 
ExternalViewBalancedVerifier(_gZkClient,
-              CLUSTER_NAME, TEST_DB));
+          ClusterStateVerifier.verifyByPolling(new 
ExternalViewBalancedVerifier(_gZkClient,
+              CLUSTER_NAME, TEST_DB), 10000, 100);
       Assert.assertTrue(result);
       ExternalView ev =
           
manager.getHelixDataAccessor().getProperty(accessor.keyBuilder().externalView(TEST_DB));
@@ -135,10 +135,10 @@ public class TestAutoRebalancePartitionLimit extends 
ZkStandAloneCMTestBase {
       participant.syncStart();
     }
 
-    Thread.sleep(1000);
+    Thread.sleep(100);
     result =
-        ClusterStateVerifier.verifyByZkCallback(new 
ExternalViewBalancedVerifier(_gZkClient,
-            CLUSTER_NAME, TEST_DB));
+        ClusterStateVerifier.verifyByPolling(new 
ExternalViewBalancedVerifier(_gZkClient,
+            CLUSTER_NAME, TEST_DB), 10000, 100);
     Assert.assertTrue(result);
   }
 

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalanceWithDisabledInstance.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalanceWithDisabledInstance.java
 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalanceWithDisabledInstance.java
index 13e156f..60df196 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalanceWithDisabledInstance.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/TestAutoRebalanceWithDisabledInstance.java
@@ -45,12 +45,7 @@ public class TestAutoRebalanceWithDisabledInstance extends 
ZkStandAloneCMTestBas
         RebalanceMode.FULL_AUTO + "");
     _gSetupTool.rebalanceResource(CLUSTER_NAME, TEST_DB_2, _replica);
 
-    Thread.sleep(2000);
-
-    boolean result =
-        ClusterStateVerifier.verifyByZkCallback(new 
ClusterStateVerifier.BestPossAndExtViewZkVerifier(ZK_ADDR,
-            CLUSTER_NAME));
-    Assert.assertTrue(result);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
   }
 
   @Test()
@@ -71,7 +66,7 @@ public class TestAutoRebalanceWithDisabledInstance extends 
ZkStandAloneCMTestBas
 
     // disable instance
     _gSetupTool.getClusterManagementTool().enableInstance(CLUSTER_NAME, 
disabledInstance, false);
-    Thread.sleep(4000);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
 
     // TODO: preference list is not persisted in IS for full-auto,
     // Need a way to find how helix assigns partitions to nodes.
@@ -85,7 +80,8 @@ public class TestAutoRebalanceWithDisabledInstance extends 
ZkStandAloneCMTestBas
 
     //enable instance
     _gSetupTool.getClusterManagementTool().enableInstance(CLUSTER_NAME, 
disabledInstance, true);
-    Thread.sleep(4000);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
+
 
     // TODO: preference list is not persisted in IS for full-auto,
     // Need a way to find how helix assigns partitions to nodes.
@@ -109,7 +105,7 @@ public class TestAutoRebalanceWithDisabledInstance extends 
ZkStandAloneCMTestBas
 
     participant.syncStart();
 
-    Thread.sleep(2000);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
     // TODO: preference list is not persisted in IS for full-auto,
     // Need a way to find how helix assigns partitions to nodes.
     /*
@@ -122,7 +118,7 @@ public class TestAutoRebalanceWithDisabledInstance extends 
ZkStandAloneCMTestBas
 
     //enable instance
     _gSetupTool.getClusterManagementTool().enableInstance(CLUSTER_NAME, 
nodeName, true);
-    Thread.sleep(2000);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
     // TODO: preference list is not persisted in IS for full-auto,
     // Need a way to find how helix assigns partitions to nodes.
     /*

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/messaging/handling/TestBatchMessageModeConfigs.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/messaging/handling/TestBatchMessageModeConfigs.java
 
b/helix-core/src/test/java/org/apache/helix/messaging/handling/TestBatchMessageModeConfigs.java
index 667e55d..2654aa9 100644
--- 
a/helix-core/src/test/java/org/apache/helix/messaging/handling/TestBatchMessageModeConfigs.java
+++ 
b/helix-core/src/test/java/org/apache/helix/messaging/handling/TestBatchMessageModeConfigs.java
@@ -40,7 +40,7 @@ public class TestBatchMessageModeConfigs extends 
ZkStandAloneCMTestBase {
     for (int i = 1; i < _participants.length; i++) {
       _participants[i].syncStop();
     }
-    Thread.sleep(2000L);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
   }
 
   @Test
@@ -49,7 +49,7 @@ public class TestBatchMessageModeConfigs extends 
ZkStandAloneCMTestBase {
     String dbName = TEST_DB_PREFIX + "Cluster";
     setupResource(dbName);
     _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, dbName, 1);
-    Thread.sleep(2000L);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
     verify();
     
_gSetupTool.getClusterManagementTool().enableBatchMessageMode(CLUSTER_NAME, 
false);
   }
@@ -60,7 +60,7 @@ public class TestBatchMessageModeConfigs extends 
ZkStandAloneCMTestBase {
     setupResource(dbName);
     
_gSetupTool.getClusterManagementTool().enableBatchMessageMode(CLUSTER_NAME, 
dbName, true);
     _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, dbName, 1);
-    Thread.sleep(2000L);
+    Assert.assertTrue(_clusterVerifier.verifyByPolling());
     verify();
     
_gSetupTool.getClusterManagementTool().enableBatchMessageMode(CLUSTER_NAME, 
dbName, false);
   }

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/monitoring/TestClusterStatusMonitorLifecycle.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/monitoring/TestClusterStatusMonitorLifecycle.java
 
b/helix-core/src/test/java/org/apache/helix/monitoring/TestClusterStatusMonitorLifecycle.java
index 220d215..ffa1966 100644
--- 
a/helix-core/src/test/java/org/apache/helix/monitoring/TestClusterStatusMonitorLifecycle.java
+++ 
b/helix-core/src/test/java/org/apache/helix/monitoring/TestClusterStatusMonitorLifecycle.java
@@ -205,24 +205,29 @@ public class TestClusterStatusMonitorLifecycle extends 
ZkTestBase {
   }
 
   @Test
-  public void testClusterStatusMonitorLifecycle()
-      throws InstanceNotFoundException, MalformedObjectNameException, 
NullPointerException,
-      IOException, InterruptedException {
+  public void testClusterStatusMonitorLifecycle() throws Exception {
     // Filter other unrelated clusters' metrics
-    QueryExp exp =
+    final QueryExp exp1 =
         Query.match(Query.attr("SensorName"), Query.value("*" + 
_clusterNamePrefix + "*"));
     Set<ObjectInstance> mbeans = new 
HashSet<>(ManagementFactory.getPlatformMBeanServer()
-        .queryMBeans(new ObjectName("ClusterStatus:*"), exp));
+        .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
 
     _participants[0].disconnect();
 
     // 1 participant goes away
     // No change in instance/resource mbean
     // Unregister 1 per-instance resource mbean and message queue mbean
-    Thread.sleep(1000);
-    int previousMBeanCount = mbeans.size();
+    final int previousMBeanCount = mbeans.size();
+    TestHelper.verify(new TestHelper.Verifier() {
+      @Override public boolean verify() throws Exception {
+        Set<ObjectInstance> newMbeans = new 
HashSet<>(ManagementFactory.getPlatformMBeanServer()
+            .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
+        return newMbeans.size() == (previousMBeanCount - 2);
+      }
+    }, 4000);
+
     mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer()
-        .queryMBeans(new ObjectName("ClusterStatus:*"), exp));
+        .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
     Assert.assertEquals(mbeans.size(), previousMBeanCount - 2);
 
     HelixDataAccessor accessor = _participants[n - 1].getHelixDataAccessor();
@@ -239,11 +244,18 @@ public class TestClusterStatusMonitorLifecycle extends 
ZkTestBase {
 
     // 1 controller goes away
     // 1 message queue mbean, 1 PerInstanceResource mbean, and one message 
queue mbean
-    Thread.sleep(2000);
-    previousMBeanCount = mbeans.size();
+    final int previousMBeanCount2 = mbeans.size();
+    TestHelper.verify(new TestHelper.Verifier() {
+      @Override public boolean verify() throws Exception {
+        Set<ObjectInstance> newMbeans = new 
HashSet<>(ManagementFactory.getPlatformMBeanServer()
+            .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
+        return newMbeans.size() == (previousMBeanCount2 - 3);
+      }
+    }, 4000);
+
     mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer()
-        .queryMBeans(new ObjectName("ClusterStatus:*"), exp));
-    Assert.assertEquals(mbeans.size(), previousMBeanCount - 3);
+        .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
+    Assert.assertEquals(mbeans.size(), previousMBeanCount2 - 3);
 
     String instanceName = "localhost0_" + (12918 + 0);
     _participants[0] = new MockParticipantManager(ZK_ADDR, _firstClusterName, 
instanceName);
@@ -252,11 +264,18 @@ public class TestClusterStatusMonitorLifecycle extends 
ZkTestBase {
     // 1 participant comes back
     // No change in instance/resource mbean
     // Register 1 per-instance resource mbean and 1 message queue mbean
-    Thread.sleep(2000);
-    previousMBeanCount = mbeans.size();
+    final int previousMBeanCount3 = mbeans.size();
+    TestHelper.verify(new TestHelper.Verifier() {
+      @Override public boolean verify() throws Exception {
+        Set<ObjectInstance> newMbeans = new 
HashSet<>(ManagementFactory.getPlatformMBeanServer()
+            .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
+        return newMbeans.size() == (previousMBeanCount3 + 2);
+      }
+    }, 4000);
+
     mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer()
-        .queryMBeans(new ObjectName("ClusterStatus:*"), exp));
-    Assert.assertEquals(mbeans.size(), previousMBeanCount + 2);
+        .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
+    Assert.assertEquals(mbeans.size(), previousMBeanCount3 + 2);
 
     // Add a resource
     // Register 1 resource mbean
@@ -269,38 +288,60 @@ public class TestClusterStatusMonitorLifecycle extends 
ZkTestBase {
     setupTool.rebalanceResource(_firstClusterName, "TestDB1",
         Integer.parseInt(idealState.getReplicas()));
 
-    Thread.sleep(2000);
     // Add one resource, PerInstanceResource mbeans and 1 resource monitor
-    previousMBeanCount = mbeans.size();
+    final int previousMBeanCount4 = mbeans.size();
+    TestHelper.verify(new TestHelper.Verifier() {
+      @Override public boolean verify() throws Exception {
+        Set<ObjectInstance> newMbeans = new 
HashSet<>(ManagementFactory.getPlatformMBeanServer()
+            .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
+        return newMbeans.size() == (previousMBeanCount4 + _participants.length 
+ 1);
+      }
+    }, 4000);
+
     mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer()
-        .queryMBeans(new ObjectName("ClusterStatus:*"), exp));
-    Assert.assertEquals(mbeans.size(), previousMBeanCount + 
_participants.length + 1);
+        .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
+    Assert.assertEquals(mbeans.size(), previousMBeanCount4 + 
_participants.length + 1);
 
     // Remove a resource
     // No change in instance/resource mbean
     // Unregister 5 per-instance resource mbean
     setupTool.dropResourceFromCluster(_firstClusterName, "TestDB1");
-    Thread.sleep(2000);
-    previousMBeanCount = mbeans.size();
+
+    final int previousMBeanCount5 = mbeans.size();
+    TestHelper.verify(new TestHelper.Verifier() {
+      @Override public boolean verify() throws Exception {
+        Set<ObjectInstance> newMbeans = new 
HashSet<>(ManagementFactory.getPlatformMBeanServer()
+            .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
+        return newMbeans.size() == (previousMBeanCount5 - 
(_participants.length + 1));
+      }
+    }, 4000);
+
     mbeans = new HashSet<>(ManagementFactory.getPlatformMBeanServer()
-        .queryMBeans(new ObjectName("ClusterStatus:*"), exp));
-    Assert.assertEquals(mbeans.size(), previousMBeanCount - 
(_participants.length + 1));
+        .queryMBeans(new ObjectName("ClusterStatus:*"), exp1));
+    Assert.assertEquals(mbeans.size(), previousMBeanCount5 - 
(_participants.length + 1));
 
     // Cleanup controllers then MBeans should all be removed.
     cleanupControllers();
-    Thread.sleep(2000);
-
     // Check if any MBeans leftover.
     // Note that MessageQueueStatus is not bound with controller only. So it 
will still exist.
-    exp = Query
-        .and(Query.not(Query.match(Query.attr("SensorName"), 
Query.value("MessageQueueStatus.*"))),
-            exp);
+
+    final QueryExp exp2 = Query.and(
+        Query.not(Query.match(Query.attr("SensorName"), 
Query.value("MessageQueueStatus.*"))),
+        exp1);
+
+    TestHelper.verify(new TestHelper.Verifier() {
+      @Override public boolean verify() throws Exception {
+        return ManagementFactory.getPlatformMBeanServer()
+            .queryMBeans(new ObjectName("ClusterStatus:*"), exp2).isEmpty();
+      }
+    }, 4000);
+
     if (!ManagementFactory.getPlatformMBeanServer()
-        .queryMBeans(new ObjectName("ClusterStatus:*"), exp).isEmpty()) {
+        .queryMBeans(new ObjectName("ClusterStatus:*"), exp2).isEmpty()) {
       System.out.println(ManagementFactory.getPlatformMBeanServer()
-          .queryMBeans(new ObjectName("ClusterStatus:*"), exp));
+          .queryMBeans(new ObjectName("ClusterStatus:*"), exp2));
     }
     Assert.assertTrue(ManagementFactory.getPlatformMBeanServer()
-        .queryMBeans(new ObjectName("ClusterStatus:*"), exp).isEmpty());
+        .queryMBeans(new ObjectName("ClusterStatus:*"), exp2).isEmpty());
   }
 }

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestClusterAggregateMetrics.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestClusterAggregateMetrics.java
 
b/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestClusterAggregateMetrics.java
index ea7a680..2cd84fb 100644
--- 
a/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestClusterAggregateMetrics.java
+++ 
b/helix-core/src/test/java/org/apache/helix/monitoring/mbeans/TestClusterAggregateMetrics.java
@@ -105,12 +105,12 @@ public class TestClusterAggregateMetrics extends 
ZkTestBase {
     _controller = new ClusterControllerManager(ZK_ADDR, CLUSTER_NAME, 
controllerName);
     _controller.syncStart();
 
-    boolean result = ClusterStateVerifier.verifyByZkCallback(
-        new ClusterStateVerifier.MasterNbInExtViewVerifier(ZK_ADDR, 
CLUSTER_NAME));
+    boolean result = ClusterStateVerifier.verifyByPolling(
+        new ClusterStateVerifier.MasterNbInExtViewVerifier(ZK_ADDR, 
CLUSTER_NAME), 10000, 100);
     Assert.assertTrue(result);
 
-    result = ClusterStateVerifier.verifyByZkCallback(
-        new ClusterStateVerifier.BestPossAndExtViewZkVerifier(ZK_ADDR, 
CLUSTER_NAME));
+    result = ClusterStateVerifier.verifyByPolling(
+        new ClusterStateVerifier.BestPossAndExtViewZkVerifier(ZK_ADDR, 
CLUSTER_NAME), 10000, 100);
     Assert.assertTrue(result);
 
     // create cluster manager

http://git-wip-us.apache.org/repos/asf/helix/blob/8cd7aee6/helix-core/src/test/java/org/apache/helix/tools/TestHelixAdminCli.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/tools/TestHelixAdminCli.java 
b/helix-core/src/test/java/org/apache/helix/tools/TestHelixAdminCli.java
index afd24e3..fdab158 100644
--- a/helix-core/src/test/java/org/apache/helix/tools/TestHelixAdminCli.java
+++ b/helix-core/src/test/java/org/apache/helix/tools/TestHelixAdminCli.java
@@ -542,13 +542,16 @@ public class TestHelixAdminCli extends ZkTestBase {
 
     BaseDataAccessor<ZNRecord> baseAccessor = new 
ZkBaseDataAccessor<ZNRecord>(_gZkClient);
     HelixDataAccessor accessor = new ZKHelixDataAccessor(clusterName, 
baseAccessor);
-    String path = accessor.keyBuilder().controllerLeader().getPath();
-    for (int i = 0; i < 10; i++) {
-      Thread.sleep(1000);
-      if (!_gZkClient.exists(path)) {
-        break;
+    final String path = accessor.keyBuilder().controllerLeader().getPath();
+    TestHelper.verify(new TestHelper.Verifier() {
+      @Override public boolean verify() throws Exception {
+        if (!_gZkClient.exists(path)) {
+          return true;
+        }
+        return false;
       }
-    }
+    }, 5000);
+
     Assert.assertFalse(_gZkClient.exists(path),
         "leader should be gone after deactivate the cluster");
 

Reply via email to