You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ni...@apache.org on 2022/06/03 15:26:32 UTC

[pulsar] 01/03: [fix][ci] Fix tests memory leak due to mockito-inline (#15513)

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

nicoloboschi pushed a commit to branch branch-2.10
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit 5d59e70f6fb7e99066d18179b5c8eec6295b6a68
Author: Nicolò Boschi <bo...@gmail.com>
AuthorDate: Fri Jun 3 10:25:13 2022 +0200

    [fix][ci] Fix tests memory leak due to mockito-inline (#15513)
    
    (cherry picked from commit 14b95ecc45f73543fac1385a57fac8b6feeb2f5e)
---
 buildtools/pom.xml                                    | 11 +++++++++++
 .../apache/pulsar/tests/MockitoCleanupListener.java   | 19 ++++++++++++++++---
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/buildtools/pom.xml b/buildtools/pom.xml
index 0bc588e8444..1b7a193ff20 100644
--- a/buildtools/pom.xml
+++ b/buildtools/pom.xml
@@ -51,6 +51,7 @@
     <ant.version>1.10.12</ant.version>
     <snakeyaml.version>1.30</snakeyaml.version>
     <test.additional.args></test.additional.args>
+    <mockito.version>3.12.4</mockito.version>
   </properties>
 
   <dependencyManagement>
@@ -137,6 +138,16 @@
       <version>4.1.77.Final</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <version>${mockito.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-inline</artifactId>
+      <version>${mockito.version}</version>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/buildtools/src/main/java/org/apache/pulsar/tests/MockitoCleanupListener.java b/buildtools/src/main/java/org/apache/pulsar/tests/MockitoCleanupListener.java
index 354a55c10e3..73fff1bb7e2 100644
--- a/buildtools/src/main/java/org/apache/pulsar/tests/MockitoCleanupListener.java
+++ b/buildtools/src/main/java/org/apache/pulsar/tests/MockitoCleanupListener.java
@@ -18,6 +18,7 @@
  */
 package org.apache.pulsar.tests;
 
+import org.mockito.Mockito;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -36,10 +37,22 @@ public class MockitoCleanupListener extends BetweenTestClassesListenerAdapter {
 
     @Override
     protected void onBetweenTestClasses(Class<?> endedTestClass, Class<?> startedTestClass) {
-        if (MOCKITO_CLEANUP_ENABLED && MockitoThreadLocalStateCleaner.INSTANCE.isEnabled()) {
-            LOG.info("Cleaning up Mockito's ThreadSafeMockingProgress.MOCKING_PROGRESS_PROVIDER thread local state.");
-            MockitoThreadLocalStateCleaner.INSTANCE.cleanup();
+        if (MOCKITO_CLEANUP_ENABLED) {
+            if (MockitoThreadLocalStateCleaner.INSTANCE.isEnabled()) {
+                LOG.info("Cleaning up Mockito's ThreadSafeMockingProgress.MOCKING_PROGRESS_PROVIDER thread local state.");
+                MockitoThreadLocalStateCleaner.INSTANCE.cleanup();
+            }
+            cleanupMockitoInline();
         }
     }
 
+    /**
+     * Mockito-inline can leak mocked objects, we need to clean up the inline mocks after every test.
+     * See <a href="https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#47"}>
+     *     mockito docs</a>.
+     */
+    private void cleanupMockitoInline() {
+        Mockito.framework().clearInlineMocks();
+    }
+
 }