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();
+ }
+
}