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 {
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<JavaCompile>().configureEach {
with(options) {
compilerArgs.add("--enable-preview")
}
}
tasks.withType<Test>().configureEach {
// needed for VirtualThreadTest
jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED")
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.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<Object> taskScope = new StructuredTaskScope.ShutdownOnFailure();
Callable<String> 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<String> fork1 = taskScope.fork(callable1);
StructuredTaskScope.Subtask<String> 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();
}
}