From 5712c5ef03c42ec7e35624947e4162f64426299b Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 22 Jun 2026 10:56:21 +0200 Subject: [PATCH 1/6] fix(spring): Support Spring Boot 4.1 Bump OpenTelemetry and Spring Boot dependencies to compatible versions so the Spring Boot 4 OpenTelemetry sample works with Spring Boot 4.1. Keep the Spring 7 sample on the repository Kotlin compiler version when importing the Spring Boot BOM, and add Spring Boot 4.1 to the system test matrix. Fixes GH-5561 Co-Authored-By: Claude --- .github/workflows/spring-boot-4-matrix.yml | 2 +- gradle/libs.versions.toml | 14 +++++++------- .../sentry-samples-spring-7/build.gradle.kts | 2 ++ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/spring-boot-4-matrix.yml b/.github/workflows/spring-boot-4-matrix.yml index 128051ed03e..e408cad451c 100644 --- a/.github/workflows/spring-boot-4-matrix.yml +++ b/.github/workflows/spring-boot-4-matrix.yml @@ -21,7 +21,7 @@ jobs: strategy: fail-fast: false matrix: - springboot-version: [ '4.0.0', '4.0.5' ] + springboot-version: [ '4.0.0', '4.0.5', '4.1.0' ] name: Spring Boot ${{ matrix.springboot-version }} env: diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 91a7669194f..2848c7f0bf5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -25,12 +25,12 @@ nopen = "1.0.1" # see https://developer.android.com/jetpack/androidx/releases/compose-kotlin okhttp = "4.9.2" openfeature = "1.18.2" -otel = "1.60.1" -otelInstrumentation = "2.26.0" -otelInstrumentationAlpha = "2.26.0-alpha" +otel = "1.63.0" +otelInstrumentation = "2.29.0" +otelInstrumentationAlpha = "2.29.0-alpha" # check https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/dependencyManagement/build.gradle.kts#L49 for release version above to find a compatible version -otelSemanticConventions = "1.40.0" -otelSemanticConventionsAlpha = "1.40.0-alpha" +otelSemanticConventions = "1.42.0" +otelSemanticConventionsAlpha = "1.42.0-alpha" retrofit = "2.9.0" room2 = "2.8.4" room3 = "3.0.0-alpha06" @@ -38,10 +38,10 @@ sagp = "6.10.0" sqlite = "2.6.2" sqliteAlpha = "2.7.0-alpha06" # Required by Room3 3.0.0-alpha* slf4j = "1.7.30" -spotless = "8.4.0" +spotless = "8.6.0" springboot2 = "2.7.18" springboot3 = "3.5.0" -springboot4 = "4.0.0" +springboot4 = "4.1.0" sqldelight = "2.3.2" # Android diff --git a/sentry-samples/sentry-samples-spring-7/build.gradle.kts b/sentry-samples/sentry-samples-spring-7/build.gradle.kts index e3300cd2841..e70853e7968 100644 --- a/sentry-samples/sentry-samples-spring-7/build.gradle.kts +++ b/sentry-samples/sentry-samples-spring-7/build.gradle.kts @@ -27,6 +27,8 @@ java.targetCompatibility = JavaVersion.VERSION_17 repositories { mavenCentral() } +extra["kotlin.version"] = KotlinCompilerVersion.VERSION + dependencyManagement { imports { mavenBom(SpringBootPlugin.BOM_COORDINATES) } } dependencies { From 3d118627823680be1dba1d1edc5caaa77c117e01 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 22 Jun 2026 11:00:42 +0200 Subject: [PATCH 2/6] changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8428f033b78..199f803cc14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ - To use it, pass `SQLiteDriver` to `SentrySQLiteDriver.create(...)` - Requires `androidx.sqlite:sqlite` (2.5.0+) on runtime classpath (typically provided by Room or SQLDelight) +### Dependencies + +- Bump Spring Boot 4 and OpenTelemetry dependencies ([#5573](https://github.com/getsentry/sentry-java/pull/5573)) + ## 8.44.0 ### Features From c1d9f8905fdda990c572236f732f89868c0b67f3 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 22 Jun 2026 12:52:08 +0200 Subject: [PATCH 3/6] build: Bump Kotlin to 2.3.21 Align the global Kotlin version with Spring Boot 4.1 and remove the now-unneeded Spring 7 BOM override. Also remove unused Spring 7-specific Kotlin aliases from the version catalog. Co-Authored-By: Claude --- gradle/libs.versions.toml | 6 +----- sentry-samples/sentry-samples-spring-7/build.gradle.kts | 2 -- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2848c7f0bf5..bd984cbd5bf 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,8 +13,7 @@ feign = "11.6" gummyBears = "0.12.0" jackson = "2.18.3" jetbrainsCompose = "1.6.11" -kotlin = "2.2.0" -kotlinSpring7 = "2.2.0" +kotlin = "2.3.21" kotlin-compatible-version = "1.9" ksp = "2.3.9" ktorClient = "3.0.0" @@ -52,8 +51,6 @@ minSdk = "21" [plugins] kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-spring = { id = "org.jetbrains.kotlin.plugin.spring", version.ref = "kotlin" } -kotlin-spring7 = { id = "org.jetbrains.kotlin.plugin.spring", version.ref = "kotlinSpring7" } -kotlin-jvm-spring7 = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlinSpring7" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } @@ -130,7 +127,6 @@ jackson-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin" jetbrains-annotations = { module = "org.jetbrains:annotations", version = "23.0.0" } kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "kotlin" } kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" } -kotlin-test-junit-spring7 = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlinSpring7" } kotlinx-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" } ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktorClient" } diff --git a/sentry-samples/sentry-samples-spring-7/build.gradle.kts b/sentry-samples/sentry-samples-spring-7/build.gradle.kts index e70853e7968..e3300cd2841 100644 --- a/sentry-samples/sentry-samples-spring-7/build.gradle.kts +++ b/sentry-samples/sentry-samples-spring-7/build.gradle.kts @@ -27,8 +27,6 @@ java.targetCompatibility = JavaVersion.VERSION_17 repositories { mavenCentral() } -extra["kotlin.version"] = KotlinCompilerVersion.VERSION - dependencyManagement { imports { mavenBom(SpringBootPlugin.BOM_COORDINATES) } } dependencies { From 591a612505badf46c13f58c30ba69adc085e94d1 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 6 Jul 2026 06:29:56 +0200 Subject: [PATCH 4/6] build: Bump Spotless to 8.7.0 Update the Spotless Gradle plugin and apply the resulting formatting changes. Co-Authored-By: Claude --- gradle/libs.versions.toml | 2 +- .../core/ActivityLifecycleIntegrationTest.kt | 176 ++++++------ .../core/AndroidContinuousProfilerTest.kt | 11 +- .../core/AndroidLoggerBatchProcessorTest.kt | 11 +- .../core/AndroidMetricsBatchProcessorTest.kt | 11 +- .../ApplicationExitIntegrationTestBase.kt | 6 +- .../sentry/android/core/SentryAndroidTest.kt | 8 +- .../android/core/SentryLogcatAdapterTest.kt | 9 +- .../core/SentryPerformanceProviderTest.kt | 5 +- .../threaddump/ThreadDumpParserTest.kt | 10 +- .../core/internal/util/CpuInfoUtilsTest.kt | 15 +- .../io/sentry/uitest/android/ReplayTest.kt | 9 +- .../uitest/android/UserInteractionTests.kt | 9 +- .../java/io/sentry/android/replay/Windows.kt | 13 +- .../replay/gestures/ReplayGestureConverter.kt | 9 +- .../replay/AnrWithReplayIntegrationTest.kt | 9 +- .../DefaultReplayBreadcrumbConverterTest.kt | 5 +- .../android/replay/ReplayIntegrationTest.kt | 4 +- .../android/replay/ScreenshotRecorderTest.kt | 14 +- .../sentry/android/timber/SentryTimberTree.kt | 5 +- ...yncProfilerToSentryProfileConverterTest.kt | 29 +- .../io/sentry/logback/SentryAppenderTest.kt | 4 +- .../sentry/openfeign/SentryFeignClientTest.kt | 22 +- .../io/sentry/CheckInSerializationTest.kt | 15 +- ...efaultCompositePerformanceCollectorTest.kt | 9 +- .../JsonReflectionObjectSerializerTest.kt | 3 +- .../io/sentry/JsonUnknownSerializationTest.kt | 5 +- sentry/src/test/java/io/sentry/ScopeTest.kt | 18 +- sentry/src/test/java/io/sentry/ScopesTest.kt | 10 +- .../test/java/io/sentry/SentryClientTest.kt | 257 +++++++++--------- sentry/src/test/java/io/sentry/SentryTest.kt | 28 +- .../test/java/io/sentry/SentryWrapperTest.kt | 27 +- ...UncaughtExceptionHandlerIntegrationTest.kt | 17 +- .../ClientReportMultiThreadingTest.kt | 7 +- .../transport/QueuedThreadPoolExecutorTest.kt | 9 +- 35 files changed, 389 insertions(+), 412 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6afb167b2c4..666eacff767 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ sagp = "6.10.0" sqlite = "2.6.2" sqliteAlpha = "2.7.0-alpha06" # Required by Room3 3.0.0-alpha* slf4j = "1.7.30" -spotless = "8.6.0" +spotless = "8.7.0" springboot2 = "2.7.18" springboot3 = "3.5.0" springboot4 = "4.1.0" diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/ActivityLifecycleIntegrationTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/ActivityLifecycleIntegrationTest.kt index 8b842a0cfa9..1a79e46da8f 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/ActivityLifecycleIntegrationTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/ActivityLifecycleIntegrationTest.kt @@ -242,11 +242,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `Standalone app start transaction op is app start`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() @@ -257,8 +256,9 @@ class ActivityLifecycleIntegrationTest { verify(fixture.scopes, times(2)).startTransaction(any(), any()) val contexts = fixture.capturedContexts - val appStartContext = - contexts.single { it.operation == ActivityLifecycleIntegration.STANDALONE_APP_START_OP } + val appStartContext = contexts.single { + it.operation == ActivityLifecycleIntegration.STANDALONE_APP_START_OP + } assertEquals("App Start", appStartContext.name) assertEquals(TransactionNameSource.COMPONENT, appStartContext.transactionNameSource) val appStartTransaction = @@ -278,11 +278,10 @@ class ActivityLifecycleIntegrationTest { @Test @Config(sdk = [Build.VERSION_CODES.VANILLA_ICE_CREAM]) fun `Standalone app start transaction carries app start reason when available`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() @@ -304,11 +303,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `Standalone app start transaction has no app start reason when unavailable`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() @@ -326,11 +324,10 @@ class ActivityLifecycleIntegrationTest { @Test @Config(sdk = [Build.VERSION_CODES.VANILLA_ICE_CREAM]) fun `Headless standalone app start transaction carries app start reason when available`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) prepareHeadlessAppStart(appStartType = AppStartType.COLD) val startInfo = @@ -347,11 +344,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `HeadlessAppStartListener is registered when standalone flag is on and performance enabled`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) prepareHeadlessAppStart(appStartType = AppStartType.UNKNOWN) @@ -389,11 +385,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `close clears HeadlessAppStartListener`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) sut.close() prepareHeadlessAppStart() @@ -405,11 +400,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `onHeadlessAppStart creates standalone App Start transaction and stashes trace id`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) prepareHeadlessAppStart(appStartType = AppStartType.COLD) @@ -436,11 +430,10 @@ class ActivityLifecycleIntegrationTest { @Test @Config(sdk = [Build.VERSION_CODES.M]) fun `onHeadlessAppStart creates standalone App Start transaction on API 23`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) prepareHeadlessSdkInitAppStart() @@ -463,11 +456,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `onHeadlessAppStart creates standalone App Start transaction when appStartType is WARM`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) prepareHeadlessAppStart(appStartType = AppStartType.WARM) @@ -482,11 +474,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `onHeadlessAppStart does nothing when appStartTimeSpan is incomplete`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) AppStartMetrics.getInstance().appStartTimeSpan.reset() AppStartMetrics.getInstance().sdkInitTimeSpan.reset() @@ -801,11 +792,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `When Activity is destroyed, sets standalone appStartTransaction status to cancelled and finish it`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() @@ -1177,11 +1167,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `launcher activity emits ui load and standalone App Start sharing trace id`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) val firstFrameDate = SentryNanotimeDate(1499, 0) fixture.options.dateProvider = SentryDateProvider { firstFrameDate } @@ -1232,11 +1221,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `launcher activity attaches lifecycle spans before finishing stopped standalone App Start`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) val appStartEndDate = SentryNanotimeDate(499, 0) setAppStartTime(SentryNanotimeDate(1, 0), appStartEndDate) @@ -1265,11 +1253,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `activity following a headless start reuses trace id and does not emit second standalone`() { val storedTraceId = SentryId() - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } AppStartMetrics.getInstance().setAppStartTraceId(storedTraceId) // headless start always stores the trace header alongside the trace id; the ui.load txn // continues that trace via continueTrace, sharing the trace id. @@ -1291,11 +1278,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `activity within a minute of the headless start continues the same trace`() { val storedTraceId = SentryId() - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } AppStartMetrics.getInstance().setAppStartTraceId(storedTraceId) AppStartMetrics.getInstance().appStartSentryTraceHeader = SentryTraceHeader(storedTraceId, SpanId(), true).value @@ -1315,11 +1301,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `activity more than a minute after the headless start starts a fresh trace`() { val storedTraceId = SentryId() - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } AppStartMetrics.getInstance().setAppStartTraceId(storedTraceId) AppStartMetrics.getInstance().appStartSentryTraceHeader = SentryTraceHeader(storedTraceId, SpanId(), true).value @@ -1341,11 +1326,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `onHeadlessAppStart stores sentry-trace and baggage headers for continuation`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) prepareHeadlessAppStart(appStartType = AppStartType.COLD) @@ -1363,11 +1347,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `launcher activity shares standalone App Start trace and sampleRand as a sibling`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() // the app-start sampling decision carries the sampleRand the whole trace should share @@ -1396,11 +1379,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `activity following a headless start shares stored trace and sampleRand as a sibling and clears headers`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) // 1) a headless start emits the standalone app.start and stores its trace headers diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt index 162e56c36e3..8837030608e 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidContinuousProfilerTest.kt @@ -539,13 +539,12 @@ class AndroidContinuousProfilerTest { @Test fun `profiler does not start when offline`() { - val profiler = - fixture.getSut { - it.connectionStatusProvider = mock { provider -> - whenever(provider.connectionStatus) - .thenReturn(IConnectionStatusProvider.ConnectionStatus.DISCONNECTED) - } + val profiler = fixture.getSut { + it.connectionStatusProvider = mock { provider -> + whenever(provider.connectionStatus) + .thenReturn(IConnectionStatusProvider.ConnectionStatus.DISCONNECTED) } + } // If the device is offline, the profiler should never start profiler.startProfiler(ProfileLifecycle.MANUAL, fixture.mockTracesSampler) diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidLoggerBatchProcessorTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidLoggerBatchProcessorTest.kt index ab83671fa0e..369f7f6a148 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidLoggerBatchProcessorTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidLoggerBatchProcessorTest.kt @@ -68,12 +68,11 @@ class AndroidLoggerBatchProcessorTest { @Test fun `onBackground handles executor exception gracefully`() { - val sut = - fixture.getSut { options -> - val rejectingExecutor = mock() - whenever(rejectingExecutor.submit(any())).thenThrow(RuntimeException("Rejected")) - options.executorService = rejectingExecutor - } + val sut = fixture.getSut { options -> + val rejectingExecutor = mock() + whenever(rejectingExecutor.submit(any())).thenThrow(RuntimeException("Rejected")) + options.executorService = rejectingExecutor + } // Should not throw sut.onBackground() diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidMetricsBatchProcessorTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidMetricsBatchProcessorTest.kt index fceb9ed3f4d..7d85502d149 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/AndroidMetricsBatchProcessorTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/AndroidMetricsBatchProcessorTest.kt @@ -67,12 +67,11 @@ class AndroidMetricsBatchProcessorTest { @Test fun `onBackground handles executor exception gracefully`() { - val sut = - fixture.getSut { options -> - val rejectingExecutor = mock() - whenever(rejectingExecutor.submit(any())).thenThrow(RuntimeException("Rejected")) - options.executorService = rejectingExecutor - } + val sut = fixture.getSut { options -> + val rejectingExecutor = mock() + whenever(rejectingExecutor.submit(any())).thenThrow(RuntimeException("Rejected")) + options.executorService = rejectingExecutor + } // Should not throw sut.onBackground() diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/ApplicationExitIntegrationTestBase.kt b/sentry-android-core/src/test/java/io/sentry/android/core/ApplicationExitIntegrationTestBase.kt index 649e14e413b..edb2ce1df24 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/ApplicationExitIntegrationTestBase.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/ApplicationExitIntegrationTestBase.kt @@ -369,7 +369,11 @@ abstract class ApplicationExitIntegrationTestBase { val hintAccessors: HintAccessors, val addExitInfo: ApplicationExitTestFixture.( - reason: Int?, timestamp: Long?, importance: Int?, addTrace: Boolean, addBadTrace: Boolean, + reason: Int?, + timestamp: Long?, + importance: Int?, + addTrace: Boolean, + addBadTrace: Boolean, ) -> Unit, val flushLogPrefix: String, ) diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt index 8524a1cc807..2bd26051c07 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt @@ -440,7 +440,9 @@ class SentryAndroidTest { // clean state for a new process. assertEquals( emptyList(), - options.findPersistingScopeObserver()?.read(options, BREADCRUMBS_FILENAME, List::class.java), + options + .findPersistingScopeObserver() + ?.read(options, BREADCRUMBS_FILENAME, List::class.java), ) assertEquals( SentryId.EMPTY_ID.toString(), @@ -463,7 +465,9 @@ class SentryAndroidTest { // assert that persisted values have changed assertEquals( "TestActivity", - options.findPersistingScopeObserver()?.read(options, TRANSACTION_FILENAME, String::class.java), + options + .findPersistingScopeObserver() + ?.read(options, TRANSACTION_FILENAME, String::class.java), ) assertEquals( "io.sentry.sample@1.1.0+220", diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/SentryLogcatAdapterTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/SentryLogcatAdapterTest.kt index 1a84a1282da..0c0c03d71d2 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/SentryLogcatAdapterTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/SentryLogcatAdapterTest.kt @@ -31,11 +31,10 @@ class SentryLogcatAdapterTest { Bundle().apply { putString(ManifestMetadataReader.DSN, "https://key@sentry.io/123") } val mockContext = ContextUtilsTestHelper.mockMetaData(metaData = metadata) initForTest(mockContext) { - it.beforeBreadcrumb = - SentryOptions.BeforeBreadcrumbCallback { breadcrumb, _ -> - breadcrumbs.add(breadcrumb) - breadcrumb - } + it.beforeBreadcrumb = SentryOptions.BeforeBreadcrumbCallback { breadcrumb, _ -> + breadcrumbs.add(breadcrumb) + breadcrumb + } it.logs.isEnabled = true it.logs.beforeSend = SentryOptions.Logs.BeforeSendLogCallback { logEvent -> diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/SentryPerformanceProviderTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/SentryPerformanceProviderTest.kt index 58dc56d1493..254571181a6 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/SentryPerformanceProviderTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/SentryPerformanceProviderTest.kt @@ -257,8 +257,9 @@ class SentryPerformanceProviderTest { @Test fun `when provider is closed, profiler is stopped`() { - val provider = - fixture.getSut { config -> writeConfig(config, continuousProfilingEnabled = false) } + val provider = fixture.getSut { config -> + writeConfig(config, continuousProfilingEnabled = false) + } provider.shutdown() assertNotNull(AppStartMetrics.getInstance().appStartProfiler) assertFalse(AppStartMetrics.getInstance().appStartProfiler!!.isRunning) diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/internal/threaddump/ThreadDumpParserTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/internal/threaddump/ThreadDumpParserTest.kt index b7db35b63ce..4eb1d42eb10 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/internal/threaddump/ThreadDumpParserTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/internal/threaddump/ThreadDumpParserTest.kt @@ -52,8 +52,9 @@ class ThreadDumpParserTest { assertEquals(SentryLockReason.SLEEPING, blockingThread.heldLocks!!["0x09228c2d"]!!.type) assertEquals(null, blockingThread.heldLocks!!["0x09228c2d"]!!.threadId) - val randomThread = - threads.find { it.name == "io.sentry.android.core.internal.util.SentryFrameMetricsCollector" } + val randomThread = threads.find { + it.name == "io.sentry.android.core.internal.util.SentryFrameMetricsCollector" + } assertEquals(19, randomThread!!.id) assertEquals("Native", randomThread.state) assertEquals(false, randomThread.isCrashed) @@ -152,8 +153,9 @@ class ThreadDumpParserTest { assertNull(deletedFrame.addrMode) val debugImages = parser.debugImages - val image = - debugImages.first { image -> image.debugId == "499d48ba-c085-17cf-3209-da67405662f9" } + val image = debugImages.first { image -> + image.debugId == "499d48ba-c085-17cf-3209-da67405662f9" + } assertNotNull(image) assertEquals("499d48ba-c085-17cf-3209-da67405662f9", image.debugId) assertEquals("/apex/com.android.runtime/lib64/bionic/libc.so", image.codeFile) diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/CpuInfoUtilsTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/CpuInfoUtilsTest.kt index a6611e17e9a..c3993b94efd 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/CpuInfoUtilsTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/internal/util/CpuInfoUtilsTest.kt @@ -14,14 +14,13 @@ class CpuInfoUtilsTest { private lateinit var cpuDirs: File private lateinit var ciu: CpuInfoUtils - private fun populateCpuFiles(values: List) = - values.mapIndexed { i, v -> - val cpuMaxFreqFile = - File(cpuDirs, "cpu$i${File.separator}${CpuInfoUtils.CPUINFO_MAX_FREQ_PATH}") - cpuMaxFreqFile.parentFile?.mkdirs() - cpuMaxFreqFile.writeText(v) - cpuMaxFreqFile - } + private fun populateCpuFiles(values: List) = values.mapIndexed { i, v -> + val cpuMaxFreqFile = + File(cpuDirs, "cpu$i${File.separator}${CpuInfoUtils.CPUINFO_MAX_FREQ_PATH}") + cpuMaxFreqFile.parentFile?.mkdirs() + cpuMaxFreqFile.writeText(v) + cpuMaxFreqFile + } @BeforeTest fun `set up`() { diff --git a/sentry-android-integration-tests/sentry-uitest-android/src/androidTest/java/io/sentry/uitest/android/ReplayTest.kt b/sentry-android-integration-tests/sentry-uitest-android/src/androidTest/java/io/sentry/uitest/android/ReplayTest.kt index 3827561e37c..9c53f0a022d 100644 --- a/sentry-android-integration-tests/sentry-uitest-android/src/androidTest/java/io/sentry/uitest/android/ReplayTest.kt +++ b/sentry-android-integration-tests/sentry-uitest-android/src/androidTest/java/io/sentry/uitest/android/ReplayTest.kt @@ -70,11 +70,10 @@ class ReplayTest : BaseUiTest() { initSentry { it.sessionReplay.sessionSampleRate = 1.0 - it.beforeSendReplay = - SentryOptions.BeforeSendReplayCallback { event, _ -> - sent.set(true) - event - } + it.beforeSendReplay = SentryOptions.BeforeSendReplayCallback { event, _ -> + sent.set(true) + event + } } // wait until first segment is being sent diff --git a/sentry-android-integration-tests/sentry-uitest-android/src/androidTest/java/io/sentry/uitest/android/UserInteractionTests.kt b/sentry-android-integration-tests/sentry-uitest-android/src/androidTest/java/io/sentry/uitest/android/UserInteractionTests.kt index b76017aeb0b..2ea1905b761 100644 --- a/sentry-android-integration-tests/sentry-uitest-android/src/androidTest/java/io/sentry/uitest/android/UserInteractionTests.kt +++ b/sentry-android-integration-tests/sentry-uitest-android/src/androidTest/java/io/sentry/uitest/android/UserInteractionTests.kt @@ -89,11 +89,10 @@ class UserInteractionTests : BaseUiTest() { options.profilesSampleRate = 1.0 options.isEnableUserInteractionTracing = true options.isEnableUserInteractionBreadcrumbs = true - options.beforeBreadcrumb = - SentryOptions.BeforeBreadcrumbCallback { breadcrumb, _ -> - breadcrumbs.add(breadcrumb) - breadcrumb - } + options.beforeBreadcrumb = SentryOptions.BeforeBreadcrumbCallback { breadcrumb, _ -> + breadcrumbs.add(breadcrumb) + breadcrumb + } } } } diff --git a/sentry-android-replay/src/main/java/io/sentry/android/replay/Windows.kt b/sentry-android-replay/src/main/java/io/sentry/android/replay/Windows.kt index 9b9d8f0157b..e81c815dc11 100644 --- a/sentry-android-replay/src/main/java/io/sentry/android/replay/Windows.kt +++ b/sentry-android-replay/src/main/java/io/sentry/android/replay/Windows.kt @@ -83,14 +83,13 @@ internal object WindowSpy { } } - fun pullWindow(maybeDecorView: View): Window? = - decorViewClass?.let { decorViewClass -> - if (decorViewClass.isInstance(maybeDecorView)) { - windowField?.let { windowField -> windowField[maybeDecorView] as Window } - } else { - null - } + fun pullWindow(maybeDecorView: View): Window? = decorViewClass?.let { decorViewClass -> + if (decorViewClass.isInstance(maybeDecorView)) { + windowField?.let { windowField -> windowField[maybeDecorView] as Window } + } else { + null } + } } /** diff --git a/sentry-android-replay/src/main/java/io/sentry/android/replay/gestures/ReplayGestureConverter.kt b/sentry-android-replay/src/main/java/io/sentry/android/replay/gestures/ReplayGestureConverter.kt index 70d0988d3b0..cbedfc24cc2 100644 --- a/sentry-android-replay/src/main/java/io/sentry/android/replay/gestures/ReplayGestureConverter.kt +++ b/sentry-android-replay/src/main/java/io/sentry/android/replay/gestures/ReplayGestureConverter.kt @@ -65,11 +65,10 @@ internal class ReplayGestureConverter(private val dateProvider: ICurrentDateProv moveEvents += RRWebInteractionMoveEvent().apply { this.timestamp = now - this.positions = - positions.map { pos -> - pos.timeOffset -= totalOffset - pos - } + this.positions = positions.map { pos -> + pos.timeOffset -= totalOffset + pos + } this.pointerId = pointerId } currentPositions[pointerId]!!.clear() diff --git a/sentry-android-replay/src/test/java/io/sentry/android/replay/AnrWithReplayIntegrationTest.kt b/sentry-android-replay/src/test/java/io/sentry/android/replay/AnrWithReplayIntegrationTest.kt index 1214c55c057..3df08b2af24 100644 --- a/sentry-android-replay/src/test/java/io/sentry/android/replay/AnrWithReplayIntegrationTest.kt +++ b/sentry-android-replay/src/test/java/io/sentry/android/replay/AnrWithReplayIntegrationTest.kt @@ -155,11 +155,10 @@ class AnrWithReplayIntegrationTest { it.sessionReplay.onErrorSampleRate = 1.0 // beforeSend is called after event processors are applied, so we can assert here // against the enriched ANR event - it.beforeSend = - SentryOptions.BeforeSendCallback { event, _ -> - assertEquals(replayId2.toString(), event.contexts[Contexts.REPLAY_ID]) - event - } + it.beforeSend = SentryOptions.BeforeSendCallback { event, _ -> + assertEquals(replayId2.toString(), event.contexts[Contexts.REPLAY_ID]) + event + } it.addEventProcessor( object : EventProcessor { override fun process(event: SentryReplayEvent, hint: Hint): SentryReplayEvent { diff --git a/sentry-android-replay/src/test/java/io/sentry/android/replay/DefaultReplayBreadcrumbConverterTest.kt b/sentry-android-replay/src/test/java/io/sentry/android/replay/DefaultReplayBreadcrumbConverterTest.kt index 3da118190f0..749d3496698 100644 --- a/sentry-android-replay/src/test/java/io/sentry/android/replay/DefaultReplayBreadcrumbConverterTest.kt +++ b/sentry-android-replay/src/test/java/io/sentry/android/replay/DefaultReplayBreadcrumbConverterTest.kt @@ -368,8 +368,9 @@ class DefaultReplayBreadcrumbConverterTest { } // Set up options with a user callback that returns modified breadcrumb - val userBeforeBreadcrumbCallback = - SentryOptions.BeforeBreadcrumbCallback { _, _ -> userModifiedBreadcrumb } + val userBeforeBreadcrumbCallback = SentryOptions.BeforeBreadcrumbCallback { _, _ -> + userModifiedBreadcrumb + } val options = SentryOptions.empty() options.beforeBreadcrumb = userBeforeBreadcrumbCallback diff --git a/sentry-android-replay/src/test/java/io/sentry/android/replay/ReplayIntegrationTest.kt b/sentry-android-replay/src/test/java/io/sentry/android/replay/ReplayIntegrationTest.kt index 3df0c9f005f..4e77d03c971 100644 --- a/sentry-android-replay/src/test/java/io/sentry/android/replay/ReplayIntegrationTest.kt +++ b/sentry-android-replay/src/test/java/io/sentry/android/replay/ReplayIntegrationTest.kt @@ -1037,7 +1037,9 @@ class ReplayIntegrationTest { replay.start() fixture.options.sessionReplay.frameObserver = - SentryReplayOptions.ReplayFrameObserver { _, _, _ -> throw RuntimeException("test") } + SentryReplayOptions.ReplayFrameObserver { _, _, _ -> + throw RuntimeException("test") + } val sourceBitmap = mock { diff --git a/sentry-android-replay/src/test/java/io/sentry/android/replay/ScreenshotRecorderTest.kt b/sentry-android-replay/src/test/java/io/sentry/android/replay/ScreenshotRecorderTest.kt index 0a5c73f8a5c..2818eeb3537 100644 --- a/sentry-android-replay/src/test/java/io/sentry/android/replay/ScreenshotRecorderTest.kt +++ b/sentry-android-replay/src/test/java/io/sentry/android/replay/ScreenshotRecorderTest.kt @@ -42,10 +42,9 @@ class ScreenshotRecorderTest { @Test fun `when config uses PIXEL_COPY strategy, ScreenshotRecorder creates PixelCopyStrategy`() { - val recorder = - fixture.getSut { options -> - options.sessionReplay.screenshotStrategy = ScreenshotStrategyType.PIXEL_COPY - } + val recorder = fixture.getSut { options -> + options.sessionReplay.screenshotStrategy = ScreenshotStrategyType.PIXEL_COPY + } val strategy = getStrategy(recorder) @@ -57,10 +56,9 @@ class ScreenshotRecorderTest { @Test fun `when config uses CANVAS strategy, ScreenshotRecorder creates CanvasStrategy`() { - val recorder = - fixture.getSut { options -> - options.sessionReplay.screenshotStrategy = ScreenshotStrategyType.CANVAS - } + val recorder = fixture.getSut { options -> + options.sessionReplay.screenshotStrategy = ScreenshotStrategyType.CANVAS + } val strategy = getStrategy(recorder) assertTrue( diff --git a/sentry-android-timber/src/main/java/io/sentry/android/timber/SentryTimberTree.kt b/sentry-android-timber/src/main/java/io/sentry/android/timber/SentryTimberTree.kt index 9c87c8a461d..61b1f99fb16 100644 --- a/sentry-android-timber/src/main/java/io/sentry/android/timber/SentryTimberTree.kt +++ b/sentry-android-timber/src/main/java/io/sentry/android/timber/SentryTimberTree.kt @@ -248,8 +248,9 @@ public class SentryTimberTree( ) { // checks the log level if (isLoggable(sentryLogLevel, minLogLevel)) { - val attributes = - tag?.let { SentryAttributes.of(SentryAttribute.stringAttribute("timber.tag", tag)) } + val attributes = tag?.let { + SentryAttributes.of(SentryAttribute.stringAttribute("timber.tag", tag)) + } val params = SentryLogParameters.create(attributes) params.origin = "auto.log.timber" diff --git a/sentry-async-profiler/src/test/java/io/sentry/asyncprofiler/convert/JfrAsyncProfilerToSentryProfileConverterTest.kt b/sentry-async-profiler/src/test/java/io/sentry/asyncprofiler/convert/JfrAsyncProfilerToSentryProfileConverterTest.kt index d565fd9d51d..26a10352176 100644 --- a/sentry-async-profiler/src/test/java/io/sentry/asyncprofiler/convert/JfrAsyncProfilerToSentryProfileConverterTest.kt +++ b/sentry-async-profiler/src/test/java/io/sentry/asyncprofiler/convert/JfrAsyncProfilerToSentryProfileConverterTest.kt @@ -218,13 +218,12 @@ class JfrAsyncProfilerToSentryProfileConverterTest { assertTrue(frames.isNotEmpty()) // Find frames with complete information - val completeFrames = - frames.filter { frame -> - frame.function != null && - frame.module != null && - frame.lineno != null && - frame.filename != null - } + val completeFrames = frames.filter { frame -> + frame.function != null && + frame.module != null && + frame.lineno != null && + frame.filename != null + } assertTrue(completeFrames.isNotEmpty(), "Should have frames with complete information") } @@ -238,15 +237,15 @@ class JfrAsyncProfilerToSentryProfileConverterTest { val frames = sentryProfile.frames // Verify system packages are marked as not in-app - val systemFrames = - frames.filter { frame -> - frame.module?.let { - it.startsWith("java.") || it.startsWith("sun.") || it.startsWith("jdk.") - } ?: false - } + val systemFrames = frames.filter { frame -> + frame.module?.let { + it.startsWith("java.") || it.startsWith("sun.") || it.startsWith("jdk.") + } ?: false + } - val inappSentryFrames = - frames.filter { frame -> frame.module?.startsWith("io.sentry.") ?: false } + val inappSentryFrames = frames.filter { frame -> + frame.module?.startsWith("io.sentry.") ?: false + } val emptyModuleFrames = frames.filter { it.module.isNullOrEmpty() } diff --git a/sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt b/sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt index e93d6ef2db1..877d2a23d75 100644 --- a/sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt +++ b/sentry-logback/src/test/kotlin/io/sentry/logback/SentryAppenderTest.kt @@ -121,7 +121,9 @@ class SentryAppenderTest { Fixture( startLater = true, options = - SentryOptions().also { it.setTag("only-present-if-logger-init-was-run", "another-value") }, + SentryOptions().also { + it.setTag("only-present-if-logger-init-was-run", "another-value") + }, ) initForTest { it.dsn = "http://key@localhost/proj" diff --git a/sentry-openfeign/src/test/kotlin/io/sentry/openfeign/SentryFeignClientTest.kt b/sentry-openfeign/src/test/kotlin/io/sentry/openfeign/SentryFeignClientTest.kt index 571a2339326..c25a81f9501 100644 --- a/sentry-openfeign/src/test/kotlin/io/sentry/openfeign/SentryFeignClientTest.kt +++ b/sentry-openfeign/src/test/kotlin/io/sentry/openfeign/SentryFeignClientTest.kt @@ -286,11 +286,10 @@ class SentryFeignClientTest { @Test fun `customizer modifies span`() { - val sut = - fixture.getSut { span, _, _ -> - span.description = "overwritten description" - span - } + val sut = fixture.getSut { span, _, _ -> + span.description = "overwritten description" + span + } sut.getOk() assertEquals(1, fixture.sentryTracer.children.size) val httpClientSpan = fixture.sentryTracer.children.first() @@ -299,13 +298,12 @@ class SentryFeignClientTest { @Test fun `customizer receives request and response`() { - val sut = - fixture.getSut { span, request, response -> - assertEquals(request.url(), request.url()) - assertEquals(request.httpMethod().name, request.httpMethod().name) - assertNotNull(response) { assertEquals(201, it.status()) } - span - } + val sut = fixture.getSut { span, request, response -> + assertEquals(request.url(), request.url()) + assertEquals(request.httpMethod().name, request.httpMethod().name) + assertNotNull(response) { assertEquals(201, it.status()) } + span + } sut.getOk() } diff --git a/sentry/src/test/java/io/sentry/CheckInSerializationTest.kt b/sentry/src/test/java/io/sentry/CheckInSerializationTest.kt index 51d37764f4d..69c65a64c62 100644 --- a/sentry/src/test/java/io/sentry/CheckInSerializationTest.kt +++ b/sentry/src/test/java/io/sentry/CheckInSerializationTest.kt @@ -42,14 +42,13 @@ class CheckInSerializationTest { } else { MonitorConfig(MonitorSchedule.interval(42, MonitorScheduleUnit.MINUTE)) } - monitorConfig = - monitorConfigTmp.apply { - checkinMargin = 8L - maxRuntime = 9L - timezone = ZoneId.of("Europe/Vienna").id - failureIssueThreshold = 10 - recoveryThreshold = 20 - } + monitorConfig = monitorConfigTmp.apply { + checkinMargin = 8L + maxRuntime = 9L + timezone = ZoneId.of("Europe/Vienna").id + failureIssueThreshold = 10 + recoveryThreshold = 20 + } } } diff --git a/sentry/src/test/java/io/sentry/DefaultCompositePerformanceCollectorTest.kt b/sentry/src/test/java/io/sentry/DefaultCompositePerformanceCollectorTest.kt index f8e3a8f9f98..bd1e584c2d7 100644 --- a/sentry/src/test/java/io/sentry/DefaultCompositePerformanceCollectorTest.kt +++ b/sentry/src/test/java/io/sentry/DefaultCompositePerformanceCollectorTest.kt @@ -191,11 +191,10 @@ class DefaultCompositePerformanceCollectorTest { SentryNanotimeDate(TimeUnit.SECONDS.toMillis(131), TimeUnit.SECONDS.toNanos(131)), ) whenever(mockDateProvider.now()).thenReturn(dates[0], dates[0], dates[0], dates[1]) - val collector = - fixture.getSut { - it.dateProvider = mockDateProvider - it.addPerformanceCollector(mockCollector) - } + val collector = fixture.getSut { + it.dateProvider = mockDateProvider + it.addPerformanceCollector(mockCollector) + } collector.start(fixture.transaction1) verify(fixture.mockTimer, never())!!.cancel() diff --git a/sentry/src/test/java/io/sentry/JsonReflectionObjectSerializerTest.kt b/sentry/src/test/java/io/sentry/JsonReflectionObjectSerializerTest.kt index 3ef48dad5ef..bd1de8fcbc7 100644 --- a/sentry/src/test/java/io/sentry/JsonReflectionObjectSerializerTest.kt +++ b/sentry/src/test/java/io/sentry/JsonReflectionObjectSerializerTest.kt @@ -102,7 +102,8 @@ class JsonReflectionObjectSerializerTest { "child" to mapOf( "title" to "First Child", - "child" to mapOf("title" to "Second Child", "child" to "fixture-toString"), + "child" to + mapOf("title" to "Second Child", "child" to "fixture-toString"), ), ) val actual = fixture.getSut().serialize(root, fixture.logger) diff --git a/sentry/src/test/java/io/sentry/JsonUnknownSerializationTest.kt b/sentry/src/test/java/io/sentry/JsonUnknownSerializationTest.kt index 438d20a9c44..37bf1efef98 100644 --- a/sentry/src/test/java/io/sentry/JsonUnknownSerializationTest.kt +++ b/sentry/src/test/java/io/sentry/JsonUnknownSerializationTest.kt @@ -145,8 +145,9 @@ class JsonUnknownSerializationTest( ) } - private fun givenJsonUnknown(jsonUnknown: T): T = - jsonUnknown.apply { unknown = mapOf("fixture-key" to "fixture-value") } + private fun givenJsonUnknown(jsonUnknown: T): T = jsonUnknown.apply { + unknown = mapOf("fixture-key" to "fixture-value") + } } @Test diff --git a/sentry/src/test/java/io/sentry/ScopeTest.kt b/sentry/src/test/java/io/sentry/ScopeTest.kt index 4b0047fdc18..86aaf6f8f24 100644 --- a/sentry/src/test/java/io/sentry/ScopeTest.kt +++ b/sentry/src/test/java/io/sentry/ScopeTest.kt @@ -359,11 +359,10 @@ class ScopeTest { val options = SentryOptions().apply { maxBreadcrumbs = 0 - beforeBreadcrumb = - SentryOptions.BeforeBreadcrumbCallback { breadcrumb, _ -> - called = true - breadcrumb - } + beforeBreadcrumb = SentryOptions.BeforeBreadcrumbCallback { breadcrumb, _ -> + called = true + breadcrumb + } } val scope = Scope(options) @@ -377,11 +376,10 @@ class ScopeTest { var called = false val options = SentryOptions().apply { - beforeBreadcrumb = - SentryOptions.BeforeBreadcrumbCallback { breadcrumb, _ -> - called = true - breadcrumb - } + beforeBreadcrumb = SentryOptions.BeforeBreadcrumbCallback { breadcrumb, _ -> + called = true + breadcrumb + } } val scope = Scope(options) diff --git a/sentry/src/test/java/io/sentry/ScopesTest.kt b/sentry/src/test/java/io/sentry/ScopesTest.kt index a4c2c76845e..4b9b3095d53 100644 --- a/sentry/src/test/java/io/sentry/ScopesTest.kt +++ b/sentry/src/test/java/io/sentry/ScopesTest.kt @@ -187,8 +187,9 @@ class ScopesTest { fun `when beforeBreadcrumb returns null, crumb is dropped`() { val options = SentryOptions() options.cacheDirPath = file.absolutePath - options.beforeBreadcrumb = - SentryOptions.BeforeBreadcrumbCallback { _: Breadcrumb, _: Any? -> null } + options.beforeBreadcrumb = SentryOptions.BeforeBreadcrumbCallback { _: Breadcrumb, _: Any? -> + null + } options.dsn = "https://key@sentry.io/proj" options.setSerializer(mock()) val sut = createScopes(options) @@ -240,8 +241,9 @@ class ScopesTest { val options = SentryOptions() options.cacheDirPath = file.absolutePath - options.beforeBreadcrumb = - SentryOptions.BeforeBreadcrumbCallback { _: Breadcrumb, _: Any? -> throw exception } + options.beforeBreadcrumb = SentryOptions.BeforeBreadcrumbCallback { _: Breadcrumb, _: Any? -> + throw exception + } options.dsn = "https://key@sentry.io/proj" options.setSerializer(mock()) val sut = createScopes(options) diff --git a/sentry/src/test/java/io/sentry/SentryClientTest.kt b/sentry/src/test/java/io/sentry/SentryClientTest.kt index ab6fd2075a3..ae91fb32ed1 100644 --- a/sentry/src/test/java/io/sentry/SentryClientTest.kt +++ b/sentry/src/test/java/io/sentry/SentryClientTest.kt @@ -388,7 +388,9 @@ class SentryClientTest { assertClientReport( fixture.sentryOptions.clientReportRecorder, - listOf(DiscardedEvent(DiscardReason.BEFORE_SEND.reason, DataCategory.TraceMetric.category, 1)), + listOf( + DiscardedEvent(DiscardReason.BEFORE_SEND.reason, DataCategory.TraceMetric.category, 1) + ), ) } @@ -408,7 +410,9 @@ class SentryClientTest { assertClientReport( fixture.sentryOptions.clientReportRecorder, - listOf(DiscardedEvent(DiscardReason.BEFORE_SEND.reason, DataCategory.TraceMetric.category, 1)), + listOf( + DiscardedEvent(DiscardReason.BEFORE_SEND.reason, DataCategory.TraceMetric.category, 1) + ), ) } @@ -2204,10 +2208,9 @@ class SentryClientTest { @Test fun `dropping a captured error from beforeSend has no effect on session and does not send anything`() { - val sut = - fixture.getSut { options -> - options.beforeSend = SentryOptions.BeforeSendCallback { _, _ -> null } - } + val sut = fixture.getSut { options -> + options.beforeSend = SentryOptions.BeforeSendCallback { _, _ -> null } + } val scope = givenScopeWithStartedSession() sut.captureEvent(SentryEvent().apply { exceptions = createHandledException() }, scope) @@ -2218,8 +2221,9 @@ class SentryClientTest { @Test fun `dropping a captured error from eventProcessor has no effect on session and does not send anything`() { - val sut = - fixture.getSut { options -> options.addEventProcessor(DropEverythingEventProcessor()) } + val sut = fixture.getSut { options -> + options.addEventProcessor(DropEverythingEventProcessor()) + } val scope = givenScopeWithStartedSession() sut.captureEvent(SentryEvent().apply { exceptions = createHandledException() }, scope) @@ -2307,13 +2311,12 @@ class SentryClientTest { fixture.sentryOptions.onDiscard = onDiscardMock - val sut = - fixture.getSut { options -> - options.sampleRate = 0.000000000001 - options.addIgnoredExceptionForType(NegativeArraySizeException::class.java) - options.beforeSend = beforeSendMock - options.addEventProcessor(globalEventProcessorMock) - } + val sut = fixture.getSut { options -> + options.sampleRate = 0.000000000001 + options.addIgnoredExceptionForType(NegativeArraySizeException::class.java) + options.beforeSend = beforeSendMock + options.addEventProcessor(globalEventProcessorMock) + } val scope = givenScopeWithStartedSession() scope.addEventProcessor(scopedEventProcessorMock) @@ -2350,13 +2353,12 @@ class SentryClientTest { it.arguments.first() as SentryEvent } - val sut = - fixture.getSut { options -> - options.sampleRate = 0.000000000001 - options.addIgnoredExceptionForType(NegativeArraySizeException::class.java) - options.beforeSend = beforeSendMock - options.addEventProcessor(globalEventProcessorMock) - } + val sut = fixture.getSut { options -> + options.sampleRate = 0.000000000001 + options.addIgnoredExceptionForType(NegativeArraySizeException::class.java) + options.beforeSend = beforeSendMock + options.addEventProcessor(globalEventProcessorMock) + } val scope = givenScopeWithStartedSession() scope.addEventProcessor(scopedEventProcessorMock) @@ -2393,13 +2395,12 @@ class SentryClientTest { } whenever(beforeSendMock.execute(any(), anyOrNull())).thenReturn(null) - val sut = - fixture.getSut { options -> - options.sampleRate = 0.000000000001 - options.addIgnoredExceptionForType(NegativeArraySizeException::class.java) - options.beforeSend = beforeSendMock - options.addEventProcessor(globalEventProcessorMock) - } + val sut = fixture.getSut { options -> + options.sampleRate = 0.000000000001 + options.addIgnoredExceptionForType(NegativeArraySizeException::class.java) + options.beforeSend = beforeSendMock + options.addEventProcessor(globalEventProcessorMock) + } val scope = givenScopeWithStartedSession() scope.addEventProcessor(scopedEventProcessorMock) @@ -2432,13 +2433,12 @@ class SentryClientTest { whenever(globalEventProcessorMock.process(any(), anyOrNull())).thenReturn(null) whenever(beforeSendMock.execute(any(), anyOrNull())).thenReturn(null) - val sut = - fixture.getSut { options -> - options.sampleRate = 0.000000000001 - options.addIgnoredExceptionForType(NegativeArraySizeException::class.java) - options.beforeSend = beforeSendMock - options.addEventProcessor(globalEventProcessorMock) - } + val sut = fixture.getSut { options -> + options.sampleRate = 0.000000000001 + options.addIgnoredExceptionForType(NegativeArraySizeException::class.java) + options.beforeSend = beforeSendMock + options.addEventProcessor(globalEventProcessorMock) + } val scope = givenScopeWithStartedSession() scope.addEventProcessor(scopedEventProcessorMock) @@ -2473,13 +2473,12 @@ class SentryClientTest { whenever(globalEventProcessorMock.process(any(), anyOrNull())).thenReturn(null) whenever(beforeSendMock.execute(any(), anyOrNull())).thenReturn(null) - val sut = - fixture.getSut { options -> - options.sampleRate = 0.000000000001 - options.addIgnoredExceptionForType(NegativeArraySizeException::class.java) - options.beforeSend = beforeSendMock - options.addEventProcessor(globalEventProcessorMock) - } + val sut = fixture.getSut { options -> + options.sampleRate = 0.000000000001 + options.addIgnoredExceptionForType(NegativeArraySizeException::class.java) + options.beforeSend = beforeSendMock + options.addEventProcessor(globalEventProcessorMock) + } val scope = givenScopeWithStartedSession() scope.addEventProcessor(scopedEventProcessorMock) @@ -2521,14 +2520,13 @@ class SentryClientTest { @Test fun `can add to attachments in beforeSend`() { - val sut = - fixture.getSut { options -> - options.setBeforeSend { event, hints -> - assertEquals(listOf(fixture.attachment, fixture.attachment2), hints.attachments) - hints.addAttachment(fixture.attachment3) - event - } + val sut = fixture.getSut { options -> + options.setBeforeSend { event, hints -> + assertEquals(listOf(fixture.attachment, fixture.attachment2), hints.attachments) + hints.addAttachment(fixture.attachment3) + event } + } val scope = givenScopeWithStartedSession() scope.addAttachment(fixture.attachment2) @@ -2539,13 +2537,12 @@ class SentryClientTest { @Test fun `can replace attachments in beforeSend`() { - val sut = - fixture.getSut { options -> - options.setBeforeSend { event, hints -> - hints.replaceAttachments(listOf(fixture.attachment3)) - event - } + val sut = fixture.getSut { options -> + options.setBeforeSend { event, hints -> + hints.replaceAttachments(listOf(fixture.attachment3)) + event } + } val scope = givenScopeWithStartedSession() scope.addAttachment(fixture.attachment2) @@ -2556,22 +2553,21 @@ class SentryClientTest { @Test fun `can add to attachments in eventProcessor`() { - val sut = - fixture.getSut { options -> - options.addEventProcessor( - object : EventProcessor { - override fun process(event: SentryEvent, hint: Hint): SentryEvent? { - assertEquals(listOf(fixture.attachment, fixture.attachment2), hint.attachments) - hint.addAttachment(fixture.attachment3) - return event - } + val sut = fixture.getSut { options -> + options.addEventProcessor( + object : EventProcessor { + override fun process(event: SentryEvent, hint: Hint): SentryEvent? { + assertEquals(listOf(fixture.attachment, fixture.attachment2), hint.attachments) + hint.addAttachment(fixture.attachment3) + return event + } - override fun process(transaction: SentryTransaction, hint: Hint): SentryTransaction? { - return transaction - } + override fun process(transaction: SentryTransaction, hint: Hint): SentryTransaction? { + return transaction } - ) - } + } + ) + } val scope = givenScopeWithStartedSession() scope.addAttachment(fixture.attachment2) @@ -2582,21 +2578,20 @@ class SentryClientTest { @Test fun `can replace attachments in eventProcessor`() { - val sut = - fixture.getSut { options -> - options.addEventProcessor( - object : EventProcessor { - override fun process(event: SentryEvent, hint: Hint): SentryEvent? { - hint.replaceAttachments(listOf(fixture.attachment3)) - return event - } + val sut = fixture.getSut { options -> + options.addEventProcessor( + object : EventProcessor { + override fun process(event: SentryEvent, hint: Hint): SentryEvent? { + hint.replaceAttachments(listOf(fixture.attachment3)) + return event + } - override fun process(transaction: SentryTransaction, hint: Hint): SentryTransaction? { - return transaction - } + override fun process(transaction: SentryTransaction, hint: Hint): SentryTransaction? { + return transaction } - ) - } + } + ) + } val scope = givenScopeWithStartedSession() scope.addAttachment(fixture.attachment2) @@ -2647,22 +2642,21 @@ class SentryClientTest { @Test fun `can add to attachments in eventProcessor for transactions`() { - val sut = - fixture.getSut { options -> - options.addEventProcessor( - object : EventProcessor { - override fun process(event: SentryEvent, hint: Hint): SentryEvent? { - return event - } + val sut = fixture.getSut { options -> + options.addEventProcessor( + object : EventProcessor { + override fun process(event: SentryEvent, hint: Hint): SentryEvent? { + return event + } - override fun process(transaction: SentryTransaction, hint: Hint): SentryTransaction? { - assertEquals(listOf(fixture.attachment, fixture.attachment2), hint.attachments) - hint.addAttachment(fixture.attachment3) - return transaction - } + override fun process(transaction: SentryTransaction, hint: Hint): SentryTransaction? { + assertEquals(listOf(fixture.attachment, fixture.attachment2), hint.attachments) + hint.addAttachment(fixture.attachment3) + return transaction } - ) - } + } + ) + } val scope = givenScopeWithStartedSession() scope.addAttachment(fixture.attachment2) @@ -2683,21 +2677,20 @@ class SentryClientTest { @Test fun `can replace attachments in eventProcessor for transactions`() { - val sut = - fixture.getSut { options -> - options.addEventProcessor( - object : EventProcessor { - override fun process(event: SentryEvent, hint: Hint): SentryEvent? { - return event - } + val sut = fixture.getSut { options -> + options.addEventProcessor( + object : EventProcessor { + override fun process(event: SentryEvent, hint: Hint): SentryEvent? { + return event + } - override fun process(transaction: SentryTransaction, hint: Hint): SentryTransaction? { - hint.replaceAttachments(listOf(fixture.attachment3)) - return transaction - } + override fun process(transaction: SentryTransaction, hint: Hint): SentryTransaction? { + hint.replaceAttachments(listOf(fixture.attachment3)) + return transaction } - ) - } + } + ) + } val scope = givenScopeWithStartedSession() scope.addAttachment(fixture.attachment2) @@ -2718,8 +2711,9 @@ class SentryClientTest { @Test fun `passing attachments via hint into breadcrumb ignores them`() { - val sut = - fixture.getSut { options -> options.setBeforeBreadcrumb { breadcrumb, hints -> breadcrumb } } + val sut = fixture.getSut { options -> + options.setBeforeBreadcrumb { breadcrumb, hints -> breadcrumb } + } val scope = givenScopeWithStartedSession() scope.addBreadcrumb( @@ -2734,13 +2728,12 @@ class SentryClientTest { @Test fun `adding attachments in beforeBreadcrumb ignores them`() { - val sut = - fixture.getSut { options -> - options.setBeforeBreadcrumb { breadcrumb, hints -> - hints.addAttachment(fixture.attachment) - breadcrumb - } + val sut = fixture.getSut { options -> + options.setBeforeBreadcrumb { breadcrumb, hints -> + hints.addAttachment(fixture.attachment) + breadcrumb } + } val scope = givenScopeWithStartedSession() scope.addBreadcrumb(Breadcrumb.info("hello from breadcrumb")) @@ -3023,11 +3016,11 @@ class SentryClientTest { @Test fun `beforeEnvelopeCallback is executed`() { var beforeEnvelopeCalled = false - val sut = - fixture.getSut { options -> - options.beforeEnvelopeCallback = - SentryOptions.BeforeEnvelopeCallback { _, _ -> beforeEnvelopeCalled = true } + val sut = fixture.getSut { options -> + options.beforeEnvelopeCallback = SentryOptions.BeforeEnvelopeCallback { _, _ -> + beforeEnvelopeCalled = true } + } sut.captureEvent(SentryEvent(), Hint()) @@ -3036,11 +3029,11 @@ class SentryClientTest { @Test fun `beforeEnvelopeCallback may fail, but the transport is still sends the envelope `() { - val sut = - fixture.getSut { options -> - options.beforeEnvelopeCallback = - SentryOptions.BeforeEnvelopeCallback { _, _ -> RuntimeException("hook failed") } + val sut = fixture.getSut { options -> + options.beforeEnvelopeCallback = SentryOptions.BeforeEnvelopeCallback { _, _ -> + RuntimeException("hook failed") } + } sut.captureEvent(SentryEvent(), Hint()) verify(fixture.transport).send(anyOrNull(), anyOrNull()) @@ -3273,7 +3266,9 @@ class SentryClientTest { } ) fixture.sentryOptions.sessionReplay.beforeErrorSampling = - SentryReplayOptions.BeforeErrorSamplingCallback { _, _ -> false } + SentryReplayOptions.BeforeErrorSamplingCallback { _, _ -> + false + } val sut = fixture.getSut() sut.captureEvent(SentryEvent().apply { exceptions = listOf(SentryException()) }) @@ -3291,7 +3286,9 @@ class SentryClientTest { } ) fixture.sentryOptions.sessionReplay.beforeErrorSampling = - SentryReplayOptions.BeforeErrorSamplingCallback { _, _ -> true } + SentryReplayOptions.BeforeErrorSamplingCallback { _, _ -> + true + } val sut = fixture.getSut() sut.captureEvent(SentryEvent().apply { exceptions = listOf(SentryException()) }) @@ -3325,7 +3322,9 @@ class SentryClientTest { } ) fixture.sentryOptions.sessionReplay.beforeErrorSampling = - SentryReplayOptions.BeforeErrorSamplingCallback { _, _ -> throw RuntimeException("test") } + SentryReplayOptions.BeforeErrorSamplingCallback { _, _ -> + throw RuntimeException("test") + } val sut = fixture.getSut() sut.captureEvent(SentryEvent().apply { exceptions = listOf(SentryException()) }) diff --git a/sentry/src/test/java/io/sentry/SentryTest.kt b/sentry/src/test/java/io/sentry/SentryTest.kt index 3712b083de7..ce8661b41fe 100644 --- a/sentry/src/test/java/io/sentry/SentryTest.kt +++ b/sentry/src/test/java/io/sentry/SentryTest.kt @@ -509,11 +509,10 @@ class SentryTest { initForTest { it.dsn = dsn it.isDebug = true - it.beforeSend = - SentryOptions.BeforeSendCallback { event, hint -> - capturedEvents.add(event) - event - } + it.beforeSend = SentryOptions.BeforeSendCallback { event, hint -> + capturedEvents.add(event) + event + } } } thread.start() @@ -533,8 +532,9 @@ class SentryTest { assertEquals(2, capturedEvents.size) val mainCloneEvent = capturedEvents.firstOrNull { it.message?.formatted == "messageMainClone" } - val currentScopesEvent = - capturedEvents.firstOrNull { it.message?.formatted == "messageCurrent" } + val currentScopesEvent = capturedEvents.firstOrNull { + it.message?.formatted == "messageCurrent" + } assertNotNull(mainCloneEvent) assertNotNull(mainCloneEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbMainClone" }) @@ -563,11 +563,10 @@ class SentryTest { { it.dsn = dsn it.isDebug = true - it.beforeSend = - SentryOptions.BeforeSendCallback { event, hint -> - capturedEvents.add(event) - event - } + it.beforeSend = SentryOptions.BeforeSendCallback { event, hint -> + capturedEvents.add(event) + event + } }, true, ) @@ -589,8 +588,9 @@ class SentryTest { assertEquals(2, capturedEvents.size) val mainCloneEvent = capturedEvents.firstOrNull { it.message?.formatted == "messageMainClone" } - val currentScopesEvent = - capturedEvents.firstOrNull { it.message?.formatted == "messageCurrent" } + val currentScopesEvent = capturedEvents.firstOrNull { + it.message?.formatted == "messageCurrent" + } assertNotNull(mainCloneEvent) assertNotNull(mainCloneEvent.breadcrumbs?.firstOrNull { it.message == "breadcrumbMainClone" }) diff --git a/sentry/src/test/java/io/sentry/SentryWrapperTest.kt b/sentry/src/test/java/io/sentry/SentryWrapperTest.kt index 31c06fab5ad..0ed46d8fa38 100644 --- a/sentry/src/test/java/io/sentry/SentryWrapperTest.kt +++ b/sentry/src/test/java/io/sentry/SentryWrapperTest.kt @@ -66,11 +66,10 @@ class SentryWrapperTest { initForTest { it.dsn = dsn - it.beforeSend = - SentryOptions.BeforeSendCallback { event, hint -> - capturedEvents.add(event) - event - } + it.beforeSend = SentryOptions.BeforeSendCallback { event, hint -> + capturedEvents.add(event) + event + } } Sentry.addBreadcrumb("MyOriginalBreadcrumbBefore") @@ -119,11 +118,10 @@ class SentryWrapperTest { initForTest { it.dsn = dsn - it.beforeSend = - SentryOptions.BeforeSendCallback { event, hint -> - capturedEvents.add(event) - event - } + it.beforeSend = SentryOptions.BeforeSendCallback { event, hint -> + capturedEvents.add(event) + event + } } Sentry.addBreadcrumb("MyOriginalBreadcrumbBefore") @@ -201,11 +199,10 @@ class SentryWrapperTest { initForTest { it.dsn = dsn - it.beforeSend = - SentryOptions.BeforeSendCallback { event, hint -> - capturedEvents.add(event) - event - } + it.beforeSend = SentryOptions.BeforeSendCallback { event, hint -> + capturedEvents.add(event) + event + } } Sentry.addBreadcrumb("MyOriginalBreadcrumbBefore") diff --git a/sentry/src/test/java/io/sentry/UncaughtExceptionHandlerIntegrationTest.kt b/sentry/src/test/java/io/sentry/UncaughtExceptionHandlerIntegrationTest.kt index 494b7f8a0bc..02da3b9a335 100644 --- a/sentry/src/test/java/io/sentry/UncaughtExceptionHandlerIntegrationTest.kt +++ b/sentry/src/test/java/io/sentry/UncaughtExceptionHandlerIntegrationTest.kt @@ -445,15 +445,14 @@ class UncaughtExceptionHandlerIntegrationTest { whenever(scopes4.globalScope).thenReturn(mock()) whenever(scopes5.globalScope).thenReturn(mock()) - val integrations = - scopesList.map { scope -> - CompletableFuture.supplyAsync( - { - UncaughtExceptionHandlerIntegration(handler).apply { register(scope, fixture.options) } - }, - executor, - ) - } + val integrations = scopesList.map { scope -> + CompletableFuture.supplyAsync( + { + UncaughtExceptionHandlerIntegration(handler).apply { register(scope, fixture.options) } + }, + executor, + ) + } CompletableFuture.allOf(*integrations.toTypedArray()).get() diff --git a/sentry/src/test/java/io/sentry/clientreport/ClientReportMultiThreadingTest.kt b/sentry/src/test/java/io/sentry/clientreport/ClientReportMultiThreadingTest.kt index fb62ee4a454..7f14c987438 100644 --- a/sentry/src/test/java/io/sentry/clientreport/ClientReportMultiThreadingTest.kt +++ b/sentry/src/test/java/io/sentry/clientreport/ClientReportMultiThreadingTest.kt @@ -118,10 +118,9 @@ class ClientReportMultiThreadingTest { println("took ${t2 - t1}ms") clientReportRecorder.resetCountsAndGenerateClientReport()?.let { clientReports.add(it) } - val numberOfLostItems = - clientReports.sumOf { clientReport -> - clientReport.discardedEvents.sumOf { it.quantity.toInt() } - } + val numberOfLostItems = clientReports.sumOf { clientReport -> + clientReport.discardedEvents.sumOf { it.quantity.toInt() } + } assertEquals(numberOfIncrementThreads * numberOfIncrementsPerThread, numberOfLostItems) } diff --git a/sentry/src/test/java/io/sentry/transport/QueuedThreadPoolExecutorTest.kt b/sentry/src/test/java/io/sentry/transport/QueuedThreadPoolExecutorTest.kt index e8e97e95c81..0c22a88aa87 100644 --- a/sentry/src/test/java/io/sentry/transport/QueuedThreadPoolExecutorTest.kt +++ b/sentry/src/test/java/io/sentry/transport/QueuedThreadPoolExecutorTest.kt @@ -145,11 +145,10 @@ class QueuedThreadPoolExecutorTest { val jobBlocker2 = CountDownLatch(1) val sync2 = CountDownLatch(1) - f = - sut.submit { - sync2.countDown() - jobBlocker2.await() - } + f = sut.submit { + sync2.countDown() + jobBlocker2.await() + } assertFalse( f.isCancelled, "A task should be successfully enqueued after making a place in the queue", From 4758edc9e2558fbc778d1f3881d970dd3420690e Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 6 Jul 2026 06:40:00 +0200 Subject: [PATCH 5/6] build: Bump Spotless to 8.8.0 Update the Spotless Gradle plugin to the latest available release. Co-Authored-By: Claude --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 666eacff767..6967220351b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,7 +37,7 @@ sagp = "6.10.0" sqlite = "2.6.2" sqliteAlpha = "2.7.0-alpha06" # Required by Room3 3.0.0-alpha* slf4j = "1.7.30" -spotless = "8.7.0" +spotless = "8.8.0" springboot2 = "2.7.18" springboot3 = "3.5.0" springboot4 = "4.1.0" From 31db71f6d2f53941cdc34e54d77d59c71194259b Mon Sep 17 00:00:00 2001 From: Sentry Github Bot Date: Fri, 10 Jul 2026 04:47:45 +0000 Subject: [PATCH 6/6] Format code --- .../core/ActivityLifecycleIntegrationTest.kt | 99 +++++++++---------- .../ComposeMaskingOptionsTest.kt | 7 +- .../test/java/io/sentry/SentryClientTest.kt | 12 ++- 3 files changed, 57 insertions(+), 61 deletions(-) diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/ActivityLifecycleIntegrationTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/ActivityLifecycleIntegrationTest.kt index 7dee50fdfeb..1d8fa06f3bb 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/ActivityLifecycleIntegrationTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/ActivityLifecycleIntegrationTest.kt @@ -323,11 +323,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `extendAppStart eagerly creates a standalone app start transaction with the extended span`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() @@ -348,11 +347,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `extended app start continues the trace into ui load without a second app start transaction`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() @@ -379,11 +377,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `extended app start trace is not reused by a later activity`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() @@ -409,11 +406,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `extended app start screen is not overwritten by a later activity`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() @@ -434,11 +430,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `extended standalone app start transaction stays open until finishExtendedAppStart`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() @@ -461,11 +456,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `extended headless app start transaction stays open until finishExtendedAppStart`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) prepareHeadlessAppStart(appStartType = AppStartType.COLD) @@ -487,11 +481,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `extended headless app start persists the app start end time`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) prepareHeadlessAppStart(appStartType = AppStartType.COLD) @@ -504,11 +497,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `finished eager extended app start persists the app start end time`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() @@ -523,11 +515,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `activity long after the eager extended app start finished starts a fresh trace`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) // the eager extension starts at launch and finishes before any activity exists @@ -555,11 +546,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `extended headless app start does not create a duplicate when the extension already finished`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) prepareHeadlessAppStart(appStartType = AppStartType.COLD) @@ -588,11 +578,10 @@ class ActivityLifecycleIntegrationTest { @Test fun `extended app start transaction is owned by the extension and survives activity destroy`() { - val sut = - fixture.getSut { - it.tracesSampleRate = 1.0 - it.isEnableStandaloneAppStartTracing = true - } + val sut = fixture.getSut { + it.tracesSampleRate = 1.0 + it.isEnableStandaloneAppStartTracing = true + } sut.register(fixture.scopes, fixture.options) setAppStartTime() diff --git a/sentry-android-replay/src/test/java/io/sentry/android/replay/viewhierarchy/ComposeMaskingOptionsTest.kt b/sentry-android-replay/src/test/java/io/sentry/android/replay/viewhierarchy/ComposeMaskingOptionsTest.kt index baf0a32a415..0accb9ed16d 100644 --- a/sentry-android-replay/src/test/java/io/sentry/android/replay/viewhierarchy/ComposeMaskingOptionsTest.kt +++ b/sentry-android-replay/src/test/java/io/sentry/android/replay/viewhierarchy/ComposeMaskingOptionsTest.kt @@ -233,10 +233,9 @@ class ComposeMaskingOptionsTest { val textNodes = activity.get().collectNodesOfType(options) assertEquals(4, textNodes.size) // [TextField, Text, Button, Activity Title] - val unmaskNode = - textNodes.first { - (it.layout as? ComposeTextLayout)?.layout?.layoutInput?.text?.text == "Make Request" - } + val unmaskNode = textNodes.first { + (it.layout as? ComposeTextLayout)?.layout?.layoutInput?.text?.text == "Make Request" + } assertTrue(unmaskNode.isVisible, "The unmasked node must be visible for the test to be valid") assertFalse(unmaskNode.shouldMask, "Node with sentryReplayUnmask() should not be masked") diff --git a/sentry/src/test/java/io/sentry/SentryClientTest.kt b/sentry/src/test/java/io/sentry/SentryClientTest.kt index 1f0f3792626..4a5be6aead8 100644 --- a/sentry/src/test/java/io/sentry/SentryClientTest.kt +++ b/sentry/src/test/java/io/sentry/SentryClientTest.kt @@ -424,7 +424,11 @@ class SentryClientTest { fixture.sentryOptions.clientReportRecorder, listOf( DiscardedEvent(DiscardReason.BEFORE_SEND.reason, DataCategory.TraceMetric.category, 1), - DiscardedEvent(DiscardReason.BEFORE_SEND.reason, DataCategory.TraceMetricByte.category, 120), + DiscardedEvent( + DiscardReason.BEFORE_SEND.reason, + DataCategory.TraceMetricByte.category, + 120, + ), ), ) } @@ -447,7 +451,11 @@ class SentryClientTest { fixture.sentryOptions.clientReportRecorder, listOf( DiscardedEvent(DiscardReason.BEFORE_SEND.reason, DataCategory.TraceMetric.category, 1), - DiscardedEvent(DiscardReason.BEFORE_SEND.reason, DataCategory.TraceMetricByte.category, 120), + DiscardedEvent( + DiscardReason.BEFORE_SEND.reason, + DataCategory.TraceMetricByte.category, + 120, + ), ), ) }