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 <[email protected]> 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(); + } + }
