Skip to content

Commit 9b370b2

Browse files
Add smoke test for impacted tests detection
1 parent 2fda4f6 commit 9b370b2

File tree

10 files changed

+553
-11
lines changed

10 files changed

+553
-11
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ public class CiVisibilityServices {
120120

121121
private static GitClient.Factory buildGitClientFactory(
122122
Config config, CiVisibilityMetricCollector metricCollector) {
123+
if (!config.isCiVisibilityGitClientEnabled()) {
124+
return r -> NoOpGitClient.INSTANCE;
125+
}
123126
try {
124127
ShellCommandExecutor shellCommandExecutor =
125128
new ShellCommandExecutor(new File("."), config.getCiVisibilityGitCommandTimeoutMillis());

dd-smoke-tests/backend-mock/src/main/groovy/datadog/smoketest/MockBackend.groovy

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import spock.util.concurrent.PollingConditions
99

1010
import java.util.concurrent.ConcurrentLinkedQueue
1111
import java.util.concurrent.CopyOnWriteArrayList
12+
import java.util.stream.Collectors
1213
import java.util.zip.GZIPInputStream
1314
import java.util.zip.GZIPOutputStream
1415

@@ -30,6 +31,7 @@ class MockBackend implements AutoCloseable {
3031

3132
private final Collection<Map<String, Object>> skippableTests = new CopyOnWriteArrayList<>()
3233
private final Collection<Map<String, Object>> flakyTests = new CopyOnWriteArrayList<>()
34+
private final Collection<String> changedFiles = new CopyOnWriteArrayList<>()
3335

3436
private boolean itrEnabled = true
3537
private boolean codeCoverageEnabled = true
@@ -38,6 +40,8 @@ class MockBackend implements AutoCloseable {
3840

3941
private boolean flakyRetriesEnabled = false
4042

43+
private boolean impactedTestsDetectionEnabled = false
44+
4145
void reset() {
4246
receivedTraces.clear()
4347
receivedCoverages.clear()
@@ -47,6 +51,7 @@ class MockBackend implements AutoCloseable {
4751

4852
skippableTests.clear()
4953
flakyTests.clear()
54+
changedFiles.clear()
5055
}
5156

5257
@Override
@@ -70,6 +75,14 @@ class MockBackend implements AutoCloseable {
7075
skippableTests.add(["module": module, "suite": suite, "name": name, "coverage": coverage ])
7176
}
7277

78+
void givenImpactedTestsDetection(boolean impactedTestsDetectionEnabled) {
79+
this.impactedTestsDetectionEnabled = impactedTestsDetectionEnabled
80+
}
81+
82+
void givenChangedFile(String relativePath) {
83+
changedFiles.add(relativePath)
84+
}
85+
7386
String getIntakeUrl() {
7487
return intakeServer.address.toString()
7588
}
@@ -113,7 +126,8 @@ class MockBackend implements AutoCloseable {
113126
"itr_enabled": $itrEnabled,
114127
"code_coverage": $codeCoverageEnabled,
115128
"tests_skipping": $testsSkippingEnabled,
116-
"flaky_test_retries_enabled": $flakyRetriesEnabled
129+
"flaky_test_retries_enabled": $flakyRetriesEnabled,
130+
"impacted_tests_enabled": $impactedTestsDetectionEnabled
117131
}
118132
}
119133
}""").bytes)
@@ -236,6 +250,23 @@ class MockBackend implements AutoCloseable {
236250

237251
response.status(200).send()
238252
}
253+
254+
prefix("/api/v2/ci/tests/diffs") {
255+
response.status(200)
256+
.addHeader("Content-Encoding", "gzip")
257+
.send(MockBackend.compress(("""
258+
{
259+
"data": {
260+
"type": "ci_app_tests_diffs_response",
261+
"id": "<some-hash>",
262+
"attributes": {
263+
"base_sha": "ef733331f7cee9b1c89d82df87942d8606edf3f7",
264+
"files": [ ${changedFiles.stream().map(f -> '"' + f + '"').collect(Collectors.joining(","))} ]
265+
}
266+
}
267+
}
268+
""").bytes))
269+
}
239270
}
240271
}
241272

dd-smoke-tests/maven/src/test/groovy/datadog/smoketest/MavenSmokeTest.groovy

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,12 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
7070
mockBackend.givenTestsSkipping(testsSkipping)
7171
mockBackend.givenSkippableTest("Maven Smoke Tests Project maven-surefire-plugin default-test", "datadog.smoke.TestSucceed", "test_to_skip_with_itr", ["src/main/java/datadog/smoke/Calculator.java": bits(9)])
7272

73-
def exitCode = whenRunningMavenBuild(jacocoCoverage, commandLineParams)
73+
mockBackend.givenImpactedTestsDetection(true)
74+
75+
def agentArgs = jacocoCoverage ? [
76+
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_JACOCO_PLUGIN_VERSION)}=${JACOCO_PLUGIN_VERSION}" as String
77+
] : []
78+
def exitCode = whenRunningMavenBuild(agentArgs, commandLineParams)
7479

7580
if (expectSuccess) {
7681
assert exitCode == 0
@@ -103,6 +108,26 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
103108
"test_successful_maven_run_multiple_forks" | LATEST_MAVEN_VERSION | 5 | 1 | true | true | false | true | [] | 17
104109
}
105110

111+
def "test impacted tests detection"() {
112+
givenWrapperPropertiesFile(mavenVersion)
113+
givenMavenProjectFiles(projectName)
114+
givenMavenDependenciesAreLoaded(projectName, mavenVersion)
115+
116+
mockBackend.givenImpactedTestsDetection(true)
117+
mockBackend.givenChangedFile("src/test/java/datadog/smoke/TestSucceed.java")
118+
119+
def exitCode = whenRunningMavenBuild([
120+
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_GIT_CLIENT_ENABLED)}=false" as String
121+
], [])
122+
assert exitCode == 0
123+
124+
verifyEventsAndCoverages(projectName, "maven", mavenVersion, mockBackend.waitForEvents(5), mockBackend.waitForCoverages(1))
125+
126+
where:
127+
projectName | mavenVersion
128+
"test_successful_maven_run_impacted_tests" | "3.9.9"
129+
}
130+
106131
private void givenWrapperPropertiesFile(String mavenVersion) {
107132
def distributionUrl = "https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/${mavenVersion}/apache-maven-${mavenVersion}-bin.zip"
108133

@@ -166,7 +191,7 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
166191
private static final Collection<String> LOADED_DEPENDENCIES = new HashSet<>()
167192

168193
private void retryUntilSuccessfulOrNoAttemptsLeft(List<String> mvnCommand) {
169-
def processBuilder = createProcessBuilder(mvnCommand, false, false)
194+
def processBuilder = createProcessBuilder(mvnCommand, false, [])
170195
for (int attempt = 0; attempt < DEPENDENCIES_DOWNLOAD_RETRIES; attempt++) {
171196
def exitCode = runProcess(processBuilder.start())
172197
if (exitCode == 0) {
@@ -176,8 +201,8 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
176201
throw new AssertionError((Object) "Tried $DEPENDENCIES_DOWNLOAD_RETRIES times to execute $mvnCommand and failed")
177202
}
178203

179-
private int whenRunningMavenBuild(boolean injectJacoco, List<String> additionalCommandLineParams) {
180-
def processBuilder = createProcessBuilder(["-B", "test"] + additionalCommandLineParams, true, injectJacoco)
204+
private int whenRunningMavenBuild(List<String> additionalAgentArgs, List<String> additionalCommandLineParams) {
205+
def processBuilder = createProcessBuilder(["-B", "test"] + additionalCommandLineParams, true, additionalAgentArgs)
181206

182207
processBuilder.environment().put("DD_API_KEY", "01234567890abcdef123456789ABCDEF")
183208

@@ -198,13 +223,13 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
198223
return p.exitValue()
199224
}
200225

201-
ProcessBuilder createProcessBuilder(List<String> mvnCommand, boolean runWithAgent, boolean injectJacoco) {
226+
ProcessBuilder createProcessBuilder(List<String> mvnCommand, boolean runWithAgent, List<String> additionalAgentArgs) {
202227
String mavenRunnerShadowJar = System.getProperty("datadog.smoketest.maven.jar.path")
203228
assert new File(mavenRunnerShadowJar).isFile()
204229

205230
List<String> command = new ArrayList<>()
206231
command.add(javaPath())
207-
command.addAll(jvmArguments(runWithAgent, injectJacoco))
232+
command.addAll(jvmArguments(runWithAgent, additionalAgentArgs))
208233
command.addAll((String[]) ["-jar", mavenRunnerShadowJar])
209234
command.addAll(programArguments())
210235
command.addAll(mvnCommand)
@@ -222,7 +247,7 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
222247
return System.getProperty("java.home") + separator + "bin" + separator + "java"
223248
}
224249

225-
List<String> jvmArguments(boolean runWithAgent, boolean injectJacoco) {
250+
List<String> jvmArguments(boolean runWithAgent, List<String> additionalAgentArgs) {
226251
def arguments = [
227252
"-D${MavenWrapperMain.MVNW_VERBOSE}=true".toString(),
228253
"-Duser.dir=${projectHome.toAbsolutePath()}".toString(),
@@ -249,9 +274,7 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
249274
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_AGENTLESS_URL)}=${mockBackend.intakeUrl}," +
250275
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_FLAKY_RETRY_ONLY_KNOWN_FLAKES)}=true,"
251276

252-
if (injectJacoco) {
253-
agentArgument += "${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_JACOCO_PLUGIN_VERSION)}=${JACOCO_PLUGIN_VERSION},"
254-
}
277+
agentArgument += additionalAgentArgs.join(",")
255278

256279
arguments += agentArgument.toString()
257280
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[ {
2+
"files" : [ {
3+
"filename" : "src/test/java/datadog/smoke/TestSucceed.java"
4+
}, {
5+
"filename" : "src/main/java/datadog/smoke/Calculator.java"
6+
} ],
7+
"span_id" : ${content_span_id_6},
8+
"test_session_id" : ${content_test_session_id},
9+
"test_suite_id" : ${content_test_suite_id}
10+
}, {
11+
"files" : [ {
12+
"filename" : "src/test/java/datadog/smoke/TestSucceed.java"
13+
}, {
14+
"filename" : "src/main/java/datadog/smoke/Calculator.java"
15+
} ],
16+
"span_id" : ${content_span_id_5},
17+
"test_session_id" : ${content_test_session_id},
18+
"test_suite_id" : ${content_test_suite_id}
19+
} ]

0 commit comments

Comments
 (0)