diff --git a/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts b/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts index d0060bbf278..23289cb08e6 100644 --- a/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts +++ b/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts @@ -42,6 +42,10 @@ tasks.withType().configureEach { !rootProject.providers.gradleProperty("rerun.tests.${project.name}").isPresent } + // Trick to avoid on CI: "Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock." + // Use a task-specific user prefs directory + systemProperty("java.util.prefs.userRoot", "$buildDir/tmp/userPrefs/${name}") + // Split up tests that want to run forked in their own separate JVM for generated tasks if (name.startsWith("forkedTest") || name.endsWith("ForkedTest")) { setExcludes(emptyList()) diff --git a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy index 31e4d6a67af..5cba421fb76 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy +++ b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy @@ -6,9 +6,13 @@ import datadog.trace.api.config.CiVisibilityConfig import datadog.trace.api.config.GeneralConfig import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.api.config.TracerConfig +import spock.lang.Shared import spock.lang.Specification +import spock.lang.TempDir import spock.util.environment.Jvm +import java.nio.file.Path + import static datadog.trace.util.ConfigStrings.propertyNameToSystemPropertyName abstract class CiVisibilitySmokeTest extends Specification { @@ -21,6 +25,13 @@ abstract class CiVisibilitySmokeTest extends Specification { private static final Map DEFAULT_TRACER_CONFIG = defaultJvmArguments() + @TempDir + protected Path prefsDir + + @Shared + @TempDir + protected Path prefsDirShared + protected static String buildJavaHome() { if (Jvm.current.isJava8()) { return System.getenv("JAVA_8_HOME") @@ -69,6 +80,12 @@ abstract class CiVisibilitySmokeTest extends Specification { protected List buildJvmArguments(String mockBackendIntakeUrl, String serviceName, Map additionalArgs) { List arguments = [] + + // Trick to avoid on CI: "Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock." + // Some tests can setup arguments on spec level, so `prefsDir` will be `null` during `setupSpec()`. + String prefsPath = (prefsDir ?: prefsDirShared).toAbsolutePath() + arguments += "-Djava.util.prefs.userRoot=$prefsPath".toString() + Map argMap = buildJvmArgMap(mockBackendIntakeUrl, serviceName, additionalArgs) // for convenience when debugging locally