Skip to content

Update capabilities tagging to use versioning #8540

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package datadog.trace.civisibility.config;

import com.squareup.moshi.FromJson;
import com.squareup.moshi.Json;
import com.squareup.moshi.JsonAdapter;
import com.squareup.moshi.Moshi;
import com.squareup.moshi.ToJson;
Expand Down Expand Up @@ -65,6 +66,7 @@ public class ConfigurationApiImpl implements ConfigurationApi {
private final JsonAdapter<EnvelopeDto<CiVisibilitySettings>> settingsResponseAdapter;
private final JsonAdapter<MultiEnvelopeDto<TestIdentifierJson>> testIdentifiersResponseAdapter;
private final JsonAdapter<EnvelopeDto<KnownTestsDto>> testFullNamesResponseAdapter;
private final JsonAdapter<EnvelopeDto<TestManagementDto>> testManagementRequestAdapter;
private final JsonAdapter<EnvelopeDto<TestManagementTestsDto>> testManagementTestsResponseAdapter;
private final JsonAdapter<EnvelopeDto<ChangedFiles>> changedFilesResponseAdapter;

Expand Down Expand Up @@ -108,6 +110,11 @@ public ConfigurationApiImpl(BackendApi backendApi, CiVisibilityMetricCollector m
ConfigurationApiImpl.class, EnvelopeDto.class, KnownTestsDto.class);
testFullNamesResponseAdapter = moshi.adapter(testFullNamesResponseType);

ParameterizedType testManagementRequestType =
Types.newParameterizedTypeWithOwner(
ConfigurationApiImpl.class, EnvelopeDto.class, TestManagementDto.class);
testManagementRequestAdapter = moshi.adapter(testManagementRequestType);

ParameterizedType testManagementTestsResponseType =
Types.newParameterizedTypeWithOwner(
ConfigurationApiImpl.class, EnvelopeDto.class, TestManagementTestsDto.class);
Expand Down Expand Up @@ -329,9 +336,16 @@ public Map<TestSetting, Map<String, Collection<TestFQN>>> getTestManagementTests
.build();

String uuid = uuidGenerator.get();
EnvelopeDto<TracerEnvironment> request =
new EnvelopeDto<>(new DataDto<>(uuid, "ci_app_libraries_tests_request", tracerEnvironment));
String json = requestAdapter.toJson(request);
EnvelopeDto<TestManagementDto> request =
new EnvelopeDto<>(
new DataDto<>(
uuid,
"ci_app_libraries_tests_request",
new TestManagementDto(
tracerEnvironment.getRepositoryUrl(),
tracerEnvironment.getCommitMessage(),
tracerEnvironment.getConfigurations().getTestBundle())));
String json = testManagementRequestAdapter.toJson(request);
RequestBody requestBody = RequestBody.create(JSON, json);
TestManagementTestsDto testManagementTestsDto =
backendApi.post(
Expand Down Expand Up @@ -520,6 +534,22 @@ private KnownTestsDto(Map<String, Map<String, List<String>>> tests) {
}
}

private static final class TestManagementDto {
@Json(name = "repository_url")
private final String repositoryUrl;

@Json(name = "commit_message")
private final String commitMessage;

private final String module;

private TestManagementDto(String repositoryUrl, String commitMessage, String module) {
this.repositoryUrl = repositoryUrl;
this.commitMessage = commitMessage;
this.module = module;
}
}

private static final class TestManagementTestsDto {
private static final class Properties {
private final Map<String, Boolean> properties;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package datadog.trace.civisibility.config;

import datadog.trace.api.Config;
import datadog.trace.api.civisibility.CIConstants;
import datadog.trace.api.civisibility.config.LibraryCapability;
import datadog.trace.api.civisibility.config.TestFQN;
import datadog.trace.api.civisibility.config.TestIdentifier;
import datadog.trace.api.civisibility.config.TestMetadata;
Expand Down Expand Up @@ -232,44 +229,6 @@ public Diff getPullRequestDiff() {
return pullRequestDiff;
}

@Nonnull
public Map<LibraryCapability, Boolean> getCapabilitiesStatus(
Collection<LibraryCapability> capabilities) {
Map<LibraryCapability, Boolean> status = new EnumMap<>(LibraryCapability.class);

for (LibraryCapability c : capabilities) {
switch (c) {
case TIA:
status.put(c, isTestSkippingEnabled());
break;
case EFD:
EarlyFlakeDetectionSettings efdSettings = getEarlyFlakeDetectionSettings();
status.put(c, efdSettings.isEnabled());
break;
case ATR:
status.put(c, isFlakyTestRetriesEnabled());
break;
case IMPACTED:
status.put(c, isImpactedTestsDetectionEnabled());
break;
case FAIL_FAST:
String testOrder = Config.get().getCiVisibilityTestOrder();
status.put(c, CIConstants.FAIL_FAST_TEST_ORDER.equalsIgnoreCase(testOrder));
break;
case QUARANTINE:
case DISABLED:
case ATTEMPT_TO_FIX:
TestManagementSettings testManagementSettings = getTestManagementSettings();
status.put(c, testManagementSettings.isEnabled());
break;
default:
break;
}
}

return status;
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ private TracerEnvironment buildTracerEnvironment(JvmInfo jvmInfo, @Nullable Stri
.repositoryUrl(gitInfo.getRepositoryURL())
.branch(gitInfo.getBranch())
.sha(gitInfo.getCommit().getSha())
.commitMessage(gitInfo.getCommit().getFullMessage())
.osPlatform(wellKnownTags.getOsPlatform().toString())
.osArchitecture(wellKnownTags.getOsArch().toString())
.osVersion(wellKnownTags.getOsVersion().toString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ public class TracerEnvironment {
private final String branch;
private final String sha;

@Json(name = "commit_message")
private final String commitMessage;

@Json(name = "test_level")
private final String testLevel = "test";

Expand All @@ -27,19 +30,25 @@ private TracerEnvironment(
String repositoryUrl,
String branch,
String sha,
String commitMessage,
Configurations configurations) {
this.service = service;
this.env = env;
this.repositoryUrl = repositoryUrl;
this.branch = branch;
this.sha = sha;
this.commitMessage = commitMessage;
this.configurations = configurations;
}

public String getSha() {
return sha;
}

public String getCommitMessage() {
return commitMessage;
}

public String getService() {
return service;
}
Expand Down Expand Up @@ -82,6 +91,9 @@ public String toString() {
+ ", sha='"
+ sha
+ '\''
+ ", commitMessage='"
+ commitMessage
+ '\''
+ ", testLevel='"
+ testLevel
+ '\''
Expand All @@ -100,6 +112,7 @@ public static final class Builder {
private String repositoryUrl;
private String branch;
private String sha;
private String commitMessage;
private String osPlatform;
private String osArchitecture;
private String osVersion;
Expand Down Expand Up @@ -135,6 +148,11 @@ public Builder sha(String sha) {
return this;
}

public Builder commitMessage(String commitMessage) {
this.commitMessage = commitMessage;
return this;
}

public Builder osPlatform(String osPlatform) {
this.osPlatform = osPlatform;
return this;
Expand Down Expand Up @@ -187,6 +205,7 @@ public TracerEnvironment build() {
repositoryUrl,
branch,
sha,
commitMessage,
new Configurations(
osPlatform,
osArchitecture,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.function.Consumer;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -87,7 +86,7 @@ public TestImpl(
Codeowners codeowners,
CoverageStore.Factory coverageStoreFactory,
ExecutionResults executionResults,
@Nonnull Map<LibraryCapability, Boolean> libraryCapabilities,
@Nonnull Collection<LibraryCapability> capabilities,
Consumer<AgentSpan> onSpanFinish) {
this.instrumentation = instrumentation;
this.metricCollector = metricCollector;
Expand Down Expand Up @@ -146,8 +145,8 @@ public TestImpl(
span.setTag(Tags.ITR_CORRELATION_ID, itrCorrelationId);
}

for (Map.Entry<LibraryCapability, Boolean> entry : libraryCapabilities.entrySet()) {
span.setTag(entry.getKey().asTag(), entry.getValue());
for (LibraryCapability capability : capabilities) {
span.setTag(capability.asTag(), capability.getVersion());
}

testDecorator.afterStart(span);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
import datadog.trace.civisibility.utils.SpanUtils;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;
import java.util.function.Consumer;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -54,7 +53,7 @@ public class TestSuiteImpl implements DDTestSuite {
private final CoverageStore.Factory coverageStoreFactory;
private final ExecutionResults executionResults;
private final boolean parallelized;
private final Map<LibraryCapability, Boolean> libraryCapabilities;
private final Collection<LibraryCapability> capabilities;
private final Consumer<AgentSpan> onSpanFinish;

public TestSuiteImpl(
Expand All @@ -75,7 +74,7 @@ public TestSuiteImpl(
LinesResolver linesResolver,
CoverageStore.Factory coverageStoreFactory,
ExecutionResults executionResults,
@Nonnull Map<LibraryCapability, Boolean> libraryCapabilities,
@Nonnull Collection<LibraryCapability> capabilities,
Consumer<AgentSpan> onSpanFinish) {
this.moduleSpanContext = moduleSpanContext;
this.moduleName = moduleName;
Expand All @@ -92,7 +91,7 @@ public TestSuiteImpl(
this.linesResolver = linesResolver;
this.coverageStoreFactory = coverageStoreFactory;
this.executionResults = executionResults;
this.libraryCapabilities = libraryCapabilities;
this.capabilities = capabilities;
this.onSpanFinish = onSpanFinish;

AgentTracer.SpanBuilder spanBuilder =
Expand Down Expand Up @@ -263,7 +262,7 @@ public TestImpl testStart(
codeowners,
coverageStoreFactory,
executionResults,
libraryCapabilities,
capabilities,
SpanUtils.propagateCiVisibilityTagsTo(span));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import datadog.trace.civisibility.test.ExecutionResults;
import datadog.trace.civisibility.test.ExecutionStrategy;
import java.util.Collection;
import java.util.Map;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import javax.annotation.Nonnull;
Expand Down Expand Up @@ -62,7 +61,7 @@ public class ProxyTestModule implements TestFrameworkModule {
private final LinesResolver linesResolver;
private final CoverageStore.Factory coverageStoreFactory;
private final Collection<TestFramework> testFrameworks = ConcurrentHashMap.newKeySet();
private final Map<LibraryCapability, Boolean> libraryCapabilities;
private final Collection<LibraryCapability> capabilities;

public ProxyTestModule(
AgentSpanContext parentProcessModuleContext,
Expand All @@ -77,7 +76,7 @@ public ProxyTestModule(
CoverageStore.Factory coverageStoreFactory,
ChildProcessCoverageReporter childProcessCoverageReporter,
SignalClient.Factory signalClientFactory,
Map<LibraryCapability, Boolean> libraryCapabilities) {
Collection<LibraryCapability> capabilities) {
this.parentProcessModuleContext = parentProcessModuleContext;
this.moduleName = moduleName;
this.executionStrategy = executionStrategy;
Expand All @@ -91,7 +90,7 @@ public ProxyTestModule(
this.codeowners = codeowners;
this.linesResolver = linesResolver;
this.coverageStoreFactory = coverageStoreFactory;
this.libraryCapabilities = libraryCapabilities;
this.capabilities = capabilities;
}

@Override
Expand Down Expand Up @@ -216,7 +215,7 @@ public TestSuiteImpl testSuiteStart(
linesResolver,
coverageStoreFactory,
executionResults,
libraryCapabilities,
capabilities,
this::propagateTestFrameworkData);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import datadog.trace.civisibility.source.SourcePathResolver;
import datadog.trace.civisibility.test.ExecutionStrategy;
import java.util.Collection;
import java.util.Map;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;

Expand All @@ -38,7 +37,7 @@ public class ProxyTestSession implements TestFrameworkSession {
private final ChildProcessCoverageReporter childProcessCoverageReporter;
private final SignalClient.Factory signalClientFactory;
private final ExecutionStrategy executionStrategy;
private final Map<LibraryCapability, Boolean> libraryCapabilities;
private final Collection<LibraryCapability> capabilities;

public ProxyTestSession(
AgentSpanContext parentProcessModuleContext,
Expand All @@ -64,8 +63,7 @@ public ProxyTestSession(
this.childProcessCoverageReporter = childProcessCoverageReporter;
this.signalClientFactory = signalClientFactory;
this.executionStrategy = executionStrategy;
this.libraryCapabilities =
executionStrategy.getExecutionSettings().getCapabilitiesStatus(capabilities);
this.capabilities = capabilities;
}

@Override
Expand All @@ -91,6 +89,6 @@ public TestFrameworkModule testModuleStart(String moduleName, @Nullable Long sta
coverageStoreFactory,
childProcessCoverageReporter,
signalClientFactory,
libraryCapabilities);
capabilities);
}
}
Loading