diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle index 132d7eb3aa4..de211639c87 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle @@ -1,3 +1,7 @@ +plugins { + id 'java-test-fixtures' +} + apply from: "$rootDir/gradle/java.gradle" apply plugin: 'idea' diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java index 00655fd9545..9e4e7c4e5b9 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/java/com/datadog/profiling/controller/jfr/JfpUtilsTest.java @@ -16,15 +16,6 @@ public class JfpUtilsTest { private static final String CONFIG_ENTRY = "jdk.ThreadAllocationStatistics#enabled"; private static final String CONFIG_OVERRIDE_ENTRY = "test.continuous.override#value"; - public static final String OVERRIDES = - JfpUtilsTest.class.getClassLoader().getResource("overrides.jfp").getFile(); - public static final String OVERRIDES_OLD_OBJECT_SAMPLE = - JfpUtilsTest.class.getClassLoader().getResource("overrides-oldobjectsample.jfp").getFile(); - public static final String OVERRIDES_OBJECT_ALLOCATION = - JfpUtilsTest.class.getClassLoader().getResource("overrides-objectallocation.jfp").getFile(); - public static final String OVERRIDES_NATIVE_METHOD_SAMPLE = - JfpUtilsTest.class.getClassLoader().getResource("overrides-nativemethodsample.jfp").getFile(); - @Test public void testLoadingInvalidOverride() throws IOException { final String INVALID_OVERRIDE = "really_non_existent_file.jfp"; @@ -42,7 +33,8 @@ public void testLoadingContinuousConfig() throws IOException { @Test public void testLoadingContinuousConfigWithOverride() throws IOException { - final Map config = JfpUtils.readJfpResources(JfpUtils.DEFAULT_JFP, OVERRIDES); + final Map config = + JfpUtils.readJfpResources(JfpUtils.DEFAULT_JFP, JfpTestResources.overrides()); assertEquals("true", config.get(CONFIG_ENTRY)); assertEquals("200", config.get(CONFIG_OVERRIDE_ENTRY)); } diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/java/com/datadog/profiling/controller/jfr/JfpTestResources.java b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/java/com/datadog/profiling/controller/jfr/JfpTestResources.java new file mode 100644 index 00000000000..88cd0b6bca7 --- /dev/null +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/java/com/datadog/profiling/controller/jfr/JfpTestResources.java @@ -0,0 +1,62 @@ +package com.datadog.profiling.controller.jfr; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.concurrent.atomic.AtomicReference; + +public final class JfpTestResources { + private static final AtomicReference overrides = new AtomicReference<>(); + private static final AtomicReference overridesOldObjectSample = new AtomicReference<>(); + private static final AtomicReference overridesObjectAllocation = new AtomicReference<>(); + private static final AtomicReference overridesNativeMethodSample = + new AtomicReference<>(); + + private JfpTestResources() {} + + public static String overrides() { + return get(overrides, "overrides.jfp"); + } + + public static String overridesOldObjectSample() { + return get(overridesOldObjectSample, "overrides-oldobjectsample.jfp"); + } + + public static String overridesObjectAllocation() { + return get(overridesObjectAllocation, "overrides-objectallocation.jfp"); + } + + public static String overridesNativeMethodSample() { + return get(overridesNativeMethodSample, "overrides-nativemethodsample.jfp"); + } + + private static String get(AtomicReference ref, String resourceName) { + String v = ref.get(); + if (v != null) { + return v; + } + String computed = extract(resourceName); + return ref.compareAndSet(null, computed) ? computed : ref.get(); + } + + // Resources packaged in the testFixtures jar are not directly accessible as filesystem paths. + // Extract to a temp file so callers can use the path with java.io.File. + private static String extract(String resourceName) { + try { + Path temp = Files.createTempFile(resourceName.replace('.', '_'), ".jfp"); + temp.toFile().deleteOnExit(); + try (InputStream is = + JfpTestResources.class.getClassLoader().getResourceAsStream(resourceName)) { + if (is == null) { + throw new IllegalStateException("Test resource not found on classpath: " + resourceName); + } + Files.copy(is, temp, StandardCopyOption.REPLACE_EXISTING); + } + return temp.toAbsolutePath().toString(); + } catch (IOException e) { + throw new RuntimeException("Failed to extract test resource: " + resourceName, e); + } + } +} diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-nativemethodsample.jfp b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-nativemethodsample.jfp similarity index 100% rename from dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-nativemethodsample.jfp rename to dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-nativemethodsample.jfp diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-objectallocation.jfp b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-objectallocation.jfp similarity index 100% rename from dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-objectallocation.jfp rename to dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-objectallocation.jfp diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-oldobjectsample.jfp b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-oldobjectsample.jfp similarity index 100% rename from dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides-oldobjectsample.jfp rename to dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides-oldobjectsample.jfp diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides.jfp b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides.jfp similarity index 100% rename from dd-java-agent/agent-profiling/profiling-controller-jfr/src/test/resources/overrides.jfp rename to dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/resources/overrides.jfp diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle index 5de63a998cb..ebe645ce175 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle @@ -28,7 +28,7 @@ dependencies { testImplementation libs.bundles.junit5 testImplementation libs.bundles.mockito - testImplementation files(project(':dd-java-agent:agent-profiling:profiling-controller-jfr').sourceSets.test.output) + testImplementation(testFixtures(project(':dd-java-agent:agent-profiling:profiling-controller-jfr'))) testImplementation project(':dd-java-agent:agent-profiling') } diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java index ef853d07b9a..eee7a2f9638 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/src/test/java/com/datadog/profiling/controller/openjdk/OpenJdkControllerTest.java @@ -15,7 +15,7 @@ import static org.junit.jupiter.api.Assumptions.assumeFalse; import com.datadog.profiling.controller.ControllerContext; -import com.datadog.profiling.controller.jfr.JfpUtilsTest; +import com.datadog.profiling.controller.jfr.JfpTestResources; import com.datadog.profiling.utils.ProfilingMode; import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.RecordingData; @@ -76,7 +76,7 @@ public void testHeapProfilerIsDisabledOnUnsupportedVersion() throws Exception { @Test public void testHeapProfilerIsStillOverriddenOnUnsupportedVersion() throws Exception { Properties props = getConfigProperties(); - props.put(PROFILING_TEMPLATE_OVERRIDE_FILE, JfpUtilsTest.OVERRIDES_OLD_OBJECT_SAMPLE); + props.put(PROFILING_TEMPLATE_OVERRIDE_FILE, JfpTestResources.overridesOldObjectSample()); ConfigProvider configProvider = ConfigProvider.withPropertiesOverride(props); @@ -158,7 +158,7 @@ public void testAllocationProfilerIsDisabledOnUnsupportedVersion() throws Except @Test public void testAllocationProfilerIsStillOverriddenOnUnsupportedVersion() throws Exception { Properties props = getConfigProperties(); - props.put(PROFILING_TEMPLATE_OVERRIDE_FILE, JfpUtilsTest.OVERRIDES_OBJECT_ALLOCATION); + props.put(PROFILING_TEMPLATE_OVERRIDE_FILE, JfpTestResources.overridesObjectAllocation()); ConfigProvider configProvider = ConfigProvider.withPropertiesOverride(props); OpenJdkController controller = new OpenJdkController(configProvider); diff --git a/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle index 8b6d7725eff..1b18f6015ae 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle @@ -21,7 +21,6 @@ dependencies { testImplementation libs.bundles.junit5 testImplementation libs.bundles.mockito - testImplementation files(project(':dd-java-agent:agent-profiling:profiling-controller-jfr').sourceSets.test.output) testImplementation project(':dd-java-agent:agent-profiling') } diff --git a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.1/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.1/build.gradle index 7c9da94525f..72431e4eea4 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.1/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.1/build.gradle @@ -30,7 +30,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() diff --git a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.4/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.4/build.gradle index 5bbd1a43204..b9d8fb54ce2 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.4/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.4/build.gradle @@ -37,7 +37,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() diff --git a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.6/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.6/build.gradle index de3d1d0011e..4fa201cbd75 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.6/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.6/build.gradle @@ -37,7 +37,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() diff --git a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.8/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.8/build.gradle index db1def27b2d..e6001a35fe8 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.8/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-3/mongo-driver-3.8/build.gradle @@ -37,7 +37,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() diff --git a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-4.0/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-4.0/build.gradle index 928546f28fc..526a239351b 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-4.0/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-driver/mongo-driver-4.0/build.gradle @@ -41,7 +41,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() testImplementation group: 'org.mongodb', name: 'mongodb-driver-sync', version: '4.0.1' diff --git a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-async-3.3/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-async-3.3/build.gradle index aa871b76a13..dadcb1afa34 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-async-3.3/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-async-3.3/build.gradle @@ -11,7 +11,6 @@ dependencies { transitive = false } - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() diff --git a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.1/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.1/build.gradle index a0f89a42216..fafc53dd04c 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.1/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.1/build.gradle @@ -3,7 +3,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') dependencies { - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() // We need to pull in this dependency to get the 'suspend span' instrumentation for spock tests diff --git a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.7/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.7/build.gradle index cdd6948ae80..75faf59a3f9 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.7/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-core-3.7/build.gradle @@ -3,7 +3,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') dependencies { - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get() // We need to pull in this dependency to get the 'suspend span' instrumentation for spock tests diff --git a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-sync-3.10/build.gradle b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-sync-3.10/build.gradle index 18327f98667..a0fe07f63d3 100644 --- a/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-sync-3.10/build.gradle +++ b/dd-java-agent/instrumentation/mongo/mongo-test/mongo-test-sync-3.10/build.gradle @@ -18,7 +18,6 @@ dependencies { } testImplementation testFixtures(project(':dd-java-agent:instrumentation:mongo:mongo-common')) - testImplementation project(':dd-java-agent:instrumentation:mongo:mongo-common').sourceSets.test.output testImplementation group: 'org.testcontainers', name: 'mongodb', version: libs.versions.testcontainers.get()