You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2020/04/24 16:20:59 UTC

[geode] branch develop updated: GEODE-7964: Upgrade Mockito to 3.3.3 (#4924)

This is an automated email from the ASF dual-hosted git repository.

klund pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 0a1701e  GEODE-7964: Upgrade Mockito to 3.3.3 (#4924)
0a1701e is described below

commit 0a1701e92dc09bcd6b79edd3b52f20ee9e9a867c
Author: Kirk Lund <kl...@apache.org>
AuthorDate: Fri Apr 24 09:20:21 2020 -0700

    GEODE-7964: Upgrade Mockito to 3.3.3 (#4924)
---
 .../src/test/resources/expected-pom.xml            |   2 +-
 .../gradle/plugins/DependencyConstraints.groovy    |   2 +-
 .../geode/connectors/jdbc/JdbcAsyncWriterTest.java |   4 +-
 .../geode/connectors/jdbc/JdbcWriterTest.java      |   6 +-
 .../jdbc/internal/xml/ElementTypeTest.java         |   4 +-
 .../xml/JdbcConnectorServiceXmlParserTest.java     |   6 +-
 ...butedSystemMXBeanWithAlertsDistributedTest.java |  10 +-
 .../client/internal/QueueManagerJUnitTest.java     |  15 +
 .../AvailableConnectionManagerConcurrentTest.java  | 152 ++++++-
 .../pooling/ConnectionManagerJUnitTest.java        |  15 +
 .../CacheDistributionAdvisorConcurrentTest.java    |  23 +-
 .../cache/ha/HARegionQueueIntegrationTest.java     | 460 +++++++++------------
 .../ControlFileWatchdogIntegrationTest.java        |   6 +-
 .../geode/cache/client/internal/Connection.java    |   6 +
 .../cache/client/internal/ConnectionImpl.java      |  15 +
 .../cache/client/internal/QueueConnectionImpl.java |  15 +
 .../pooling/AvailableConnectionManager.java        |  36 +-
 .../internal/pooling/ConnectionManagerImpl.java    |   8 +-
 .../client/internal/pooling/PooledConnection.java  |   3 +
 .../internal/ClusterAlertMessagingTest.java        |   4 +-
 .../client/internal/OpExecutorImplJUnitTest.java   |  15 +
 .../pooling/AvailableConnectionManagerTest.java    |  50 +--
 .../geode/distributed/ServerLauncherTest.java      |  10 +-
 .../internal/cache/InternalCacheBuilderTest.java   |   4 +-
 .../PartitionedRegionRedundancyTrackerTest.java    |   3 +-
 .../internal/cache/backup/BackupOperationTest.java |   6 +-
 .../SingleThreadColocationLoggerTest.java          |   3 +-
 .../sockets/command/ExecuteFunction65Test.java     |   4 +-
 .../sockets/command/ExecuteFunction66Test.java     |   6 +-
 .../tier/sockets/command/ExecuteFunctionTest.java  |   6 +-
 .../io/CompositeOutputStreamJUnitTest.java         |   8 +-
 .../management/internal/FederatingManagerTest.java |   4 +-
 .../internal/beans/ManagementListenerTest.java     |   8 +-
 .../test/dunit/internal/VMEventNotifierTest.java   |   4 +-
 .../functions/AlterQueryServiceFunctionTest.java   |   8 +-
 .../cli/functions/RegionAlterFunctionTest.java     |   4 +-
 36 files changed, 551 insertions(+), 384 deletions(-)

diff --git a/boms/geode-all-bom/src/test/resources/expected-pom.xml b/boms/geode-all-bom/src/test/resources/expected-pom.xml
index cbea352..d3da3d8 100644
--- a/boms/geode-all-bom/src/test/resources/expected-pom.xml
+++ b/boms/geode-all-bom/src/test/resources/expected-pom.xml
@@ -466,7 +466,7 @@
       <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
-        <version>2.23.0</version>
+        <version>3.3.3</version>
         <scope>compile</scope>
       </dependency>
       <dependency>
diff --git a/buildSrc/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy b/buildSrc/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy
index 7123296..3f85f56 100644
--- a/buildSrc/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy
+++ b/buildSrc/src/main/groovy/org/apache/geode/gradle/plugins/DependencyConstraints.groovy
@@ -154,7 +154,7 @@ class DependencyConstraints implements Plugin<Project> {
         api(group: 'org.httpunit', name: 'httpunit', version: '1.7.3')
         api(group: 'org.iq80.snappy', name: 'snappy', version: '0.4')
         api(group: 'org.jgroups', name: 'jgroups', version: get('jgroups.version'))
-        api(group: 'org.mockito', name: 'mockito-core', version: '2.23.0')
+        api(group: 'org.mockito', name: 'mockito-core', version: '3.3.3')
         api(group: 'org.mortbay.jetty', name: 'servlet-api', version: '3.0.20100224')
         api(group: 'org.openjdk.jmh', name: 'jmh-core', version: '1.23')
         api(group: 'org.postgresql', name: 'postgresql', version: '42.2.8')
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcAsyncWriterTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcAsyncWriterTest.java
index 51dcfd1..aad2f0d 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcAsyncWriterTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcAsyncWriterTest.java
@@ -20,7 +20,7 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.ArrayList;
@@ -65,7 +65,7 @@ public class JdbcAsyncWriterTest {
   public void doesNothingIfEventListIsEmpty() {
     writer.processEvents(Collections.emptyList());
 
-    verifyZeroInteractions(sqlHandler);
+    verifyNoMoreInteractions(sqlHandler);
     assertThat(writer.getSuccessfulEvents()).isZero();
     assertThat(writer.getTotalEvents()).isZero();
   }
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcWriterTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcWriterTest.java
index 7cd3186..a889561 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcWriterTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JdbcWriterTest.java
@@ -21,7 +21,7 @@ import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import org.junit.Before;
@@ -133,7 +133,7 @@ public class JdbcWriterTest {
   public void beforeRegionDestroyDoesNotWriteToSqlHandler() {
     writer.beforeRegionDestroy(mock(RegionEvent.class));
 
-    verifyZeroInteractions(sqlHandler);
+    verifyNoMoreInteractions(sqlHandler);
   }
 
   @SuppressWarnings("unchecked")
@@ -141,6 +141,6 @@ public class JdbcWriterTest {
   public void beforeRegionClearDoesNotWriteToSqlHandler() {
     writer.beforeRegionClear(mock(RegionEvent.class));
 
-    verifyZeroInteractions(sqlHandler);
+    verifyNoMoreInteractions(sqlHandler);
   }
 }
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/ElementTypeTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/ElementTypeTest.java
index efb9230..32ba65b 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/ElementTypeTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/ElementTypeTest.java
@@ -30,7 +30,7 @@ import static org.apache.geode.connectors.jdbc.internal.xml.JdbcConnectorService
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.Stack;
@@ -147,6 +147,6 @@ public class ElementTypeTest {
     ElementType.FIELD_MAPPING.endElement(stack);
 
     assertThat(stack.size()).isEqualTo(1);
-    verifyZeroInteractions(mapping);
+    verifyNoMoreInteractions(mapping);
   }
 }
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/JdbcConnectorServiceXmlParserTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/JdbcConnectorServiceXmlParserTest.java
index b3db7ae..ec8726c 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/JdbcConnectorServiceXmlParserTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/xml/JdbcConnectorServiceXmlParserTest.java
@@ -18,7 +18,7 @@ import static org.apache.geode.connectors.jdbc.internal.xml.ElementType.JDBC_MAP
 import static org.apache.geode.connectors.jdbc.internal.xml.JdbcConnectorServiceXmlParser.NAMESPACE;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.Stack;
@@ -87,7 +87,7 @@ public class JdbcConnectorServiceXmlParserTest {
     parser.endElement(NAMESPACE, JDBC_MAPPING.getTypeName(), null);
 
     assertThat(stack.pop()).isEqualTo(regionCreation);
-    verifyZeroInteractions(regionMapping);
+    verifyNoMoreInteractions(regionMapping);
   }
 
   @Test
@@ -101,6 +101,6 @@ public class JdbcConnectorServiceXmlParserTest {
     parser.endElement("wrongNamespace", JDBC_MAPPING.getTypeName(), null);
 
     assertThat(stack.pop()).isEqualTo(regionMapping);
-    verifyZeroInteractions(regionMapping);
+    verifyNoMoreInteractions(regionMapping);
   }
 }
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanWithAlertsDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanWithAlertsDistributedTest.java
index 888c404..f23303d 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanWithAlertsDistributedTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/management/DistributedSystemMXBeanWithAlertsDistributedTest.java
@@ -39,7 +39,7 @@ import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.timeout;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -198,7 +198,7 @@ public class DistributedSystemMXBeanWithAlertsDistributedTest implements Seriali
     });
 
     managerVM.invoke(() -> {
-      verifyZeroInteractions(notificationListener);
+      verifyNoMoreInteractions(notificationListener);
     });
   }
 
@@ -245,7 +245,7 @@ public class DistributedSystemMXBeanWithAlertsDistributedTest implements Seriali
     });
 
     managerVM.invoke(() -> {
-      verifyZeroInteractions(notificationListener);
+      verifyNoMoreInteractions(notificationListener);
     });
   }
 
@@ -333,7 +333,7 @@ public class DistributedSystemMXBeanWithAlertsDistributedTest implements Seriali
     }
 
     managerVM.invoke(() -> {
-      verifyZeroInteractions(notificationListener);
+      verifyNoMoreInteractions(notificationListener);
     });
   }
 
@@ -363,7 +363,7 @@ public class DistributedSystemMXBeanWithAlertsDistributedTest implements Seriali
     // managerVM should have missed the alerts from BEFORE it started
 
     managerVM.invoke(() -> {
-      verifyZeroInteractions(notificationListener);
+      verifyNoMoreInteractions(notificationListener);
     });
 
     // managerVM should now receive any new alerts though
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/QueueManagerJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/QueueManagerJUnitTest.java
index 1653081..a3e6112 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/QueueManagerJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/QueueManagerJUnitTest.java
@@ -753,11 +753,26 @@ public class QueueManagerJUnitTest {
     }
 
     @Override
+    public long getBirthDate() {
+      return 0;
+    }
+
+    @Override
+    public void setBirthDate(long ts) {
+
+    }
+
+    @Override
     public ConnectionStats getStats() {
       return null;
     }
 
     @Override
+    public boolean isActive() {
+      return false;
+    }
+
+    @Override
     public boolean isDestroyed() {
       return false;
     }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManagerConcurrentTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManagerConcurrentTest.java
index de86b96..97f6501 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManagerConcurrentTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManagerConcurrentTest.java
@@ -12,26 +12,35 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-
 package org.apache.geode.cache.client.internal.pooling;
 
 import static org.apache.geode.test.concurrency.Utilities.availableProcessors;
 import static org.apache.geode.test.concurrency.Utilities.repeat;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.nio.ByteBuffer;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.ExecutionException;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import org.apache.geode.cache.client.internal.Connection;
+import org.apache.geode.cache.client.internal.ConnectionStats;
+import org.apache.geode.cache.client.internal.Endpoint;
+import org.apache.geode.cache.client.internal.Op;
+import org.apache.geode.distributed.internal.ServerLocation;
+import org.apache.geode.internal.cache.tier.sockets.ServerQueueStatus;
 import org.apache.geode.test.concurrency.ConcurrentTestRunner;
 import org.apache.geode.test.concurrency.ParallelExecutor;
 
 @RunWith(ConcurrentTestRunner.class)
 public class AvailableConnectionManagerConcurrentTest {
+
   private final int parallelCount = availableProcessors();
   private final int iterationCount = 250;
   private final AvailableConnectionManager instance = new AvailableConnectionManager();
@@ -43,7 +52,7 @@ public class AvailableConnectionManagerConcurrentTest {
 
     executor.inParallel(() -> {
       repeat(() -> {
-        PooledConnection used = instance.useFirst();
+        Connection used = instance.useFirst();
         instance.addFirst(used, true);
       }, iterationCount);
     }, parallelCount);
@@ -59,7 +68,7 @@ public class AvailableConnectionManagerConcurrentTest {
 
     executor.inParallel(() -> {
       repeat(() -> {
-        PooledConnection used = instance.useFirst(c -> true);
+        Connection used = instance.useFirst(c -> true);
         instance.addFirst(used, true);
       }, iterationCount);
     }, parallelCount);
@@ -75,7 +84,7 @@ public class AvailableConnectionManagerConcurrentTest {
 
     executor.inParallel(() -> {
       repeat(() -> {
-        PooledConnection used = instance.useFirst();
+        Connection used = instance.useFirst();
         instance.addLast(used, true);
       }, iterationCount);
     }, parallelCount);
@@ -94,7 +103,7 @@ public class AvailableConnectionManagerConcurrentTest {
 
     executor.inParallel(() -> {
       repeat(() -> {
-        PooledConnection used = instance.useFirst();
+        Connection used = instance.useFirst();
         if (used != null) {
           Thread.yield();
           instance.addFirst(used, true);
@@ -116,7 +125,7 @@ public class AvailableConnectionManagerConcurrentTest {
 
     executor.inParallel(() -> {
       repeat(() -> {
-        PooledConnection used = instance.useFirst(c -> true);
+        Connection used = instance.useFirst(c -> true);
         if (used != null) {
           Thread.yield();
           instance.addFirst(used, true);
@@ -137,14 +146,13 @@ public class AvailableConnectionManagerConcurrentTest {
     repeat(() -> instance.addFirst(createConnection(), false), connectionCount);
     // now add a bunch of connections that will not match the predicate
     repeat(() -> {
-      PooledConnection nonMatchingConnection = createConnection();
-      when(nonMatchingConnection.getBirthDate()).thenReturn(1L);
+      Connection nonMatchingConnection = createConnection(1);
       instance.addFirst(nonMatchingConnection, false);
     }, connectionCount);
 
     executor.inParallel(() -> {
       repeat(() -> {
-        PooledConnection used = instance.useFirst(c -> c.getBirthDate() == 0L);
+        Connection used = instance.useFirst(c -> c.getBirthDate() == 0L);
         if (used != null) {
           Thread.yield();
           assertThat(used.getBirthDate()).isEqualTo(0L);
@@ -161,16 +169,16 @@ public class AvailableConnectionManagerConcurrentTest {
   public void addLastRemoveDoesNotRemoveOtherConnections(ParallelExecutor executor)
       throws ExecutionException, InterruptedException {
     int originalCount = 7;
-    ArrayList<PooledConnection> originalConnections = new ArrayList<>();
+    List<Connection> originalConnections = new ArrayList<>();
     repeat(() -> {
-      PooledConnection original = createConnection();
+      Connection original = createConnection();
       originalConnections.add(original);
       instance.addFirst(original, false);
     }, originalCount);
 
     executor.inParallel(() -> {
       repeat(() -> {
-        PooledConnection removed = createConnection();
+        Connection removed = createConnection();
         instance.addLast(removed, true);
         assertThat(instance.remove(removed)).isTrue();
       }, iterationCount);
@@ -180,10 +188,116 @@ public class AvailableConnectionManagerConcurrentTest {
     assertThat(instance.getDeque()).containsExactlyInAnyOrderElementsOf(originalConnections);
   }
 
-  private PooledConnection createConnection() {
-    PooledConnection result = mock(PooledConnection.class);
-    when(result.activate()).thenReturn(true);
-    when(result.isActive()).thenReturn(true);
-    return result;
+  private Connection createConnection() {
+    return createConnection(0);
+  }
+
+  private Connection createConnection(long birthDate) {
+    return new Connection() {
+      @Override
+      public Socket getSocket() {
+        return null;
+      }
+
+      @Override
+      public long getBirthDate() {
+        return birthDate;
+      }
+
+      @Override
+      public void setBirthDate(long ts) {
+        // nothing
+      }
+
+      @Override
+      public ByteBuffer getCommBuffer() {
+        return null;
+      }
+
+      @Override
+      public ConnectionStats getStats() {
+        return null;
+      }
+
+      @Override
+      public boolean isActive() {
+        return true;
+      }
+
+      @Override
+      public void destroy() {
+        // nothing
+      }
+
+      @Override
+      public boolean isDestroyed() {
+        return false;
+      }
+
+      @Override
+      public void close(boolean keepAlive) {
+        // nothing
+      }
+
+      @Override
+      public ServerLocation getServer() {
+        return null;
+      }
+
+      @Override
+      public Endpoint getEndpoint() {
+        return null;
+      }
+
+      @Override
+      public ServerQueueStatus getQueueStatus() {
+        return null;
+      }
+
+      @Override
+      public Object execute(Op op) {
+        return null;
+      }
+
+      @Override
+      public void emergencyClose() {
+        // nothing
+      }
+
+      @Override
+      public short getWanSiteVersion() {
+        return 0;
+      }
+
+      @Override
+      public void setWanSiteVersion(short wanSiteVersion) {
+        // nothing
+      }
+
+      @Override
+      public int getDistributedSystemId() {
+        return 0;
+      }
+
+      @Override
+      public OutputStream getOutputStream() {
+        return null;
+      }
+
+      @Override
+      public InputStream getInputStream() {
+        return null;
+      }
+
+      @Override
+      public void setConnectionID(long id) {
+        // nothing
+      }
+
+      @Override
+      public long getConnectionID() {
+        return 0;
+      }
+    };
   }
 }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java
index 4e00589..87eda46 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java
@@ -987,11 +987,26 @@ public class ConnectionManagerJUnitTest {
         }
 
         @Override
+        public long getBirthDate() {
+          return 0;
+        }
+
+        @Override
+        public void setBirthDate(long ts) {
+
+        }
+
+        @Override
         public ConnectionStats getStats() {
           return null;
         }
 
         @Override
+        public boolean isActive() {
+          return false;
+        }
+
+        @Override
         public void close(boolean keepAlive) throws Exception {
           synchronized (DummyFactory.this) {
             closes++;
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CacheDistributionAdvisorConcurrentTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CacheDistributionAdvisorConcurrentTest.java
index d2367a1..fb38993 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CacheDistributionAdvisorConcurrentTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CacheDistributionAdvisorConcurrentTest.java
@@ -14,18 +14,21 @@
  */
 package org.apache.geode.internal.cache;
 
-
+import static org.apache.geode.internal.inet.LocalHostUtil.getLocalHost;
 import static org.apache.geode.test.concurrency.Utilities.availableProcessors;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.withSettings;
 
-import java.net.InetAddress;
 import java.net.UnknownHostException;
 
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 
 import org.apache.geode.CancelCriterion;
 import org.apache.geode.cache.Operation;
@@ -36,11 +39,14 @@ import org.apache.geode.internal.cache.CacheDistributionAdvisor.CacheProfile;
 import org.apache.geode.test.concurrency.ConcurrentTestRunner;
 import org.apache.geode.test.concurrency.ParallelExecutor;
 
-
 @RunWith(ConcurrentTestRunner.class)
 public class CacheDistributionAdvisorConcurrentTest {
+
   private final int count = availableProcessors() * 2;
 
+  @Rule
+  public MockitoRule mockitoRule = MockitoJUnit.rule();
+
   @Test
   public void getAdviseAllEventsOrCachedForConcurrentUpdateShouldSucceed(
       ParallelExecutor executor) throws Exception {
@@ -87,17 +93,24 @@ public class CacheDistributionAdvisorConcurrentTest {
     CacheDistributionAdvisee advisee = mock(CacheDistributionAdvisee.class);
     CancelCriterion cancelCriterion = mock(CancelCriterion.class);
     when(advisee.getCancelCriterion()).thenReturn(cancelCriterion);
+
     DistributionManager distributionManager = mock(DistributionManager.class);
     when(advisee.getDistributionManager()).thenReturn(distributionManager);
+
     CacheDistributionAdvisor result =
         CacheDistributionAdvisor.createCacheDistributionAdvisor(advisee);
     when(advisee.getDistributionAdvisor()).thenReturn(result);
+
     return result;
   }
 
   private CacheProfile createCacheProfile() throws UnknownHostException {
     InternalDistributedMember member =
-        new InternalDistributedMember(InetAddress.getLocalHost(), 0, false, false);
+        new InternalDistributedMember(getLocalHost(), 0, false, false);
     return new CacheProfile(member, 1);
   }
+
+  private static <T> T mock(Class<T> classToMock) {
+    return Mockito.mock(classToMock, withSettings().stubOnly());
+  }
 }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
index e9d8fd8..4778608 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
@@ -14,43 +14,41 @@
  */
 package org.apache.geode.internal.cache.ha;
 
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
 import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
+import static org.apache.geode.test.awaitility.GeodeAwaitility.getTimeout;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.withSettings;
 
+import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Queue;
 import java.util.Set;
-import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.awaitility.core.ConditionTimeoutException;
 import org.junit.After;
-import org.junit.Assert;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import util.TestException;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.mockito.quality.Strictness;
 
 import org.apache.geode.CancelCriterion;
 import org.apache.geode.cache.AttributesFactory;
-import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.DataPolicy;
 import org.apache.geode.cache.EvictionAction;
@@ -63,7 +61,6 @@ import org.apache.geode.internal.cache.CacheServerImpl;
 import org.apache.geode.internal.cache.CachedDeserializable;
 import org.apache.geode.internal.cache.EnumListenerEvent;
 import org.apache.geode.internal.cache.EventID;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.HARegion;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalRegionArguments;
@@ -81,22 +78,28 @@ import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.internal.util.concurrent.StoppableReentrantReadWriteLock;
+import org.apache.geode.internal.util.concurrent.StoppableReentrantReadWriteLock.StoppableReadLock;
+import org.apache.geode.internal.util.concurrent.StoppableReentrantReadWriteLock.StoppableWriteLock;
+import org.apache.geode.test.junit.rules.ExecutorServiceRule;
 
 public class HARegionQueueIntegrationTest {
 
-  private Cache cache;
+  private static final int NUM_QUEUES = 100;
+  private static final EvictionAttributes OVERFLOW_TO_DISK =
+      EvictionAttributes.createLIFOEntryAttributes(1000, EvictionAction.OVERFLOW_TO_DISK);
 
+  private InternalCache cache;
   private Region dataRegion;
-
   private CacheClientNotifier ccn;
-
   private InternalDistributedMember member;
 
-  private static final int NUM_QUEUES = 100;
+  @Rule
+  public ExecutorServiceRule executorServiceRule = new ExecutorServiceRule();
+  @Rule
+  public MockitoRule mockitoRule = MockitoJUnit.rule().strictness(Strictness.LENIENT);
 
   @Before
   public void setUp() throws Exception {
-    MockitoAnnotations.initMocks(this);
     cache = createCache();
     dataRegion = createDataRegion();
     ccn = createCacheClientNotifier();
@@ -109,30 +112,6 @@ public class HARegionQueueIntegrationTest {
     cache.close();
   }
 
-  private Cache createCache() {
-    return new CacheFactory().set(MCAST_PORT, "0").create();
-  }
-
-  private Region createDataRegion() {
-    return cache.createRegionFactory(RegionShortcut.REPLICATE).create("data");
-  }
-
-  private CacheClientNotifier createCacheClientNotifier() {
-    CacheClientNotifier ccn =
-        CacheClientNotifier.getInstance((InternalCache) cache,
-            mock(ClientRegistrationEventQueueManager.class), mock(StatisticsClock.class),
-            mock(CacheServerStats.class), 100000, 100000, mock(ConnectionListener.class), null,
-            false);
-    return ccn;
-  }
-
-  private InternalDistributedMember createMember() {
-    // Create an InternalDistributedMember
-    InternalDistributedMember member = mock(InternalDistributedMember.class);
-    when(member.getVersionObject()).thenReturn(Version.CURRENT);
-    return member;
-  }
-
   @Test
   public void verifyEndGiiQueueingEmptiesQueueAndHAContainer() throws Exception {
     HAContainerWrapper haContainerWrapper = (HAContainerWrapper) ccn.getHaContainer();
@@ -148,19 +127,19 @@ public class HARegionQueueIntegrationTest {
     // Create and update HARegionQueues forcing one queue to startGiiQueueing
     int numQueues = 10;
     HARegionQueue targetQueue = createAndUpdateHARegionQueuesWithGiiQueueing(haContainerWrapper,
-        wrapper, message, numQueues);
+        wrapper, numQueues);
 
     // Verify HAContainerWrapper (1) and refCount (numQueues(10))
-    assertEquals(1, haContainerWrapper.size());
+    assertThat(haContainerWrapper).hasSize(1);
 
     HAEventWrapper wrapperInContainer = (HAEventWrapper) haContainerWrapper.getKey(wrapper);
-    assertEquals(numQueues - 1, wrapperInContainer.getReferenceCount());
-    assertTrue(wrapperInContainer.getPutInProgress());
+    assertThat(wrapperInContainer.getReferenceCount()).isEqualTo(numQueues - 1);
+    assertThat(wrapperInContainer.getPutInProgress()).isTrue();
 
     // Verify that the HAEventWrapper in the giiQueue now has msg != null
     // We don't null this out while putInProgress > 0 (true)
     Queue giiQueue = targetQueue.getGiiQueue();
-    assertEquals(1, giiQueue.size());
+    assertThat(giiQueue).hasSize(1);
 
     // Simulate that we have iterated through all interested proxies
     // and are now decrementing the PutInProgressCounter
@@ -173,14 +152,14 @@ public class HARegionQueueIntegrationTest {
     }
 
     HAEventWrapper giiQueueEntry = (HAEventWrapper) giiQueue.peek();
-    assertNotNull(giiQueueEntry);
-    assertNotNull(giiQueueEntry.getClientUpdateMessage());
+    assertThat(giiQueueEntry).isNotNull();
+    assertThat(giiQueueEntry.getClientUpdateMessage()).isNotNull();
 
     // endGiiQueueing and verify queue and HAContainer are empty
     targetQueue.endGiiQueueing();
-    assertEquals(0, giiQueue.size());
 
-    Assert.assertEquals("Expected HAContainer to be empty", 0, haContainerWrapper.size());
+    assertThat(giiQueue).isEmpty();
+    assertThat(haContainerWrapper).isEmpty();
   }
 
   @Test
@@ -242,19 +221,18 @@ public class HARegionQueueIntegrationTest {
   @Test
   public void verifySimultaneousPutHAEventWrapperWithRegion() throws Exception {
     HAContainerWrapper haContainerWrapper = createHAContainerRegion();
-
-    final int numQueues = 30;
-    final int numOperations = 1000;
+    int numQueues = 30;
+    int numOperations = 1000;
 
     Set<HAEventWrapper> haEventWrappersToValidate =
-        createAndPutHARegionQueuesSimulataneously(haContainerWrapper, numQueues, numOperations);
+        createAndPutHARegionQueuesSimultaneously(haContainerWrapper, numQueues, numOperations);
 
-    assertEquals(numOperations, haContainerWrapper.size());
+    assertThat(haContainerWrapper).hasSize(numOperations);
 
     for (HAEventWrapper haEventWrapperToValidate : haEventWrappersToValidate) {
       HAEventWrapper wrapperInContainer =
           (HAEventWrapper) haContainerWrapper.getKey(haEventWrapperToValidate);
-      assertEquals(numQueues, wrapperInContainer.getReferenceCount());
+      assertThat(wrapperInContainer.getReferenceCount()).isEqualTo(numQueues);
     }
   }
 
@@ -268,33 +246,32 @@ public class HARegionQueueIntegrationTest {
     HAEventWrapper haEventWrapper = new HAEventWrapper(message);
     haEventWrapper.setHAContainer(haContainerWrapper);
 
-    final int numQueues = 10;
+    int numQueues = 10;
 
     createAndPutHARegionQueuesSequentially(haContainerWrapper, haEventWrapper, numQueues);
 
-    assertEquals(1, haContainerWrapper.size());
+    assertThat(haContainerWrapper).hasSize(1);
 
     HAEventWrapper wrapperInContainer =
         (HAEventWrapper) haContainerWrapper.getKey(haEventWrapper);
-    assertEquals(numQueues, wrapperInContainer.getReferenceCount());
+    assertThat(wrapperInContainer.getReferenceCount()).isEqualTo(numQueues);
   }
 
   @Test
   public void verifySimultaneousPutHAEventWrapperWithMap() throws Exception {
     HAContainerWrapper haContainerWrapper = (HAContainerWrapper) ccn.getHaContainer();
-
-    final int numQueues = 30;
-    final int numOperations = 1000;
+    int numQueues = 30;
+    int numOperations = 1000;
 
     Set<HAEventWrapper> haEventWrappersToValidate =
-        createAndPutHARegionQueuesSimulataneously(haContainerWrapper, numQueues, numOperations);
+        createAndPutHARegionQueuesSimultaneously(haContainerWrapper, numQueues, numOperations);
 
-    assertEquals(numOperations, haContainerWrapper.size());
+    assertThat(haContainerWrapper).hasSize(numOperations);
 
     for (HAEventWrapper haEventWrapperToValidate : haEventWrappersToValidate) {
       HAEventWrapper wrapperInContainer =
           (HAEventWrapper) haContainerWrapper.getKey(haEventWrapperToValidate);
-      assertEquals(numQueues, wrapperInContainer.getReferenceCount());
+      assertThat(wrapperInContainer.getReferenceCount()).isEqualTo(numQueues);
     }
   }
 
@@ -308,14 +285,15 @@ public class HARegionQueueIntegrationTest {
     HAEventWrapper haEventWrapper = new HAEventWrapper(message);
     haEventWrapper.setHAContainer(haContainerWrapper);
 
-    final int numQueues = 10;
+    int numQueues = 10;
+
     createAndPutHARegionQueuesSequentially(haContainerWrapper, haEventWrapper, numQueues);
 
-    assertEquals(1, haContainerWrapper.size());
+    assertThat(haContainerWrapper).hasSize(1);
 
     HAEventWrapper wrapperInContainer =
         (HAEventWrapper) haContainerWrapper.getKey(haEventWrapper);
-    assertEquals(numQueues, wrapperInContainer.getReferenceCount());
+    assertThat(wrapperInContainer.getReferenceCount()).isEqualTo(numQueues);
   }
 
   @Test
@@ -323,20 +301,13 @@ public class HARegionQueueIntegrationTest {
     HAContainerWrapper haContainerWrapper = (HAContainerWrapper) ccn.getHaContainer();
 
     List<HARegionQueue> regionQueues = new ArrayList<>();
-
     for (int i = 0; i < 2; ++i) {
       HARegion haRegion = createMockHARegion();
 
       regionQueues.add(createHARegionQueue(haContainerWrapper, i, haRegion, false));
     }
 
-    ExecutorService service = Executors.newFixedThreadPool(2);
-
-    List<Callable<Object>> callables = new ArrayList<>();
-
     for (int i = 0; i < 10000; ++i) {
-      callables.clear();
-
       EventID eventID = new EventID(new byte[] {1}, 1, i);
 
       ClientUpdateMessage message = new ClientUpdateMessageImpl(EnumListenerEvent.AFTER_UPDATE,
@@ -353,52 +324,37 @@ public class HARegionQueueIntegrationTest {
 
       wrapper.decrementPutInProgressCounter();
 
+      List<Future<Void>> futures = new ArrayList<>();
       for (HARegionQueue queue : regionQueues) {
-        callables.add(Executors.callable(() -> {
-          try {
-            queue.peek();
-            queue.remove();
-          } catch (Exception ex) {
-            throw new RuntimeException(ex);
-          }
+        futures.add(executorServiceRule.submit(() -> {
+          queue.peek();
+          queue.remove();
         }));
 
-        callables.add(Executors.callable(() -> {
-          try {
-            queue.removeDispatchedEvents(eventID);
-          } catch (Exception ex) {
-            throw new RuntimeException(ex);
-          }
+        futures.add(executorServiceRule.submit(() -> {
+          queue.removeDispatchedEvents(eventID);
         }));
       }
 
-      // invokeAll() will wait until our two callables have completed
-      List<Future<Object>> futures = service.invokeAll(callables, 10, TimeUnit.SECONDS);
-
-      for (Future<Object> future : futures) {
-        try {
-          future.get();
-        } catch (Exception ex) {
-          throw new TestException(
-              "Exception thrown while executing regionQueue methods concurrently on iteration: "
-                  + i,
-              ex);
-        }
+      for (Future<Void> future : futures) {
+        future.get(getTimeout().toMillis(), MILLISECONDS);
       }
     }
   }
 
   @Test
   public void verifyPutEntryConditionallyInHAContainerNoOverwrite() throws Exception {
-    HAContainerWrapper haContainerWrapper = new HAContainerMap(new ConcurrentHashMap());
-
     // create message and HAEventWrapper
     EventID eventID = new EventID(cache.getDistributedSystem());
+
     ClientUpdateMessage oldMessage = new ClientUpdateMessageImpl(EnumListenerEvent.AFTER_UPDATE,
         (LocalRegion) dataRegion, "key", "value".getBytes(), (byte) 0x01, null,
         new ClientProxyMembershipID(), eventID);
+
     HAEventWrapper originalWrapperInstance = new HAEventWrapper(oldMessage);
     originalWrapperInstance.incrementPutInProgressCounter("test");
+
+    HAContainerWrapper haContainerWrapper = new HAContainerMap(new ConcurrentHashMap());
     originalWrapperInstance.setHAContainer(haContainerWrapper);
 
     HARegionQueue haRegionQueue = createHARegionQueue(haContainerWrapper, 0);
@@ -412,6 +368,7 @@ public class HARegionQueueIntegrationTest {
     ClientUpdateMessage newMessage = new ClientUpdateMessageImpl(EnumListenerEvent.AFTER_UPDATE,
         (LocalRegion) dataRegion, "key", "value".getBytes(), (byte) 0x01, null,
         new ClientProxyMembershipID(), eventID);
+
     HAEventWrapper newWrapperInstance = new HAEventWrapper(newMessage);
     newWrapperInstance.incrementPutInProgressCounter("test");
     newWrapperInstance.setHAContainer(haContainerWrapper);
@@ -422,215 +379,211 @@ public class HARegionQueueIntegrationTest {
     // and that it increments the ref count on the container key.
     haRegionQueue.putEventInHARegion(originalWrapperInstance, 1L);
 
-    Assert.assertEquals("Original message overwrote new message in container",
-        haContainerWrapper.get(originalWrapperInstance),
-        newWrapperInstance.getClientUpdateMessage());
-    Assert.assertEquals("Reference count was not the expected value", 2,
-        newWrapperInstance.getReferenceCount());
-    Assert.assertEquals("Container size was not the expected value", haContainerWrapper.size(), 1);
+    assertThat(newWrapperInstance.getClientUpdateMessage())
+        .withFailMessage("Original message overwrote new message in container")
+        .isEqualTo(haContainerWrapper.get(originalWrapperInstance));
+
+    assertThat(newWrapperInstance.getReferenceCount())
+        .withFailMessage("Reference count was not the expected value")
+        .isEqualTo(2);
+
+    assertThat(haContainerWrapper)
+        .withFailMessage("Container size was not the expected value")
+        .hasSize(1);
   }
 
   @Test
   public void removeDispatchedEventsViaQRMAndDestroyQueueSimultaneouslySingleDecrement()
       throws Exception {
     HAContainerWrapper haContainerWrapper = new HAContainerMap(new ConcurrentHashMap());
-
     HARegion haRegion = createMockHARegion();
     HARegionQueue haRegionQueue = createHARegionQueue(haContainerWrapper, 0, haRegion, false);
-
     EventID eventID = new EventID(cache.getDistributedSystem());
+
     ClientUpdateMessage clientUpdateMessage =
         new ClientUpdateMessageImpl(EnumListenerEvent.AFTER_UPDATE,
             (LocalRegion) dataRegion, "key", "value".getBytes(), (byte) 0x01, null,
             new ClientProxyMembershipID(), eventID);
+
     HAEventWrapper haEventWrapper = new HAEventWrapper(clientUpdateMessage);
     haEventWrapper.incrementPutInProgressCounter("test");
     haEventWrapper.setHAContainer(haContainerWrapper);
 
     haRegionQueue.put(haEventWrapper);
 
-    ExecutorService service = Executors.newFixedThreadPool(2);
-
-    List<Callable<Object>> callables = new ArrayList<>();
+    List<Future<Void>> futures = new ArrayList<>();
 
     // In one thread, simulate processing a queue removal message
     // by removing the dispatched event
-    callables.add(Executors.callable(() -> {
-      try {
-        haRegionQueue.removeDispatchedEvents(eventID);
-      } catch (Exception ex) {
-        throw new RuntimeException(ex);
-      }
+    futures.add(executorServiceRule.submit(() -> {
+      haRegionQueue.removeDispatchedEvents(eventID);
     }));
 
     // In another thread, simulate that the region is being destroyed, for instance
     // when a SocketTimeoutException is thrown and we are cleaning up
-    callables.add(Executors.callable(() -> {
-      try {
-        haRegionQueue.destroy();
-      } catch (Exception ex) {
-        throw new RuntimeException(ex);
-      }
+    futures.add(executorServiceRule.submit(() -> {
+      haRegionQueue.destroy();
     }));
 
-    List<Future<Object>> futures = service.invokeAll(callables, 10, TimeUnit.SECONDS);
-
-    for (Future<Object> future : futures) {
-      try {
-        future.get();
-      } catch (Exception ex) {
-        throw new TestException(
-            "Exception thrown while executing queue removal and destroy region queue logic concurrently.",
-            ex);
-      }
+    for (Future<Void> future : futures) {
+      future.get();
     }
 
-    try {
-      await().until(() -> haEventWrapper.getReferenceCount() == 0);
-    } catch (ConditionTimeoutException conditionTimeoutException) {
-      throw new TestException(
-          "Expected HAEventWrapper reference count to be decremented to 0 by either the queue removal or destroy queue logic, but the actual reference count was "
-              + haEventWrapper.getReferenceCount());
-    }
+    await().untilAsserted(() -> {
+      assertThat(haEventWrapper.getReferenceCount())
+          .withFailMessage(
+              "Expected HAEventWrapper reference count to be decremented to 0 by either the queue removal or destroy queue logic")
+          .isZero();
+    });
   }
 
   @Test
   public void removeDispatchedEventsViaMessageDispatcherAndDestroyQueueSimultaneouslySingleDecrement()
       throws Exception {
     HAContainerWrapper haContainerWrapper = new HAContainerMap(new ConcurrentHashMap());
-
     HARegion haRegion = createMockHARegion();
     HARegionQueue haRegionQueue = createHARegionQueue(haContainerWrapper, 0, haRegion, false);
-
     EventID eventID = new EventID(cache.getDistributedSystem());
+
     ClientUpdateMessage clientUpdateMessage =
         new ClientUpdateMessageImpl(EnumListenerEvent.AFTER_UPDATE,
             (LocalRegion) dataRegion, "key", "value".getBytes(), (byte) 0x01, null,
             new ClientProxyMembershipID(), eventID);
+
     HAEventWrapper haEventWrapper = new HAEventWrapper(clientUpdateMessage);
     haEventWrapper.incrementPutInProgressCounter("test");
     haEventWrapper.setHAContainer(haContainerWrapper);
 
     haRegionQueue.put(haEventWrapper);
 
-    ExecutorService service = Executors.newFixedThreadPool(2);
-
-    List<Callable<Object>> callables = new ArrayList<>();
+    List<Future<Void>> futures = new ArrayList<>();
 
     // In one thread, simulate processing a queue removal message
     // by removing the dispatched event
-    callables.add(Executors.callable(() -> {
-      try {
-        // Simulate dispatching a message by peeking and removing the HAEventWrapper
-        haRegionQueue.peek();
-        haRegionQueue.remove();
-      } catch (Exception ex) {
-        throw new RuntimeException(ex);
-      }
+    futures.add(executorServiceRule.submit(() -> {
+      // Simulate dispatching a message by peeking and removing the HAEventWrapper
+      haRegionQueue.peek();
+      haRegionQueue.remove();
     }));
 
     // In another thread, simulate that the region is being destroyed, for instance
     // when a SocketTimeoutException is thrown and we are cleaning up
-    callables.add(Executors.callable(() -> {
-      try {
-        haRegionQueue.destroy();
-      } catch (Exception ex) {
-        throw new RuntimeException(ex);
-      }
+    futures.add(executorServiceRule.submit(() -> {
+      haRegionQueue.destroy();
     }));
 
-    List<Future<Object>> futures = service.invokeAll(callables, 10, TimeUnit.SECONDS);
-
-    for (Future<Object> future : futures) {
-      try {
-        future.get();
-      } catch (Exception ex) {
-        throw new TestException(
-            "Exception thrown while executing message dispatching and destroy region queue logic concurrently.",
-            ex);
-      }
+    for (Future<Void> future : futures) {
+      future.get();
     }
 
-    try {
-      await().until(() -> haEventWrapper.getReferenceCount() == 0);
-    } catch (ConditionTimeoutException conditionTimeoutException) {
-      throw new TestException(
-          "Expected HAEventWrapper reference count to be decremented to 0 by either the message dispatcher or destroy queue logic, but the actual reference count was "
-              + haEventWrapper.getReferenceCount());
-    }
+    await().untilAsserted(() -> {
+      assertThat(haEventWrapper.getReferenceCount())
+          .withFailMessage(
+              "Expected HAEventWrapper reference count to be decremented to 0 by either the message dispatcher or destroy queue logic")
+          .isZero();
+    });
   }
 
-  private HARegion createMockHARegion() {
-    HARegion haRegion = mock(HARegion.class);
-    when(haRegion.getGemFireCache()).thenReturn((InternalCache) cache);
+  private InternalCache createCache() {
+    return (InternalCache) new CacheFactory().set(MCAST_PORT, "0").create();
+  }
 
-    ConcurrentHashMap<Object, Object> mockRegion = new ConcurrentHashMap<>();
+  private Region createDataRegion() {
+    return cache.createRegionFactory(RegionShortcut.REPLICATE).create("data");
+  }
 
-    when(haRegion.put(Mockito.any(Object.class), Mockito.any(Object.class))).then(answer -> {
-      Object existingValue = mockRegion.put(answer.getArgument(0), answer.getArgument(1));
-      return existingValue;
-    });
+  private CacheClientNotifier createCacheClientNotifier() {
+    CacheClientNotifier ccn =
+        CacheClientNotifier.getInstance(cache,
+            mock(ClientRegistrationEventQueueManager.class),
+            mock(StatisticsClock.class),
+            mock(CacheServerStats.class),
+            100000,
+            100000,
+            mock(ConnectionListener.class),
+            null,
+            false);
+    return ccn;
+  }
 
-    when(haRegion.get(Mockito.any(Object.class))).then(answer -> {
-      return mockRegion.get(answer.getArgument(0));
-    });
+  private InternalDistributedMember createMember() {
+    // Create an InternalDistributedMember
+    InternalDistributedMember member = mock(InternalDistributedMember.class);
+    when(member.getVersionObject()).thenReturn(Version.CURRENT);
+    return member;
+  }
+
+  private HARegion createMockHARegion() {
+    HARegion haRegion = mock(HARegion.class);
+    Map<Object, Object> map = new ConcurrentHashMap<>();
+
+    when(haRegion.getGemFireCache())
+        .thenReturn(cache);
+    when(haRegion.put(any(Object.class), any(Object.class)))
+        .then(answer -> map.put(answer.getArgument(0), answer.getArgument(1)));
+    when(haRegion.get(any(Object.class)))
+        .then(answer -> map.get(answer.getArgument(0)));
 
     doAnswer(answer -> {
-      mockRegion.remove(answer.getArgument(0));
+      map.remove(answer.getArgument(0));
       return null;
-    }).when(haRegion).localDestroy(Mockito.any(Object.class));
+    }).when(haRegion).localDestroy(any(Object.class));
+
     return haRegion;
   }
 
-  private HAContainerRegion createHAContainerRegion() throws Exception {
-    Region haContainerRegionRegion = createHAContainerRegionRegion();
-
-    HAContainerRegion haContainerRegion = new HAContainerRegion(haContainerRegionRegion);
-
-    return haContainerRegion;
+  private HAContainerRegion createHAContainerRegion() throws IOException, ClassNotFoundException {
+    return new HAContainerRegion(createHAContainerRegionRegion());
   }
 
-  private Region createHAContainerRegionRegion() throws Exception {
-    AttributesFactory factory = new AttributesFactory();
-    factory.setScope(Scope.LOCAL);
+  private Region<Object, Object> createHAContainerRegionRegion()
+      throws IOException, ClassNotFoundException {
+    String regionName = CacheServerImpl.generateNameForClientMsgsRegion(0);
+
+    AttributesFactory<Object, Object> factory = new AttributesFactory<>();
+    factory.setDataPolicy(DataPolicy.NORMAL);
     factory.setDiskStoreName(null);
     factory.setDiskSynchronous(true);
-    factory.setDataPolicy(DataPolicy.NORMAL);
+    factory.setEvictionAttributes(OVERFLOW_TO_DISK);
     factory.setStatisticsEnabled(true);
-    factory.setEvictionAttributes(
-        EvictionAttributes.createLIFOEntryAttributes(1000, EvictionAction.OVERFLOW_TO_DISK));
-    Region region = ((GemFireCacheImpl) cache).createVMRegion(
-        CacheServerImpl.generateNameForClientMsgsRegion(0), factory.create(),
-        new InternalRegionArguments().setDestroyLockFlag(true).setRecreateFlag(false)
-            .setSnapshotInputStream(null).setImageTarget(null).setIsUsedForMetaRegion(true));
-    return region;
+    factory.setScope(Scope.LOCAL);
+
+    InternalRegionArguments arguments = new InternalRegionArguments()
+        .setDestroyLockFlag(true)
+        .setRecreateFlag(false)
+        .setSnapshotInputStream(null)
+        .setImageTarget(null)
+        .setIsUsedForMetaRegion(true);
+
+    return cache.createVMRegion(regionName, factory.create(), arguments);
   }
 
   private HARegionQueue createHARegionQueue(Map haContainer, int index, HARegion haRegion,
-      boolean puttingGIIDataInQueue) throws Exception {
+      boolean puttingGIIDataInQueue)
+      throws InterruptedException, IOException, ClassNotFoundException {
     StoppableReentrantReadWriteLock giiLock = mock(StoppableReentrantReadWriteLock.class);
-    doReturn(mock(StoppableReentrantReadWriteLock.StoppableWriteLock.class)).when(giiLock)
-        .writeLock();
-    doReturn(mock(StoppableReentrantReadWriteLock.StoppableReadLock.class)).when(giiLock)
-        .readLock();
-
     StoppableReentrantReadWriteLock rwLock =
         new StoppableReentrantReadWriteLock(cache.getCancelCriterion());
 
-    return new HARegionQueue("haRegion+" + index, haRegion, (InternalCache) cache, haContainer,
+    when(giiLock.writeLock()).thenReturn(mock(StoppableWriteLock.class));
+    when(giiLock.readLock()).thenReturn(mock(StoppableReadLock.class));
+
+    return new HARegionQueue("haRegion+" + index, haRegion, cache, haContainer,
         null, (byte) 1, true, mock(HARegionQueueStats.class), giiLock, rwLock,
         mock(CancelCriterion.class), puttingGIIDataInQueue, mock(StatisticsClock.class));
   }
 
-  private HARegionQueue createHARegionQueue(Map haContainer, int index) throws Exception {
+  private HARegionQueue createHARegionQueue(Map haContainer, int index)
+      throws InterruptedException, IOException, ClassNotFoundException {
     HARegion haRegion = mock(HARegion.class);
-    when(haRegion.getGemFireCache()).thenReturn((InternalCache) cache);
+
+    when(haRegion.getGemFireCache()).thenReturn(cache);
 
     return createHARegionQueue(haContainer, index, haRegion, false);
   }
 
   private CachedDeserializable createCachedDeserializable(HAContainerWrapper haContainerWrapper)
-      throws Exception {
+      throws IOException {
     // Create ClientUpdateMessage and HAEventWrapper
     ClientUpdateMessage message = new ClientUpdateMessageImpl(EnumListenerEvent.AFTER_UPDATE,
         (LocalRegion) dataRegion, "key", "value".getBytes(), (byte) 0x01, null,
@@ -644,12 +597,13 @@ public class HARegionQueueIntegrationTest {
     byte[] wrapperBytes = BlobHelper.serializeToBlob(wrapper);
     CachedDeserializable cd = new VMCachedDeserializable(wrapperBytes);
     haContainerWrapper.remove(wrapper);
-    assertThat(haContainerWrapper.size()).isEqualTo(0);
+    assertThat(haContainerWrapper).isEmpty();
     return cd;
   }
 
   private void createAndUpdateHARegionQueuesSequentially(HAContainerWrapper haContainerWrapper,
-      CachedDeserializable cd, int numQueues) throws Exception {
+      CachedDeserializable cd, int numQueues)
+      throws InterruptedException, IOException, ClassNotFoundException {
     // Create some HARegionQueues
     for (int i = 0; i < numQueues; i++) {
       HARegionQueue haRegionQueue = createHARegionQueue(haContainerWrapper, i);
@@ -658,9 +612,8 @@ public class HARegionQueueIntegrationTest {
   }
 
   private HARegionQueue createAndUpdateHARegionQueuesWithGiiQueueing(
-      HAContainerWrapper haContainerWrapper, HAEventWrapper wrapper, ClientUpdateMessage message,
-      int numQueues) throws Exception {
-
+      HAContainerWrapper haContainerWrapper, HAEventWrapper wrapper, int numQueues)
+      throws InterruptedException, IOException, ClassNotFoundException {
     HARegionQueue targetQueue = null;
     int startGiiQueueingIndex = numQueues / 2;
 
@@ -672,24 +625,23 @@ public class HARegionQueueIntegrationTest {
       if (i == startGiiQueueingIndex) {
         HARegion haRegion = mock(HARegion.class);
 
-        final HARegionQueue giiHaRegionQueue =
+        HARegionQueue giiHaRegionQueue =
             createHARegionQueue(haContainerWrapper, i, haRegion, false);;
         giiHaRegionQueue.startGiiQueueing();
         targetQueue = giiHaRegionQueue;
 
-        when(haRegion.put(Mockito.any(Object.class), Mockito.any(HAEventWrapper.class)))
+        when(haRegion.put(any(Object.class), any(HAEventWrapper.class)))
             .then(answer -> {
               // Simulate that either a QRM or message dispatch has occurred immediately after the
               // put.
               // We want to ensure that the event is removed from the HAContainer if it is drained
-              // from the giiQueue
-              // and the ref count has dropped to 0.
+              // from the giiQueue and the ref count has dropped to 0.
               HAEventWrapper haContainerKey = answer.getArgument(1);
               giiHaRegionQueue.decAndRemoveFromHAContainer(haContainerKey);
               return null;
             });
 
-        when(haRegion.getGemFireCache()).thenReturn((InternalCache) cache);
+        when(haRegion.getGemFireCache()).thenReturn(cache);
 
         haRegionQueue = giiHaRegionQueue;
       } else {
@@ -702,17 +654,18 @@ public class HARegionQueueIntegrationTest {
     return targetQueue;
   }
 
-  private Set<HAEventWrapper> createAndPutHARegionQueuesSimulataneously(
-      HAContainerWrapper haContainerWrapper, int numQueues, int numOperations) throws Exception {
-    ConcurrentLinkedQueue<HARegionQueue> queues = new ConcurrentLinkedQueue<>();
-    final Set<HAEventWrapper> testValidationWrapperSet = ConcurrentHashMap.newKeySet();
-    final AtomicInteger count = new AtomicInteger();
+  private Set<HAEventWrapper> createAndPutHARegionQueuesSimultaneously(
+      HAContainerWrapper haContainerWrapper, int numQueues, int numOperations)
+      throws InterruptedException, IOException, ClassNotFoundException {
+    Collection<HARegionQueue> queues = new ConcurrentLinkedQueue<>();
+    AtomicInteger count = new AtomicInteger();
 
-    // create HARegionQueuesv
+    // create HARegionQueues
     for (int i = 0; i < numQueues; i++) {
       queues.add(createHARegionQueue(haContainerWrapper, i));
     }
 
+    Set<HAEventWrapper> testValidationWrapperSet = ConcurrentHashMap.newKeySet();
     for (int i = 0; i < numOperations; i++) {
       count.set(i);
 
@@ -740,8 +693,9 @@ public class HARegionQueueIntegrationTest {
   }
 
   private void createAndPutHARegionQueuesSequentially(HAContainerWrapper haContainerWrapper,
-      HAEventWrapper haEventWrapper, int numQueues) throws Exception {
-    ArrayList<HARegionQueue> queues = new ArrayList<>();
+      HAEventWrapper haEventWrapper, int numQueues)
+      throws InterruptedException, IOException, ClassNotFoundException {
+    Collection<HARegionQueue> queues = new ArrayList<>();
 
     // create HARegionQueues
     for (int i = 0; i < numQueues; i++) {
@@ -758,7 +712,9 @@ public class HARegionQueueIntegrationTest {
   }
 
   private void createAndUpdateHARegionQueuesSimultaneously(HAContainerWrapper haContainerWrapper,
-      CachedDeserializable cd, int numQueues) throws Exception {
+      CachedDeserializable cd, int numQueues)
+      throws InterruptedException, IOException, ClassNotFoundException, TimeoutException,
+      ExecutionException {
     // Create some HARegionQueues
     HARegionQueue[] haRegionQueues = new HARegionQueue[numQueues];
     for (int i = 0; i < numQueues; i++) {
@@ -766,34 +722,30 @@ public class HARegionQueueIntegrationTest {
     }
 
     // Create threads to simultaneously update the HAEventWrapper
-    int j = 0;
-    Thread[] threads = new Thread[numQueues];
+    Collection<Future<Void>> futures = new ArrayList<>();
     for (HARegionQueue haRegionQueue : haRegionQueues) {
-      threads[j] = new Thread(() -> {
+      futures.add(executorServiceRule.submit(() -> {
         haRegionQueue.updateHAEventWrapper(member, cd, "haRegion");
-      });
-      j++;
+      }));
     }
 
-    // Start the threads
-    for (int i = 0; i < numQueues; i++) {
-      threads[i].start();
-    }
-
-    // Wait for the threads to complete
-    for (int i = 0; i < numQueues; i++) {
-      threads[i].join();
+    for (Future<Void> future : futures) {
+      future.get(getTimeout().toMillis(), MILLISECONDS);
     }
   }
 
   private void verifyHAContainerWrapper(HAContainerWrapper haContainerWrapper,
       CachedDeserializable cd, int numQueues) {
     // Verify HAContainerRegion size
-    assertThat(haContainerWrapper.size()).isEqualTo(1);
+    assertThat(haContainerWrapper).hasSize(1);
 
     // Verify the refCount is correct
     HAEventWrapper wrapperInContainer =
         (HAEventWrapper) haContainerWrapper.getKey(cd.getDeserializedForReading());
     assertThat(wrapperInContainer.getReferenceCount()).isEqualTo(numQueues);
   }
+
+  private static <T> T mock(Class<T> classToMock) {
+    return Mockito.mock(classToMock, withSettings().stubOnly());
+  }
 }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/process/ControlFileWatchdogIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/process/ControlFileWatchdogIntegrationTest.java
index 8cbcfc8..43672a8 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/process/ControlFileWatchdogIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/process/ControlFileWatchdogIntegrationTest.java
@@ -20,7 +20,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.timeout;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 
 import java.io.File;
 
@@ -171,7 +171,7 @@ public class ControlFileWatchdogIntegrationTest {
     watchdog.start();
 
     // assert
-    verifyZeroInteractions(requestHandler); // would be prefer to wait some time
+    verifyNoMoreInteractions(requestHandler); // would be prefer to wait some time
   }
 
   @Test
@@ -184,7 +184,7 @@ public class ControlFileWatchdogIntegrationTest {
     File file = new EmptyFileWriter(requestFile).createNewFile();
 
     // assert
-    verifyZeroInteractions(requestHandler); // would be prefer to wait some time
+    verifyNoMoreInteractions(requestHandler); // would be prefer to wait some time
     assertThat(file).exists();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/Connection.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/Connection.java
index 827e02c..dd18301 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/Connection.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/Connection.java
@@ -36,10 +36,16 @@ public interface Connection {
 
   Socket getSocket();
 
+  long getBirthDate();
+
+  void setBirthDate(long ts);
+
   ByteBuffer getCommBuffer() throws SocketException;
 
   ConnectionStats getStats();
 
+  boolean isActive();
+
   /**
    * Forcefully close the resources used by this connection. This should be called if the connection
    * or the server dies.
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java
index aeb6677..bb98f2a 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java
@@ -224,6 +224,16 @@ public class ConnectionImpl implements Connection {
   }
 
   @Override
+  public long getBirthDate() {
+    return 0;
+  }
+
+  @Override
+  public void setBirthDate(long ts) {
+    // nothing
+  }
+
+  @Override
   public OutputStream getOutputStream() {
     return out;
   }
@@ -240,6 +250,11 @@ public class ConnectionImpl implements Connection {
   }
 
   @Override
+  public boolean isActive() {
+    return false;
+  }
+
+  @Override
   public String toString() {
     return "Connection[" + endpoint + "]@" + hashCode();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueConnectionImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueConnectionImpl.java
index e50de27..5253440 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueConnectionImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueConnectionImpl.java
@@ -157,6 +157,16 @@ public class QueueConnectionImpl implements Connection {
   }
 
   @Override
+  public long getBirthDate() {
+    return 0;
+  }
+
+  @Override
+  public void setBirthDate(long ts) {
+    // nothing
+  }
+
+  @Override
   public OutputStream getOutputStream() {
     return getConnection().getOutputStream();
   }
@@ -172,6 +182,11 @@ public class QueueConnectionImpl implements Connection {
   }
 
   @Override
+  public boolean isActive() {
+    return false;
+  }
+
+  @Override
   public Object execute(Op op) throws Exception {
     return getConnection().execute(op);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManager.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManager.java
index 29c1387..fa71551 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManager.java
@@ -18,6 +18,9 @@ import java.util.Deque;
 import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.function.Predicate;
 
+import org.apache.geode.annotations.VisibleForTesting;
+import org.apache.geode.cache.client.internal.Connection;
+
 /**
  * This manager maintains a collection of PooledConnection instances.
  * PooledConnections can be added to this manager using one of the add* methods.
@@ -30,7 +33,7 @@ import java.util.function.Predicate;
  *
  */
 public class AvailableConnectionManager {
-  private final Deque<PooledConnection> connections =
+  private final Deque<Connection> connections =
       new ConcurrentLinkedDeque<>();
 
   /**
@@ -39,8 +42,8 @@ public class AvailableConnectionManager {
    *
    * @return the activated connection or null if none found
    */
-  public PooledConnection useFirst() {
-    PooledConnection connection;
+  public Connection useFirst() {
+    Connection connection;
     while (null != (connection = connections.pollFirst())) {
       if (connection.activate()) {
         return connection;
@@ -55,7 +58,7 @@ public class AvailableConnectionManager {
    * @param connection the connection to remove
    * @return true if a connection was removed; otherwise false
    */
-  public boolean remove(PooledConnection connection) {
+  public boolean remove(Connection connection) {
     return connections.remove(connection);
   }
 
@@ -66,10 +69,10 @@ public class AvailableConnectionManager {
    * @param predicate that the connections are matched against
    * @return the activated connection or null if none found
    */
-  public PooledConnection useFirst(Predicate<PooledConnection> predicate) {
+  public Connection useFirst(Predicate<Connection> predicate) {
     final EqualsWithPredicate equalsWithPredicate = new EqualsWithPredicate(predicate);
     while (connections.removeFirstOccurrence(equalsWithPredicate)) {
-      PooledConnection connection = equalsWithPredicate.getConnectionThatMatched();
+      Connection connection = equalsWithPredicate.getConnectionThatMatched();
       if (connection.activate()) {
         // Need to recheck the predicate after we have activated.
         // Until activated load conditioning can change the server
@@ -91,7 +94,7 @@ public class AvailableConnectionManager {
    * @param connection the connection to passivate and add
    * @param accessed true if the connection was used by the caller, false otherwise
    */
-  public void addFirst(PooledConnection connection, boolean accessed) {
+  public void addFirst(Connection connection, boolean accessed) {
     passivate(connection, accessed);
     connections.addFirst(connection);
   }
@@ -102,12 +105,12 @@ public class AvailableConnectionManager {
    * @param connection the connection to passivate and add
    * @param accessed true if the connection was used by the caller, false otherwise
    */
-  public void addLast(PooledConnection connection, boolean accessed) {
+  public void addLast(Connection connection, boolean accessed) {
     passivate(connection, accessed);
     connections.addLast(connection);
   }
 
-  private void passivate(PooledConnection connection, boolean accessed) {
+  private void passivate(Connection connection, boolean accessed) {
     // thread local connections are already passive at this point
     if (connection.isActive()) {
       connection.passivate(accessed);
@@ -115,7 +118,8 @@ public class AvailableConnectionManager {
   }
 
   // used by unit tests
-  Deque<PooledConnection> getDeque() {
+  @VisibleForTesting
+  Deque<Connection> getDeque() {
     return connections;
   }
 
@@ -126,19 +130,19 @@ public class AvailableConnectionManager {
    * that did match.
    */
   private static class EqualsWithPredicate {
-    private final Predicate<PooledConnection> predicate;
-    private PooledConnection connectionThatMatched;
+    private final Predicate<Connection> predicate;
+    private Connection connectionThatMatched;
 
-    EqualsWithPredicate(Predicate<PooledConnection> predicate) {
+    EqualsWithPredicate(Predicate<Connection> predicate) {
       this.predicate = predicate;
     }
 
     @Override
     public boolean equals(Object o) {
-      if (!(o instanceof PooledConnection)) {
+      if (!(o instanceof Connection)) {
         return false;
       }
-      PooledConnection pooledConnection = (PooledConnection) o;
+      Connection pooledConnection = (Connection) o;
       if (predicate.test(pooledConnection)) {
         this.connectionThatMatched = pooledConnection;
         return true;
@@ -146,7 +150,7 @@ public class AvailableConnectionManager {
       return false;
     }
 
-    public PooledConnection getConnectionThatMatched() {
+    public Connection getConnectionThatMatched() {
       return this.connectionThatMatched;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
index d7295f6..ae48659 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
@@ -263,7 +263,7 @@ public class ConnectionManagerImpl implements ConnectionManager {
     try {
       long timeout = System.nanoTime() + MILLISECONDS.toNanos(acquireTimeout);
       while (true) {
-        PooledConnection connection = availableConnectionManager.useFirst();
+        Connection connection = availableConnectionManager.useFirst();
         if (null != connection) {
           return connection;
         }
@@ -302,12 +302,12 @@ public class ConnectionManagerImpl implements ConnectionManager {
   }
 
   @Override
-  public PooledConnection borrowConnection(ServerLocation server, long acquireTimeout,
+  public Connection borrowConnection(ServerLocation server, long acquireTimeout,
       boolean onlyUseExistingCnx)
       throws AllConnectionsInUseException, NoAvailableServersException,
       ServerConnectivityException {
 
-    PooledConnection connection;
+    Connection connection;
     logger.trace("Connection borrowConnection single hop connection");
 
     long waitStart = NOT_WAITING;
@@ -353,7 +353,7 @@ public class ConnectionManagerImpl implements ConnectionManager {
       throws AllConnectionsInUseException {
 
     try {
-      PooledConnection connection = availableConnectionManager
+      Connection connection = availableConnectionManager
           .useFirst((c) -> !excludedServers.contains(c.getServer()));
       if (null != connection) {
         return connection;
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/PooledConnection.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/PooledConnection.java
index ae5df9d..fa50f31 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/PooledConnection.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/PooledConnection.java
@@ -62,6 +62,7 @@ public class PooledConnection implements Connection {
     return getEndpoint().getLocation();
   }
 
+  @Override
   public boolean isActive() {
     synchronized (this) {
       return this.active;
@@ -240,10 +241,12 @@ public class PooledConnection implements Connection {
     return lastAccessed;
   }
 
+  @Override
   public long getBirthDate() {
     return this.birthDate;
   }
 
+  @Override
   public void setBirthDate(long ts) {
     this.birthDate = ts;
   }
diff --git a/geode-core/src/test/java/org/apache/geode/alerting/internal/ClusterAlertMessagingTest.java b/geode-core/src/test/java/org/apache/geode/alerting/internal/ClusterAlertMessagingTest.java
index 4471ed3..f7bc8d8 100644
--- a/geode-core/src/test/java/org/apache/geode/alerting/internal/ClusterAlertMessagingTest.java
+++ b/geode-core/src/test/java/org/apache/geode/alerting/internal/ClusterAlertMessagingTest.java
@@ -26,7 +26,7 @@ import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
@@ -192,7 +192,7 @@ public class ClusterAlertMessagingTest {
     clusterAlertMessaging.sendAlert(remoteMember, AlertLevel.WARNING, Instant.now(), "threadName",
         Thread.currentThread().getId(), "formattedMessage", "stackTrace");
 
-    verifyZeroInteractions(distributionManager);
+    verifyNoMoreInteractions(distributionManager);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/cache/client/internal/OpExecutorImplJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/client/internal/OpExecutorImplJUnitTest.java
index 0fa4c37..ad7feea 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/client/internal/OpExecutorImplJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/client/internal/OpExecutorImplJUnitTest.java
@@ -534,11 +534,26 @@ public class OpExecutorImplJUnitTest {
     }
 
     @Override
+    public long getBirthDate() {
+      return 0;
+    }
+
+    @Override
+    public void setBirthDate(long ts) {
+      // nothing
+    }
+
+    @Override
     public ConnectionStats getStats() {
       return null;
     }
 
     @Override
+    public boolean isActive() {
+      return false;
+    }
+
+    @Override
     public int getDistributedSystemId() {
       return 0;
     }
diff --git a/geode-core/src/test/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManagerTest.java b/geode-core/src/test/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManagerTest.java
index 6ebdc4a..ee5b559 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManagerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/client/internal/pooling/AvailableConnectionManagerTest.java
@@ -27,6 +27,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.junit.Test;
 
+import org.apache.geode.cache.client.internal.Connection;
+
 public class AvailableConnectionManagerTest {
 
   private final AvailableConnectionManager instance = new AvailableConnectionManager();
@@ -42,17 +44,17 @@ public class AvailableConnectionManagerTest {
   public void useFirstReturnsNullGivenEmptyManager() {
     instance.getDeque().clear();
 
-    PooledConnection result = instance.useFirst();
+    Connection result = instance.useFirst();
 
     assertThat(result).isNull();
   }
 
   @Test
   public void useFirstReturnsExpectedConnectionGivenManagerWithOneItem() {
-    PooledConnection expected = createConnection();
+    Connection expected = createConnection();
     instance.getDeque().addFirst(expected);
 
-    PooledConnection result = instance.useFirst();
+    Connection result = instance.useFirst();
 
     assertThat(result).isSameAs(expected);
     assertThat(instance.getDeque()).isEmpty();
@@ -61,11 +63,11 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void useFirstReturnsNullGivenManagerWithOneItemThatCantBeActivated() {
-    PooledConnection expected = createConnection();
+    Connection expected = createConnection();
     when(expected.activate()).thenReturn(false);
     instance.getDeque().addFirst(expected);
 
-    PooledConnection result = instance.useFirst();
+    Connection result = instance.useFirst();
 
     assertThat(result).isNull();
     assertThat(instance.getDeque()).isEmpty();
@@ -76,17 +78,17 @@ public class AvailableConnectionManagerTest {
   public void useFirstWithPredicateReturnsNullGivenEmptyManager() {
     instance.getDeque().clear();
 
-    PooledConnection result = instance.useFirst(c -> true);
+    Connection result = instance.useFirst(c -> true);
 
     assertThat(result).isNull();
   }
 
   @Test
   public void useFirstWithPredicateReturnsExpectedGivenManagerWithOneItem() {
-    PooledConnection expected = createConnection();
+    Connection expected = createConnection();
     instance.getDeque().addFirst(expected);
 
-    PooledConnection result = instance.useFirst(c -> c == expected);
+    Connection result = instance.useFirst(c -> c == expected);
 
     assertThat(result).isSameAs(expected);
     assertThat(instance.getDeque()).isEmpty();
@@ -95,10 +97,10 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void useFirstWithPredicateReturnsNullGivenManagerWithOneItemThatDoesNotMatch() {
-    PooledConnection expected = createConnection();
+    Connection expected = createConnection();
     instance.getDeque().addFirst(expected);
 
-    PooledConnection result = instance.useFirst(c -> false);
+    Connection result = instance.useFirst(c -> false);
 
     assertThat(result).isNull();
     assertThat(instance.getDeque()).hasSize(1);
@@ -107,11 +109,11 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void useFirstWithPredicateReturnsNullGivenManagerWithOneItemThatCantBeActivated() {
-    PooledConnection expected = createConnection();
+    Connection expected = createConnection();
     when(expected.activate()).thenReturn(false);
     instance.getDeque().addFirst(expected);
 
-    PooledConnection result = instance.useFirst(c -> c == expected);
+    Connection result = instance.useFirst(c -> c == expected);
 
     assertThat(result).isNull();
     assertThat(instance.getDeque()).isEmpty();
@@ -120,12 +122,12 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void useFirstWithPredicateReturnsNullGivenManagerWithOneItemThatDoesNotMatchAfterBeingActivated() {
-    PooledConnection expected = createConnection();
+    Connection expected = createConnection();
     when(expected.activate()).thenReturn(true);
     instance.getDeque().addFirst(expected);
     final AtomicBoolean firstTime = new AtomicBoolean(true);
 
-    PooledConnection result = instance.useFirst(c -> {
+    Connection result = instance.useFirst(c -> {
       if (firstTime.get()) {
         firstTime.set(false);
         return true;
@@ -151,7 +153,7 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void removeReturnsTrueGivenConnectionInManager() {
-    PooledConnection connection = createConnection();
+    Connection connection = createConnection();
     instance.getDeque().addFirst(connection);
 
     boolean result = instance.remove(connection);
@@ -161,7 +163,7 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void removeEmptiesDequeGivenConnectionInManager() {
-    PooledConnection connection = createConnection();
+    Connection connection = createConnection();
     instance.getDeque().addFirst(connection);
 
     instance.remove(connection);
@@ -171,7 +173,7 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void addFirstWithTrueAddsActiveConnectionToManager() {
-    PooledConnection connection = createConnection();
+    Connection connection = createConnection();
 
     instance.addFirst(connection, true);
 
@@ -182,7 +184,7 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void addFirstWithFalseAddsActiveConnectionToManager() {
-    PooledConnection connection = createConnection();
+    Connection connection = createConnection();
 
     instance.addFirst(connection, false);
 
@@ -193,7 +195,7 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void addFirstAddsInactiveConnectionToManager() {
-    PooledConnection connection = createConnection();
+    Connection connection = createConnection();
     when(connection.isActive()).thenReturn(false);
 
     instance.addFirst(connection, true);
@@ -206,7 +208,7 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void addLastWithTrueAddsActiveConnectionToManager() {
-    PooledConnection connection = createConnection();
+    Connection connection = createConnection();
 
     instance.addLast(connection, true);
 
@@ -217,7 +219,7 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void addLastWithFalseAddsActiveConnectionToManager() {
-    PooledConnection connection = createConnection();
+    Connection connection = createConnection();
 
     instance.addLast(connection, false);
 
@@ -228,7 +230,7 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void addLastAddsInactiveConnectionToManager() {
-    PooledConnection connection = createConnection();
+    Connection connection = createConnection();
     when(connection.isActive()).thenReturn(false);
 
     instance.addLast(connection, true);
@@ -240,12 +242,12 @@ public class AvailableConnectionManagerTest {
 
   @Test
   public void addFirstTakesPrecedenceOverAddLast() {
-    PooledConnection expected = createConnection();
+    Connection expected = createConnection();
 
     instance.addLast(createConnection(), true);
     instance.addFirst(expected, true);
     instance.addLast(createConnection(), true);
-    PooledConnection connection = instance.useFirst();
+    Connection connection = instance.useFirst();
 
     assertThat(instance.getDeque()).hasSize(2);
     assertThat(connection).isSameAs(expected);
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherTest.java b/geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherTest.java
index afc0b43..a27c13a 100755
--- a/geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/ServerLauncherTest.java
@@ -24,7 +24,7 @@ import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
@@ -306,7 +306,7 @@ public class ServerLauncherTest {
 
     launcher.start();
 
-    verifyZeroInteractions(cacheServer);
+    verifyNoMoreInteractions(cacheServer);
   }
 
   @Test
@@ -324,7 +324,7 @@ public class ServerLauncherTest {
 
     launcher.start();
 
-    verifyZeroInteractions(cacheServer2);
+    verifyNoMoreInteractions(cacheServer2);
   }
 
   @Test
@@ -348,7 +348,7 @@ public class ServerLauncherTest {
     serverLauncher.start();
 
     verify(startupCompletionAction).run();
-    verifyZeroInteractions(startupExceptionAction);
+    verifyNoMoreInteractions(startupExceptionAction);
   }
 
   @Test
@@ -371,7 +371,7 @@ public class ServerLauncherTest {
     serverLauncher.start();
 
     verify(startupExceptionAction).accept(any());
-    verifyZeroInteractions(startupCompletionAction);
+    verifyNoMoreInteractions(startupCompletionAction);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/InternalCacheBuilderTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/InternalCacheBuilderTest.java
index abe34d3..76d9331 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/InternalCacheBuilderTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/InternalCacheBuilderTest.java
@@ -38,7 +38,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.same;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 import static org.mockito.MockitoAnnotations.initMocks;
 
@@ -558,7 +558,7 @@ public class InternalCacheBuilderTest {
         .setIsExistingOk(true)
         .create(givenSystem));
 
-    verifyZeroInteractions(givenSystem);
+    verifyNoMoreInteractions(givenSystem);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionRedundancyTrackerTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionRedundancyTrackerTest.java
index 24cb002..7bebc45 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionRedundancyTrackerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/PartitionedRegionRedundancyTrackerTest.java
@@ -21,7 +21,6 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -63,7 +62,7 @@ public class PartitionedRegionRedundancyTrackerTest {
   @Test
   public void willNotDecrementLowRedundancyBucketCountBelowZero() {
     redundancyTracker.decrementLowRedundancyBucketCount();
-    verifyZeroInteractions(stats);
+    verifyNoMoreInteractions(stats);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/backup/BackupOperationTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/backup/BackupOperationTest.java
index 77d99d6..0d4416b 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/backup/BackupOperationTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/backup/BackupOperationTest.java
@@ -20,7 +20,7 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import org.junit.Before;
@@ -111,7 +111,7 @@ public class BackupOperationTest {
         any());
     inOrder.verify(abortBackupFactory).createAbortBackupStep(any(), any(), any(), any(), any());
 
-    verifyZeroInteractions(finishBackupFactory);
+    verifyNoMoreInteractions(finishBackupFactory);
   }
 
   @Test
@@ -121,7 +121,7 @@ public class BackupOperationTest {
     assertThatThrownBy(() -> backupOperation.backupAllMembers(targetDirPath, baselineDirPath))
         .isInstanceOf(ManagementException.class);
 
-    verifyZeroInteractions(flushToDiskFactory, prepareBackupFactory, abortBackupFactory,
+    verifyNoMoreInteractions(flushToDiskFactory, prepareBackupFactory, abortBackupFactory,
         finishBackupFactory);
   }
 }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/colocation/SingleThreadColocationLoggerTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/colocation/SingleThreadColocationLoggerTest.java
index ec7029c..ef909ca 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/colocation/SingleThreadColocationLoggerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/colocation/SingleThreadColocationLoggerTest.java
@@ -25,7 +25,6 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.timeout;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.Set;
@@ -191,7 +190,7 @@ public class SingleThreadColocationLoggerTest {
 
     colocationLogger.addMissingChildRegion("/childRegion");
 
-    verifyZeroInteractions(logger);
+    verifyNoMoreInteractions(logger);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction65Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction65Test.java
index 96b4d08..c29d4b7 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction65Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction65Test.java
@@ -21,7 +21,7 @@ import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import org.junit.Before;
@@ -220,6 +220,6 @@ public class ExecuteFunction65Test {
     executeFunction65.cmdExecute(message, serverConnection, securityService, 0);
 
     verify(securityService).authorize(ResourcePermissions.DATA_WRITE);
-    verifyZeroInteractions(serverToClientFunctionResultSender65Factory);
+    verifyNoMoreInteractions(serverToClientFunctionResultSender65Factory);
   }
 }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66Test.java
index 0d8ae84..092a32e 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66Test.java
@@ -22,7 +22,7 @@ import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.concurrent.Executor;
@@ -212,7 +212,7 @@ public class ExecuteFunction66Test {
 
     verify(securityService).authorize(ResourcePermissions.DATA_WRITE);
     // verify(this.chunkedResponseMessage).sendChunk(this.serverConnection);
-    verifyZeroInteractions(serverToClientFunctionResultSender65Factory);
+    verifyNoMoreInteractions(serverToClientFunctionResultSender65Factory);
   }
 
   @Test
@@ -240,6 +240,6 @@ public class ExecuteFunction66Test {
         securityService, 0)).isExactlyInstanceOf(NullPointerException.class);
 
     verify(securityService).authorize(ResourcePermissions.DATA_WRITE);
-    verifyZeroInteractions(serverToClientFunctionResultSender65Factory);
+    verifyNoMoreInteractions(serverToClientFunctionResultSender65Factory);
   }
 }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunctionTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunctionTest.java
index aa95fb4..abf9831 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunctionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunctionTest.java
@@ -22,7 +22,7 @@ import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import org.junit.Before;
@@ -194,7 +194,7 @@ public class ExecuteFunctionTest {
 
     verify(securityService).authorize(ResourcePermissions.DATA_WRITE);
     verify(chunkedResponseMessage).sendChunk(serverConnection);
-    verifyZeroInteractions(serverToClientFunctionResultSenderFactory);
+    verifyNoMoreInteractions(serverToClientFunctionResultSenderFactory);
   }
 
   @Test
@@ -220,6 +220,6 @@ public class ExecuteFunctionTest {
     executeFunction.cmdExecute(message, serverConnection, securityService, 0);
 
     verify(chunkedResponseMessage).sendChunk(serverConnection);
-    verifyZeroInteractions(serverToClientFunctionResultSenderFactory);
+    verifyNoMoreInteractions(serverToClientFunctionResultSenderFactory);
   }
 }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/io/CompositeOutputStreamJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/io/CompositeOutputStreamJUnitTest.java
index 34a438d..15704c4 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/io/CompositeOutputStreamJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/io/CompositeOutputStreamJUnitTest.java
@@ -19,7 +19,7 @@ import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 
 import java.io.IOException;
 import java.io.OutputStream;
@@ -234,7 +234,7 @@ public class CompositeOutputStreamJUnitTest {
     cos.flush();
     cos.close();
 
-    verifyZeroInteractions(streamTwo);
+    verifyNoMoreInteractions(streamTwo);
     InOrder inOrderStreams = inOrder(streamOne);
     inOrderStreams.verify(streamOne, times(1)).write(2);
     inOrderStreams.verify(streamOne, times(1)).write(3);
@@ -261,7 +261,7 @@ public class CompositeOutputStreamJUnitTest {
     cos.flush();
     cos.close();
 
-    verifyZeroInteractions(streamOne);
+    verifyNoMoreInteractions(streamOne);
   }
 
   @Test
@@ -279,6 +279,6 @@ public class CompositeOutputStreamJUnitTest {
     cos.flush();
     cos.close();
 
-    verifyZeroInteractions(streamOne);
+    verifyNoMoreInteractions(streamOne);
   }
 }
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/FederatingManagerTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/FederatingManagerTest.java
index 1b89f79..2de1c51 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/FederatingManagerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/FederatingManagerTest.java
@@ -21,7 +21,7 @@ import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.powermock.api.mockito.PowerMockito.when;
 
 import java.net.InetAddress;
@@ -442,7 +442,7 @@ public class FederatingManagerTest {
 
     federatingManager.removeMemberArtifacts(member, false);
 
-    verifyZeroInteractions(proxyFactory);
+    verifyNoMoreInteractions(proxyFactory);
   }
 
   private InternalDistributedMember member() {
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/beans/ManagementListenerTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/beans/ManagementListenerTest.java
index 585d2a1..26067a5 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/beans/ManagementListenerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/beans/ManagementListenerTest.java
@@ -23,7 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.concurrent.locks.Lock;
@@ -130,9 +130,9 @@ public class ManagementListenerTest {
   public void handleEventDoesNotUseLocksForSystemAlertEvent() {
     managementListener.handleEvent(SYSTEM_ALERT, null);
 
-    verifyZeroInteractions(readWriteLock);
-    verifyZeroInteractions(readLock);
-    verifyZeroInteractions(writeLock);
+    verifyNoMoreInteractions(readWriteLock);
+    verifyNoMoreInteractions(readLock);
+    verifyNoMoreInteractions(writeLock);
   }
 
   @Test
diff --git a/geode-dunit/src/test/java/org/apache/geode/test/dunit/internal/VMEventNotifierTest.java b/geode-dunit/src/test/java/org/apache/geode/test/dunit/internal/VMEventNotifierTest.java
index f516986..87c8030 100644
--- a/geode-dunit/src/test/java/org/apache/geode/test/dunit/internal/VMEventNotifierTest.java
+++ b/geode-dunit/src/test/java/org/apache/geode/test/dunit/internal/VMEventNotifierTest.java
@@ -18,7 +18,7 @@ import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Future;
@@ -93,7 +93,7 @@ public class VMEventNotifierTest {
     notifiedFuture.get(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
 
     verify(vmEventListener1).afterCreateVM(eq(vm));
-    verifyZeroInteractions(vmEventListener2);
+    verifyNoMoreInteractions(vmEventListener2);
   }
 
   @Test
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/AlterQueryServiceFunctionTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/AlterQueryServiceFunctionTest.java
index 90f0dc0..c75a0d6 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/AlterQueryServiceFunctionTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/AlterQueryServiceFunctionTest.java
@@ -31,7 +31,7 @@ import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.Arrays;
@@ -110,7 +110,7 @@ public class AlterQueryServiceFunctionTest {
     when(mockContext.getArguments()).thenReturn(new Object[] {false, null, Collections.emptySet()});
 
     CliFunctionResult result = function.executeFunction(mockContext);
-    verifyZeroInteractions(mockQueryConfigService);
+    verifyNoMoreInteractions(mockQueryConfigService);
     assertThat(result.getStatus()).isEqualTo(CliFunctionResult.StatusState.ERROR.toString());
     assertThat(result.getStatusMessage()).isEqualTo(EMPTY_AUTHORIZER_ERROR);
   }
@@ -120,7 +120,7 @@ public class AlterQueryServiceFunctionTest {
     doReturn(false).when(function).isSecurityEnabled();
 
     CliFunctionResult result = function.executeFunction(mockContext);
-    verifyZeroInteractions(mockQueryConfigService);
+    verifyNoMoreInteractions(mockQueryConfigService);
     assertThat(result.getStatus()).isEqualTo(CliFunctionResult.StatusState.ERROR.toString());
     assertThat(result.getStatusMessage()).isEqualTo(SECURITY_NOT_ENABLED_MESSAGE);
   }
@@ -130,7 +130,7 @@ public class AlterQueryServiceFunctionTest {
     setAllowUntrustedMethodInvocationSystemProperty();
 
     CliFunctionResult result = function.executeFunction(mockContext);
-    verifyZeroInteractions(mockQueryConfigService);
+    verifyNoMoreInteractions(mockQueryConfigService);
     assertThat(result.getStatus()).isEqualTo(CliFunctionResult.StatusState.ERROR.toString());
     assertThat(result.getStatusMessage()).isEqualTo(DEPRECATED_PROPERTY_ERROR);
   }
diff --git a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunctionTest.java b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunctionTest.java
index 3ee0c6e..829fab9 100644
--- a/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunctionTest.java
+++ b/geode-gfsh/src/test/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunctionTest.java
@@ -24,7 +24,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
 import java.util.Arrays;
@@ -123,7 +123,7 @@ public class RegionAlterFunctionTest {
   public void updateWithEmptyRegionAttributes() {
     // the regionAttributes starts with no values inside
     function.alterRegion(cache, config);
-    verifyZeroInteractions(mutator);
+    verifyNoMoreInteractions(mutator);
   }
 
   @Test