Remove reflection from structured concurrency test (#11304)
This commit is contained in:
parent
c1c9305b15
commit
7965cbb6b5
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue