From 09d84ff7b0b075aee03eafc746eee47f95e4bf64 Mon Sep 17 00:00:00 2001 From: Nelson Osacky Date: Thu, 1 Oct 2026 15:55:52 +0200 Subject: [PATCH] test(android): Stop memory limiter tests waiting on flush timeouts MemoryLimiterIntegrationTest and ApplicationExitInfoCrossIntegrationTest kept the default 15s flush and session flush timeouts. Nothing in these tests releases those latches, so every integration registration and every captured event blocked for the full timeout. The two classes took about 8 minutes combined and now take under 2 seconds. Also drop the manual cache dir cleanup in these two tests and in AnrV2IntegrationTest. The TemporaryFolder rule already deletes it after each test. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../java/io/sentry/android/core/AnrV2IntegrationTest.kt | 6 ------ .../core/ApplicationExitInfoCrossIntegrationTest.kt | 9 +++------ .../sentry/android/core/MemoryLimiterIntegrationTest.kt | 9 +++------ 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/AnrV2IntegrationTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/AnrV2IntegrationTest.kt index 89fc9e65cb0..cd21f92fd28 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/AnrV2IntegrationTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/AnrV2IntegrationTest.kt @@ -12,7 +12,6 @@ import java.io.File import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertNotNull -import org.junit.After import org.junit.runner.RunWith import org.mockito.kotlin.any import org.mockito.kotlin.anyOrNull @@ -163,11 +162,6 @@ class AnrV2IntegrationTest : ApplicationExitIntegrationTestBase() { assertEquals("/apex/com.android.runtime/lib64/bionic/libc.so", image.codeFile) } - @After - fun cleanup() { - fixture.options.cacheDirPath?.let { File(it).deleteRecursively() } - } - @Test fun `when latest ANR has foreground importance, sets abnormal mechanism to anr_foreground`() { val integration = diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/ApplicationExitInfoCrossIntegrationTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/ApplicationExitInfoCrossIntegrationTest.kt index f362fed252d..8aceb6784e8 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/ApplicationExitInfoCrossIntegrationTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/ApplicationExitInfoCrossIntegrationTest.kt @@ -14,7 +14,6 @@ import io.sentry.protocol.SentryId import io.sentry.test.ImmediateExecutorService import java.io.File import java.util.zip.GZIPInputStream -import kotlin.test.AfterTest import kotlin.test.BeforeTest import kotlin.test.Test import org.junit.Rule @@ -63,6 +62,9 @@ class ApplicationExitInfoCrossIntegrationTest { setLogger(logger) isDebug = true cacheDirPath = dir.absolutePath + // Nothing ever releases these latches here, so every wait would run to its timeout. + flushTimeoutMillis = 0L + sessionFlushTimeoutMillis = 0L executorService = ImmediateExecutorService() setEnvelopeDiskCache(EnvelopeCache.create(this)) addInAppInclude("io.sentry.samples") @@ -151,11 +153,6 @@ class ApplicationExitInfoCrossIntegrationTest { fixture.init(ApplicationProvider.getApplicationContext()) } - @AfterTest - fun `tear down`() { - tmpDir.root.deleteRecursively() - } - @Test fun `memory limiter and anr integrations each capture only their own exits from shared history`() { val memoryLimiterTimestamp = System.currentTimeMillis() - 1_000 diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/MemoryLimiterIntegrationTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/MemoryLimiterIntegrationTest.kt index 0b72fb6e894..ed3bc431d85 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/MemoryLimiterIntegrationTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/MemoryLimiterIntegrationTest.kt @@ -18,7 +18,6 @@ import io.sentry.test.ImmediateExecutorService import io.sentry.transport.CurrentDateProvider import io.sentry.util.HintUtils import java.io.File -import kotlin.test.AfterTest import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals @@ -78,6 +77,9 @@ class MemoryLimiterIntegrationTest { setLogger(this@Fixture.logger) isDebug = true cacheDirPath = dir?.newFolder()?.absolutePath + // Nothing ever releases these latches here, so every wait would run to its timeout. + flushTimeoutMillis = 0L + sessionFlushTimeoutMillis = 0L executorService = if (useImmediateExecutorService) ImmediateExecutorService() else mock() isMemoryLimiterEnabled = memoryLimiterEnabled isReportHistoricalMemoryLimiterExits = reportHistoricalMemoryLimiterExits @@ -134,11 +136,6 @@ class MemoryLimiterIntegrationTest { fixture.init(context) } - @AfterTest - fun `tear down`() { - fixture.options.cacheDirPath?.let { File(it).deleteRecursively() } - } - @Test fun `does not process MemoryLimiter exits when integration is disabled`() { val integration =