You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2016/02/11 01:38:45 UTC

[11/61] [abbrv] [partial] incubator-geode git commit: GEODE-773: Extract static methods from DistributedTestCase

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/NetworkUtils.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/NetworkUtils.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/NetworkUtils.java
new file mode 100755
index 0000000..d83aecd
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/NetworkUtils.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit;
+
+import java.net.UnknownHostException;
+
+import com.gemstone.gemfire.internal.SocketCreator;
+
+/**
+ * <code>NetworkUtils</code> provides static utility methods to perform
+ * network DNS lookups or similar actions.
+ * 
+ * These methods can be used directly: <code>NetworkUtils.getIPLiteral()</code>, 
+ * however, they are intended to be referenced through static import:
+ *
+ * <pre>
+ * import static com.gemstone.gemfire.test.dunit.NetworkUtils.*;
+ *    ...
+ *    String hostName = getIPLiteral();
+ * </pre>
+ *
+ * Extracted from DistributedTestCase.
+ */
+public class NetworkUtils {
+
+  protected NetworkUtils() {
+  }
+  
+  /** 
+   * Get the IP literal name for the current host. Use this instead of  
+   * "localhost" to avoid IPv6 name resolution bugs in the JDK/machine config.
+   * This method honors java.net.preferIPvAddresses
+   * 
+   * @return an IP literal which honors java.net.preferIPvAddresses
+   */
+  public static String getIPLiteral() {
+    try {
+      return SocketCreator.getLocalHost().getHostAddress();
+    } catch (UnknownHostException e) {
+      throw new Error("Problem determining host IP address", e);
+    }
+  }
+
+  /** 
+   * Get the host name to use for a server cache in client/server dunit
+   * testing.
+   * 
+   * @param host the dunit Host to get a machine host name for
+   * @return the host name
+   */
+  public static String getServerHostName(final Host host) {
+    String serverBindAddress = System.getProperty("gemfire.server-bind-address");
+    return serverBindAddress != null ? serverBindAddress : host.getHostName();
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/RMIException.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/RMIException.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/RMIException.java
index 8a555d2..1a5fac4 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/RMIException.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/RMIException.java
@@ -42,8 +42,8 @@ import com.gemstone.gemfire.GemFireException;
  * see hydra.RemoteTestModuleIF
  *
  * @author David Whitlock
- *
  */
+@SuppressWarnings("serial")
 public class RMIException extends GemFireException {
 
   /** SHADOWED FIELD that holds the cause exception (as opposed to the

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/RepeatableRunnable.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/RepeatableRunnable.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/RepeatableRunnable.java
index 32e4369..9695c32 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/RepeatableRunnable.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/RepeatableRunnable.java
@@ -20,8 +20,10 @@ package com.gemstone.gemfire.test.dunit;
  * A RepeatableRunnable is an object that implements a method that
  * can be invoked repeatably without causing any side affects.
  *
- * @author  dmonnie
+ * @author dmonnie
+ * @deprecated Please use SerializableRunnable with {@link com.jayway.awaitility.Awaitility} instead.
  */
+@Deprecated
 public interface RepeatableRunnable {
   
   public void runRepeatingIfNecessary(long repeatTimeoutMs);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableCallableIF.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableCallableIF.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableCallableIF.java
index c3d3ae7..ddeb71e 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableCallableIF.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableCallableIF.java
@@ -19,6 +19,8 @@ package com.gemstone.gemfire.test.dunit;
 import java.io.Serializable;
 import java.util.concurrent.Callable;
 
+/**
+ * Interface for {@link SerializableCallable} to enable use with lambdas.
+ */
 public interface SerializableCallableIF<T> extends Serializable, Callable<T> {
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableRunnable.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableRunnable.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableRunnable.java
index 658924a..353cdc7 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableRunnable.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableRunnable.java
@@ -46,8 +46,7 @@ import java.io.Serializable;
  *  }
  * </PRE>
  */
-public abstract class SerializableRunnable
-  implements SerializableRunnableIF {
+public abstract class SerializableRunnable implements SerializableRunnableIF {
 
   private static final long serialVersionUID = 7584289978241650456L;
   

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableRunnableIF.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableRunnableIF.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableRunnableIF.java
index 648e4f8..5e5467d 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableRunnableIF.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableRunnableIF.java
@@ -18,6 +18,8 @@ package com.gemstone.gemfire.test.dunit;
 
 import java.io.Serializable;
 
+/**
+ * Interface for {@link SerializableRunnable} to enable use with lambdas.
+ */
 public interface SerializableRunnableIF extends Serializable, Runnable {
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/StoppableWaitCriterion.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/StoppableWaitCriterion.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/StoppableWaitCriterion.java
new file mode 100755
index 0000000..b7be9c5
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/StoppableWaitCriterion.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit;
+
+/**
+ * Defines an asynchronous criterion with an optional method to fail early
+ * before timeout.
+ *
+ * Extracted from DistributedTestCase.
+ * 
+ * @deprecated Use {@link com.jayway.awaitility.Awaitility} instead.
+ */
+public interface StoppableWaitCriterion extends WaitCriterion {
+  
+  /**
+   * If this method returns true then quit waiting even if we are not done.
+   * This allows a wait to fail early.
+   */
+  public boolean stopWaiting();
+  
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/ThreadUtils.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/ThreadUtils.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/ThreadUtils.java
new file mode 100755
index 0000000..6ba87ed
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/ThreadUtils.java
@@ -0,0 +1,155 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit;
+
+import static org.junit.Assert.fail;
+import static com.gemstone.gemfire.test.dunit.Jitter.*;
+
+import org.apache.logging.log4j.Logger;
+
+import com.gemstone.gemfire.internal.OSProcess;
+import com.gemstone.gemfire.internal.logging.LogService;
+
+/**
+ * <code>ThreadUtils</code> provides static utility methods to perform thread
+ * related actions such as dumping thread stacks.
+ * 
+ * These methods can be used directly: <code>ThreadUtils.dumpAllStacks()</code>, 
+ * however, they are intended to be referenced through static import:
+ *
+ * <pre>
+ * import static com.gemstone.gemfire.test.dunit.ThreadUtils.*;
+ *    ...
+ *    dumpAllStacks();
+ * </pre>
+ *
+ * Extracted from DistributedTestCase.
+ */
+public class ThreadUtils {
+  
+  private static final Logger logger = LogService.getLogger();
+
+  protected ThreadUtils() {
+  }
+  
+  /**
+   * Print stack dumps for all vms.
+   * 
+   * @author bruce
+   * @since 5.0
+   */
+  public static void dumpAllStacks() {
+    for (int h=0; h < Host.getHostCount(); h++) {
+      dumpStack(Host.getHost(h));
+    }
+  }
+  
+  /**
+   * Dump all thread stacks
+   */
+  public static void dumpMyThreads() {
+    OSProcess.printStacks(0, false);
+  }
+
+  /** 
+   * Print a stack dump for this vm.
+   * 
+   * @author bruce
+   * @since 5.0
+   */
+  public static void dumpStack() {
+    OSProcess.printStacks(0, false);
+  }
+
+  /** 
+   * Print stack dumps for all vms on the given host.
+   * 
+   * @author bruce
+   * @since 5.0
+   */
+  public static void dumpStack(final Host host) {
+    for (int v=0; v < host.getVMCount(); v++) {
+      host.getVM(v).invoke(com.gemstone.gemfire.test.dunit.DistributedTestCase.class, "dumpStack");
+    }
+  }
+
+  /** 
+   * Print a stack dump for the given vm.
+   * 
+   * @author bruce
+   * @since 5.0
+   */
+  public static void dumpStack(final VM vm) {
+    vm.invoke(com.gemstone.gemfire.test.dunit.DistributedTestCase.class, "dumpStack");
+  }
+
+  public static void dumpStackTrace(final Thread thread, final StackTraceElement[] stackTrace) {
+    StringBuilder msg = new StringBuilder();
+    msg.append("Thread=<")
+      .append(thread)
+      .append("> stackDump:\n");
+    for (int i=0; i < stackTrace.length; i++) {
+      msg.append("\t")
+        .append(stackTrace[i])
+        .append("\n");
+    }
+    logger.info(msg.toString());
+  }
+
+  /**
+   * Wait for a thread to join.
+   * 
+   * @param thread thread to wait on
+   * @param timeoutMilliseconds maximum time to wait
+   * @throws AssertionError if the thread does not terminate
+   */
+  public static void join(final Thread thread, final long timeoutMilliseconds) {
+    final long tilt = System.currentTimeMillis() + timeoutMilliseconds;
+    final long incrementalWait = jitterInterval(timeoutMilliseconds);
+    final long start = System.currentTimeMillis();
+    for (;;) {
+      // I really do *not* understand why this check is necessary
+      // but it is, at least with JDK 1.6.  According to the source code
+      // and the javadocs, one would think that join() would exit immediately
+      // if the thread is dead.  However, I can tell you from experimentation
+      // that this is not the case. :-(  djp 2008-12-08
+      if (!thread.isAlive()) {
+        break;
+      }
+      try {
+        thread.join(incrementalWait);
+      } catch (InterruptedException e) {
+        fail("interrupted");
+      }
+      if (System.currentTimeMillis() >= tilt) {
+        break;
+      }
+    } // for
+    if (thread.isAlive()) {
+      logger.info("HUNG THREAD");
+      ThreadUtils.dumpStackTrace(thread, thread.getStackTrace());
+      ThreadUtils.dumpMyThreads();
+      thread.interrupt(); // We're in trouble!
+      fail("Thread did not terminate after " + timeoutMilliseconds + " ms: " + thread);
+    }
+    long elapsedMs = (System.currentTimeMillis() - start);
+    if (elapsedMs > 0) {
+      String msg = "Thread " + thread + " took " + elapsedMs + " ms to exit.";
+      logger.info(msg);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/VM.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/VM.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/VM.java
index 0d16196..db3e302 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/VM.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/VM.java
@@ -18,9 +18,9 @@ package com.gemstone.gemfire.test.dunit;
 
 import java.io.File;
 import java.io.PrintWriter;
+import java.io.Serializable;
 import java.io.StringWriter;
 import java.rmi.RemoteException;
-import java.util.concurrent.Callable;
 
 import com.gemstone.gemfire.test.dunit.standalone.BounceResult;
 import com.gemstone.gemfire.test.dunit.standalone.RemoteDUnitVMIF;
@@ -31,9 +31,9 @@ import hydra.MethExecutorResult;
  * This class represents a Java Virtual Machine that runs on a host.
  *
  * @author David Whitlock
- *
  */
-public class VM implements java.io.Serializable {
+@SuppressWarnings("serial")
+public class VM implements Serializable {
 
   /** The host on which this VM runs */
   private Host host;
@@ -53,7 +53,7 @@ public class VM implements java.io.Serializable {
    * Creates a new <code>VM</code> that runs on a given host with a
    * given process id.
    */
-  public VM(Host host, int pid, RemoteDUnitVMIF client) {
+  public VM(final Host host, final int pid, final RemoteDUnitVMIF client) {
     this.host = host;
     this.pid = pid;
     this.client = client;
@@ -83,7 +83,7 @@ public class VM implements java.io.Serializable {
    * <code>void</code> return type in this VM.  If the return type of
    * the method is <code>void</code>, <code>null</code> is returned.
    *
-   * @param c
+   * @param targetClass
    *        The class on which to invoke the method
    * @param methodName
    *        The name of the method to invoke
@@ -92,8 +92,8 @@ public class VM implements java.io.Serializable {
    *         An exception occurred on while invoking the method in
    *         this VM
    */
-  public Object invoke(Class c, String methodName) {
-    return invoke(c, methodName, new Object[0]);
+  public Object invoke(final Class targetClass, final String methodName) {
+    return invoke(targetClass, methodName, new Object[0]);
   }
 
   /**
@@ -102,13 +102,13 @@ public class VM implements java.io.Serializable {
    * return type of the method is <code>void</code>, <code>null</code>
    * is returned.
    *
-   * @param c
+   * @param targetClass
    *        The class on which to invoke the method
    * @param methodName
    *        The name of the method to invoke
    */
-  public AsyncInvocation invokeAsync(Class c, String methodName) {
-    return invokeAsync(c, methodName, null);
+  public AsyncInvocation invokeAsync(final Class targetClass, final String methodName) {
+    return invokeAsync(targetClass, methodName, null);
   }
 
   /**
@@ -116,7 +116,7 @@ public class VM implements java.io.Serializable {
    * <code>void</code> return type in this VM.  If the return type of
    * the method is <code>void</code>, <code>null</code> is returned.
    *
-   * @param c
+   * @param targetClass
    *        The class on which to invoke the method
    * @param methodName
    *        The name of the method to invoke
@@ -128,17 +128,17 @@ public class VM implements java.io.Serializable {
    *         An exception occurred on while invoking the method in
    *         this VM
    */
-  public Object invoke(Class c, String methodName, Object[] args) {
+  public Object invoke(Class targetClass, String methodName, Object[] args) {
     if (!this.available) {
       String s = "VM not available: " + this;
-      throw new RMIException(this, c.getName(), methodName,
+      throw new RMIException(this, targetClass.getName(), methodName,
             new IllegalStateException(s));
     }
     MethExecutorResult result = null;
     int retryCount = 120;
     do {
     try {
-      result = this.client.executeMethodOnClass(c.getName(), methodName, args);
+      result = this.client.executeMethodOnClass(targetClass.getName(), methodName, args);
       break; // out of while loop
     } catch( RemoteException e ) {
       boolean isWindows = false;
@@ -157,7 +157,7 @@ public class VM implements java.io.Serializable {
           }
         }
       } else {
-        throw new RMIException(this, c.getName(), methodName, e );
+        throw new RMIException(this, targetClass.getName(), methodName, e );
       }
     }
     } while (true);
@@ -167,7 +167,7 @@ public class VM implements java.io.Serializable {
 
     } else {
       Throwable thr = result.getException();
-      throw new RMIException(this, c.getName(), methodName, thr,
+      throw new RMIException(this, targetClass.getName(), methodName, thr,
                              result.getStackTrace()); 
     }
   }
@@ -177,7 +177,7 @@ public class VM implements java.io.Serializable {
    * <code>void</code> return type in this VM.  If the return type of
    * the method is <code>void</code>, <code>null</code> is returned.
    *
-   * @param c
+   * @param targetClass
    *        The class on which to invoke the method
    * @param methodName
    *        The name of the method to invoke
@@ -185,13 +185,13 @@ public class VM implements java.io.Serializable {
    *        Arguments passed to the method call (must be {@link
    *        java.io.Serializable}). 
    */
-  public AsyncInvocation invokeAsync(final Class c, 
+  public AsyncInvocation invokeAsync(final Class targetClass, 
                                      final String methodName,
                                      final Object[] args) {
     AsyncInvocation ai =
-      new AsyncInvocation(c, methodName, new Runnable() {
+      new AsyncInvocation(targetClass, methodName, new Runnable() {
         public void run() {
-          final Object o = invoke(c, methodName, args);
+          final Object o = invoke(targetClass, methodName, args);
           AsyncInvocation.setReturnValue(o);
         }
       });
@@ -282,12 +282,14 @@ public class VM implements java.io.Serializable {
   }
   
   /**
-   * Invokes the <code>run</code method of a {@link Runnable} in this
+   * Invokes the <code>run</code> method of a {@link Runnable} in this
    * VM.  If the invocation throws AssertionFailedError, and repeatTimeoutMs
    * is >0, the <code>run</code> method is invoked repeatedly until it
    * either succeeds, or repeatTimeoutMs has passed.  The AssertionFailedError
    * is thrown back to the sender of this method if <code>run</code> has not
    * completed successfully before repeatTimeoutMs has passed.
+   * 
+   * @deprecated Please use {@link com.jayway.awaitility.Awaitility} with {@link #invoke(SerializableCallableIF)} instead.
    */
   public void invokeRepeatingIfNecessary(RepeatableRunnable o, long repeatTimeoutMs) {
     invoke(o, "runRepeatingIfNecessary", new Object[] {new Long(repeatTimeoutMs)});
@@ -374,15 +376,15 @@ public class VM implements java.io.Serializable {
   /**
    * Invokes the <code>main</code> method of a given class
    *
-   * @param c
+   * @param targetClass
    *        The class on which to invoke the <code>main</code> method
    * @param args
    *        The "command line" arguments to pass to the
    *        <code>main</code> method
    */
-  public void invokeMain(Class c, String[] args) {
+  public void invokeMain(Class targetClass, String[] args) {
     Object[] stupid = new Object[] { args };
-    invoke(c, "main", stupid);
+    invoke(targetClass, "main", stupid);
   }
 
   /**
@@ -1342,4 +1344,14 @@ public class VM implements java.io.Serializable {
     return DUnitEnv.get().getWorkingDirectory(this.getPid());
   }
 
+  /** Return the total number of VMs on all hosts */
+  public static int getVMCount() {
+    int count = 0;
+    for (int h = 0; h < Host.getHostCount(); h++) {
+      Host host = Host.getHost(h);
+      count += host.getVMCount();
+    }
+    return count;
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/Wait.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/Wait.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/Wait.java
new file mode 100755
index 0000000..3e218df
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/Wait.java
@@ -0,0 +1,204 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit;
+
+import static org.junit.Assert.fail;
+import static com.gemstone.gemfire.test.dunit.Jitter.*;
+
+import org.apache.logging.log4j.Logger;
+
+import com.gemstone.gemfire.internal.cache.LocalRegion;
+import com.gemstone.gemfire.internal.logging.LogService;
+
+/**
+ * <code>Wait</code> provides static utility methods to wait for some
+ * asynchronous action with intermittent polling.
+ * 
+ * These methods can be used directly: <code>Wait.waitForCriterion(...)</code>, 
+ * however, they are intended to be referenced through static import:
+ *
+ * <pre>
+ * import static com.gemstone.gemfire.test.dunit.Wait.*;
+ *    ...
+ *    waitForCriterion(...);
+ * </pre>
+ *
+ * Extracted from DistributedTestCase.
+ * 
+ * @deprecated Use {@link com.jayway.awaitility.Awaitility} instead.
+ */
+@Deprecated
+public class Wait {
+  
+  private static final Logger logger = LogService.getLogger();
+
+  protected Wait() {
+  }
+  
+  /**
+   * Pause for a default interval (250 milliseconds).
+   *  
+   * @deprecated Please use {@link com.jayway.awaitility.Awaitility} instead.
+   */
+  public static void pause() {
+    pause(250);
+  }
+
+  /**
+   * Pause for the specified milliseconds. Make sure system clock has advanced
+   * by the specified number of millis before returning.
+   * 
+   * @deprecated Please use {@link com.jayway.awaitility.Awaitility} instead.
+   */
+  public static final void pause(final int milliseconds) {
+    if (milliseconds >= 1000 || logger.isDebugEnabled()) { // check for debug but log at info
+      logger.info("Pausing for {} ms...", milliseconds);
+    }
+    final long target = System.currentTimeMillis() + milliseconds;
+    try {
+      for (;;) {
+        long msLeft = target - System.currentTimeMillis();
+        if (msLeft <= 0) {
+          break;
+        }
+        Thread.sleep(msLeft);
+      }
+    }
+    catch (InterruptedException e) {
+      Assert.fail("interrupted", e);
+    }
+  }
+  
+  /**
+   * Wait until given criterion is met
+   * 
+   * @param waitCriterion criterion to wait on
+   * @param timeoutMillis total time to wait, in milliseconds
+   * @param pollingInterval pause interval between waits
+   * @param throwOnTimeout if false, don't generate an error
+   * @deprecated Please use {@link com.jayway.awaitility.Awaitility} instead.
+   */
+  @Deprecated
+  public static void waitForCriterion(final WaitCriterion waitCriterion, final long timeoutMillis, final long pollingInterval, final boolean throwOnTimeout) {
+    long waitThisTime = jitterInterval(pollingInterval);
+    final long tilt = System.currentTimeMillis() + timeoutMillis;
+    for (;;) {
+      if (waitCriterion.done()) {
+        return; // success
+      }
+      if (waitCriterion instanceof StoppableWaitCriterion) {
+        StoppableWaitCriterion ev2 = (StoppableWaitCriterion)waitCriterion;
+        if (ev2.stopWaiting()) {
+          if (throwOnTimeout) {
+            fail("stopWaiting returned true: " + waitCriterion.description());
+          }
+          return;
+        }
+      }
+
+      // Calculate time left
+      long timeLeft = tilt - System.currentTimeMillis();
+      if (timeLeft <= 0) {
+        if (!throwOnTimeout) {
+          return; // not an error, but we're done
+        }
+        fail("Event never occurred after " + timeoutMillis + " ms: " + waitCriterion.description());
+      }
+      
+      if (waitThisTime > timeLeft) {
+        waitThisTime = timeLeft;
+      }
+      
+      // Wait a little bit
+      Thread.yield();
+      try {
+        Thread.sleep(waitThisTime);
+      } catch (InterruptedException e) {
+        fail("interrupted");
+      }
+    }
+  }
+
+  /**
+   * Blocks until the clock used for expiration moves forward.
+   * 
+   * @param cacheTimeMillisSource region that provides cacheTimeMillis
+   * @return the last time stamp observed
+   * @deprecated Please use {@link com.jayway.awaitility.Awaitility} instead.
+   */
+  public static final long waitForExpiryClockToChange(final LocalRegion cacheTimeMillisSource) {
+    return waitForExpiryClockToChange(cacheTimeMillisSource, cacheTimeMillisSource.cacheTimeMillis());
+  }
+
+  /**
+   * Blocks until the clock used for expiration moves forward.
+   * 
+   * @param cacheTimeMillisSource region that provides cacheTimeMillis
+   * @param baseTime the timestamp that the clock must exceed
+   * @return the last time stamp observed
+   * @deprecated Please use {@link com.jayway.awaitility.Awaitility} instead.
+   */
+  public static final long waitForExpiryClockToChange(final LocalRegion cacheTimeMillisSource, final long baseTime) {
+    long nowTime;
+    do {
+      Thread.yield();
+      nowTime = cacheTimeMillisSource.cacheTimeMillis();
+    } while ((nowTime - baseTime) <= 0L);
+    return nowTime;
+  }
+
+  /**
+   * Wait on a mutex.  This is done in a loop in order to address the 
+   * "spurious wakeup" "feature" in Java.
+   * 
+   * @param waitCriterion condition to test
+   * @param mutex object to lock and wait on
+   * @param milliseconds total amount of time to wait
+   * @param pollingInterval interval to pause for the wait
+   * @param throwOnTimeout if false, no error is thrown.
+   * @deprecated Please use {@link com.jayway.awaitility.Awaitility} instead.
+   */
+  public static void waitMutex(final WaitCriterion waitCriterion, final Object mutex, final long milliseconds, final long pollingInterval, final boolean throwOnTimeout) {
+    final long tilt = System.currentTimeMillis() + milliseconds;
+    long waitThisTime = jitterInterval(pollingInterval);
+    synchronized (mutex) {
+      for (;;) {
+        if (waitCriterion.done()) {
+          break;
+        }
+        
+        long timeLeft = tilt - System.currentTimeMillis();
+        if (timeLeft <= 0) {
+          if (!throwOnTimeout) {
+            return; // not an error, but we're done
+          }
+          fail("Event never occurred after " + milliseconds + " ms: " + waitCriterion.description());
+        }
+        
+        if (waitThisTime > timeLeft) {
+          waitThisTime = timeLeft;
+        }
+        
+        try {
+          mutex.wait(waitThisTime);
+        } catch (InterruptedException e) {
+          fail("interrupted");
+        }
+      } // for
+    } // synchronized
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/WaitCriterion.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/WaitCriterion.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/WaitCriterion.java
new file mode 100755
index 0000000..7575f8c
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/WaitCriterion.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit;
+
+/**
+ * Defines an asynchronous criterion to wait for by invoking a method in 
+ * {@link Wait}.
+ *
+ * Extracted from DistributedTestCase.
+ * 
+ * @deprecated Use {@link com.jayway.awaitility.Awaitility} instead.
+ */
+public interface WaitCriterion {
+  
+  public boolean done();
+  
+  public String description();
+  
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedDisconnectRule.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedDisconnectRule.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedDisconnectRule.java
new file mode 100755
index 0000000..125fc06
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedDisconnectRule.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit.rules;
+
+// TODO: import static com.gemstone.gemfire.test.dunit.DistributedTestRule.*;
+
+import com.gemstone.gemfire.test.dunit.SerializableRunnable;
+
+@SuppressWarnings("serial")
+public class DistributedDisconnectRule extends DistributedExternalResource {
+
+  private final boolean disconnectBefore;
+  private final boolean disconnectAfter;
+  private final boolean disconnectBeforeClass;
+  private final boolean disconnectAfterClass;
+  
+  public static Builder builder() {
+    return new Builder();
+  }
+  
+  public DistributedDisconnectRule(final Builder builder) {
+    this(new RemoteInvoker(), builder);
+  }
+   
+  public DistributedDisconnectRule(final RemoteInvoker invoker, final Builder builder) {
+    super(invoker);
+    this.disconnectBeforeClass = builder.disconnectBeforeClass;
+    this.disconnectAfterClass = builder.disconnectAfterClass;
+    this.disconnectBefore = builder.disconnectBefore;
+    this.disconnectAfter = builder.disconnectAfter;
+  }
+
+  @Override
+  protected void before() throws Throwable {
+    if (this.disconnectBefore) {
+      invoker().invokeEverywhere(serializableRunnable());
+    }
+  }
+
+  @Override
+  protected void after() throws Throwable {
+    if (this.disconnectAfter) {
+      invoker().invokeEverywhere(serializableRunnable());
+    }
+  }
+
+  @Override
+  protected void beforeClass() throws Throwable {
+    if (this.disconnectBeforeClass) {
+      invoker().invokeEverywhere(serializableRunnable());
+    }
+  }
+
+  @Override
+  protected void afterClass() throws Throwable {
+    if (this.disconnectAfterClass) {
+      invoker().invokeEverywhere(serializableRunnable());
+    }
+  }
+
+  private static SerializableRunnable serializableRunnable() {
+    return new SerializableRunnable() {
+      @Override
+      public void run() {
+        // TODO: disconnectFromDS();
+      }
+    };
+  }
+  
+  /**
+   * Builds an instance of DistributedDisconnectRule
+   * 
+   * @author Kirk Lund
+   */
+  public static class Builder {
+    private boolean disconnectBeforeClass;
+    private boolean disconnectAfterClass;
+    private boolean disconnectBefore;
+    private boolean disconnectAfter;
+    
+    public Builder() {}
+
+    public Builder disconnectBeforeClass(final boolean disconnectBeforeClass) {
+      this.disconnectBeforeClass = disconnectBeforeClass;
+      return this;
+    }
+    
+    public Builder disconnectBefore(final boolean disconnectBefore) {
+      this.disconnectBefore = disconnectBefore;
+      return this;
+    }
+    
+    public Builder disconnectAfterClass(final boolean disconnectAfterClass) {
+      this.disconnectAfterClass = disconnectAfterClass;
+      return this;
+    }
+    
+    public Builder disconnectAfter(final boolean disconnectAfter) {
+      this.disconnectAfter = disconnectAfter;
+      return this;
+    }
+    
+    public DistributedDisconnectRule build() {
+      return new DistributedDisconnectRule(this);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedExternalResource.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedExternalResource.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedExternalResource.java
new file mode 100755
index 0000000..d3b7319
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedExternalResource.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit.rules;
+
+import com.gemstone.gemfire.test.junit.rules.SerializableExternalResource;
+
+@SuppressWarnings("serial")
+public class DistributedExternalResource extends SerializableExternalResource {
+
+  private final RemoteInvoker invoker;
+
+  public DistributedExternalResource() {
+    this(new RemoteInvoker());
+  }
+   
+  public DistributedExternalResource(final RemoteInvoker invoker) {
+    super();
+    this.invoker = invoker;
+  }
+
+  protected RemoteInvoker invoker() {
+    return this.invoker;
+  }
+  
+  @Override
+  protected void before() throws Throwable {
+    // do nothing
+  }
+
+  @Override
+  protected void after() throws Throwable {
+    // do nothing
+  }
+
+  @Override
+  protected void beforeClass() throws Throwable {
+    // do nothing
+  }
+
+  @Override
+  protected void afterClass() throws Throwable {
+    // do nothing
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedRestoreSystemProperties.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedRestoreSystemProperties.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedRestoreSystemProperties.java
new file mode 100755
index 0000000..1711b21
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedRestoreSystemProperties.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit.rules;
+
+import static java.lang.System.getProperties;
+import static java.lang.System.setProperties;
+
+import java.util.Properties;
+
+import org.junit.contrib.java.lang.system.RestoreSystemProperties;
+
+import com.gemstone.gemfire.test.dunit.SerializableRunnable;
+import com.gemstone.gemfire.test.junit.rules.SerializableTestRule;
+
+/**
+ * Distributed version of RestoreSystemProperties which affects all DUnit 
+ * JVMs including the Locator JVM.
+ * 
+ * @author Kirk Lund
+ */
+@SuppressWarnings("serial")
+public class DistributedRestoreSystemProperties extends RestoreSystemProperties implements SerializableTestRule {
+  
+  private static volatile Properties originalProperties;
+
+  private final RemoteInvoker invoker;
+  
+  public DistributedRestoreSystemProperties() {
+   this(new RemoteInvoker());
+  }
+  
+  public DistributedRestoreSystemProperties(final RemoteInvoker invoker) {
+    super();
+    this.invoker = invoker;
+  }
+  
+  @Override
+  protected void before() throws Throwable {
+    super.before();
+    this.invoker.remoteInvokeInEveryVMAndLocator(new SerializableRunnable() {
+      @Override
+      public void run() { 
+        originalProperties = getProperties();
+        setProperties(new Properties(originalProperties));
+      }
+    });
+  }
+
+  @Override
+  protected void after() {
+    super.after();
+    this.invoker.remoteInvokeInEveryVMAndLocator(new SerializableRunnable() {
+      @Override
+      public void run() { 
+        setProperties(originalProperties);
+        originalProperties = null;
+      }
+    });
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/RemoteInvoker.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/RemoteInvoker.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/RemoteInvoker.java
new file mode 100755
index 0000000..e7e523f
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/RemoteInvoker.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit.rules;
+
+import static com.gemstone.gemfire.test.dunit.Invoke.invokeInEveryVM;
+import static com.gemstone.gemfire.test.dunit.Invoke.invokeInLocator;
+
+import java.io.Serializable;
+
+import com.gemstone.gemfire.test.dunit.SerializableRunnable;
+
+@SuppressWarnings("serial")
+public class RemoteInvoker implements Serializable {
+
+  public void invokeEverywhere(final SerializableRunnable runnable) {
+    runnable.run();
+    invokeInEveryVM(runnable);
+    invokeInLocator(runnable);
+  }
+
+  public void remoteInvokeInEveryVMAndLocator(final SerializableRunnable runnable) {
+    invokeInEveryVM(runnable);
+    invokeInLocator(runnable);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/BasicDUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/BasicDUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/BasicDUnitTest.java
index 18e5f72..f9d033c 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/BasicDUnitTest.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/BasicDUnitTest.java
@@ -18,6 +18,7 @@ package com.gemstone.gemfire.test.dunit.tests;
 
 import java.util.Properties;
 
+import com.gemstone.gemfire.test.dunit.Assert;
 import com.gemstone.gemfire.test.dunit.AsyncInvocation;
 import com.gemstone.gemfire.test.dunit.DUnitEnv;
 import com.gemstone.gemfire.test.dunit.DistributedTestCase;
@@ -117,14 +118,14 @@ public class BasicDUnitTest extends DistributedTestCase {
     ai.join();
     // TODO shouldn't we call fail() here?
     if (ai.exceptionOccurred()) {
-      fail("remoteBind failed", ai.getException());
+      Assert.fail("remoteBind failed", ai.getException());
     }
 
     ai = vm.invokeAsync(this.getClass(), "remoteValidateBind",
                         new Object[] {name, value });
     ai.join();
     if (ai.exceptionOccurred()) {
-      fail("remoteValidateBind failed", ai.getException());
+      Assert.fail("remoteValidateBind failed", ai.getException());
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/GetDefaultDiskStoreNameDUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/GetDefaultDiskStoreNameDUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/GetDefaultDiskStoreNameDUnitTest.java
new file mode 100755
index 0000000..99dcc29
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/GetDefaultDiskStoreNameDUnitTest.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit.tests;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.experimental.categories.Category;
+
+import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
+import com.gemstone.gemfire.test.dunit.DistributedTestCase;
+import com.gemstone.gemfire.test.dunit.Host;
+import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+
+@SuppressWarnings("serial")
+@Category(DistributedTest.class)
+public class GetDefaultDiskStoreNameDUnitTest extends DistributedTestCase {
+
+  public GetDefaultDiskStoreNameDUnitTest(final String name) {
+    super(name);
+  }
+
+  public void testGetTestMethodName() {
+    String expected = createDefaultDiskStoreName(0, -1, "testGetTestMethodName");
+    assertGetDefaultDiskStoreName(expected);
+  }
+  
+  public void testGetTestMethodNameChanges() {
+    String expected = createDefaultDiskStoreName(0, -1, "testGetTestMethodNameChanges");
+    assertGetDefaultDiskStoreName(expected);
+  }
+  
+  public void testGetTestMethodNameInAllVMs() {
+    String expected = createDefaultDiskStoreName(0, -1, "testGetTestMethodNameInAllVMs");
+    assertGetDefaultDiskStoreName(expected);
+    
+    for (int vmIndex = 0; vmIndex < Host.getHost(0).getVMCount(); vmIndex++) {
+      String expectedInVM = createDefaultDiskStoreName(0, vmIndex, "testGetTestMethodNameInAllVMs");
+      Host.getHost(0).getVM(vmIndex).invoke(()->assertGetDefaultDiskStoreName(expectedInVM));
+    }
+  }
+  
+  private void assertGetDefaultDiskStoreName(final String expected) {
+    assertThat(getDefaultDiskStoreName()).isEqualTo(expected);
+  }
+  
+  private String createDefaultDiskStoreName(final int hostIndex, final int vmIndex, final String methodName) {
+    return "DiskStore-" + hostIndex + "-" + vmIndex + "-" + getClass().getCanonicalName() + "." + methodName;
+  }
+  
+  private String getDefaultDiskStoreName() {
+    return GemFireCacheImpl.DEFAULT_DS_NAME; // TODO: not thread safe
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/GetTestMethodNameDUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/GetTestMethodNameDUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/GetTestMethodNameDUnitTest.java
new file mode 100755
index 0000000..9bad472
--- /dev/null
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/test/dunit/tests/GetTestMethodNameDUnitTest.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gemstone.gemfire.test.dunit.tests;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.experimental.categories.Category;
+
+import com.gemstone.gemfire.test.dunit.DistributedTestCase;
+import com.gemstone.gemfire.test.dunit.Host;
+import com.gemstone.gemfire.test.junit.categories.DistributedTest;
+
+@SuppressWarnings("serial")
+@Category(DistributedTest.class)
+public class GetTestMethodNameDUnitTest extends DistributedTestCase {
+
+  public GetTestMethodNameDUnitTest(final String name) {
+    super(name);
+  }
+
+  public void testGetTestMethodName() {
+    assertGetTestMethodName("testGetTestMethodName");
+  }
+  
+  public void testGetTestMethodNameChanges() {
+    assertGetTestMethodName("testGetTestMethodNameChanges");
+  }
+  
+  public void testGetTestMethodNameInAllVMs() {
+    assertGetTestMethodName("testGetTestMethodNameInAllVMs");
+    
+    for (int vmIndex = 0; vmIndex < Host.getHost(0).getVMCount(); vmIndex++) {
+      Host.getHost(0).getVM(vmIndex).invoke(()->assertGetTestMethodName("testGetTestMethodNameInAllVMs"));
+    }
+  }
+  
+  private void assertGetTestMethodName(final String expected) {
+    assertThat(getTestMethodName()).isEqualTo(expected);
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-core/src/test/java/hydra/MethExecutor.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/hydra/MethExecutor.java b/gemfire-core/src/test/java/hydra/MethExecutor.java
index c38a803..8aaf3dc 100644
--- a/gemfire-core/src/test/java/hydra/MethExecutor.java
+++ b/gemfire-core/src/test/java/hydra/MethExecutor.java
@@ -147,6 +147,7 @@ public class MethExecutor {
       }
       sb.append("] in class ");
       sb.append(c.getName());
+      sb.append(" methods=" + matchingMethods);
       throw new NoSuchMethodException(sb.toString());
     }
     else return (Method) matchingMethods.get(0);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataDUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataDUnitTest.java b/gemfire-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataDUnitTest.java
index c26282c..5850e6f 100644
--- a/gemfire-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataDUnitTest.java
+++ b/gemfire-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataDUnitTest.java
@@ -38,11 +38,17 @@ import com.gemstone.gemfire.cache30.CacheSerializableRunnable;
 import com.gemstone.gemfire.cache30.CacheTestCase;
 import com.gemstone.gemfire.cache30.CertifiableTestCacheListener;
 import com.gemstone.gemfire.internal.AvailablePortHelper;
+import com.gemstone.gemfire.test.dunit.Assert;
 import com.gemstone.gemfire.test.dunit.AsyncInvocation;
-import com.gemstone.gemfire.test.dunit.DistributedTestCase;
 import com.gemstone.gemfire.test.dunit.Host;
+import com.gemstone.gemfire.test.dunit.IgnoredException;
+import com.gemstone.gemfire.test.dunit.Invoke;
+import com.gemstone.gemfire.test.dunit.LogWriterUtils;
+import com.gemstone.gemfire.test.dunit.NetworkUtils;
 import com.gemstone.gemfire.test.dunit.SerializableRunnable;
+import com.gemstone.gemfire.test.dunit.ThreadUtils;
 import com.gemstone.gemfire.test.dunit.VM;
+import com.gemstone.gemfire.test.dunit.Wait;
 
 /**
  * This class tests the ContiunousQuery mechanism in GemFire.
@@ -64,7 +70,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     // avoid IllegalStateException from HandShake by connecting all vms tor
     // system before creating ConnectionPools
     getSystem();
-    invokeInEveryVM(new SerializableRunnable("getSystem") {
+    Invoke.invokeInEveryVM(new SerializableRunnable("getSystem") {
       public void run() {
         getSystem();
       }
@@ -90,7 +96,7 @@ public class CqDataDUnitTest extends CacheTestCase {
 
     final int port = server.invokeInt(CqQueryDUnitTest.class,
         "getCacheServerPort");
-    final String host0 = getServerHostName(server.getHost());
+    final String host0 = NetworkUtils.getServerHostName(server.getHost());
 
     // Create client.
     cqDUnitTest.createClient(client, port, host0);
@@ -132,11 +138,11 @@ public class CqDataDUnitTest extends CacheTestCase {
     VM client = host.getVM(3);
     
     //Killing servers can cause this message on the client side.
-    addExpectedException("Could not find any server");
+    IgnoredException.addIgnoredException("Could not find any server");
     cqDUnitTest.createServer(server1);
     
     final int port1 = server1.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    final String host0 = getServerHostName(server1.getHost());
+    final String host0 = NetworkUtils.getServerHostName(server1.getHost());
     
     final int[] ports = AvailablePortHelper.getRandomAvailableTCPPorts(2);
     
@@ -156,7 +162,7 @@ public class CqDataDUnitTest extends CacheTestCase {
       cqDUnitTest.executeCQ(client, "testCQHAWithState_" + i, false, null);
     }
     
-    pause(1 * 1000);
+    Wait.pause(1 * 1000);
     
     int size = 10;
     
@@ -178,7 +184,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     // Close server1.
     // To maintain the redundancy; it will make connection to endpoint-3.
     cqDUnitTest.closeServer(server1);
-    pause(3 * 1000);
+    Wait.pause(3 * 1000);
     
     
     // UPDATE-1.
@@ -196,12 +202,12 @@ public class CqDataDUnitTest extends CacheTestCase {
     //Stop cq.
     cqDUnitTest.stopCQ(client, "testCQHAWithState_0");
     
-    pause(2 * 1000);
+    Wait.pause(2 * 1000);
     
     // UPDATE with stop.
     cqDUnitTest.createServer(server3, ports[1]);
     server3.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    pause(2 * 1000);
+    Wait.pause(2 * 1000);
     
     cqDUnitTest.clearCQListenerEvents(client, "testCQHAWithState_0");
     
@@ -217,7 +223,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     }
     
     cqDUnitTest.executeCQ(client, "testCQHAWithState_0", false, null);
-    pause(2 * 1000);
+    Wait.pause(2 * 1000);
     
     // Update - 2 
     cqDUnitTest.createValues(server3, cqDUnitTest.regions[0], 10);    
@@ -253,7 +259,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     cqDUnitTest.createServer(server, 0, true);
     final int port = server.invokeInt(CqQueryDUnitTest.class,
         "getCacheServerPort");
-    final String host0 = getServerHostName(server.getHost());
+    final String host0 = NetworkUtils.getServerHostName(server.getHost());
 
     // Create client.
     cqDUnitTest.createClient(client, port, host0);
@@ -328,7 +334,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     /* Create Server and Client */
     cqDUnitTest.createServer(server);
     final int port = server.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    final String host0 = getServerHostName(server.getHost());
+    final String host0 = NetworkUtils.getServerHostName(server.getHost());
     cqDUnitTest.createClient(client1, port, host0);
     cqDUnitTest.createClient(client2, port, host0);
     
@@ -397,7 +403,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     cqDUnitTest.createServer(server2, 0, false, MirrorType.KEYS);
         
     final int port1 = server1.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    final String host0 = getServerHostName(server1.getHost());
+    final String host0 = NetworkUtils.getServerHostName(server1.getHost());
       
     cqDUnitTest.createClient(client, port1, host0);
     
@@ -405,7 +411,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     cqDUnitTest.createCQ(client, "testCQWithLoad_0", cqDUnitTest.cqs[0]);  
     cqDUnitTest.executeCQ(client, "testCQWithLoad_0", false, null); 
     
-    pause(2 * 1000);
+    Wait.pause(2 * 1000);
     
     final int size = 10;
     
@@ -445,7 +451,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     final int evictionThreshold = 1;
     server1.invoke(new CacheSerializableRunnable("Create Cache Server") {
       public void run2() throws CacheException {
-        getLogWriter().info("### Create Cache Server. ###");
+        LogWriterUtils.getLogWriter().info("### Create Cache Server. ###");
         AttributesFactory factory = new AttributesFactory();
         factory.setScope(Scope.DISTRIBUTED_ACK);
         factory.setDataPolicy(DataPolicy.REPLICATE);
@@ -458,22 +464,22 @@ public class CqDataDUnitTest extends CacheTestCase {
         for (int i = 0; i < cqDUnitTest.regions.length; i++) { 
           Region region = createRegion(cqDUnitTest.regions[i], factory.createRegionAttributes());
           // Set CacheListener.
-          region.getAttributesMutator().setCacheListener(new CertifiableTestCacheListener(getLogWriter()));  
+          region.getAttributesMutator().setCacheListener(new CertifiableTestCacheListener(LogWriterUtils.getLogWriter()));  
         } 
-        pause(2000);
+        Wait.pause(2000);
         
         try {
           cqDUnitTest.startBridgeServer(0, true);
         } catch (Exception ex) {
-          fail("While starting CacheServer", ex);
+          Assert.fail("While starting CacheServer", ex);
         }
-        pause(2000);
+        Wait.pause(2000);
 
       }
     });
         
     final int port1 = server1.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    final String host0 = getServerHostName(server1.getHost());
+    final String host0 = NetworkUtils.getServerHostName(server1.getHost());
       
     cqDUnitTest.createClient(client, port1, host0);
     
@@ -487,7 +493,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     
     cqDUnitTest.executeCQ(client, "testCQWithEviction_0", false, "CqException"); 
     
-    pause(1 * 1000);
+    Wait.pause(1 * 1000);
 
     // Update VALUES.
     cqDUnitTest.createValues(server1, cqDUnitTest.regions[0], size);
@@ -515,7 +521,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     cqDUnitTest.createServer(server1, 0, false, MirrorType.KEYS_VALUES);
 
     final int port1 = server1.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    final String serverHost = getServerHostName(server1.getHost());
+    final String serverHost = NetworkUtils.getServerHostName(server1.getHost());
 
     final String[] regions = cqDUnitTest.regions;
     final int[] serverPorts = new int[] {port1};
@@ -524,7 +530,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     SerializableRunnable createClientWithPool =
       new CacheSerializableRunnable("createClientWithPool") {
       public void run2() throws CacheException {
-        getLogWriter().info("### Create Client. ###");
+        LogWriterUtils.getLogWriter().info("### Create Client. ###");
         // Initialize CQ Service.
         try {
           getCache().getQueryService();
@@ -538,7 +544,7 @@ public class CqDataDUnitTest extends CacheTestCase {
         ClientServerTestCase.configureConnectionPool(regionFactory, serverHost, serverPorts[0], -1, false, -1, -1, null);
         for (int i=0; i < regions.length; i++) {        
           createRegion(regions[i], regionFactory.create() );
-          getLogWriter().info("### Successfully Created Region on Client :" + regions[i]);
+          LogWriterUtils.getLogWriter().info("### Successfully Created Region on Client :" + regions[i]);
         }
       }
     };
@@ -573,7 +579,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     cqDUnitTest.createServer(server1, 0, false, MirrorType.KEYS_VALUES);
 
     final int port1 = server1.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    final String serverHost = getServerHostName(server1.getHost());
+    final String serverHost = NetworkUtils.getServerHostName(server1.getHost());
 
     final String[] regions = cqDUnitTest.regions;
     final int[] serverPorts = new int[] {port1};
@@ -582,7 +588,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     SerializableRunnable createClientWithPool =
       new CacheSerializableRunnable("createClientWithPool") {
       public void run2() throws CacheException {
-        getLogWriter().info("### Create Client. ###");
+        LogWriterUtils.getLogWriter().info("### Create Client. ###");
         //Region region1 = null;
         // Initialize CQ Service.
         try {
@@ -598,7 +604,7 @@ public class CqDataDUnitTest extends CacheTestCase {
 
         for (int i=0; i < regions.length; i++) {        
           createRegion(regions[i], regionFactory.createRegionAttributes());
-          getLogWriter().info("### Successfully Created Region on Client :" + regions[i]);
+          LogWriterUtils.getLogWriter().info("### Successfully Created Region on Client :" + regions[i]);
         }
       }
     };
@@ -628,7 +634,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     cqDUnitTest.createServer(server1, 0, false, MirrorType.KEYS_VALUES);
 
     final int port1 = server1.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    final String serverHost = getServerHostName(server1.getHost());
+    final String serverHost = NetworkUtils.getServerHostName(server1.getHost());
 
     final String[] regions = cqDUnitTest.regions;
     final int[] serverPorts = new int[] {port1};
@@ -637,7 +643,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     SerializableRunnable createClientWithConnectionPool =
       new CacheSerializableRunnable("createClientWithConnectionPool") {
       public void run2() throws CacheException {
-        getLogWriter().info("### Create Client. ###");
+        LogWriterUtils.getLogWriter().info("### Create Client. ###");
         //Region region1 = null;
         // Initialize CQ Service.
         try {
@@ -652,7 +658,7 @@ public class CqDataDUnitTest extends CacheTestCase {
         ClientServerTestCase.configureConnectionPool(regionFactory, serverHost, serverPorts[0], -1, true, -1, -1, null);
         for (int i=0; i < regions.length; i++) {        
           createRegion(regions[i], regionFactory.createRegionAttributes());
-          getLogWriter().info("### Successfully Created Region on Client :" + regions[i]);
+          LogWriterUtils.getLogWriter().info("### Successfully Created Region on Client :" + regions[i]);
         }
       }
     };
@@ -682,7 +688,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     cqDUnitTest.createServer(server1, 0, false, MirrorType.KEYS_VALUES);
 
     final int port1 = server1.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    final String serverHost = getServerHostName(server1.getHost());
+    final String serverHost = NetworkUtils.getServerHostName(server1.getHost());
 
     final String[] regions = cqDUnitTest.regions;
     final int[] serverPorts = new int[] {port1};
@@ -691,7 +697,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     SerializableRunnable createClientWithPool =
       new CacheSerializableRunnable("createClientWithPool") {
       public void run2() throws CacheException {
-        getLogWriter().info("### Create Client. ###");
+        LogWriterUtils.getLogWriter().info("### Create Client. ###");
         //Region region1 = null;
         // Initialize CQ Service.
         try {
@@ -708,7 +714,7 @@ public class CqDataDUnitTest extends CacheTestCase {
 
         for (int i=0; i < regions.length; i++) {        
           createRegion(regions[i], regionFactory.createRegionAttributes());
-          getLogWriter().info("### Successfully Created Region on Client :" + regions[i]);
+          LogWriterUtils.getLogWriter().info("### Successfully Created Region on Client :" + regions[i]);
         }
       }
     };
@@ -747,7 +753,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     
     cqDUnitTest.createServer(server);
     final int port = server.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    final String host0 = getServerHostName(server.getHost());
+    final String host0 = NetworkUtils.getServerHostName(server.getHost());
     
     cqDUnitTest.createClient(client, port, host0);
     
@@ -762,7 +768,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     // Test for Event on Region Clear.
     server.invoke(new CacheSerializableRunnable("testRegionEvents"){
       public void run2()throws CacheException {
-        getLogWriter().info("### Clearing the region on the server ###");
+        LogWriterUtils.getLogWriter().info("### Clearing the region on the server ###");
         Region region = getCache().getRegion("/root/" + cqDUnitTest.regions[0]);
         for (int i = 1; i <=5; i++) {
           region.put(CqQueryDUnitTest.KEY+i, new Portfolio(i));
@@ -776,7 +782,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     // Test for Event on Region invalidate.
     server.invoke(new CacheSerializableRunnable("testRegionEvents"){
       public void run2()throws CacheException {
-        getLogWriter().info("### Invalidate the region on the server ###");
+        LogWriterUtils.getLogWriter().info("### Invalidate the region on the server ###");
         Region region = getCache().getRegion("/root/" + cqDUnitTest.regions[0]);
         for (int i = 1; i <=5; i++) {
           region.put(CqQueryDUnitTest.KEY+i, new Portfolio(i));
@@ -790,7 +796,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     // Test for Event on Region destroy.
     server.invoke(new CacheSerializableRunnable("testRegionEvents"){
       public void run2()throws CacheException {
-        getLogWriter().info("### Destroying the region on the server ###");
+        LogWriterUtils.getLogWriter().info("### Destroying the region on the server ###");
         Region region = getCache().getRegion("/root/" + cqDUnitTest.regions[1]);
         for (int i = 1; i <=5; i++) {
           region.put(CqQueryDUnitTest.KEY+i, new Portfolio(i));
@@ -800,7 +806,7 @@ public class CqDataDUnitTest extends CacheTestCase {
       }
     });
 
-    pause(1000); // wait for cq to close becuse of region destroy on server.
+    Wait.pause(1000); // wait for cq to close becuse of region destroy on server.
     //cqDUnitTest.waitForClose(client,"testRegionEvents_1");
     cqDUnitTest.validateCQCount(client,1);
 
@@ -828,7 +834,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     final String cqName = "testEventsDuringQueryExecution_0";
     cqDUnitTest.createServer(server);
     final int port = server.invokeInt(CqQueryDUnitTest.class, "getCacheServerPort");
-    final String host0 = getServerHostName(server.getHost());
+    final String host0 = NetworkUtils.getServerHostName(server.getHost());
     
     // Initialize Client.
     cqDUnitTest.createClient(client, port, host0);
@@ -937,7 +943,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     });
 
     //wait for 60 seconds for test to complete
-    DistributedTestCase.join(processCqs, 60 * 1000, getLogWriter());
+    ThreadUtils.join(processCqs, 60 * 1000);
     
     // Close.
     cqDUnitTest.closeClient(client);
@@ -968,7 +974,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     cqDUnitTest.createServer(server);
     final int port = server.invokeInt(CqQueryDUnitTest.class,
         "getCacheServerPort");
-    final String host0 = getServerHostName(server.getHost());
+    final String host0 = NetworkUtils.getServerHostName(server.getHost());
 
     // Initialize Client.
     cqDUnitTest.createClient(client, port, host0);
@@ -1113,7 +1119,7 @@ public class CqDataDUnitTest extends CacheTestCase {
     });
 
     //wait for 60 seconds for test to complete
-    DistributedTestCase.join(processCqs, 60 * 1000, getLogWriter());
+    ThreadUtils.join(processCqs, 60 * 1000);
     // Close.
     cqDUnitTest.closeClient(client);
     cqDUnitTest.closeServer(server);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/820cfd63/gemfire-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataOptimizedExecuteDUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataOptimizedExecuteDUnitTest.java b/gemfire-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataOptimizedExecuteDUnitTest.java
index 45f61f8..e185af1 100644
--- a/gemfire-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataOptimizedExecuteDUnitTest.java
+++ b/gemfire-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataOptimizedExecuteDUnitTest.java
@@ -18,6 +18,8 @@ package com.gemstone.gemfire.cache.query.cq.dunit;
 
 
 import com.gemstone.gemfire.cache.query.internal.cq.CqServiceImpl;
+import com.gemstone.gemfire.test.dunit.IgnoredException;
+import com.gemstone.gemfire.test.dunit.Invoke;
 import com.gemstone.gemfire.test.dunit.SerializableRunnable;
 
 /**
@@ -34,8 +36,8 @@ public class CqDataOptimizedExecuteDUnitTest extends CqDataDUnitTest{
     super.setUp();
     //We're seeing this on the server when the client
     //disconnects.
-    addExpectedException("Connection reset");
-    invokeInEveryVM(new SerializableRunnable("getSystem") {
+    IgnoredException.addIgnoredException("Connection reset");
+    Invoke.invokeInEveryVM(new SerializableRunnable("getSystem") {
       public void run() {
         CqServiceImpl.EXECUTE_QUERY_DURING_INIT = false;
       }
@@ -43,12 +45,11 @@ public class CqDataOptimizedExecuteDUnitTest extends CqDataDUnitTest{
   }
   
   @Override
-  public void tearDown2() throws Exception {
-    invokeInEveryVM(new SerializableRunnable("getSystem") {
+  protected final void preTearDownCacheTestCase() throws Exception {
+    Invoke.invokeInEveryVM(new SerializableRunnable("getSystem") {
       public void run() {
         CqServiceImpl.EXECUTE_QUERY_DURING_INIT = true;
       }
     });
-    super.tearDown2();
   }
 }