From ea5486c31dda2d65ef8defa0aee022dd2ea44555 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 13 May 2026 17:04:15 +0200 Subject: [PATCH 1/3] build: use java-test-fixtures to share JFR test resources profiling-controller-openjdk used files(project(':...:profiling-controller-jfr').sourceSets.test.output) In Gradle 8 this worked: inside the `dependencies` closure, `project(':foo')` resolved via `Project.project(String)` -- which is a Groovy DSL lookup fallback, since `DependencyHandler` had no `project(String)` method -- returning the real `Project` -- which has the `sourceSets` property. Gradle 9.5 added `DependencyHandler.project(String)` that returns a `ProjectDependency`, which Groovy now resolves first. The instance is a `DefaultProjectDependency`, which has no `sourceSets` property, and as such fails with: ``` > Could not get unknown property 'sourceSets' for project ':dd-java-agent:agent-profiling:profiling-controller-jfr' of type org.gradle.api.internal.artifacts.dependencies.DefaultProjectDependency. ``` This commit instead rely on the java-test-fixtures plugin applied to profiling-controller-jfr to share test resources, consumer projects now declare : testFixtures(project(':...:profiling-controller-jfr')). --- .../profiling-controller-jfr/build.gradle | 4 ++ .../controller/jfr/JfpUtilsTest.java | 12 ++---- .../controller/jfr/JfpTestResources.java | 37 +++++++++++++++++++ .../overrides-nativemethodsample.jfp | 0 .../resources/overrides-objectallocation.jfp | 0 .../resources/overrides-oldobjectsample.jfp | 0 .../resources/overrides.jfp | 0 .../profiling-controller-openjdk/build.gradle | 2 +- .../openjdk/OpenJdkControllerTest.java | 6 +-- .../profiling-controller-oracle/build.gradle | 1 - 10 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/java/com/datadog/profiling/controller/jfr/JfpTestResources.java rename dd-java-agent/agent-profiling/profiling-controller-jfr/src/{test => testFixtures}/resources/overrides-nativemethodsample.jfp (100%) rename dd-java-agent/agent-profiling/profiling-controller-jfr/src/{test => testFixtures}/resources/overrides-objectallocation.jfp (100%) rename dd-java-agent/agent-profiling/profiling-controller-jfr/src/{test => testFixtures}/resources/overrides-oldobjectsample.jfp (100%) rename dd-java-agent/agent-profiling/profiling-controller-jfr/src/{test => testFixtures}/resources/overrides.jfp (100%) 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..a94804dfcab 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,14 +16,10 @@ 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(); + public static final String OVERRIDES = JfpTestResources.OVERRIDES; + public static final String OVERRIDES_OLD_OBJECT_SAMPLE = JfpTestResources.OVERRIDES_OLD_OBJECT_SAMPLE; + public static final String OVERRIDES_OBJECT_ALLOCATION = JfpTestResources.OVERRIDES_OBJECT_ALLOCATION; + public static final String OVERRIDES_NATIVE_METHOD_SAMPLE = JfpTestResources.OVERRIDES_NATIVE_METHOD_SAMPLE; @Test public void testLoadingInvalidOverride() throws IOException { 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..fb446f83da6 --- /dev/null +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/src/testFixtures/java/com/datadog/profiling/controller/jfr/JfpTestResources.java @@ -0,0 +1,37 @@ +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; + +public final class JfpTestResources { + public static final String OVERRIDES = extract("overrides.jfp"); + public static final String OVERRIDES_OLD_OBJECT_SAMPLE = extract("overrides-oldobjectsample.jfp"); + public static final String OVERRIDES_OBJECT_ALLOCATION = + extract("overrides-objectallocation.jfp"); + public static final String OVERRIDES_NATIVE_METHOD_SAMPLE = + extract("overrides-nativemethodsample.jfp"); + + private JfpTestResources() {} + + // 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..44a3fee2349 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.OVERRIDES_OLD_OBJECT_SAMPLE); 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.OVERRIDES_OBJECT_ALLOCATION); 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') } From 27a8f56ea5803f802c2d777fc764b52ef4dff2e3 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 13 May 2026 17:37:10 +0200 Subject: [PATCH 2/3] build(mongo): remove broken sourceSets.test.output dependency lines Gradle 9.5 added `DependencyHandler.project(String)` returning a `ProjectDependency`, shadowing `Project.project(String)` in `dependencies` closures. Since `ProjectDependency` implementation do not has a `sourceSets` property it fails the build. The goal of using `files(project(':foo').sourceSets.test.output)` is to share test code in other projects which is supported by the test java-test-fixtures plugin that is already applied to the `:mongo-common` project. Also the nine mongo driver/test consumers already declared the correct `testFixtures(project(':...:mongo-common'))` so this commit drops the now-broken duplicate `sourceSets.test.output` dependency declarations. --- .../mongo-driver/mongo-driver-3/mongo-driver-3.1/build.gradle | 1 - .../mongo-driver/mongo-driver-3/mongo-driver-3.4/build.gradle | 1 - .../mongo-driver/mongo-driver-3/mongo-driver-3.6/build.gradle | 1 - .../mongo-driver/mongo-driver-3/mongo-driver-3.8/build.gradle | 1 - .../mongo/mongo-driver/mongo-driver-4.0/build.gradle | 1 - .../mongo/mongo-test/mongo-test-async-3.3/build.gradle | 1 - .../mongo/mongo-test/mongo-test-core-3.1/build.gradle | 1 - .../mongo/mongo-test/mongo-test-core-3.7/build.gradle | 1 - .../mongo/mongo-test/mongo-test-sync-3.10/build.gradle | 1 - 9 files changed, 9 deletions(-) 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() From 3c88ae2b3486360843fcf905a928b2d97cc78d29 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 13 May 2026 18:13:38 +0200 Subject: [PATCH 3/3] chore: Avoid jfp file extraction at class init --- .../controller/jfr/JfpUtilsTest.java | 8 +--- .../controller/jfr/JfpTestResources.java | 37 ++++++++++++++++--- .../openjdk/OpenJdkControllerTest.java | 4 +- 3 files changed, 35 insertions(+), 14 deletions(-) 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 a94804dfcab..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,11 +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 = JfpTestResources.OVERRIDES; - public static final String OVERRIDES_OLD_OBJECT_SAMPLE = JfpTestResources.OVERRIDES_OLD_OBJECT_SAMPLE; - public static final String OVERRIDES_OBJECT_ALLOCATION = JfpTestResources.OVERRIDES_OBJECT_ALLOCATION; - public static final String OVERRIDES_NATIVE_METHOD_SAMPLE = JfpTestResources.OVERRIDES_NATIVE_METHOD_SAMPLE; - @Test public void testLoadingInvalidOverride() throws IOException { final String INVALID_OVERRIDE = "really_non_existent_file.jfp"; @@ -38,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 index fb446f83da6..88cd0b6bca7 100644 --- 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 @@ -5,17 +5,42 @@ 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 { - public static final String OVERRIDES = extract("overrides.jfp"); - public static final String OVERRIDES_OLD_OBJECT_SAMPLE = extract("overrides-oldobjectsample.jfp"); - public static final String OVERRIDES_OBJECT_ALLOCATION = - extract("overrides-objectallocation.jfp"); - public static final String OVERRIDES_NATIVE_METHOD_SAMPLE = - extract("overrides-nativemethodsample.jfp"); + 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) { 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 44a3fee2349..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 @@ -76,7 +76,7 @@ public void testHeapProfilerIsDisabledOnUnsupportedVersion() throws Exception { @Test public void testHeapProfilerIsStillOverriddenOnUnsupportedVersion() throws Exception { Properties props = getConfigProperties(); - props.put(PROFILING_TEMPLATE_OVERRIDE_FILE, JfpTestResources.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, JfpTestResources.OVERRIDES_OBJECT_ALLOCATION); + props.put(PROFILING_TEMPLATE_OVERRIDE_FILE, JfpTestResources.overridesObjectAllocation()); ConfigProvider configProvider = ConfigProvider.withPropertiesOverride(props); OpenJdkController controller = new OpenJdkController(configProvider);