From b897cd68a24c4c062c2bfdbd29fa9fb2cbd5f769 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 3 Dec 2025 17:21:56 +0100 Subject: [PATCH] fix: Ignore tests failing on Oracle JDK 1.8 Those tests can be ignored as they are not specific to Oracle. --- .../profiling/controller/ProfilingSystemTest.java | 8 ++++++++ .../junit-5.3/src/test/groovy/JUnit5Test.groovy | 11 ++++++++++- .../trace/core/LongRunningTracesTrackerTest.groovy | 11 ++++++++++- .../datadog/trace/core/PendingTraceBufferTest.groovy | 9 +++++++++ .../datadog/trace/core/PendingTraceTest.groovy | 9 +++++++++ .../util/stacktrace/DefaultStackWalkerTest.java | 12 ++++++++++++ .../util/stacktrace/HotSpotStackWalkerTest.java | 7 +++++++ 7 files changed, 65 insertions(+), 2 deletions(-) diff --git a/dd-java-agent/agent-profiling/profiling-controller/src/test/java/com/datadog/profiling/controller/ProfilingSystemTest.java b/dd-java-agent/agent-profiling/profiling-controller/src/test/java/com/datadog/profiling/controller/ProfilingSystemTest.java index 9895a9863d6..faed71193b0 100644 --- a/dd-java-agent/agent-profiling/profiling-controller/src/test/java/com/datadog/profiling/controller/ProfilingSystemTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller/src/test/java/com/datadog/profiling/controller/ProfilingSystemTest.java @@ -20,6 +20,7 @@ import static java.util.concurrent.TimeUnit.SECONDS; import static org.awaitility.Awaitility.await; import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.assumeFalse; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; @@ -36,6 +37,7 @@ import ch.qos.logback.classic.Level; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.Appender; +import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.RecordingData; import datadog.trace.api.profiling.RecordingDataListener; import datadog.trace.bootstrap.config.provider.ConfigProvider; @@ -87,6 +89,12 @@ public class ProfilingSystemTest { @SuppressWarnings("unchecked") @BeforeEach public void setup() throws Exception { + assumeFalse( + JavaVirtualMachine.isOracleJDK8(), + "Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to correctly " + + "extract method parameters without args, when the code is compiled on a later JDK (targeting 8). " + + "This can manifest when creating mocks."); + when(controller.createRecording(ProfilingSystem.RECORDING_NAME, context)).thenReturn(recording); when(threadLocalRandom.nextInt(eq(1), anyInt())).thenReturn(1); when(recordingData.getEnd()).thenAnswer(mockInvocation -> Instant.now()); diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/src/test/groovy/JUnit5Test.groovy b/dd-java-agent/instrumentation/junit/junit-5.3/src/test/groovy/JUnit5Test.groovy index fb9cda8bb51..7fd5a4b5459 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/src/test/groovy/JUnit5Test.groovy +++ b/dd-java-agent/instrumentation/junit/junit-5.3/src/test/groovy/JUnit5Test.groovy @@ -1,5 +1,6 @@ import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass +import datadog.environment.JavaVirtualMachine import datadog.trace.api.DisableTestTrace import datadog.trace.api.civisibility.config.TestFQN import datadog.trace.api.civisibility.config.TestIdentifier @@ -48,7 +49,15 @@ import org.junit.platform.launcher.TestExecutionListener import org.junit.platform.launcher.core.LauncherConfig import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder import org.junit.platform.launcher.core.LauncherFactory - +import spock.lang.IgnoreIf + +@IgnoreIf(reason = """ +Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to correctly +extract method parameters without args, when the code is compiled on a later JDK (targeting 8). +This can manifest when creating mocks. +""", value = { + JavaVirtualMachine.isOracleJDK8() +}) @DisableTestTrace(reason = "avoid self-tracing") class JUnit5Test extends CiVisibilityInstrumentationTest { diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/LongRunningTracesTrackerTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/LongRunningTracesTrackerTest.groovy index 7edd12cf2ed..07313ee4282 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/LongRunningTracesTrackerTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/LongRunningTracesTrackerTest.groovy @@ -2,6 +2,7 @@ package datadog.trace.core import datadog.communication.ddagent.DDAgentFeaturesDiscovery import datadog.communication.ddagent.SharedCommunicationObjects +import datadog.environment.JavaVirtualMachine import datadog.trace.api.Config import datadog.trace.api.DDTraceId import datadog.trace.api.sampling.PrioritySampling @@ -10,7 +11,15 @@ import datadog.trace.core.monitor.HealthMetrics import datadog.trace.test.util.DDSpecification import java.util.concurrent.TimeUnit - +import spock.lang.IgnoreIf + +@IgnoreIf(reason = """ +Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to correctly +extract method parameters without args, when the code is compiled on a later JDK (targeting 8). +This can manifest when creating mocks. +""", value = { + JavaVirtualMachine.isOracleJDK8() +}) class LongRunningTracesTrackerTest extends DDSpecification { Config config = Mock(Config) int maxTrackedTraces = 10 diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy index c9bf72beee7..aff6c61cd5c 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceBufferTest.groovy @@ -1,5 +1,6 @@ package datadog.trace.core +import datadog.environment.JavaVirtualMachine import datadog.trace.api.Config import datadog.communication.monitor.Monitoring import datadog.trace.SamplingPriorityMetadataChecker @@ -14,6 +15,7 @@ import datadog.trace.core.propagation.PropagationTags import datadog.trace.core.scopemanager.ContinuableScopeManager import datadog.trace.test.util.DDSpecification import groovy.json.JsonSlurper +import spock.lang.IgnoreIf import spock.lang.Subject import spock.lang.Timeout import spock.util.concurrent.PollingConditions @@ -28,6 +30,13 @@ import static datadog.trace.api.sampling.PrioritySampling.USER_KEEP import static datadog.trace.core.PendingTraceBuffer.BUFFER_SIZE import static java.nio.charset.StandardCharsets.UTF_8 +@IgnoreIf(reason = """ +Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to correctly +extract method parameters without args, when the code is compiled on a later JDK (targeting 8). +This can manifest when creating mocks. +""", value = { + JavaVirtualMachine.isOracleJDK8() +}) @Timeout(5) class PendingTraceBufferTest extends DDSpecification { @Subject diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy index f182585b79e..20ccaaeb680 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/PendingTraceTest.groovy @@ -1,15 +1,24 @@ package datadog.trace.core +import datadog.environment.JavaVirtualMachine import datadog.trace.api.DDTraceId import datadog.trace.api.sampling.PrioritySampling import datadog.trace.api.time.TimeSource import datadog.trace.api.datastreams.NoopPathwayContext import datadog.trace.core.monitor.HealthMetrics import datadog.trace.core.propagation.PropagationTags +import spock.lang.IgnoreIf import spock.lang.Timeout import java.util.concurrent.TimeUnit +@IgnoreIf(reason = """ +Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to correctly +extract method parameters without args, when the code is compiled on a later JDK (targeting 8). +This can manifest when creating mocks. +""", value = { + JavaVirtualMachine.isOracleJDK8() +}) class PendingTraceTest extends PendingTraceTestBase { @Override diff --git a/internal-api/src/test/java/datadog/trace/util/stacktrace/DefaultStackWalkerTest.java b/internal-api/src/test/java/datadog/trace/util/stacktrace/DefaultStackWalkerTest.java index 4c84fffa5b0..2ccbf2062a4 100644 --- a/internal-api/src/test/java/datadog/trace/util/stacktrace/DefaultStackWalkerTest.java +++ b/internal-api/src/test/java/datadog/trace/util/stacktrace/DefaultStackWalkerTest.java @@ -5,14 +5,26 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assumptions.assumeFalse; +import datadog.environment.JavaVirtualMachine; import java.util.List; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class DefaultStackWalkerTest { private final StackWalker stackWalker = new DefaultStackWalker(); + @BeforeEach + void setUp() { + assumeFalse( + JavaVirtualMachine.isOracleJDK8(), + "Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to correctly " + + "extract method parameters without args, when the code is compiled on a later JDK (targeting 8). " + + "This can manifest when creating mocks."); + } + @Test public void defaultStackWalker_must_be_enabled() { assertTrue(stackWalker.isEnabled()); diff --git a/internal-api/src/test/java/datadog/trace/util/stacktrace/HotSpotStackWalkerTest.java b/internal-api/src/test/java/datadog/trace/util/stacktrace/HotSpotStackWalkerTest.java index 962b6d2b714..3488a320edb 100644 --- a/internal-api/src/test/java/datadog/trace/util/stacktrace/HotSpotStackWalkerTest.java +++ b/internal-api/src/test/java/datadog/trace/util/stacktrace/HotSpotStackWalkerTest.java @@ -9,12 +9,14 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assumptions.assumeFalse; import static org.junit.jupiter.api.Assumptions.assumeTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import datadog.environment.JavaVirtualMachine; import java.util.List; import java.util.stream.Collectors; import org.junit.jupiter.api.BeforeAll; @@ -27,6 +29,11 @@ public class HotSpotStackWalkerTest { @BeforeAll public static void setUp() { assumeTrue(isRunningJDK8WithHotSpot()); + assumeFalse( + JavaVirtualMachine.isOracleJDK8(), + "Oracle JDK 1.8 did not merge the fix in JDK-8058322, leading to the JVM failing to correctly " + + "extract method parameters without args, when the code is compiled on a later JDK (targeting 8). " + + "This can manifest when creating mocks."); } @Test