Skip to content

Commit 69e0706

Browse files
Implement attempt to fix tests (#8393)
1 parent c961816 commit 69e0706

File tree

205 files changed

+22997
-2276
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

205 files changed

+22997
-2276
lines changed

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/CiVisibilitySettings.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,9 @@ public CiVisibilitySettings fromJson(Map<String, Object> json) {
142142
getBoolean(json, "flaky_test_retries_enabled", false),
143143
getBoolean(json, "impacted_tests_enabled", false),
144144
getBoolean(json, "known_tests_enabled", false),
145-
EarlyFlakeDetectionSettingsJsonAdapter.INSTANCE.fromJson(
145+
EarlyFlakeDetectionSettings.JsonAdapter.INSTANCE.fromJson(
146146
(Map<String, Object>) json.get("early_flake_detection")),
147-
TestManagementSettingsJsonAdapter.INSTANCE.fromJson(
147+
TestManagementSettings.JsonAdapter.INSTANCE.fromJson(
148148
(Map<String, Object>) json.get("test_management")));
149149
}
150150

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ConfigurationApiImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public ConfigurationApiImpl(BackendApi backendApi, CiVisibilityMetricCollector m
8484
new Moshi.Builder()
8585
.add(ConfigurationsJsonAdapter.INSTANCE)
8686
.add(CiVisibilitySettings.JsonAdapter.INSTANCE)
87-
.add(EarlyFlakeDetectionSettingsJsonAdapter.INSTANCE)
87+
.add(EarlyFlakeDetectionSettings.JsonAdapter.INSTANCE)
8888
.add(MetaDtoJsonAdapter.INSTANCE)
8989
.build();
9090

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/EarlyFlakeDetectionSettings.java

+75-32
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
package datadog.trace.civisibility.config;
22

3+
import com.squareup.moshi.FromJson;
4+
import java.nio.ByteBuffer;
5+
import java.util.ArrayList;
36
import java.util.Collections;
7+
import java.util.Comparator;
48
import java.util.List;
9+
import java.util.Map;
510
import java.util.Objects;
11+
import java.util.concurrent.TimeUnit;
612

713
public class EarlyFlakeDetectionSettings {
814

@@ -34,15 +40,6 @@ public List<ExecutionsByDuration> getExecutionsByDuration() {
3440
return executionsByDuration;
3541
}
3642

37-
public int getExecutions(long durationMillis) {
38-
for (ExecutionsByDuration e : executionsByDuration) {
39-
if (durationMillis <= e.durationMillis) {
40-
return e.executions;
41-
}
42-
}
43-
return 0;
44-
}
45-
4643
@Override
4744
public boolean equals(Object o) {
4845
if (this == o) {
@@ -62,38 +59,84 @@ public int hashCode() {
6259
return Objects.hash(enabled, executionsByDuration, faultySessionThreshold);
6360
}
6461

65-
public static final class ExecutionsByDuration {
66-
public final long durationMillis;
67-
public final int executions;
68-
69-
public ExecutionsByDuration(long durationMillis, int executions) {
70-
this.durationMillis = durationMillis;
71-
this.executions = executions;
62+
public static final class Serializer {
63+
public static void serialize(
64+
datadog.trace.civisibility.ipc.serialization.Serializer serializer,
65+
EarlyFlakeDetectionSettings settings) {
66+
if (!settings.enabled) {
67+
serializer.write((byte) 0);
68+
return;
69+
}
70+
serializer.write((byte) 1);
71+
serializer.write(settings.faultySessionThreshold);
72+
serializer.write(settings.executionsByDuration, ExecutionsByDuration.Serializer::serialize);
7273
}
7374

74-
public long getDurationMillis() {
75-
return durationMillis;
76-
}
75+
public static EarlyFlakeDetectionSettings deserialize(ByteBuffer buf) {
76+
boolean enabled = datadog.trace.civisibility.ipc.serialization.Serializer.readByte(buf) != 0;
77+
if (!enabled) {
78+
return EarlyFlakeDetectionSettings.DEFAULT;
79+
}
7780

78-
public int getExecutions() {
79-
return executions;
81+
int faultySessionThreshold =
82+
datadog.trace.civisibility.ipc.serialization.Serializer.readInt(buf);
83+
List<ExecutionsByDuration> executionsByDuration =
84+
datadog.trace.civisibility.ipc.serialization.Serializer.readList(
85+
buf, ExecutionsByDuration.Serializer::deserialize);
86+
return new EarlyFlakeDetectionSettings(enabled, executionsByDuration, faultySessionThreshold);
8087
}
88+
}
89+
90+
public static final class JsonAdapter {
91+
public static final JsonAdapter INSTANCE = new JsonAdapter();
8192

82-
@Override
83-
public boolean equals(Object o) {
84-
if (this == o) {
85-
return true;
93+
@FromJson
94+
public EarlyFlakeDetectionSettings fromJson(Map<String, Object> json) {
95+
if (json == null) {
96+
return EarlyFlakeDetectionSettings.DEFAULT;
8697
}
87-
if (o == null || getClass() != o.getClass()) {
88-
return false;
98+
99+
Boolean enabled = (Boolean) json.get("enabled");
100+
Double faultySessionThreshold = (Double) json.get("faulty_session_threshold");
101+
102+
List<ExecutionsByDuration> executionsByDuration;
103+
Map<String, Double> slowTestRetries = (Map<String, Double>) json.get("slow_test_retries");
104+
if (slowTestRetries != null) {
105+
executionsByDuration = new ArrayList<>(slowTestRetries.size());
106+
for (Map.Entry<String, Double> e : slowTestRetries.entrySet()) {
107+
long durationMillis = parseDuration(e.getKey());
108+
int retries = e.getValue().intValue();
109+
executionsByDuration.add(new ExecutionsByDuration(durationMillis, retries));
110+
}
111+
executionsByDuration.sort(Comparator.comparingLong(r -> r.durationMillis));
112+
} else {
113+
executionsByDuration = Collections.emptyList();
89114
}
90-
ExecutionsByDuration that = (ExecutionsByDuration) o;
91-
return durationMillis == that.durationMillis && executions == that.executions;
115+
116+
return new EarlyFlakeDetectionSettings(
117+
enabled != null ? enabled : false,
118+
executionsByDuration,
119+
faultySessionThreshold != null ? faultySessionThreshold.intValue() : -1);
92120
}
93121

94-
@Override
95-
public int hashCode() {
96-
return Objects.hash(durationMillis, executions);
122+
private static long parseDuration(String duration) {
123+
char lastCharacter = duration.charAt(duration.length() - 1);
124+
int numericValue = Integer.parseInt(duration.substring(0, duration.length() - 1));
125+
TimeUnit timeUnit;
126+
switch (lastCharacter) {
127+
case 's':
128+
timeUnit = TimeUnit.SECONDS;
129+
break;
130+
case 'm':
131+
timeUnit = TimeUnit.MINUTES;
132+
break;
133+
case 'h':
134+
timeUnit = TimeUnit.HOURS;
135+
break;
136+
default:
137+
throw new IllegalArgumentException("Unexpected duration unit: " + lastCharacter);
138+
}
139+
return timeUnit.toMillis(numericValue);
97140
}
98141
}
99142
}

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/EarlyFlakeDetectionSettingsJsonAdapter.java

-64
This file was deleted.

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/EarlyFlakeDetectionSettingsSerializer.java

-46
This file was deleted.

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettings.java

+34-18
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import datadog.trace.api.civisibility.config.TestMetadata;
66
import datadog.trace.civisibility.diff.Diff;
77
import datadog.trace.civisibility.diff.LineDiff;
8-
import datadog.trace.civisibility.ipc.serialization.Serializer;
98
import java.nio.ByteBuffer;
109
import java.util.BitSet;
1110
import java.util.Collection;
@@ -272,7 +271,7 @@ public int hashCode() {
272271
pullRequestDiff);
273272
}
274273

275-
public static class ExecutionSettingsSerializer {
274+
public static class Serializer {
276275

277276
private static final int ITR_ENABLED_FLAG = 1;
278277
private static final int CODE_COVERAGE_ENABLED_FLAG = 2;
@@ -281,7 +280,8 @@ public static class ExecutionSettingsSerializer {
281280
private static final int IMPACTED_TESTS_DETECTION_ENABLED_FLAG = 16;
282281

283282
public static ByteBuffer serialize(ExecutionSettings settings) {
284-
Serializer s = new Serializer();
283+
datadog.trace.civisibility.ipc.serialization.Serializer s =
284+
new datadog.trace.civisibility.ipc.serialization.Serializer();
285285

286286
byte flags =
287287
(byte)
@@ -294,59 +294,75 @@ public static ByteBuffer serialize(ExecutionSettings settings) {
294294
: 0));
295295
s.write(flags);
296296

297-
EarlyFlakeDetectionSettingsSerializer.serialize(s, settings.earlyFlakeDetectionSettings);
297+
EarlyFlakeDetectionSettings.Serializer.serialize(s, settings.earlyFlakeDetectionSettings);
298298

299-
TestManagementSettingsSerializer.serialize(s, settings.testManagementSettings);
299+
TestManagementSettings.Serializer.serialize(s, settings.testManagementSettings);
300300

301301
s.write(settings.itrCorrelationId);
302302
s.write(
303303
settings.skippableTests,
304304
TestIdentifierSerializer::serialize,
305305
TestMetadataSerializer::serialize);
306306

307-
s.write(settings.skippableTestsCoverage, Serializer::write, Serializer::write);
307+
s.write(
308+
settings.skippableTestsCoverage,
309+
datadog.trace.civisibility.ipc.serialization.Serializer::write,
310+
datadog.trace.civisibility.ipc.serialization.Serializer::write);
308311

309-
s.write(settings.testSettings, TestFQNSerializer::serialize, Serializer::write);
310312
s.write(
311-
settings.settingsCount, TestSetting.TestSettingsSerializer::serialize, Serializer::write);
313+
settings.testSettings,
314+
TestFQNSerializer::serialize,
315+
datadog.trace.civisibility.ipc.serialization.Serializer::write);
316+
s.write(
317+
settings.settingsCount,
318+
TestSetting.Serializer::serialize,
319+
datadog.trace.civisibility.ipc.serialization.Serializer::write);
312320

313321
Diff.SERIALIZER.serialize(settings.pullRequestDiff, s);
314322

315323
return s.flush();
316324
}
317325

318326
public static ExecutionSettings deserialize(ByteBuffer buffer) {
319-
byte flags = Serializer.readByte(buffer);
327+
byte flags = datadog.trace.civisibility.ipc.serialization.Serializer.readByte(buffer);
320328
boolean itrEnabled = (flags & ITR_ENABLED_FLAG) != 0;
321329
boolean codeCoverageEnabled = (flags & CODE_COVERAGE_ENABLED_FLAG) != 0;
322330
boolean testSkippingEnabled = (flags & TEST_SKIPPING_ENABLED_FLAG) != 0;
323331
boolean flakyTestRetriesEnabled = (flags & FLAKY_TEST_RETRIES_ENABLED_FLAG) != 0;
324332
boolean impactedTestsDetectionEnabled = (flags & IMPACTED_TESTS_DETECTION_ENABLED_FLAG) != 0;
325333

326334
EarlyFlakeDetectionSettings earlyFlakeDetectionSettings =
327-
EarlyFlakeDetectionSettingsSerializer.deserialize(buffer);
335+
EarlyFlakeDetectionSettings.Serializer.deserialize(buffer);
328336

329337
TestManagementSettings testManagementSettings =
330-
TestManagementSettingsSerializer.deserialize(buffer);
338+
TestManagementSettings.Serializer.deserialize(buffer);
331339

332-
String itrCorrelationId = Serializer.readString(buffer);
340+
String itrCorrelationId =
341+
datadog.trace.civisibility.ipc.serialization.Serializer.readString(buffer);
333342

334343
Map<TestIdentifier, TestMetadata> skippableTests =
335-
Serializer.readMap(
344+
datadog.trace.civisibility.ipc.serialization.Serializer.readMap(
336345
buffer, TestIdentifierSerializer::deserialize, TestMetadataSerializer::deserialize);
337346

338347
Map<String, BitSet> skippableTestsCoverage =
339-
Serializer.readMap(buffer, Serializer::readString, Serializer::readBitSet);
348+
datadog.trace.civisibility.ipc.serialization.Serializer.readMap(
349+
buffer,
350+
datadog.trace.civisibility.ipc.serialization.Serializer::readString,
351+
datadog.trace.civisibility.ipc.serialization.Serializer::readBitSet);
340352

341353
Map<TestFQN, Integer> testSettings =
342-
Serializer.readMap(buffer, TestFQNSerializer::deserialize, Serializer::readInt);
354+
datadog.trace.civisibility.ipc.serialization.Serializer.readMap(
355+
buffer,
356+
TestFQNSerializer::deserialize,
357+
datadog.trace.civisibility.ipc.serialization.Serializer::readInt);
358+
343359
EnumMap<TestSetting, Integer> settingsCount =
344360
(EnumMap<TestSetting, Integer>)
345-
Serializer.readMap(
361+
datadog.trace.civisibility.ipc.serialization.Serializer.readMap(
346362
buffer,
347363
() -> new EnumMap<>(TestSetting.class),
348-
TestSetting.TestSettingsSerializer::deserialize,
349-
Serializer::readInt);
364+
TestSetting.Serializer::deserialize,
365+
datadog.trace.civisibility.ipc.serialization.Serializer::readInt);
350366

351367
Diff diff = Diff.SERIALIZER.deserialize(buffer);
352368

0 commit comments

Comments
 (0)