Remove reflection from structured concurrency test (#11304)

This commit is contained in:
Lauri Tulmin 2024-05-08 22:32:15 +03:00 committed by GitHub
parent c1c9305b15
commit 7965cbb6b5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 28 additions and 24 deletions

View File

@ -1,3 +1,5 @@
import kotlin.math.max
plugins { plugins {
id("otel.javaagent-testing") id("otel.javaagent-testing")
} }
@ -10,11 +12,28 @@ dependencies {
} }
otelJava { 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<JavaCompile>().configureEach {
with(options) {
compilerArgs.add("--enable-preview")
}
} }
tasks.withType<Test>().configureEach { tasks.withType<Test>().configureEach {
// needed for VirtualThreadTest // needed for VirtualThreadTest
jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED")
jvmArgs("-XX:+IgnoreUnrecognizedVMOptions") jvmArgs("-XX:+IgnoreUnrecognizedVMOptions")
// needed for structured concurrency test
jvmArgs("--enable-preview")
} }

View File

@ -10,14 +10,12 @@ import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import java.lang.reflect.Method;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.StructuredTaskScope;
import org.junit.jupiter.api.Test; 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; import org.junit.jupiter.api.extension.RegisterExtension;
@EnabledForJreRange(min = JRE.JAVA_21) @SuppressWarnings("preview")
class StructuredTaskScopeTest { class StructuredTaskScopeTest {
@RegisterExtension @RegisterExtension
@ -25,16 +23,7 @@ class StructuredTaskScopeTest {
@Test @Test
void multipleForkJoin() throws Exception { void multipleForkJoin() throws Exception {
Class<?> sofTaskScopeClass = StructuredTaskScope<Object> taskScope = new StructuredTaskScope.ShutdownOnFailure();
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");
Callable<String> callable1 = Callable<String> callable1 =
() -> { () -> {
@ -51,15 +40,11 @@ class StructuredTaskScopeTest {
testing.runWithSpan( testing.runWithSpan(
"parent", "parent",
() -> { () -> {
try { StructuredTaskScope.Subtask<String> fork1 = taskScope.fork(callable1);
Object fork1 = forkMethod.invoke(taskScope, callable1); StructuredTaskScope.Subtask<String> fork2 = taskScope.fork(callable2);
Object fork2 = forkMethod.invoke(taskScope, callable2); taskScope.join();
joinMethod.invoke(taskScope);
return "" + getMethod.invoke(fork1) + getMethod.invoke(fork2); return "" + fork1.get() + fork2.get();
} catch (Exception e) {
throw new AssertionError(e);
}
}); });
assertThat(result).isEqualTo("ab"); assertThat(result).isEqualTo("ab");
@ -73,6 +58,6 @@ class StructuredTaskScopeTest {
span -> span ->
span.hasName("task2").hasKind(SpanKind.INTERNAL).hasParent(trace.getSpan(0)))); span.hasName("task2").hasKind(SpanKind.INTERNAL).hasParent(trace.getSpan(0))));
closeMethod.invoke(taskScope); taskScope.close();
} }
} }