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 08:25:27 UTC
[pulsar] branch master updated: [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 master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 14b95ecc45f [fix][ci] Fix tests memory leak due to mockito-inline (#15513)
14b95ecc45f is described below
commit 14b95ecc45f73543fac1385a57fac8b6feeb2f5e
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)
---
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 1a3ecb42c9c..d44f5e58a16 100644
--- a/buildtools/pom.xml
+++ b/buildtools/pom.xml
@@ -50,6 +50,7 @@
<guava.version>31.0.1-jre</guava.version>
<ant.version>1.10.12</ant.version>
<snakeyaml.version>1.30</snakeyaml.version>
+ <mockito.version>3.12.4</mockito.version>
<!-- required for running tests on JDK11+ -->
<test.additional.args>
--add-opens java.base/jdk.internal.loader=ALL-UNNAMED
@@ -141,6 +142,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();
+ }
+
}