diff --git a/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityInstrumentationTest.groovy b/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityInstrumentationTest.groovy index 4697abe5549..b46802701c6 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityInstrumentationTest.groovy +++ b/dd-java-agent/agent-ci-visibility/civisibility-instrumentation-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityInstrumentationTest.groovy @@ -248,7 +248,8 @@ abstract class CiVisibilityInstrumentationTest extends InstrumentationSpecificat settings.quarantinedTests, settings.disabledTests, settings.attemptToFixTests, - settings.diff) + settings.diff, + false) } } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/CiVisibilitySettings.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/CiVisibilitySettings.java index 05aeca8a8d5..2a6344e5ed6 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/CiVisibilitySettings.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/CiVisibilitySettings.java @@ -21,7 +21,24 @@ public class CiVisibilitySettings { false, EarlyFlakeDetectionSettings.DEFAULT, TestManagementSettings.DEFAULT, - null); + null, + false); + + public static final CiVisibilitySettings REQUEST_ERROR = + new CiVisibilitySettings( + false, + false, + false, + false, + false, + false, + false, + false, + false, + EarlyFlakeDetectionSettings.DEFAULT, + TestManagementSettings.DEFAULT, + null, + true); private final boolean itrEnabled; private final boolean codeCoverage; @@ -35,6 +52,7 @@ public class CiVisibilitySettings { private final EarlyFlakeDetectionSettings earlyFlakeDetectionSettings; private final TestManagementSettings testManagementSettings; @Nullable private final String defaultBranch; + private final boolean requestError; CiVisibilitySettings( boolean itrEnabled, @@ -48,7 +66,8 @@ public class CiVisibilitySettings { boolean failedTestReplayEnabled, EarlyFlakeDetectionSettings earlyFlakeDetectionSettings, TestManagementSettings testManagementSettings, - @Nullable String defaultBranch) { + @Nullable String defaultBranch, + boolean requestError) { this.itrEnabled = itrEnabled; this.codeCoverage = codeCoverage; this.testsSkipping = testsSkipping; @@ -61,6 +80,7 @@ public class CiVisibilitySettings { this.earlyFlakeDetectionSettings = earlyFlakeDetectionSettings; this.testManagementSettings = testManagementSettings; this.defaultBranch = defaultBranch; + this.requestError = requestError; } public boolean isItrEnabled() { @@ -112,6 +132,10 @@ public String getDefaultBranch() { return defaultBranch; } + public boolean isRequestError() { + return requestError; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -132,7 +156,8 @@ public boolean equals(Object o) { && failedTestReplayEnabled == that.failedTestReplayEnabled && Objects.equals(earlyFlakeDetectionSettings, that.earlyFlakeDetectionSettings) && Objects.equals(testManagementSettings, that.testManagementSettings) - && Objects.equals(defaultBranch, that.defaultBranch); + && Objects.equals(defaultBranch, that.defaultBranch) + && requestError == that.requestError; } @Override @@ -149,7 +174,8 @@ public int hashCode() { failedTestReplayEnabled, earlyFlakeDetectionSettings, testManagementSettings, - defaultBranch); + defaultBranch, + requestError); } public interface Factory { @@ -180,7 +206,8 @@ public CiVisibilitySettings fromJson(Map json) { (Map) json.get("early_flake_detection")), TestManagementSettings.JsonAdapter.INSTANCE.fromJson( (Map) json.get("test_management")), - getString(json, "default_branch", null)); + getString(json, "default_branch", null), + false); // Correctly deserialized settings response is never considered as "errored" } private static boolean getBoolean( diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettings.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettings.java index ba312cf8fa4..f506ec659b4 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettings.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettings.java @@ -38,7 +38,30 @@ public class ExecutionSettings { Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), - LineDiff.EMPTY); + LineDiff.EMPTY, + false); + + public static final ExecutionSettings REQUEST_ERROR = + new ExecutionSettings( + false, + false, + false, + false, + false, + false, + false, + EarlyFlakeDetectionSettings.DEFAULT, + TestManagementSettings.DEFAULT, + null, + Collections.emptyMap(), + Collections.emptyMap(), + null, + null, + Collections.emptyList(), + Collections.emptyList(), + Collections.emptyList(), + LineDiff.EMPTY, + true); private final boolean itrEnabled; private final boolean codeCoverageEnabled; @@ -55,6 +78,7 @@ public class ExecutionSettings { @Nonnull private final Map testSettings; @Nonnull private final Map settingsCount; @Nonnull private final Diff pullRequestDiff; + private final boolean configurationError; public ExecutionSettings( boolean itrEnabled, @@ -74,7 +98,8 @@ public ExecutionSettings( @Nonnull Collection quarantinedTests, @Nonnull Collection disabledTests, @Nonnull Collection attemptToFixTests, - @Nonnull Diff pullRequestDiff) { + @Nonnull Diff pullRequestDiff, + boolean configurationError) { this.itrEnabled = itrEnabled; this.codeCoverageEnabled = codeCoverageEnabled; this.testSkippingEnabled = testSkippingEnabled; @@ -88,6 +113,7 @@ public ExecutionSettings( this.skippableTests = skippableTests; this.skippableTestsCoverage = skippableTestsCoverage; this.pullRequestDiff = pullRequestDiff; + this.configurationError = configurationError; testSettings = new HashMap<>(); if (flakyTests != null) { @@ -127,7 +153,8 @@ private ExecutionSettings( @Nonnull Map skippableTestsCoverage, @Nonnull Map testSettings, @Nonnull EnumMap settingsCount, - @Nonnull Diff pullRequestDiff) { + @Nonnull Diff pullRequestDiff, + boolean configurationError) { this.itrEnabled = itrEnabled; this.codeCoverageEnabled = codeCoverageEnabled; this.testSkippingEnabled = testSkippingEnabled; @@ -143,6 +170,7 @@ private ExecutionSettings( this.testSettings = testSettings; this.settingsCount = settingsCount; this.pullRequestDiff = pullRequestDiff; + this.configurationError = configurationError; } /** @@ -249,6 +277,10 @@ public Diff getPullRequestDiff() { return pullRequestDiff; } + public boolean isConfigurationError() { + return configurationError; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -272,7 +304,8 @@ public boolean equals(Object o) { && Objects.equals(skippableTestsCoverage, that.skippableTestsCoverage) && Objects.equals(testSettings, that.testSettings) && Objects.equals(settingsCount, that.settingsCount) - && Objects.equals(pullRequestDiff, that.pullRequestDiff); + && Objects.equals(pullRequestDiff, that.pullRequestDiff) + && configurationError == that.configurationError; } @Override @@ -292,7 +325,8 @@ public int hashCode() { skippableTestsCoverage, testSettings, settingsCount, - pullRequestDiff); + pullRequestDiff, + configurationError); } public static class Serializer { @@ -304,6 +338,7 @@ public static class Serializer { private static final int IMPACTED_TESTS_DETECTION_ENABLED_FLAG = 16; private static final int CODE_COVERAGE_REPORT_UPLOAD_ENABLED_FLAG = 32; private static final int FAILED_TEST_REPLAY_ENABLED_FLAG = 64; + private static final int CONFIGURATION_ERROR_FLAG = 128; public static ByteBuffer serialize(ExecutionSettings settings) { datadog.trace.civisibility.ipc.serialization.Serializer s = @@ -321,7 +356,8 @@ public static ByteBuffer serialize(ExecutionSettings settings) { | (settings.codeCoverageReportUploadEnabled ? CODE_COVERAGE_REPORT_UPLOAD_ENABLED_FLAG : 0) - | (settings.failedTestReplayEnabled ? FAILED_TEST_REPLAY_ENABLED_FLAG : 0)); + | (settings.failedTestReplayEnabled ? FAILED_TEST_REPLAY_ENABLED_FLAG : 0) + | (settings.configurationError ? CONFIGURATION_ERROR_FLAG : 0)); s.write(flags); EarlyFlakeDetectionSettings.Serializer.serialize(s, settings.earlyFlakeDetectionSettings); @@ -363,6 +399,7 @@ public static ExecutionSettings deserialize(ByteBuffer buffer) { boolean codeCoverageReportUploadEnabled = (flags & CODE_COVERAGE_REPORT_UPLOAD_ENABLED_FLAG) != 0; boolean failedTestReplayEnabled = (flags & FAILED_TEST_REPLAY_ENABLED_FLAG) != 0; + boolean configurationError = (flags & CONFIGURATION_ERROR_FLAG) != 0; EarlyFlakeDetectionSettings earlyFlakeDetectionSettings = EarlyFlakeDetectionSettings.Serializer.deserialize(buffer); @@ -414,7 +451,8 @@ public static ExecutionSettings deserialize(ByteBuffer buffer) { skippableTestsCoverage, testSettings, settingsCount, - diff); + diff, + configurationError); } } } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java index 1c1e31ec12f..fc68956aeaa 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java @@ -131,11 +131,11 @@ private Map create(TracerEnvironment tracerEnvironmen } catch (InterruptedException e) { Thread.currentThread().interrupt(); LOGGER.error("Interrupted while creating execution settings"); - return Collections.singletonMap(DEFAULT_SETTINGS, ExecutionSettings.EMPTY); + return Collections.singletonMap(DEFAULT_SETTINGS, ExecutionSettings.REQUEST_ERROR); } catch (ExecutionException e) { LOGGER.error("Error while creating execution settings", e); - return Collections.singletonMap(DEFAULT_SETTINGS, ExecutionSettings.EMPTY); + return Collections.singletonMap(DEFAULT_SETTINGS, ExecutionSettings.REQUEST_ERROR); } finally { settingsExecutor.shutdownNow(); @@ -146,6 +146,10 @@ private Map create(TracerEnvironment tracerEnvironmen private Map doCreate( TracerEnvironment tracerEnvironment, CiVisibilitySettings settings, ExecutorService executor) throws InterruptedException, ExecutionException { + if (settings.isRequestError()) { + return Collections.singletonMap(DEFAULT_SETTINGS, ExecutionSettings.REQUEST_ERROR); + } + boolean itrEnabled = isFeatureEnabled( settings, CiVisibilitySettings::isItrEnabled, Config::isCiVisibilityItrEnabled); @@ -287,7 +291,8 @@ private Map doCreate( quarantinedTestsByModule.getOrDefault(moduleName, Collections.emptyList()), disabledTestsByModule.getOrDefault(moduleName, Collections.emptyList()), attemptToFixTestsByModule.getOrDefault(moduleName, Collections.emptyList()), - pullRequestDiff)); + pullRequestDiff, + false)); } return settingsByModule; } @@ -307,8 +312,8 @@ private CiVisibilitySettings getCiVisibilitySettings(TracerEnvironment tracerEnv } } catch (Exception e) { - LOGGER.warn("Error while obtaining CI Visibility settings", e); - return CiVisibilitySettings.DEFAULT; + LOGGER.error("Error while obtaining CI Visibility settings", e); + return CiVisibilitySettings.REQUEST_ERROR; } } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestImpl.java index 4bf97d50e6b..c21e793f039 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestImpl.java @@ -5,6 +5,7 @@ import static datadog.trace.civisibility.Constants.CI_VISIBILITY_INSTRUMENTATION_NAME; import datadog.trace.api.Config; +import datadog.trace.api.DDTags; import datadog.trace.api.DDTraceId; import datadog.trace.api.civisibility.CIConstants; import datadog.trace.api.civisibility.DDTest; @@ -90,6 +91,7 @@ public TestImpl( Codeowners codeowners, CoverageStore.Factory coverageStoreFactory, ExecutionResults executionResults, + boolean configurationError, @Nonnull Collection capabilities, Consumer onSpanFinish) { this.instrumentation = instrumentation; @@ -157,6 +159,10 @@ public TestImpl( testDecorator.afterStart(span); + if (configurationError) { + span.setTag(DDTags.CI_LIBRARY_CONFIGURATION_ERROR, true); + } + metricCollector.add(CiVisibilityCountMetric.EVENT_CREATED, 1, instrumentation, EventType.TEST); if (instrumentationType == InstrumentationType.MANUAL_API) { diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestSuiteImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestSuiteImpl.java index c29fa175229..5e9df3f58b9 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestSuiteImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestSuiteImpl.java @@ -5,6 +5,7 @@ import static datadog.trace.civisibility.Constants.CI_VISIBILITY_INSTRUMENTATION_NAME; import datadog.trace.api.Config; +import datadog.trace.api.DDTags; import datadog.trace.api.civisibility.DDTestSuite; import datadog.trace.api.civisibility.config.LibraryCapability; import datadog.trace.api.civisibility.coverage.CoverageStore; @@ -53,6 +54,7 @@ public class TestSuiteImpl implements DDTestSuite { private final CoverageStore.Factory coverageStoreFactory; private final ExecutionResults executionResults; private final boolean parallelized; + private final boolean configurationError; private final Collection capabilities; private final Consumer onSpanFinish; private final SpanTagsPropagator tagsPropagator; @@ -75,6 +77,7 @@ public TestSuiteImpl( LinesResolver linesResolver, CoverageStore.Factory coverageStoreFactory, ExecutionResults executionResults, + boolean configurationError, @Nonnull Collection capabilities, Consumer onSpanFinish) { this.moduleSpanContext = moduleSpanContext; @@ -92,6 +95,7 @@ public TestSuiteImpl( this.linesResolver = linesResolver; this.coverageStoreFactory = coverageStoreFactory; this.executionResults = executionResults; + this.configurationError = configurationError; this.capabilities = capabilities; this.onSpanFinish = onSpanFinish; @@ -131,6 +135,10 @@ public TestSuiteImpl( testDecorator.afterStart(span); + if (configurationError) { + span.setTag(DDTags.CI_LIBRARY_CONFIGURATION_ERROR, true); + } + if (!parallelized) { activateSpanWithoutScope(span); } @@ -264,6 +272,7 @@ public TestImpl testStart( codeowners, coverageStoreFactory, executionResults, + configurationError, capabilities, tagsPropagator::propagateStatus); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java index 049a22e580f..0c0e9ccddeb 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java @@ -110,6 +110,10 @@ public BuildSystemModuleImpl( sessionSettings)); setTag(Tags.TEST_COMMAND, startCommand); + + if (executionSettings.isConfigurationError()) { + setTag(DDTags.CI_LIBRARY_CONFIGURATION_ERROR, true); + } } @ParametersAreNonnullByDefault diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemSessionImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemSessionImpl.java index 7b5361a8d0b..0acb65459c9 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemSessionImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemSessionImpl.java @@ -194,7 +194,8 @@ private void onModuleFinish(AgentSpan moduleSpan) { TagMergeSpec.of(Tags.TEST_ITR_TESTS_SKIPPING_COUNT, Long::sum), TagMergeSpec.of(DDTags.CI_ITR_TESTS_SKIPPED, Boolean::logicalOr), TagMergeSpec.of(Tags.TEST_TEST_MANAGEMENT_ENABLED, Boolean::logicalOr), - TagMergeSpec.of(DDTags.TEST_HAS_FAILED_TEST_REPLAY, Boolean::logicalOr)); + TagMergeSpec.of(DDTags.TEST_HAS_FAILED_TEST_REPLAY, Boolean::logicalOr), + TagMergeSpec.of(DDTags.CI_LIBRARY_CONFIGURATION_ERROR, Boolean::logicalOr)); } @Override diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/ProxyTestModule.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/ProxyTestModule.java index a101c16f18f..e9653dc0209 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/ProxyTestModule.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/ProxyTestModule.java @@ -212,6 +212,7 @@ public TestSuiteImpl testSuiteStart( linesResolver, coverageStoreFactory, executionResults, + executionStrategy.getExecutionSettings().isConfigurationError(), capabilities, this::propagateTestFrameworkData); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestModule.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestModule.java index d2409dd07eb..af38cb09a90 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestModule.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestModule.java @@ -124,6 +124,10 @@ public int executionPriority(@Nullable TestIdentifier test, @Nonnull TestSourceD @Override public void end(@Nullable Long endTime) { ExecutionSettings executionSettings = executionStrategy.getExecutionSettings(); + if (executionSettings.isConfigurationError()) { + setTag(DDTags.CI_LIBRARY_CONFIGURATION_ERROR, true); + } + if (executionSettings.isCodeCoverageEnabled()) { setTag(Tags.TEST_CODE_COVERAGE_ENABLED, true); } @@ -185,6 +189,7 @@ public TestSuiteImpl testSuiteStart( linesResolver, coverageStoreFactory, executionResults, + executionStrategy.getExecutionSettings().isConfigurationError(), capabilities, tagsPropagator::propagateCiVisibilityTags); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestSession.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestSession.java index 9e04a31ab27..d1c7314374c 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestSession.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/headless/HeadlessTestSession.java @@ -94,7 +94,8 @@ private void onModuleFinish(AgentSpan moduleSpan) { TagMergeSpec.of(Tags.TEST_EARLY_FLAKE_ABORT_REASON), TagMergeSpec.of(DDTags.CI_ITR_TESTS_SKIPPED), TagMergeSpec.of(Tags.TEST_TEST_MANAGEMENT_ENABLED), - TagMergeSpec.of(DDTags.TEST_HAS_FAILED_TEST_REPLAY)); + TagMergeSpec.of(DDTags.TEST_HAS_FAILED_TEST_REPLAY), + TagMergeSpec.of(DDTags.CI_LIBRARY_CONFIGURATION_ERROR, Boolean::logicalOr)); } @Override diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/manualapi/ManualApiTestModule.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/manualapi/ManualApiTestModule.java index 53bcaebc4fa..a00c45a8fbc 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/manualapi/ManualApiTestModule.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/manualapi/ManualApiTestModule.java @@ -81,6 +81,7 @@ public ManualApiTestSuite testSuiteStart( linesResolver, coverageStoreFactory, executionResults, + false, Collections.emptyList(), tagsPropagator::propagateCiVisibilityTags); diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ConfigurationApiImplTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ConfigurationApiImplTest.groovy index f07a95a9989..d37abda8f52 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ConfigurationApiImplTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ConfigurationApiImplTest.groovy @@ -60,10 +60,10 @@ class ConfigurationApiImplTest extends Specification { where: agentless | compression | expectedSettings - false | false | new CiVisibilitySettings(false, false, false, false, false, false, false, false, false, EarlyFlakeDetectionSettings.DEFAULT, TestManagementSettings.DEFAULT, null) - false | true | new CiVisibilitySettings(true, true, true, true, true, true, true, true, true, EarlyFlakeDetectionSettings.DEFAULT, TestManagementSettings.DEFAULT, "main") - true | false | new CiVisibilitySettings(false, true, false, true, false, true, false, false, true, new EarlyFlakeDetectionSettings(true, [new ExecutionsByDuration(1000, 3)], 10), new TestManagementSettings(true, 10), "master") - true | true | new CiVisibilitySettings(false, false, true, true, false, false, true, true, false, new EarlyFlakeDetectionSettings(true, [new ExecutionsByDuration(5000, 3), new ExecutionsByDuration(120000, 2)], 10), new TestManagementSettings(true, 20), "prod") + false | false | new CiVisibilitySettings(false, false, false, false, false, false, false, false, false, EarlyFlakeDetectionSettings.DEFAULT, TestManagementSettings.DEFAULT, null, false) + false | true | new CiVisibilitySettings(true, true, true, true, true, true, true, true, true, EarlyFlakeDetectionSettings.DEFAULT, TestManagementSettings.DEFAULT, "main", false) + true | false | new CiVisibilitySettings(false, true, false, true, false, true, false, false, true, new EarlyFlakeDetectionSettings(true, [new ExecutionsByDuration(1000, 3)], 10), new TestManagementSettings(true, 10), "master", false) + true | true | new CiVisibilitySettings(false, false, true, true, false, false, true, true, false, new EarlyFlakeDetectionSettings(true, [new ExecutionsByDuration(5000, 3), new ExecutionsByDuration(120000, 2)], 10), new TestManagementSettings(true, 20), "prod", false) } def "test skippable tests request"() { diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ExecutionSettingsTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ExecutionSettingsTest.groovy index 423ff5b0ecf..082c0f60c87 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ExecutionSettingsTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ExecutionSettingsTest.groovy @@ -38,7 +38,8 @@ class ExecutionSettingsTest extends DDSpecification { new HashSet<>([]), new HashSet<>([]), new HashSet<>([]), - LineDiff.EMPTY), + LineDiff.EMPTY, + false), new ExecutionSettings( true, @@ -58,7 +59,8 @@ class ExecutionSettingsTest extends DDSpecification { new HashSet<>([new TestFQN("suite", "quarantined")]), new HashSet<>([new TestFQN("suite", "disabled")]), new HashSet<>([new TestFQN("suite", "attemptToFix")]), - new LineDiff(["path": lines()]) + new LineDiff(["path": lines()]), + false ), new ExecutionSettings( @@ -84,6 +86,7 @@ class ExecutionSettingsTest extends DDSpecification { new HashSet<>([new TestFQN("suite", "disabled"), new TestFQN("another", "another-disabled")]), new HashSet<>([new TestFQN("suite", "attemptToFix"), new TestFQN("another", "another-attemptToFix")]), new LineDiff(["path": lines(1, 2, 3)]), + false ), new ExecutionSettings( @@ -109,6 +112,7 @@ class ExecutionSettingsTest extends DDSpecification { new HashSet<>([new TestFQN("suite", "disabled"), new TestFQN("another", "another-disabled")]), new HashSet<>([new TestFQN("suite", "attemptToFix"), new TestFQN("another", "another-attemptToFix")]), new LineDiff(["path": lines(1, 2, 3), "path-b": lines(1, 2, 128, 257, 999)]), + true ), ] } diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/domain/TestImplTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/domain/TestImplTest.groovy index 56b1a8ab640..0e32ecc24ba 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/domain/TestImplTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/domain/TestImplTest.groovy @@ -141,6 +141,7 @@ class TestImplTest extends SpanWriterTest { codeowners, coverageStoreFactory, executionResults, + false, libraryCapabilities, SpanTagsPropagator.NOOP_PROPAGATOR ) diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/domain/TestSuiteImplTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/domain/TestSuiteImplTest.groovy index c7819669a85..520ae0e3f2c 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/domain/TestSuiteImplTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/domain/TestSuiteImplTest.groovy @@ -84,6 +84,7 @@ class TestSuiteImplTest extends SpanWriterTest { linesResolver, coverageStoreFactory, executionResults, + false, [], SpanTagsPropagator.NOOP_PROPAGATOR ) diff --git a/dd-trace-api/src/main/java/datadog/trace/api/DDTags.java b/dd-trace-api/src/main/java/datadog/trace/api/DDTags.java index c52034556c5..3c278803d8b 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/DDTags.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/DDTags.java @@ -77,6 +77,7 @@ public class DDTags { public static final String LIBRARY_VERSION_TAG_KEY = "library_version"; public static final String CI_ENV_VARS = "_dd.ci.env_vars"; public static final String CI_ITR_TESTS_SKIPPED = "_dd.ci.itr.tests_skipped"; + public static final String CI_LIBRARY_CONFIGURATION_ERROR = "_dd.ci.library_configuration_error"; public static final String TEST_IS_USER_PROVIDED_SERVICE = "_dd.test.is_user_provided_service"; public static final String TEST_HAS_FAILED_TEST_REPLAY = "_dd.test.has_failed_test_replay"; public static final String MEASURED = "_dd.measured";