public CCMBridge build() {
   CCMBridge ccm = new CCMBridge();
   ccm.execute(buildCreateCommand());
   ccm.updateConfig(cassandraConfiguration);
   if (start) ccm.start();
   return ccm;
 }
    public void discard() {
      if (cluster != null) cluster.close();

      if (cassandraCluster == null) {
        logger.error("No cluster to discard");
      } else if (erroredOut) {
        cassandraCluster.stop();
        logger.info("Error during tests, kept C* logs in " + cassandraCluster.ccmDir);
      } else {
        cassandraCluster.remove();
        cassandraCluster.ccmDir.delete();
      }
    }
 /**
  * Waits for a host to be down by pinging the TCP socket directly, without using the Java driver's
  * API.
  */
 public void waitForDown(int node) {
   try {
     InetAddress address = InetAddress.getByName(ipOfNode(node));
     CCMBridge.busyWaitForPort(address, 9042, false);
   } catch (UnknownHostException e) {
     Assert.fail("Unknown host " + ipOfNode(node) + "( node " + node + " of CCMBridge)");
   }
 }
  private static void busyWaitForPort(
      InetAddress address, int port, boolean expectedConnectionState) {
    long maxAcceptableWaitTime = TimeUnit.SECONDS.toMillis(10);
    long waitQuantum = TimeUnit.MILLISECONDS.toMillis(500);
    long waitTimeSoFar = 0;
    boolean connectionState = !expectedConnectionState;

    while (connectionState != expectedConnectionState && waitTimeSoFar < maxAcceptableWaitTime) {
      connectionState = CCMBridge.pingPort(address, port);
      try {
        Thread.sleep(waitQuantum);
        waitTimeSoFar += waitQuantum;
      } catch (InterruptedException e) {
        throw new RuntimeException("Interrupted while pinging " + address + ":" + port, e);
      }
    }
  }
    public static CCMCluster create(int nbNodesDC1, int nbNodesDC2, Cluster.Builder builder) {
      if (nbNodesDC1 == 0) throw new IllegalArgumentException();

      CCMBridge ccm = CCMBridge.builder("test").withNodes(nbNodesDC1, nbNodesDC2).build();
      return new CCMCluster(ccm, builder, nbNodesDC1 + nbNodesDC2);
    }