From c5eb325c0edfd72348059ee5e4c6e6c8614e8bd4 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Thu, 5 Feb 2026 14:18:14 -0800 Subject: [PATCH] Adopt Gradle test suites for smoke tests Replace manual source set and configuration setup with native Gradle JvmTestSuite. This aligns with upstream OpenTelemetry Java instrumentation patterns (adopted in v1.24.0) and provides better IDE integration. Changes: - Remove manual sourceSets.create("smokeTest") configuration - Remove manual configuration extensions (smokeTestImplementation, etc.) - Add testing.suites block with JvmTestSuite registration - Move dependencies into test suite DSL - Preserve all existing behavior (environment matrix, system properties, test logging, nested test classes with @Environment annotations) Test suite automatically creates smokeTestImplementation and other configurations, simplifying the build logic while maintaining full backward compatibility. --- .../src/main/kotlin/ai.smoke-test.gradle.kts | 49 +++++++++---------- .../smoketest/OtlpLogAnalyticsOnAksTest.java | 5 -- .../smoketest/OtlpTest.java | 5 -- 3 files changed, 24 insertions(+), 35 deletions(-) diff --git a/buildSrc/src/main/kotlin/ai.smoke-test.gradle.kts b/buildSrc/src/main/kotlin/ai.smoke-test.gradle.kts index 805acb06c4..fbed49ea3b 100644 --- a/buildSrc/src/main/kotlin/ai.smoke-test.gradle.kts +++ b/buildSrc/src/main/kotlin/ai.smoke-test.gradle.kts @@ -8,19 +8,6 @@ plugins { val aiSmokeTest = extensions.create("aiSmokeTest") -sourceSets { - create("smokeTest") { - compileClasspath += sourceSets.main.get().output - runtimeClasspath += sourceSets.main.get().output - } -} - -val smokeTestImplementation by configurations.getting { - extendsFrom(configurations.implementation.get()) -} - -configurations["smokeTestRuntimeOnly"].extendsFrom(configurations.runtimeOnly.get()) - // FIXME (trask) copy-pasted from ai.java-conventions.gradle java { toolchain { @@ -66,18 +53,33 @@ dependencies { // FIXME (trask) copy-pasted from ai.java-conventions.gradle dependencyManagement(platform(project(":dependencyManagement"))) - smokeTestImplementation(project(":smoke-tests:framework")) + agent(project(":agent:agent", configuration = "shadow")) + + old3xAgent("com.microsoft.azure:applicationinsights-agent:3.2.11") +} - smokeTestImplementation("org.junit.jupiter:junit-jupiter-api") - smokeTestImplementation("org.junit.jupiter:junit-jupiter-params") - smokeTestImplementation("org.junit.jupiter:junit-jupiter-engine") - smokeTestImplementation("org.junit.platform:junit-platform-launcher") +// Configure test suites +testing { + suites { + register("smokeTest") { + dependencies { + implementation(project(":smoke-tests:framework")) - smokeTestImplementation("org.assertj:assertj-core") + implementation("org.junit.jupiter:junit-jupiter-api") + implementation("org.junit.jupiter:junit-jupiter-params") + runtimeOnly("org.junit.jupiter:junit-jupiter-engine") + runtimeOnly("org.junit.platform:junit-platform-launcher") - agent(project(":agent:agent", configuration = "shadow")) + implementation("org.assertj:assertj-core") + } + } + } +} - old3xAgent("com.microsoft.azure:applicationinsights-agent:3.2.11") +// Make smokeTest configuration extend from main implementation configuration +// so that project dependencies (e.g., log4j in ClassicSdkLog4j1Interop2x) are available +configurations.named("smokeTestImplementation") { + extendsFrom(configurations.implementation.get()) } configurations.all { @@ -106,7 +108,7 @@ tasks { } } - register("smokeTest") { + named("smokeTest") { useJUnitPlatform() // this is just to force building the agent first @@ -114,9 +116,6 @@ tasks { dependsOn(assemble) - testClassesDirs = sourceSets["smokeTest"].output.classesDirs - classpath = sourceSets["smokeTest"].runtimeClasspath - // TODO (trask) experiment with parallelization // maxParallelForks = (Runtime.getRuntime().availableProcessors() / 2).takeIf { it > 0 } ?: 1 diff --git a/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpLogAnalyticsOnAksTest.java b/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpLogAnalyticsOnAksTest.java index 246cbfb687..0b70b310ff 100644 --- a/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpLogAnalyticsOnAksTest.java +++ b/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpLogAnalyticsOnAksTest.java @@ -17,7 +17,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; import static org.mockserver.model.HttpRequest.request; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import com.microsoft.applicationinsights.smoketest.schemav2.Data; import com.microsoft.applicationinsights.smoketest.schemav2.Envelope; @@ -28,11 +27,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.mockserver.model.HttpRequest; -import org.springframework.boot.test.context.SpringBootTest; -@SpringBootTest( - classes = {OtlpApplication.class}, - webEnvironment = RANDOM_PORT) @UseAgent abstract class OtlpLogAnalyticsOnAksTest { diff --git a/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpTest.java b/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpTest.java index b66c1509d4..7fb3ed481a 100644 --- a/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpTest.java +++ b/smoke-tests/apps/OtlpMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/OtlpTest.java @@ -8,7 +8,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; import static org.mockserver.model.HttpRequest.request; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import com.microsoft.applicationinsights.smoketest.schemav2.Data; import com.microsoft.applicationinsights.smoketest.schemav2.Envelope; @@ -19,11 +18,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.mockserver.model.HttpRequest; -import org.springframework.boot.test.context.SpringBootTest; -@SpringBootTest( - classes = {OtlpApplication.class}, - webEnvironment = RANDOM_PORT) @UseAgent abstract class OtlpTest {