From 7965cbb6b5629beb8882ad2765e4b27e62ebacd0 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Wed, 8 May 2024 22:32:15 +0300 Subject: [PATCH] Remove reflection from structured concurrency test (#11304) --- .../executors/jdk21-testing/build.gradle.kts | 21 ++++++++++++- .../executors/StructuredTaskScopeTest.java | 31 +++++-------------- 2 files changed, 28 insertions(+), 24 deletions(-) rename instrumentation/executors/{javaagent => jdk21-testing}/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/StructuredTaskScopeTest.java (56%) diff --git a/instrumentation/executors/jdk21-testing/build.gradle.kts b/instrumentation/executors/jdk21-testing/build.gradle.kts index 1de1f41eb7..6f07c501df 100644 --- a/instrumentation/executors/jdk21-testing/build.gradle.kts +++ b/instrumentation/executors/jdk21-testing/build.gradle.kts @@ -1,3 +1,5 @@ +import kotlin.math.max + plugins { id("otel.javaagent-testing") } @@ -10,11 +12,28 @@ dependencies { } otelJava { - minJavaVersionSupported.set(JavaVersion.VERSION_21) + // StructuredTaskScopeTest that uses preview feature, requires that the test is compiled for the + // same vm version that is going to execute the test. Choose whichever is greater 21 or the + // version of the vm that is going to run test + val testJavaVersion = + gradle.startParameter.projectProperties["testJavaVersion"]?.let(JavaVersion::toVersion) + ?: JavaVersion.current() + minJavaVersionSupported.set(JavaVersion.toVersion(max( + testJavaVersion.majorVersion.toInt(), + JavaVersion.VERSION_21.majorVersion.toInt() + ))) +} + +tasks.withType().configureEach { + with(options) { + compilerArgs.add("--enable-preview") + } } tasks.withType().configureEach { // needed for VirtualThreadTest jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") + // needed for structured concurrency test + jvmArgs("--enable-preview") } diff --git a/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/StructuredTaskScopeTest.java b/instrumentation/executors/jdk21-testing/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/StructuredTaskScopeTest.java similarity index 56% rename from instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/StructuredTaskScopeTest.java rename to instrumentation/executors/jdk21-testing/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/StructuredTaskScopeTest.java index 6d4d2be348..595f1c8c40 100644 --- a/instrumentation/executors/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/StructuredTaskScopeTest.java +++ b/instrumentation/executors/jdk21-testing/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/StructuredTaskScopeTest.java @@ -10,14 +10,12 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; -import java.lang.reflect.Method; import java.util.concurrent.Callable; +import java.util.concurrent.StructuredTaskScope; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.EnabledForJreRange; -import org.junit.jupiter.api.condition.JRE; import org.junit.jupiter.api.extension.RegisterExtension; -@EnabledForJreRange(min = JRE.JAVA_21) +@SuppressWarnings("preview") class StructuredTaskScopeTest { @RegisterExtension @@ -25,16 +23,7 @@ class StructuredTaskScopeTest { @Test void multipleForkJoin() throws Exception { - Class sofTaskScopeClass = - Class.forName("java.util.concurrent.StructuredTaskScope$ShutdownOnFailure"); - Object taskScope = sofTaskScopeClass.getDeclaredConstructor().newInstance(); - Class taskScopeClass = Class.forName("java.util.concurrent.StructuredTaskScope"); - Method forkMethod = taskScopeClass.getDeclaredMethod("fork", Callable.class); - Method joinMethod = taskScopeClass.getDeclaredMethod("join"); - Method closeMethod = taskScopeClass.getDeclaredMethod("close"); - - Class subtaskClass = Class.forName("java.util.concurrent.StructuredTaskScope$Subtask"); - Method getMethod = subtaskClass.getDeclaredMethod("get"); + StructuredTaskScope taskScope = new StructuredTaskScope.ShutdownOnFailure(); Callable callable1 = () -> { @@ -51,15 +40,11 @@ class StructuredTaskScopeTest { testing.runWithSpan( "parent", () -> { - try { - Object fork1 = forkMethod.invoke(taskScope, callable1); - Object fork2 = forkMethod.invoke(taskScope, callable2); - joinMethod.invoke(taskScope); + StructuredTaskScope.Subtask fork1 = taskScope.fork(callable1); + StructuredTaskScope.Subtask fork2 = taskScope.fork(callable2); + taskScope.join(); - return "" + getMethod.invoke(fork1) + getMethod.invoke(fork2); - } catch (Exception e) { - throw new AssertionError(e); - } + return "" + fork1.get() + fork2.get(); }); assertThat(result).isEqualTo("ab"); @@ -73,6 +58,6 @@ class StructuredTaskScopeTest { span -> span.hasName("task2").hasKind(SpanKind.INTERNAL).hasParent(trace.getSpan(0)))); - closeMethod.invoke(taskScope); + taskScope.close(); } }