http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/common/ZkIntegrationTestBase.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/common/ZkIntegrationTestBase.java
 
b/helix-core/src/test/java/org/apache/helix/integration/common/ZkIntegrationTestBase.java
deleted file mode 100644
index 85b4d45..0000000
--- 
a/helix-core/src/test/java/org/apache/helix/integration/common/ZkIntegrationTestBase.java
+++ /dev/null
@@ -1,322 +0,0 @@
-package org.apache.helix.integration.common;
-
-/*
- * 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.
- */
-
-import java.lang.reflect.Method;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import org.I0Itec.zkclient.ZkServer;
-import org.apache.helix.BaseDataAccessor;
-import org.apache.helix.ConfigAccessor;
-import org.apache.helix.HelixManager;
-import org.apache.helix.PropertyKey.Builder;
-import org.apache.helix.TestHelper;
-import org.apache.helix.ZNRecord;
-import org.apache.helix.controller.pipeline.AbstractAsyncBaseStage;
-import org.apache.helix.controller.pipeline.Stage;
-import org.apache.helix.controller.pipeline.StageContext;
-import org.apache.helix.controller.rebalancer.DelayedAutoRebalancer;
-import org.apache.helix.controller.rebalancer.strategy.AutoRebalanceStrategy;
-import org.apache.helix.controller.stages.AttributeName;
-import org.apache.helix.controller.stages.ClusterEvent;
-import org.apache.helix.manager.zk.ZKHelixDataAccessor;
-import org.apache.helix.manager.zk.ZNRecordSerializer;
-import org.apache.helix.manager.zk.ZkBaseDataAccessor;
-import org.apache.helix.manager.zk.ZkClient;
-import org.apache.helix.model.BuiltInStateModelDefinitions;
-import org.apache.helix.model.ClusterConfig;
-import org.apache.helix.model.ConfigScope;
-import org.apache.helix.model.ExternalView;
-import org.apache.helix.model.IdealState;
-import org.apache.helix.model.InstanceConfig;
-import org.apache.helix.model.LiveInstance;
-import org.apache.helix.model.OnlineOfflineSMD;
-import org.apache.helix.model.StateModelDefinition;
-import org.apache.helix.model.builder.ConfigScopeBuilder;
-import org.apache.helix.tools.ClusterSetup;
-import org.apache.helix.util.ZKClientPool;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.Assert;
-import org.testng.AssertJUnit;
-import org.testng.ITestContext;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.AfterSuite;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.BeforeSuite;
-
-public class ZkIntegrationTestBase {
-  private static Logger LOG = 
LoggerFactory.getLogger(ZkIntegrationTestBase.class);
-
-  protected static ZkServer _zkServer;
-  protected static ZkClient _gZkClient;
-  protected static ClusterSetup _gSetupTool;
-  protected static BaseDataAccessor<ZNRecord> _baseAccessor;
-
-  public static final String ZK_ADDR = "localhost:2183";
-  protected static final String CLUSTER_PREFIX = "CLUSTER";
-  protected static final String CONTROLLER_CLUSTER_PREFIX = 
"CONTROLLER_CLUSTER";
-
-  protected final String CONTROLLER_PREFIX = "controller";
-  protected final String PARTICIPANT_PREFIX = "localhost";
-
-  @BeforeSuite
-  public void beforeSuite() throws Exception {
-    // TODO: use logging.properties file to config java.util.logging.Logger 
levels
-    java.util.logging.Logger topJavaLogger = 
java.util.logging.Logger.getLogger("");
-    topJavaLogger.setLevel(Level.WARNING);
-
-    // Due to ZOOKEEPER-2693 fix, we need to specify whitelist for execute zk 
commends
-    System.setProperty("zookeeper.4lw.commands.whitelist", "*");
-
-    _zkServer = TestHelper.startZkServer(ZK_ADDR);
-    AssertJUnit.assertTrue(_zkServer != null);
-    ZKClientPool.reset();
-
-    _gZkClient = new ZkClient(ZK_ADDR);
-    _gZkClient.setZkSerializer(new ZNRecordSerializer());
-    _gSetupTool = new ClusterSetup(_gZkClient);
-    _baseAccessor = new ZkBaseDataAccessor<>(_gZkClient);
-  }
-
-  @AfterSuite
-  public void afterSuite() {
-    ZKClientPool.reset();
-    _gZkClient.close();
-    TestHelper.stopZkServer(_zkServer);
-  }
-
-  @BeforeMethod
-  public void beforeTest(Method testMethod, ITestContext testContext){
-    long startTime = System.currentTimeMillis();
-    System.out.println("START " + testMethod.getName() + " at " + new 
Date(startTime));
-    testContext.setAttribute("StartTime", System.currentTimeMillis());
-  }
-
-  @AfterMethod
-  public void endTest(Method testMethod, ITestContext testContext) {
-    Long startTime = (Long) testContext.getAttribute("StartTime");
-    long endTime = System.currentTimeMillis();
-    System.out.println(
-        "END " + testMethod.getName() + " at " + new Date(endTime) + ", took: 
" + (endTime - startTime) + "ms.");
-  }
-
-  protected String getShortClassName() {
-    return this.getClass().getSimpleName();
-  }
-
-  protected String getCurrentLeader(ZkClient zkClient, String clusterName) {
-    ZKHelixDataAccessor accessor =
-        new ZKHelixDataAccessor(clusterName, new 
ZkBaseDataAccessor<ZNRecord>(zkClient));
-    Builder keyBuilder = accessor.keyBuilder();
-
-    LiveInstance leader = accessor.getProperty(keyBuilder.controllerLeader());
-    if (leader == null) {
-      return null;
-    }
-    return leader.getInstanceName();
-  }
-
-  protected void enableHealthCheck(String clusterName) {
-    ConfigScope scope = new 
ConfigScopeBuilder().forCluster(clusterName).build();
-    new ConfigAccessor(_gZkClient).set(scope, "healthChange" + ".enabled", "" 
+ true);
-  }
-
-  protected void enablePersistBestPossibleAssignment(ZkClient zkClient, String 
clusterName,
-      Boolean enabled) {
-    ConfigAccessor configAccessor = new ConfigAccessor(zkClient);
-    ClusterConfig clusterConfig = configAccessor.getClusterConfig(clusterName);
-    clusterConfig.setPersistBestPossibleAssignment(enabled);
-    configAccessor.setClusterConfig(clusterName, clusterConfig);
-  }
-
-  protected void enablePersistIntermediateAssignment(ZkClient zkClient, String 
clusterName,
-      Boolean enabled) {
-    ConfigAccessor configAccessor = new ConfigAccessor(zkClient);
-    ClusterConfig clusterConfig = configAccessor.getClusterConfig(clusterName);
-    clusterConfig.setPersistIntermediateAssignment(enabled);
-    configAccessor.setClusterConfig(clusterName, clusterConfig);
-  }
-
-  protected void enableTopologyAwareRebalance(ZkClient zkClient, String 
clusterName,
-      Boolean enabled) {
-    ConfigAccessor configAccessor = new ConfigAccessor(zkClient);
-    ClusterConfig clusterConfig = configAccessor.getClusterConfig(clusterName);
-    clusterConfig.setTopologyAwareEnabled(enabled);
-    configAccessor.setClusterConfig(clusterName, clusterConfig);
-  }
-
-  protected void enableDelayRebalanceInCluster(ZkClient zkClient, String 
clusterName,
-      boolean enabled) {
-    ConfigAccessor configAccessor = new ConfigAccessor(zkClient);
-    ClusterConfig clusterConfig = configAccessor.getClusterConfig(clusterName);
-    clusterConfig.setDelayRebalaceEnabled(enabled);
-    configAccessor.setClusterConfig(clusterName, clusterConfig);
-  }
-
-  protected void enableDelayRebalanceInInstance(ZkClient zkClient, String 
clusterName,
-      String instanceName, boolean enabled) {
-    ConfigAccessor configAccessor = new ConfigAccessor(zkClient);
-    InstanceConfig instanceConfig = 
configAccessor.getInstanceConfig(clusterName, instanceName);
-    instanceConfig.setDelayRebalanceEnabled(enabled);
-    configAccessor.setInstanceConfig(clusterName, instanceName, 
instanceConfig);
-  }
-
-  protected void setDelayTimeInCluster(ZkClient zkClient, String clusterName, 
long delay) {
-    ConfigAccessor configAccessor = new ConfigAccessor(zkClient);
-    ClusterConfig clusterConfig = configAccessor.getClusterConfig(clusterName);
-    clusterConfig.setRebalanceDelayTime(delay);
-    configAccessor.setClusterConfig(clusterName, clusterConfig);
-  }
-
-  protected IdealState createResourceWithDelayedRebalance(String clusterName, 
String db,
-      String stateModel, int numPartition, int replica, int minActiveReplica, 
long delay) {
-    return createResourceWithDelayedRebalance(clusterName, db, stateModel, 
numPartition, replica,
-        minActiveReplica, delay, AutoRebalanceStrategy.class.getName());
-  }
-
-  protected IdealState createResourceWithDelayedRebalance(String clusterName, 
String db,
-      String stateModel, int numPartition, int replica, int minActiveReplica, 
long delay,
-      String rebalanceStrategy) {
-    IdealState idealState =
-        
_gSetupTool.getClusterManagementTool().getResourceIdealState(clusterName, db);
-    if (idealState == null) {
-      _gSetupTool.addResourceToCluster(clusterName, db, numPartition, 
stateModel,
-          IdealState.RebalanceMode.FULL_AUTO + "", rebalanceStrategy);
-    }
-
-    idealState =
-        
_gSetupTool.getClusterManagementTool().getResourceIdealState(clusterName, db);
-    idealState.setMinActiveReplicas(minActiveReplica);
-    if (!idealState.isDelayRebalanceEnabled()) {
-      idealState.setDelayRebalanceEnabled(true);
-    }
-    if (delay > 0) {
-      idealState.setRebalanceDelay(delay);
-    }
-    idealState.setRebalancerClassName(DelayedAutoRebalancer.class.getName());
-    _gSetupTool.getClusterManagementTool().setResourceIdealState(clusterName, 
db, idealState);
-    _gSetupTool.rebalanceStorageCluster(clusterName, db, replica);
-    idealState =
-        
_gSetupTool.getClusterManagementTool().getResourceIdealState(clusterName, db);
-
-    return idealState;
-  }
-
-  protected IdealState createIdealState(String resourceGroupName, String 
instanceGroupTag,
-      List<String> instanceNames, int numPartition, int replica, String 
rebalanceMode,
-      String stateModelDef) {
-    IdealState is = _gSetupTool
-        .createIdealStateForResourceGroup(resourceGroupName, instanceGroupTag, 
numPartition,
-            replica, rebalanceMode, stateModelDef);
-
-    // setup initial partition->instance mapping.
-    int nodeIdx = 0;
-    int numNode = instanceNames.size();
-    assert (numNode >= replica);
-    for (int i = 0; i < numPartition; i++) {
-      String partitionName = resourceGroupName + "_" + i;
-      for (int j = 0; j < replica; j++) {
-        is.setPartitionState(partitionName, instanceNames.get((nodeIdx + j) % 
numNode),
-            OnlineOfflineSMD.States.ONLINE.toString());
-      }
-      nodeIdx++;
-    }
-
-    return is;
-  }
-
-  protected void createDBInSemiAuto(ClusterSetup clusterSetup, String 
clusterName, String dbName,
-      List<String> preferenceList, String stateModelDef, int numPartition, int 
replica) {
-    clusterSetup.addResourceToCluster(clusterName, dbName, numPartition, 
stateModelDef,
-        IdealState.RebalanceMode.SEMI_AUTO.toString());
-    clusterSetup.rebalanceStorageCluster(clusterName, dbName, replica);
-
-    IdealState is =
-        
_gSetupTool.getClusterManagementTool().getResourceIdealState(clusterName, 
dbName);
-    for (String p : is.getPartitionSet()) {
-      is.setPreferenceList(p, preferenceList);
-    }
-    clusterSetup.getClusterManagementTool().setResourceIdealState(clusterName, 
dbName, is);
-  }
-
-  /**
-   * Validate there should be always minimal active replica and top state 
replica for each partition.
-   * Also make sure there is always some partitions with only active replica 
count.
-   */
-  protected void validateMinActiveAndTopStateReplica(IdealState is, 
ExternalView ev,
-      int minActiveReplica, int numNodes) {
-    StateModelDefinition stateModelDef =
-        
BuiltInStateModelDefinitions.valueOf(is.getStateModelDefRef()).getStateModelDefinition();
-    String topState = stateModelDef.getStatesPriorityList().get(0);
-    int replica = Integer.valueOf(is.getReplicas());
-
-    Map<String, Integer> stateCount =
-        stateModelDef.getStateCountMap(numNodes, replica);
-    Set<String> activeStates = stateCount.keySet();
-
-    for (String partition : is.getPartitionSet()) {
-      Map<String, String> assignmentMap = 
ev.getRecord().getMapField(partition);
-      Assert.assertNotNull(assignmentMap,
-          is.getResourceName() + "'s best possible assignment is null for 
partition " + partition);
-      Assert.assertTrue(!assignmentMap.isEmpty(),
-          is.getResourceName() + "'s partition " + partition + " has no best 
possible map in IS.");
-
-      boolean hasTopState = false;
-      int activeReplica = 0;
-      for (String state : assignmentMap.values()) {
-        if (topState.equalsIgnoreCase(state)) {
-          hasTopState = true;
-        }
-        if (activeStates.contains(state)) {
-          activeReplica++;
-        }
-      }
-
-      if (activeReplica < minActiveReplica) {
-        int a = 0;
-      }
-
-      Assert.assertTrue(hasTopState, String.format("%s missing %s replica", 
partition, topState));
-      Assert.assertTrue(activeReplica >= minActiveReplica, String
-          .format("%s has less active replica %d then required %d", partition, 
activeReplica,
-              minActiveReplica));
-    }
-  }
-
-  protected void runStage(HelixManager manager, ClusterEvent event, Stage 
stage) throws Exception {
-    event.addAttribute(AttributeName.helixmanager.name(), manager);
-    StageContext context = new StageContext();
-    stage.init(context);
-    stage.preProcess();
-
-    // AbstractAsyncBaseStage will run asynchronously, and it's main logics 
are implemented in
-    // execute() function call
-    if (stage instanceof AbstractAsyncBaseStage) {
-      ((AbstractAsyncBaseStage) stage).execute(event);
-    } else {
-      stage.process(event);
-    }
-    stage.postProcess();
-  }
-}

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/common/ZkStandAloneCMTestBase.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/common/ZkStandAloneCMTestBase.java
 
b/helix-core/src/test/java/org/apache/helix/integration/common/ZkStandAloneCMTestBase.java
index 4027984..3cbffe1 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/common/ZkStandAloneCMTestBase.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/common/ZkStandAloneCMTestBase.java
@@ -24,12 +24,14 @@ import java.util.Date;
 import org.apache.helix.HelixManager;
 import org.apache.helix.HelixManagerFactory;
 import org.apache.helix.InstanceType;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.integration.manager.ClusterControllerManager;
 import org.apache.helix.integration.manager.MockParticipantManager;
-import org.apache.helix.tools.ClusterSetup;
 import org.apache.helix.tools.ClusterStateVerifier;
 import 
org.apache.helix.tools.ClusterStateVerifier.BestPossAndExtViewZkVerifier;
 import org.apache.helix.tools.ClusterStateVerifier.MasterNbInExtViewVerifier;
+import 
org.apache.helix.tools.ClusterVerifiers.BestPossibleExternalViewVerifier;
+import org.apache.helix.tools.ClusterVerifiers.HelixClusterVerifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -41,7 +43,7 @@ import org.testng.annotations.BeforeClass;
  * start 5 dummy participants verify the current states at end
  */
 
-public class ZkStandAloneCMTestBase extends ZkIntegrationTestBase {
+public class ZkStandAloneCMTestBase extends ZkTestBase {
   private static Logger LOG = 
LoggerFactory.getLogger(ZkStandAloneCMTestBase.class);
 
   protected static final int NODE_NR = 5;
@@ -50,11 +52,12 @@ public class ZkStandAloneCMTestBase extends 
ZkIntegrationTestBase {
   protected static final String TEST_DB = "TestDB";
   protected static final int _PARTITIONS = 20;
 
-  protected ClusterSetup _setupTool;
   protected HelixManager _manager;
   protected final String CLASS_NAME = getShortClassName();
   protected final String CLUSTER_NAME = CLUSTER_PREFIX + "_" + CLASS_NAME;
 
+  HelixClusterVerifier _clusterVerifier;
+
   protected MockParticipantManager[] _participants = new 
MockParticipantManager[NODE_NR];
   protected ClusterControllerManager _controller;
 
@@ -65,20 +68,14 @@ public class ZkStandAloneCMTestBase extends 
ZkIntegrationTestBase {
     // Logger.getRootLogger().setLevel(Level.INFO);
     System.out.println("START " + CLASS_NAME + " at " + new 
Date(System.currentTimeMillis()));
 
-    String namespace = "/" + CLUSTER_NAME;
-    if (_gZkClient.exists(namespace)) {
-      _gZkClient.deleteRecursively(namespace);
-    }
-    _setupTool = new ClusterSetup(ZK_ADDR);
-
     // setup storage cluster
-    _setupTool.addCluster(CLUSTER_NAME, true);
-    _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, 
STATE_MODEL);
+    _gSetupTool.addCluster(CLUSTER_NAME, true);
+    _gSetupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, 
STATE_MODEL);
     for (int i = 0; i < NODE_NR; i++) {
       String storageNodeName = PARTICIPANT_PREFIX + "_" + (START_PORT + i);
-      _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
+      _gSetupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
     }
-    _setupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, _replica);
+    _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, _replica);
 
     // start dummy participants
     for (int i = 0; i < NODE_NR; i++) {
@@ -96,6 +93,8 @@ public class ZkStandAloneCMTestBase extends 
ZkIntegrationTestBase {
         ClusterStateVerifier
             .verifyByZkCallback(new MasterNbInExtViewVerifier(ZK_ADDR, 
CLUSTER_NAME));
 
+    _clusterVerifier = new 
BestPossibleExternalViewVerifier.Builder(CLUSTER_NAME).setZkAddr(ZK_ADDR).build();
+
     Assert.assertTrue(result);
 
     result =
@@ -114,7 +113,6 @@ public class ZkStandAloneCMTestBase extends 
ZkIntegrationTestBase {
     /**
      * shutdown order: 1) disconnect the controller 2) disconnect participants
      */
-
     if (_controller != null && _controller.isConnected()) {
       _controller.syncStop();
     }
@@ -127,6 +125,16 @@ public class ZkStandAloneCMTestBase extends 
ZkIntegrationTestBase {
       _manager.disconnect();
     }
 
+    String namespace = "/" + CLUSTER_NAME;
+    if (_gZkClient.exists(namespace)) {
+      try {
+        _gSetupTool.deleteCluster(CLUSTER_NAME);
+      } catch (Exception ex) {
+        System.err.println(
+            "Failed to delete cluster " + CLUSTER_NAME + ", error: " + 
ex.getLocalizedMessage());
+      }
+    }
+
     System.out.println("END " + CLASS_NAME + " at " + new 
Date(System.currentTimeMillis()));
   }
 }

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterDataCacheSelectiveUpdate.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterDataCacheSelectiveUpdate.java
 
b/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterDataCacheSelectiveUpdate.java
index b032513..6202f84 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterDataCacheSelectiveUpdate.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterDataCacheSelectiveUpdate.java
@@ -100,8 +100,8 @@ public class TestClusterDataCacheSelectiveUpdate extends 
ZkStandAloneCMTestBase
     Assert.assertEquals(accessor.getReadCount(PropertyType.CONFIGS), 1);
 
     // add a new resource
-    _setupTool.addResourceToCluster(CLUSTER_NAME, "TestDB_1", _PARTITIONS, 
STATE_MODEL);
-    _setupTool.rebalanceStorageCluster(CLUSTER_NAME, "TestDB_1", _replica);
+    _gSetupTool.addResourceToCluster(CLUSTER_NAME, "TestDB_1", _PARTITIONS, 
STATE_MODEL);
+    _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, "TestDB_1", _replica);
 
     Thread.sleep(100);
     HelixClusterVerifier _clusterVerifier =
@@ -119,10 +119,10 @@ public class TestClusterDataCacheSelectiveUpdate extends 
ZkStandAloneCMTestBase
     // Add more resources
     accessor.clearReadCounters();
 
-    _setupTool.addResourceToCluster(CLUSTER_NAME, "TestDB_2", _PARTITIONS, 
STATE_MODEL);
-    _setupTool.rebalanceStorageCluster(CLUSTER_NAME, "TestDB_2", _replica);
-    _setupTool.addResourceToCluster(CLUSTER_NAME, "TestDB_3", _PARTITIONS, 
STATE_MODEL);
-    _setupTool.rebalanceStorageCluster(CLUSTER_NAME, "TestDB_3", _replica);
+    _gSetupTool.addResourceToCluster(CLUSTER_NAME, "TestDB_2", _PARTITIONS, 
STATE_MODEL);
+    _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, "TestDB_2", _replica);
+    _gSetupTool.addResourceToCluster(CLUSTER_NAME, "TestDB_3", _PARTITIONS, 
STATE_MODEL);
+    _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, "TestDB_3", _replica);
 
     // Totally four resources. Two of them are newly added.
     cache.notifyDataChange(HelixConstants.ChangeType.IDEAL_STATE);

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/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 3949183..e643c9a 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
@@ -7,10 +7,13 @@ import org.apache.helix.integration.task.WorkflowGenerator;
 import org.apache.helix.model.ExternalView;
 import org.apache.helix.model.IdealState;
 import org.testng.Assert;
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 public class TestClusterMaintenanceMode extends TaskTestBase {
+  MockParticipantManager _newInstance;
+
   @BeforeClass
   public void beforeClass() throws Exception {
     _numDbs = 1;
@@ -20,6 +23,14 @@ public class TestClusterMaintenanceMode extends TaskTestBase 
{
     super.beforeClass();
   }
 
+  @AfterClass
+  public void afterClass() throws Exception {
+    if (_newInstance != null && _newInstance.isConnected()) {
+      _newInstance.syncStop();
+    }
+    super.afterClass();
+  }
+
   @Test
   public void testMaintenanceModeAddNewInstance() throws InterruptedException {
     _gSetupTool.getClusterManagementTool().enableMaintenanceMode(CLUSTER_NAME, 
true, "Test");
@@ -27,10 +38,10 @@ public class TestClusterMaintenanceMode extends 
TaskTestBase {
     ExternalView prevExternalView = _gSetupTool.getClusterManagementTool()
         .getResourceExternalView(CLUSTER_NAME, 
WorkflowGenerator.DEFAULT_TGT_DB);
     String instanceName = PARTICIPANT_PREFIX + "_" + (_startPort + 10);
-    _setupTool.addInstanceToCluster(CLUSTER_NAME, instanceName);
-    MockParticipantManager newInstance =
+    _gSetupTool.addInstanceToCluster(CLUSTER_NAME, instanceName);
+    _newInstance =
         new MockParticipantManager(ZK_ADDR, CLUSTER_NAME, instanceName);
-    newInstance.syncStart();
+    _newInstance.syncStart();
     _gSetupTool.getClusterManagementTool()
         .rebalance(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB, 3);
     Thread.sleep(3000);

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLeadershipChange.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLeadershipChange.java
 
b/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLeadershipChange.java
index c44c924..6c0236f 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLeadershipChange.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLeadershipChange.java
@@ -28,7 +28,7 @@ import org.apache.helix.HelixManager;
 import org.apache.helix.HelixManagerFactory;
 import org.apache.helix.InstanceType;
 import org.apache.helix.PropertyPathBuilder;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.integration.manager.MockParticipantManager;
 import org.apache.helix.model.IdealState;
 import org.apache.helix.model.LiveInstance;
@@ -36,7 +36,7 @@ import org.apache.helix.monitoring.mbeans.MonitorDomainNames;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-public class TestControllerLeadershipChange extends ZkIntegrationTestBase{
+public class TestControllerLeadershipChange extends ZkTestBase {
 
   @Test
   public void testMissingTopStateDurationMonitoring() throws Exception {

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLiveLock.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLiveLock.java
 
b/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLiveLock.java
index b2b291b..0dff764 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLiveLock.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/controller/TestControllerLiveLock.java
@@ -124,6 +124,7 @@ public class TestControllerLiveLock extends ZkUnitTestBase {
     for (int i = 0; i < n; i++) {
       participants[i].syncStop();
     }
+    TestHelper.dropCluster(clusterName, _gZkClient);
 
     System.out.println("END " + clusterName + " at " + new 
Date(System.currentTimeMillis()));
   }

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/controller/TestSkipBestPossibleCalculation.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/controller/TestSkipBestPossibleCalculation.java
 
b/helix-core/src/test/java/org/apache/helix/integration/controller/TestSkipBestPossibleCalculation.java
index 79ae4c4..df5bf10 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/controller/TestSkipBestPossibleCalculation.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/controller/TestSkipBestPossibleCalculation.java
@@ -40,9 +40,9 @@ public class TestSkipBestPossibleCalculation extends 
ZkStandAloneCMTestBase {
     int numResource = 5;
     for (int i = 0; i < numResource; i++) {
       String dbName = "TestDB_" + i;
-      _setupTool.addResourceToCluster(CLUSTER_NAME, dbName, _PARTITIONS, 
STATE_MODEL,
+      _gSetupTool.addResourceToCluster(CLUSTER_NAME, dbName, _PARTITIONS, 
STATE_MODEL,
           IdealState.RebalanceMode.CUSTOMIZED.name());
-      _setupTool.rebalanceResource(CLUSTER_NAME, dbName, 3);
+      _gSetupTool.rebalanceResource(CLUSTER_NAME, dbName, 3);
     }
 
     ClusterDataCache cache =

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/manager/TestDistributedControllerManager.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/manager/TestDistributedControllerManager.java
 
b/helix-core/src/test/java/org/apache/helix/integration/manager/TestDistributedControllerManager.java
index 207044a..ef59f31 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/manager/TestDistributedControllerManager.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/manager/TestDistributedControllerManager.java
@@ -28,7 +28,7 @@ import org.apache.helix.PropertyKey;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.ZkTestHelper;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.manager.zk.CallbackHandler;
 import org.apache.helix.manager.zk.ZKHelixDataAccessor;
 import org.apache.helix.manager.zk.ZKHelixManager;
@@ -42,7 +42,7 @@ import org.slf4j.LoggerFactory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-public class TestDistributedControllerManager extends ZkIntegrationTestBase {
+public class TestDistributedControllerManager extends ZkTestBase {
   private static Logger LOG = 
LoggerFactory.getLogger(TestDistributedControllerManager.class);
 
   @Test

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/manager/TestHelixDataAccessor.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/manager/TestHelixDataAccessor.java
 
b/helix-core/src/test/java/org/apache/helix/integration/manager/TestHelixDataAccessor.java
index 39fdb2a..7e6d931 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/manager/TestHelixDataAccessor.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/manager/TestHelixDataAccessor.java
@@ -6,15 +6,12 @@ import java.util.Map;
 import java.util.TreeMap;
 import org.apache.helix.BaseDataAccessor;
 import org.apache.helix.HelixDataAccessor;
-import org.apache.helix.HelixException;
 import org.apache.helix.HelixProperty;
 import org.apache.helix.PropertyKey;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.api.exceptions.HelixMetaDataAccessException;
-import org.apache.helix.controller.stages.AttributeName;
 import org.apache.helix.controller.stages.ClusterDataCache;
-import org.apache.helix.controller.stages.ReadClusterDataStage;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.manager.zk.ZKHelixDataAccessor;
 import org.apache.helix.manager.zk.ZkBaseDataAccessor;
 import org.apache.helix.mock.MockZkClient;
@@ -22,7 +19,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-public class TestHelixDataAccessor extends ZkIntegrationTestBase {
+public class TestHelixDataAccessor extends ZkTestBase {
   private MockZkClient _zkClient;
   BaseDataAccessor<ZNRecord> baseDataAccessor;
   HelixDataAccessor accessor;

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java
 
b/helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java
index d2ab0bb..d21f46e 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/manager/TestParticipantManager.java
@@ -32,7 +32,7 @@ import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.ZkTestHelper;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.manager.zk.ZKHelixDataAccessor;
 import org.apache.helix.manager.zk.ZKHelixManager;
 import org.apache.helix.manager.zk.ZNRecordSerializer;
@@ -47,7 +47,7 @@ import org.slf4j.LoggerFactory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-public class TestParticipantManager extends ZkIntegrationTestBase {
+public class TestParticipantManager extends ZkTestBase {
 
   private static Logger LOG = 
LoggerFactory.getLogger(TestParticipantManager.class);
 

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessage.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessage.java
 
b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessage.java
index bd44ca3..f2c4622 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessage.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessage.java
@@ -30,7 +30,7 @@ import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.HelixProperty.HelixPropertyAttribute;
 import org.apache.helix.PropertyKey.Builder;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.integration.manager.ClusterControllerManager;
 import org.apache.helix.integration.manager.MockParticipantManager;
 import org.apache.helix.manager.zk.ZKHelixDataAccessor;
@@ -44,7 +44,7 @@ import 
org.apache.helix.tools.ClusterStateVerifier.BestPossAndExtViewZkVerifier;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-public class TestBatchMessage extends ZkIntegrationTestBase {
+public class TestBatchMessage extends ZkTestBase {
   class TestZkChildListener implements IZkChildListener {
     int _maxNbOfChilds = 0;
 
@@ -117,6 +117,7 @@ public class TestBatchMessage extends ZkIntegrationTestBase 
{
     for (int i = 0; i < n; i++) {
       participants[i].syncStop();
     }
+    _gSetupTool.deleteCluster(clusterName);
 
     System.out.println("END " + clusterName + " at " + new 
Date(System.currentTimeMillis()));
   }
@@ -199,6 +200,7 @@ public class TestBatchMessage extends ZkIntegrationTestBase 
{
     for (int i = 0; i < n; i++) {
       participants[i].syncStop();
     }
+    _gSetupTool.deleteCluster(clusterName);
 
     System.out.println("END " + clusterName + " at " + new 
Date(System.currentTimeMillis()));
   }
@@ -270,8 +272,14 @@ public class TestBatchMessage extends 
ZkIntegrationTestBase {
     // verify "TestDB0_0", masterOfPartition0 is in ERROR state
     TestHelper.verifyState(clusterName, ZK_ADDR, errorStateMap, "ERROR");
 
-    System.out.println("END " + clusterName + " at " + new 
Date(System.currentTimeMillis()));
+    // clean up
+    controller.syncStop();
+    for (int i = 0; i < 5; i++) {
+      participants[i].syncStop();
+    }
+    _gSetupTool.deleteCluster(clusterName);
 
+    System.out.println("END " + clusterName + " at " + new 
Date(System.currentTimeMillis()));
   }
 
   @Test
@@ -351,6 +359,7 @@ public class TestBatchMessage extends ZkIntegrationTestBase 
{
     for (int i = 0; i < n; i++) {
       participants[i].syncStop();
     }
+    _gSetupTool.deleteCluster(clusterName);
 
     System.out.println("END " + clusterName + " at " + new 
Date(System.currentTimeMillis()));
   }

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessageWrapper.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessageWrapper.java
 
b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessageWrapper.java
index 1a9b65a..f3f469e 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessageWrapper.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestBatchMessageWrapper.java
@@ -135,6 +135,7 @@ public class TestBatchMessageWrapper extends ZkUnitTestBase 
{
     for (int i = 0; i < n; i++) {
       participants[i].syncStop();
     }
+    TestHelper.dropCluster(clusterName, _gZkClient);
 
     System.out.println("END " + clusterName + " at " + new 
Date(System.currentTimeMillis()));
   }

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle.java
 
b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle.java
index 5f6c6b4..01fb0d8 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle.java
@@ -28,7 +28,7 @@ import org.apache.helix.HelixAdmin;
 import org.apache.helix.PropertyPathBuilder;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.integration.manager.ClusterControllerManager;
 import org.apache.helix.integration.manager.MockParticipantManager;
 import org.apache.helix.manager.zk.ZKHelixAdmin;
@@ -43,7 +43,7 @@ import 
org.apache.helix.tools.ClusterStateVerifier.MasterNbInExtViewVerifier;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-public class TestMessageThrottle extends ZkIntegrationTestBase {
+public class TestMessageThrottle extends ZkTestBase {
   @Test()
   public void testMessageThrottle() throws Exception {
     // Logger.getRootLogger().setLevel(Level.INFO);

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle2.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle2.java
 
b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle2.java
index d9edaf1..83ac0bc 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle2.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestMessageThrottle2.java
@@ -41,7 +41,7 @@ import org.apache.helix.PropertyKey.Builder;
 import org.apache.helix.TestHelper;
 import org.apache.helix.ZNRecord;
 import org.apache.helix.controller.HelixControllerMain;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.manager.zk.ZKHelixAdmin;
 import org.apache.helix.manager.zk.ZKHelixDataAccessor;
 import org.apache.helix.manager.zk.ZKHelixManager;
@@ -67,7 +67,7 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 // test case from Ming Fang
-public class TestMessageThrottle2 extends ZkIntegrationTestBase {
+public class TestMessageThrottle2 extends ZkTestBase {
   final static String clusterName = "TestMessageThrottle2";
   final static String resourceName = "MyResource";
 

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestP2PMessageSemiAuto.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/messaging/TestP2PMessageSemiAuto.java
 
b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestP2PMessageSemiAuto.java
index 43fedad..d1fa2c0 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/messaging/TestP2PMessageSemiAuto.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/messaging/TestP2PMessageSemiAuto.java
@@ -28,7 +28,7 @@ import org.apache.helix.HelixDataAccessor;
 import org.apache.helix.api.config.HelixConfigProperty;
 import org.apache.helix.controller.stages.ClusterDataCache;
 import org.apache.helix.integration.DelayedTransitionBase;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.integration.manager.ClusterControllerManager;
 import org.apache.helix.integration.manager.MockParticipantManager;
 import org.apache.helix.manager.zk.ZKHelixDataAccessor;
@@ -41,10 +41,11 @@ import org.apache.helix.model.ResourceConfig;
 import 
org.apache.helix.tools.ClusterVerifiers.BestPossibleExternalViewVerifier;
 import org.apache.helix.tools.ClusterVerifiers.HelixClusterVerifier;
 import org.testng.Assert;
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-public class TestP2PMessageSemiAuto extends ZkIntegrationTestBase {
+public class TestP2PMessageSemiAuto extends ZkTestBase {
   final String CLASS_NAME = getShortClassName();
   final String CLUSTER_NAME = CLUSTER_PREFIX + "_" + CLASS_NAME;
 
@@ -57,7 +58,7 @@ public class TestP2PMessageSemiAuto extends 
ZkIntegrationTestBase {
   static final int PARTITION_NUMBER = 20;
   static final int REPLICA_NUMBER = 3;
 
-  List<MockParticipantManager> _participants = new 
ArrayList<MockParticipantManager>();
+  List<MockParticipantManager> _participants = new ArrayList<>();
   List<String> _instances = new ArrayList<>();
   ClusterControllerManager _controller;
 
@@ -106,6 +107,18 @@ public class TestP2PMessageSemiAuto extends 
ZkIntegrationTestBase {
     _accessor = new ZKHelixDataAccessor(CLUSTER_NAME, _baseAccessor);
   }
 
+  @AfterClass
+  public void afterClass() throws Exception {
+    _controller.syncStop();
+    for (MockParticipantManager p : _participants) {
+      if (p.isConnected()) {
+        p.syncStop();
+      }
+    }
+    _gSetupTool.deleteCluster(CLUSTER_NAME);
+    System.out.println("END " + CLASS_NAME + " at " + new 
Date(System.currentTimeMillis()));
+  }
+
   @Test
   public void testP2PStateTransitionDisabled() {
     // disable the master instance

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestInstanceAutoJoin.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestInstanceAutoJoin.java
 
b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestInstanceAutoJoin.java
index 007335d..f0ffc63 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestInstanceAutoJoin.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestInstanceAutoJoin.java
@@ -38,10 +38,10 @@ public class TestInstanceAutoJoin extends 
ZkStandAloneCMTestBase {
     HelixManager manager = _participants[0];
     HelixDataAccessor accessor = manager.getHelixDataAccessor();
 
-    _setupTool.addResourceToCluster(CLUSTER_NAME, db2, 60, "OnlineOffline", 
RebalanceMode.FULL_AUTO
+    _gSetupTool.addResourceToCluster(CLUSTER_NAME, db2, 60, "OnlineOffline", 
RebalanceMode.FULL_AUTO
         + "");
 
-    _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db2, 1);
+    _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, db2, 1);
     String instance2 = "localhost_279699";
     // StartCMResult result = TestHelper.startDummyProcess(ZK_ADDR, 
CLUSTER_NAME, instance2);
     MockParticipantManager newParticipant =

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestNonOfflineInitState.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestNonOfflineInitState.java
 
b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestNonOfflineInitState.java
index bd9e168..a937c41 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestNonOfflineInitState.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestNonOfflineInitState.java
@@ -22,12 +22,11 @@ package org.apache.helix.integration.paticipant;
 import java.util.Date;
 
 import org.apache.helix.TestHelper;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.integration.manager.ClusterControllerManager;
 import org.apache.helix.integration.manager.MockParticipantManager;
 import org.apache.helix.mock.participant.MockBootstrapModelFactory;
 import org.apache.helix.participant.StateMachineEngine;
-import org.apache.helix.tools.ClusterSetup;
 import org.apache.helix.tools.ClusterStateVerifier;
 import 
org.apache.helix.tools.ClusterStateVerifier.BestPossAndExtViewZkVerifier;
 import org.slf4j.Logger;
@@ -35,7 +34,7 @@ import org.slf4j.LoggerFactory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-public class TestNonOfflineInitState extends ZkIntegrationTestBase {
+public class TestNonOfflineInitState extends ZkTestBase {
   private static Logger LOG = 
LoggerFactory.getLogger(TestNonOfflineInitState.class);
 
   @Test
@@ -81,6 +80,7 @@ public class TestNonOfflineInitState extends 
ZkIntegrationTestBase {
     for (int i = 0; i < 5; i++) {
       participants[i].syncStop();
     }
+    _gSetupTool.deleteCluster(clusterName);
 
     System.out.println("END testNonOfflineInitState at " + new 
Date(System.currentTimeMillis()));
   }
@@ -88,26 +88,21 @@ public class TestNonOfflineInitState extends 
ZkIntegrationTestBase {
   private static void setupCluster(String clusterName, String ZkAddr, int 
startPort,
       String participantNamePrefix, String resourceNamePrefix, int resourceNb, 
int partitionNb,
       int nodesNb, int replica, String stateModelDef, boolean doRebalance) 
throws Exception {
-    if (_gZkClient.exists("/" + clusterName)) {
-      LOG.warn("Cluster already exists:" + clusterName + ". Deleting it");
-      _gZkClient.deleteRecursively("/" + clusterName);
-    }
 
-    ClusterSetup setupTool = new ClusterSetup(ZkAddr);
-    setupTool.addCluster(clusterName, true);
-    setupTool.addStateModelDef(clusterName, "Bootstrap",
+    _gSetupTool.addCluster(clusterName, true);
+    _gSetupTool.addStateModelDef(clusterName, "Bootstrap",
         TestHelper.generateStateModelDefForBootstrap());
 
     for (int i = 0; i < nodesNb; i++) {
       int port = startPort + i;
-      setupTool.addInstanceToCluster(clusterName, participantNamePrefix + "_" 
+ port);
+      _gSetupTool.addInstanceToCluster(clusterName, participantNamePrefix + 
"_" + port);
     }
 
     for (int i = 0; i < resourceNb; i++) {
       String dbName = resourceNamePrefix + i;
-      setupTool.addResourceToCluster(clusterName, dbName, partitionNb, 
stateModelDef);
+      _gSetupTool.addResourceToCluster(clusterName, dbName, partitionNb, 
stateModelDef);
       if (doRebalance) {
-        setupTool.rebalanceStorageCluster(clusterName, dbName, replica);
+        _gSetupTool.rebalanceStorageCluster(clusterName, dbName, replica);
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestRestartParticipant.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestRestartParticipant.java
 
b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestRestartParticipant.java
index 1fe742e..cf9f240 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestRestartParticipant.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestRestartParticipant.java
@@ -24,7 +24,7 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.helix.NotificationContext;
 import org.apache.helix.TestHelper;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.integration.manager.ClusterControllerManager;
 import org.apache.helix.integration.manager.MockParticipantManager;
 import org.apache.helix.mock.participant.MockTransition;
@@ -34,7 +34,7 @@ import 
org.apache.helix.tools.ClusterStateVerifier.BestPossAndExtViewZkVerifier;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-public class TestRestartParticipant extends ZkIntegrationTestBase {
+public class TestRestartParticipant extends ZkTestBase {
   public class KillOtherTransition extends MockTransition {
     final AtomicReference<MockParticipantManager> _other;
 
@@ -111,6 +111,7 @@ public class TestRestartParticipant extends 
ZkIntegrationTestBase {
       participants[i].syncStop();
     }
     participant.syncStop();
+    _gSetupTool.deleteCluster(clusterName);
 
     System.out.println("START testRestartParticipant at " + new 
Date(System.currentTimeMillis()));
 

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestStateTransitionTimeout.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestStateTransitionTimeout.java
 
b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestStateTransitionTimeout.java
index 438050d..83b97a5 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestStateTransitionTimeout.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestStateTransitionTimeout.java
@@ -60,25 +60,19 @@ public class TestStateTransitionTimeout extends 
ZkStandAloneCMTestBase {
   public void beforeClass() throws Exception {
     System.out.println("START " + CLASS_NAME + " at " + new 
Date(System.currentTimeMillis()));
 
-    String namespace = "/" + CLUSTER_NAME;
-    if (_gZkClient.exists(namespace)) {
-      _gZkClient.deleteRecursively(namespace);
-    }
-    _setupTool = new ClusterSetup(ZK_ADDR);
-
     // setup storage cluster
-    _setupTool.addCluster(CLUSTER_NAME, true);
-    _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, 
STATE_MODEL);
+    _gSetupTool.addCluster(CLUSTER_NAME, true);
+    _gSetupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, 
STATE_MODEL);
 
     for (int i = 0; i < NODE_NR; i++) {
       String storageNodeName = PARTICIPANT_PREFIX + "_" + (START_PORT + i);
-      _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
+      _gSetupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
     }
-    _setupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, 3);
+    _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, 3);
 
     // Set the timeout values
     IdealState idealState =
-        
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, 
TEST_DB);
+        
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, 
TEST_DB);
     String stateTransition = "SLAVE" + "-" + "MASTER" + "_" + 
Message.Attributes.TIMEOUT;
     idealState.getRecord().setSimpleField(stateTransition, "300");
 
@@ -145,7 +139,7 @@ public class TestStateTransitionTimeout extends 
ZkStandAloneCMTestBase {
   public void testStateTransitionTimeOut() throws Exception {
     Map<String, SleepStateModelFactory> factories = new HashMap<String, 
SleepStateModelFactory>();
     IdealState idealState =
-        
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, 
TEST_DB);
+        
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, 
TEST_DB);
     for (int i = 0; i < NODE_NR; i++) {
       String instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + i);
       SleepStateModelFactory factory = new SleepStateModelFactory(1000);

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestStateTransitionTimeoutWithResource.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestStateTransitionTimeoutWithResource.java
 
b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestStateTransitionTimeoutWithResource.java
index b7491f2..2e9af04 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestStateTransitionTimeoutWithResource.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/paticipant/TestStateTransitionTimeoutWithResource.java
@@ -70,18 +70,12 @@ public class TestStateTransitionTimeoutWithResource extends 
ZkStandAloneCMTestBa
   public void beforeClass() throws Exception {
     System.out.println("START " + CLASS_NAME + " at " + new 
Date(System.currentTimeMillis()));
 
-    String namespace = "/" + CLUSTER_NAME;
-    if (_gZkClient.exists(namespace)) {
-      _gZkClient.deleteRecursively(namespace);
-    }
-    _setupTool = new ClusterSetup(ZK_ADDR);
-
     // setup storage cluster
-    _setupTool.addCluster(CLUSTER_NAME, true);
+    _gSetupTool.addCluster(CLUSTER_NAME, true);
 
     for (int i = 0; i < NODE_NR; i++) {
       String storageNodeName = PARTICIPANT_PREFIX + "_" + (START_PORT + i);
-      _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
+      _gSetupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
     }
 
     _manager = HelixManagerFactory
@@ -155,9 +149,9 @@ public class TestStateTransitionTimeoutWithResource extends 
ZkStandAloneCMTestBa
 
   @Test
   public void testStateTransitionTimeOut() throws Exception {
-    _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, 
STATE_MODEL);
-    _setupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, 
TEST_DB, false);
-    _setupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, 3);
+    _gSetupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB, _PARTITIONS, 
STATE_MODEL);
+    _gSetupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, 
TEST_DB, false);
+    _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB, 3);
 
     // Set the timeout values
     StateTransitionTimeoutConfig stateTransitionTimeoutConfig =
@@ -171,7 +165,7 @@ public class TestStateTransitionTimeoutWithResource extends 
ZkStandAloneCMTestBa
     setParticipants(TEST_DB);
 
 
-    _setupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, 
TEST_DB, true);
+    _gSetupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, 
TEST_DB, true);
     boolean result =
         ClusterStateVerifier
             .verifyByZkCallback(new MasterNbInExtViewVerifier(ZK_ADDR, 
CLUSTER_NAME));
@@ -182,9 +176,9 @@ public class TestStateTransitionTimeoutWithResource extends 
ZkStandAloneCMTestBa
 
   @Test
   public void testStateTransitionTimeoutByClusterLevel() throws 
InterruptedException {
-    _setupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB + 1, _PARTITIONS, 
STATE_MODEL);
-    _setupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, TEST_DB 
+ 1, false);
-    _setupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB  + 1, 3);
+    _gSetupTool.addResourceToCluster(CLUSTER_NAME, TEST_DB + 1, _PARTITIONS, 
STATE_MODEL);
+    _gSetupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, 
TEST_DB + 1, false);
+    _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, TEST_DB  + 1, 3);
 
     StateTransitionTimeoutConfig stateTransitionTimeoutConfig =
         new StateTransitionTimeoutConfig(new ZNRecord(TEST_DB + 1));
@@ -195,7 +189,7 @@ public class TestStateTransitionTimeoutWithResource extends 
ZkStandAloneCMTestBa
 
     setParticipants(TEST_DB + 1);
 
-    _setupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, TEST_DB 
+ 1, true);
+    _gSetupTool.getClusterManagementTool().enableResource(CLUSTER_NAME, 
TEST_DB + 1, true);
     boolean result =
         ClusterStateVerifier
             .verifyByZkCallback(new MasterNbInExtViewVerifier(ZK_ADDR, 
CLUSTER_NAME));
@@ -205,7 +199,7 @@ public class TestStateTransitionTimeoutWithResource extends 
ZkStandAloneCMTestBa
 
   private void verify(String dbName) {
     IdealState idealState =
-        
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, 
dbName);
+        
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, 
dbName);
     HelixDataAccessor accessor = _manager.getHelixDataAccessor();
     ExternalView ev = 
accessor.getProperty(accessor.keyBuilder().externalView(dbName));
     for (String p : idealState.getPartitionSet()) {
@@ -221,7 +215,7 @@ public class TestStateTransitionTimeoutWithResource extends 
ZkStandAloneCMTestBa
   private void setParticipants(String dbName) throws InterruptedException {
     _factories = new HashMap<>();
     IdealState idealState =
-        
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, 
dbName);
+        
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, 
dbName);
     for (int i = 0; i < NODE_NR; i++) {
       if (_participants[i] != null) {
         _participants[i].syncStop();

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalance.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalance.java
 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalance.java
index 0b90af6..05286a7 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalance.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalance.java
@@ -28,7 +28,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.helix.controller.rebalancer.strategy.*;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.integration.manager.ClusterControllerManager;
 import org.apache.helix.integration.manager.MockParticipantManager;
 import org.apache.helix.model.BuiltInStateModelDefinitions;
@@ -36,7 +36,6 @@ import org.apache.helix.model.ExternalView;
 import org.apache.helix.model.IdealState;
 import org.apache.helix.model.IdealState.RebalanceMode;
 import org.apache.helix.model.InstanceConfig;
-import org.apache.helix.tools.ClusterSetup;
 import 
org.apache.helix.tools.ClusterVerifiers.BestPossibleExternalViewVerifier;
 import org.apache.helix.tools.ClusterVerifiers.HelixClusterVerifier;
 import org.testng.Assert;
@@ -46,7 +45,7 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
-public class TestCrushAutoRebalance extends ZkIntegrationTestBase {
+public class TestCrushAutoRebalance extends ZkTestBase {
   final int NUM_NODE = 6;
   protected static final int START_PORT = 12918;
   protected static final int _PARTITIONS = 20;
@@ -55,12 +54,11 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
   protected final String CLUSTER_NAME = CLUSTER_PREFIX + "_" + CLASS_NAME;
   protected ClusterControllerManager _controller;
 
-  protected ClusterSetup _setupTool = null;
-  List<MockParticipantManager> _participants = new 
ArrayList<MockParticipantManager>();
-  Map<String, String> _nodeToZoneMap = new HashMap<String, String>();
-  Map<String, String> _nodeToTagMap = new HashMap<String, String>();
-  List<String> _nodes = new ArrayList<String>();
-  Set<String> _allDBs = new HashSet<String>();
+  List<MockParticipantManager> _participants = new ArrayList<>();
+  Map<String, String> _nodeToZoneMap = new HashMap<>();
+  Map<String, String> _nodeToTagMap = new HashMap<>();
+  List<String> _nodes = new ArrayList<>();
+  Set<String> _allDBs = new HashSet<>();
   int _replica = 3;
 
   String[] _testModels = { BuiltInStateModelDefinitions.OnlineOffline.name(),
@@ -72,20 +70,15 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
   public void beforeClass() throws Exception {
     System.out.println("START " + CLASS_NAME + " at " + new 
Date(System.currentTimeMillis()));
 
-    String namespace = "/" + CLUSTER_NAME;
-    if (_gZkClient.exists(namespace)) {
-      _gZkClient.deleteRecursively(namespace);
-    }
-    _setupTool = new ClusterSetup(_gZkClient);
-    _setupTool.addCluster(CLUSTER_NAME, true);
+    _gSetupTool.addCluster(CLUSTER_NAME, true);
 
     for (int i = 0; i < NUM_NODE; i++) {
       String storageNodeName = PARTICIPANT_PREFIX + "_" + (START_PORT + i);
-      _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
+      _gSetupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
       String zone = "zone-" + i % 3;
       String tag = "tag-" + i % 2;
-      _setupTool.getClusterManagementTool().setInstanceZoneId(CLUSTER_NAME, 
storageNodeName, zone);
-      _setupTool.getClusterManagementTool().addInstanceTag(CLUSTER_NAME, 
storageNodeName, tag);
+      _gSetupTool.getClusterManagementTool().setInstanceZoneId(CLUSTER_NAME, 
storageNodeName, zone);
+      _gSetupTool.getClusterManagementTool().addInstanceTag(CLUSTER_NAME, 
storageNodeName, tag);
       _nodeToZoneMap.put(storageNodeName, zone);
       _nodeToTagMap.put(storageNodeName, tag);
       _nodes.add(storageNodeName);
@@ -123,9 +116,9 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
     int i = 0;
     for (String stateModel : _testModels) {
       String db = "Test-DB-" + rebalanceStrategyName + "-" + i++;
-      _setupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
+      _gSetupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
           RebalanceMode.FULL_AUTO + "", rebalanceStrategyClass);
-      _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
+      _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
       _allDBs.add(db);
     }
     Thread.sleep(300);
@@ -136,9 +129,9 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
     Assert.assertTrue(_clusterVerifier.verify());
 
     for (String db : _allDBs) {
-      IdealState is = 
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
+      IdealState is = 
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
       ExternalView ev =
-          
_setupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, db);
+          
_gSetupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, 
db);
       validateZoneAndTagIsolation(is, ev, _replica);
     }
   }
@@ -150,13 +143,13 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
     int i = 0;
     for (String tag : tags) {
       String db = "Test-DB-Tag-" + rebalanceStrategyName + "-" + i++;
-      _setupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS,
+      _gSetupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS,
           BuiltInStateModelDefinitions.MasterSlave.name(), 
RebalanceMode.FULL_AUTO + "",
           rebalanceStrategyClass);
-      IdealState is = 
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
+      IdealState is = 
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
       is.setInstanceGroupTag(tag);
-      
_setupTool.getClusterManagementTool().setResourceIdealState(CLUSTER_NAME, db, 
is);
-      _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
+      
_gSetupTool.getClusterManagementTool().setResourceIdealState(CLUSTER_NAME, db, 
is);
+      _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
       _allDBs.add(db);
     }
     Thread.sleep(300);
@@ -167,9 +160,9 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
     Assert.assertTrue(_clusterVerifier.verify());
 
     for (String db : _allDBs) {
-      IdealState is = 
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
+      IdealState is = 
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
       ExternalView ev =
-          
_setupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, db);
+          
_gSetupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, 
db);
       validateZoneAndTagIsolation(is, ev, _replica);
     }
   }
@@ -191,9 +184,9 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
     int i = 0;
     for (String stateModel : _testModels) {
       String db = "Test-DB-CrushRebalanceStrategy-" + i++;
-      _setupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
+      _gSetupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
           RebalanceMode.FULL_AUTO + "", 
CrushRebalanceStrategy.class.getName());
-      _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
+      _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
       _allDBs.add(db);
     }
     Thread.sleep(300);
@@ -204,9 +197,9 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
     Assert.assertTrue(_clusterVerifier.verify());
 
     for (String db : _allDBs) {
-      IdealState is = 
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
+      IdealState is = 
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
       ExternalView ev =
-          
_setupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, db);
+          
_gSetupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, 
db);
       validateZoneAndTagIsolation(is, ev, 2);
     }
   }
@@ -222,19 +215,19 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
       MockParticipantManager p = _participants.get(i);
       if (_nodeToZoneMap.get(p.getInstanceName()).equals(zone)){
         p.syncStop();
-        _setupTool.getClusterManagementTool()
+        _gSetupTool.getClusterManagementTool()
             .enableInstance(CLUSTER_NAME, p.getInstanceName(), false);
         Thread.sleep(50);
-        _setupTool.dropInstanceFromCluster(CLUSTER_NAME, p.getInstanceName());
+        _gSetupTool.dropInstanceFromCluster(CLUSTER_NAME, p.getInstanceName());
       }
     }
 
     int i = 0;
     for (String stateModel : _testModels) {
       String db = "Test-DB-CrushRebalanceStrategy-" + i++;
-      _setupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
+      _gSetupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
           RebalanceMode.FULL_AUTO + "", 
CrushRebalanceStrategy.class.getName());
-      _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
+      _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
       _allDBs.add(db);
     }
     Thread.sleep(300);
@@ -245,9 +238,9 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
     Assert.assertTrue(_clusterVerifier.verify());
 
     for (String db : _allDBs) {
-      IdealState is = 
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
+      IdealState is = 
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
       ExternalView ev =
-          
_setupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, db);
+          
_gSetupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, 
db);
       validateZoneAndTagIsolation(is, ev, 2);
     }
   }
@@ -255,7 +248,7 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
   @AfterMethod
   public void afterMethod() throws Exception {
     for (String db : _allDBs) {
-      _setupTool.dropResourceFromCluster(CLUSTER_NAME, db);
+      _gSetupTool.dropResourceFromCluster(CLUSTER_NAME, db);
     }
     _allDBs.clear();
     // waiting for all DB be dropped.
@@ -278,7 +271,7 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
         assignedZones.add(_nodeToZoneMap.get(instance));
         if (tag != null) {
           InstanceConfig config =
-              
_setupTool.getClusterManagementTool().getInstanceConfig(CLUSTER_NAME, instance);
+              
_gSetupTool.getClusterManagementTool().getInstanceConfig(CLUSTER_NAME, 
instance);
           Assert.assertTrue(config.containsTag(tag));
         }
       }
@@ -307,10 +300,12 @@ public class TestCrushAutoRebalance extends 
ZkIntegrationTestBase {
      * shutdown order: 1) disconnect the controller 2) disconnect participants
      */
     _controller.syncStop();
-    for (MockParticipantManager participant : _participants) {
-      participant.syncStop();
+    for (MockParticipantManager p : _participants) {
+      if (p.isConnected()) {
+        p.syncStop();
+      }
     }
-    _setupTool.deleteCluster(CLUSTER_NAME);
+    _gSetupTool.deleteCluster(CLUSTER_NAME);
     System.out.println("END " + CLASS_NAME + " at " + new 
Date(System.currentTimeMillis()));
   }
 }

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalanceNonRack.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalanceNonRack.java
 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalanceNonRack.java
index 1a41e08..5005858 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalanceNonRack.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalanceNonRack.java
@@ -31,6 +31,7 @@ import org.apache.helix.tools.ClusterSetup;
 import org.apache.helix.tools.ClusterVerifiers.HelixClusterVerifier;
 import org.apache.helix.tools.ClusterVerifiers.StrictMatchExternalViewVerifier;
 import org.testng.Assert;
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
@@ -47,10 +48,9 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
   protected final String CLUSTER_NAME = CLUSTER_PREFIX + "_" + CLASS_NAME;
   protected ClusterControllerManager _controller;
 
-  protected ClusterSetup _setupTool = null;
   List<MockParticipantManager> _participants = new 
ArrayList<MockParticipantManager>();
   Map<String, String> _nodeToTagMap = new HashMap<String, String>();
-  List<String> _nodes = new ArrayList<String>();
+  List<String> _nodes = new ArrayList<>();
   Set<String> _allDBs = new HashSet<>();
   int _replica = 3;
 
@@ -63,12 +63,7 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
   public void beforeClass() throws Exception {
     System.out.println("START " + CLASS_NAME + " at " + new 
Date(System.currentTimeMillis()));
 
-    String namespace = "/" + CLUSTER_NAME;
-    if (_gZkClient.exists(namespace)) {
-      _gZkClient.deleteRecursively(namespace);
-    }
-    _setupTool = new ClusterSetup(_gZkClient);
-    _setupTool.addCluster(CLUSTER_NAME, true);
+    _gSetupTool.addCluster(CLUSTER_NAME, true);
 
     ConfigAccessor configAccessor = new ConfigAccessor(_gZkClient);
     ClusterConfig clusterConfig = 
configAccessor.getClusterConfig(CLUSTER_NAME);
@@ -78,10 +73,10 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
 
     for (int i = 0; i < NUM_NODE; i++) {
       String storageNodeName = PARTICIPANT_PREFIX + "_" + (START_PORT + i);
-      _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
+      _gSetupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
       _nodes.add(storageNodeName);
       String tag = "tag-" + i % 2;
-      _setupTool.getClusterManagementTool().addInstanceTag(CLUSTER_NAME, 
storageNodeName, tag);
+      _gSetupTool.getClusterManagementTool().addInstanceTag(CLUSTER_NAME, 
storageNodeName, tag);
       _nodeToTagMap.put(storageNodeName, tag);
       InstanceConfig instanceConfig =
           configAccessor.getInstanceConfig(CLUSTER_NAME, storageNodeName);
@@ -105,6 +100,18 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
     //enableTopologyAwareRebalance(_gZkClient, CLUSTER_NAME, true);
   }
 
+  @AfterClass
+  public void afterClass() throws Exception {
+    _controller.syncStop();
+    for (MockParticipantManager p : _participants) {
+      if (p.isConnected()) {
+        p.syncStop();
+      }
+    }
+    _gSetupTool.deleteCluster(CLUSTER_NAME);
+    super.afterClass();
+  }
+
   @DataProvider(name = "rebalanceStrategies")
   public static String[][] rebalanceStrategies() {
     return new String[][] { { "CrushRebalanceStrategy", 
CrushRebalanceStrategy.class.getName() },
@@ -118,9 +125,9 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
     int i = 0;
     for (String stateModel : _testModels) {
       String db = "Test-DB-" + rebalanceStrategyName + "-" + i++;
-      _setupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
+      _gSetupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
           RebalanceMode.FULL_AUTO + "", rebalanceStrategyClass);
-      _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
+      _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
       _allDBs.add(db);
     }
     Thread.sleep(300);
@@ -130,9 +137,9 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
             .setResources(_allDBs).build();
     Assert.assertTrue(_clusterVerifier.verify(5000));
     for (String db : _allDBs) {
-      IdealState is = 
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
+      IdealState is = 
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
       ExternalView ev =
-          
_setupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, db);
+          
_gSetupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, 
db);
       validateIsolation(is, ev, _replica);
     }
   }
@@ -144,13 +151,13 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
     int i = 3;
     for (String tag : tags) {
       String db = "Test-DB-" + rebalanceStrategyName + "-" + i++;
-      _setupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS,
+      _gSetupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS,
           BuiltInStateModelDefinitions.MasterSlave.name(), 
RebalanceMode.FULL_AUTO + "",
           rebalanceStrategyClass);
-      IdealState is = 
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
+      IdealState is = 
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
       is.setInstanceGroupTag(tag);
-      
_setupTool.getClusterManagementTool().setResourceIdealState(CLUSTER_NAME, db, 
is);
-      _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
+      
_gSetupTool.getClusterManagementTool().setResourceIdealState(CLUSTER_NAME, db, 
is);
+      _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
       _allDBs.add(db);
     }
     Thread.sleep(300);
@@ -160,9 +167,9 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
             .setResources(_allDBs).build();
     Assert.assertTrue(_clusterVerifier.verify(5000));
     for (String db : _allDBs) {
-      IdealState is = 
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
+      IdealState is = 
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
       ExternalView ev =
-          
_setupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, db);
+          
_gSetupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, 
db);
       validateIsolation(is, ev, _replica);
     }
   }
@@ -183,9 +190,9 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
     int j = 0;
     for (String stateModel : _testModels) {
       String db = "Test-DB-" + rebalanceStrategyName + "-" + j++;
-      _setupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
+      _gSetupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
           RebalanceMode.FULL_AUTO + "", rebalanceStrategyClass);
-      _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
+      _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
       _allDBs.add(db);
     }
     Thread.sleep(300);
@@ -195,9 +202,9 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
             .setResources(_allDBs).build();
     Assert.assertTrue(_clusterVerifier.verify(5000));
     for (String db : _allDBs) {
-      IdealState is = 
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
+      IdealState is = 
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
       ExternalView ev =
-          
_setupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, db);
+          
_gSetupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, 
db);
       validateIsolation(is, ev, 2);
     }
 
@@ -218,18 +225,18 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
     for (int i = 2; i < _participants.size(); i++) {
       MockParticipantManager p = _participants.get(i);
       p.syncStop();
-      _setupTool.getClusterManagementTool()
+      _gSetupTool.getClusterManagementTool()
           .enableInstance(CLUSTER_NAME, p.getInstanceName(), false);
       Thread.sleep(200);
-      _setupTool.dropInstanceFromCluster(CLUSTER_NAME, p.getInstanceName());
+      _gSetupTool.dropInstanceFromCluster(CLUSTER_NAME, p.getInstanceName());
     }
 
     int j = 0;
     for (String stateModel : _testModels) {
       String db = "Test-DB-" + rebalanceStrategyName + "-" + j++;
-      _setupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
+      _gSetupTool.addResourceToCluster(CLUSTER_NAME, db, _PARTITIONS, 
stateModel,
           RebalanceMode.FULL_AUTO + "", rebalanceStrategyClass);
-      _setupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
+      _gSetupTool.rebalanceStorageCluster(CLUSTER_NAME, db, _replica);
       _allDBs.add(db);
     }
     Thread.sleep(300);
@@ -238,9 +245,9 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
             .setResources(_allDBs).build();
     Assert.assertTrue(_clusterVerifier.verify());
     for (String db : _allDBs) {
-      IdealState is = 
_setupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
+      IdealState is = 
_gSetupTool.getClusterManagementTool().getResourceIdealState(CLUSTER_NAME, db);
       ExternalView ev =
-          
_setupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, db);
+          
_gSetupTool.getClusterManagementTool().getResourceExternalView(CLUSTER_NAME, 
db);
       validateIsolation(is, ev, 2);
     }
 
@@ -248,7 +255,7 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
     ConfigAccessor configAccessor = new ConfigAccessor(_gZkClient);
     for (int i = 2; i < _participants.size(); i++) {
       String storageNodeName = _participants.get(i).getInstanceName();
-      _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
+      _gSetupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
 
       InstanceConfig instanceConfig =
           configAccessor.getInstanceConfig(CLUSTER_NAME, storageNodeName);
@@ -274,7 +281,7 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
       for (String instance : instancesInEV) {
         if (tag != null) {
           InstanceConfig config =
-              
_setupTool.getClusterManagementTool().getInstanceConfig(CLUSTER_NAME, instance);
+              
_gSetupTool.getClusterManagementTool().getInstanceConfig(CLUSTER_NAME, 
instance);
           Assert.assertTrue(config.containsTag(tag));
         }
       }
@@ -284,7 +291,7 @@ public class TestCrushAutoRebalanceNonRack extends 
ZkStandAloneCMTestBase {
   @AfterMethod
   public void afterMethod() throws Exception {
     for (String db : _allDBs) {
-      _setupTool.dropResourceFromCluster(CLUSTER_NAME, db);
+      _gSetupTool.dropResourceFromCluster(CLUSTER_NAME, db);
     }
     _allDBs.clear();
     // waiting for all DB be dropped.

http://git-wip-us.apache.org/repos/asf/helix/blob/c0d5792b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalanceTopoplogyAwareDisabled.java
----------------------------------------------------------------------
diff --git 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalanceTopoplogyAwareDisabled.java
 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalanceTopoplogyAwareDisabled.java
index c7d88e9..2b89164 100644
--- 
a/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalanceTopoplogyAwareDisabled.java
+++ 
b/helix-core/src/test/java/org/apache/helix/integration/rebalancer/CrushRebalancers/TestCrushAutoRebalanceTopoplogyAwareDisabled.java
@@ -20,10 +20,9 @@ package 
org.apache.helix.integration.rebalancer.CrushRebalancers;
  */
 
 import java.util.Date;
-import org.apache.helix.integration.common.ZkIntegrationTestBase;
+import org.apache.helix.common.ZkTestBase;
 import org.apache.helix.integration.manager.ClusterControllerManager;
 import org.apache.helix.integration.manager.MockParticipantManager;
-import org.apache.helix.tools.ClusterSetup;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
@@ -33,36 +32,31 @@ public class TestCrushAutoRebalanceTopoplogyAwareDisabled 
extends TestCrushAutoR
   public void beforeClass() throws Exception {
     System.out.println("START " + CLASS_NAME + " at " + new 
Date(System.currentTimeMillis()));
 
-    String namespace = "/" + CLUSTER_NAME;
-    if (ZkIntegrationTestBase._gZkClient.exists(namespace)) {
-      ZkIntegrationTestBase._gZkClient.deleteRecursively(namespace);
-    }
-    _setupTool = new ClusterSetup(ZkIntegrationTestBase._gZkClient);
-    _setupTool.addCluster(CLUSTER_NAME, true);
+    _gSetupTool.addCluster(CLUSTER_NAME, true);
 
     for (int i = 0; i < NUM_NODE; i++) {
       String storageNodeName = PARTICIPANT_PREFIX + "_" + 
(TestCrushAutoRebalanceNonRack.START_PORT + i);
-      _setupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
+      _gSetupTool.addInstanceToCluster(CLUSTER_NAME, storageNodeName);
       _nodes.add(storageNodeName);
       String tag = "tag-" + i % 2;
-      _setupTool.getClusterManagementTool().addInstanceTag(CLUSTER_NAME, 
storageNodeName, tag);
+      _gSetupTool.getClusterManagementTool().addInstanceTag(CLUSTER_NAME, 
storageNodeName, tag);
       _nodeToTagMap.put(storageNodeName, tag);
     }
 
     // start dummy participants
     for (String node : _nodes) {
       MockParticipantManager participant =
-          new MockParticipantManager(ZkIntegrationTestBase.ZK_ADDR, 
CLUSTER_NAME, node);
+          new MockParticipantManager(ZkTestBase.ZK_ADDR, CLUSTER_NAME, node);
       participant.syncStart();
       _participants.add(participant);
     }
 
     // start controller
     String controllerName = CONTROLLER_PREFIX + "_0";
-    _controller = new ClusterControllerManager(ZkIntegrationTestBase.ZK_ADDR, 
CLUSTER_NAME, controllerName);
+    _controller = new ClusterControllerManager(ZkTestBase.ZK_ADDR, 
CLUSTER_NAME, controllerName);
     _controller.syncStart();
 
-    enablePersistBestPossibleAssignment(ZkIntegrationTestBase._gZkClient, 
CLUSTER_NAME, true);
+    enablePersistBestPossibleAssignment(ZkTestBase._gZkClient, CLUSTER_NAME, 
true);
   }
 
   @Test(dataProvider = "rebalanceStrategies")

Reply via email to