Skip to content

Commit 67cbd2c

Browse files
Update tests to run with JUnit 5 (#9445)
1 parent 93c14b0 commit 67cbd2c

File tree

503 files changed

+1713
-1392
lines changed

Some content is hidden

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

503 files changed

+1713
-1392
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
# @DataDog/asm-java (AppSec/IAST)
4646
/buildSrc/call-site-instrumentation-plugin/ @DataDog/asm-java
4747
/dd-java-agent/agent-iast/ @DataDog/asm-java
48+
/dd-java-agent/appsec/appsec-test-fixtures/ @DataDog/asm-java
4849
/dd-java-agent/instrumentation/*iast* @DataDog/asm-java
4950
/dd-java-agent/instrumentation/*appsec* @DataDog/asm-java
5051
/dd-java-agent/instrumentation/json/ @DataDog/asm-java

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public final class Constants {
1111
* packages which will be loaded on the bootstrap classloader
1212
*
1313
* <p>Updates should be mirrored in
14-
* datadog.trace.agent.test.SpockRunner#BOOTSTRAP_PACKAGE_PREFIXES_COPY
14+
* datadog.trace.agent.test.BootstrapClasspathSetup#BOOTSTRAP_PACKAGE_PREFIXES_COPY
1515
*/
1616
public static final String[] BOOTSTRAP_PACKAGE_PREFIXES = {
1717
"datadog.slf4j",

dd-java-agent/agent-ci-visibility/build.gradle

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ buildscript {
2727

2828
plugins {
2929
id 'com.gradleup.shadow'
30-
id 'java-test-fixtures'
3130
}
3231

3332
apply from: "$rootDir/gradle/java.gradle"
@@ -42,29 +41,23 @@ dependencies {
4241
api libs.slf4j
4342

4443
implementation libs.bundles.asm
45-
implementation group: 'org.jacoco', name: 'org.jacoco.core', version: '0.8.12'
46-
implementation group: 'org.jacoco', name: 'org.jacoco.report', version: '0.8.12'
44+
implementation group: 'org.jacoco', name: 'org.jacoco.core', version: '0.8.13'
45+
implementation group: 'org.jacoco', name: 'org.jacoco.report', version: '0.8.13'
4746

4847
implementation project(':communication')
4948
implementation project(':components:json')
5049
implementation project(':internal-api')
5150
implementation project(':internal-api:internal-api-9')
5251

53-
testImplementation project(":utils:test-utils")
52+
testImplementation project(':dd-java-agent:testing')
5453
testImplementation("com.google.jimfs:jimfs:1.1") // an in-memory file system for testing code that works with files
5554

5655
testImplementation libs.scala
5756
testImplementation libs.kotlin
5857

59-
testFixturesApi project(':dd-java-agent:testing')
60-
testFixturesApi project(':utils:test-utils')
61-
62-
testFixturesApi group: 'org.skyscreamer', name: 'jsonassert', version: '1.5.1'
63-
testFixturesApi group: 'org.freemarker', name: 'freemarker', version: '2.3.31'
64-
testFixturesApi group: 'com.jayway.jsonpath', name: 'json-path', version: '2.8.0'
65-
testFixturesApi group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.16.0'
66-
testFixturesApi group: 'org.msgpack', name: 'jackson-dataformat-msgpack', version: '0.9.6'
67-
testFixturesApi group: 'org.xmlunit', name: 'xmlunit-core', version: '2.10.3'
58+
testImplementation group: 'org.skyscreamer', name: 'jsonassert', version: '1.5.1'
59+
testImplementation group: 'org.freemarker', name: 'freemarker', version: '2.3.31'
60+
testImplementation group: 'org.msgpack', name: 'jackson-dataformat-msgpack', version: '0.9.6'
6861

6962
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.9.2") // Required to update dependency lock files
7063
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# civisibility-instrumentation-test-fixtures
2+
3+
This project contains common logic used in CI Visibility instrumentation tests.
4+
5+
The reason it is defined as a separate project rather than using testFixtures plugin in the parent module is because it
6+
transitively pulls in :dd-java-agent:instrumentation-testing.
7+
The latter contains datadog.trace.agent.test.BootstrapClasspathSetupListener that, when present on the classpath,
8+
patches bootstrap CL adding some tracer classes to it.
9+
This is needed for the instrumentation tests, but may break regular unit tests.
10+
If this project used testFixtures, the listener would end up on the classpath of the parent project's unit tests, breaking them.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apply from: "$rootDir/gradle/java.gradle"
2+
apply from: "$rootDir/gradle/version.gradle"
3+
4+
dependencies {
5+
api project(':dd-java-agent:instrumentation-testing')
6+
api project(':dd-java-agent:agent-ci-visibility:civisibility-test-fixtures')
7+
}
8+
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package datadog.trace.civisibility
33
import com.fasterxml.jackson.databind.ObjectMapper
44
import datadog.communication.serialization.GrowableBuffer
55
import datadog.communication.serialization.msgpack.MsgPackWriter
6-
import datadog.trace.agent.test.AgentTestRunner
6+
import datadog.trace.agent.test.InstrumentationSpecification
77
import datadog.trace.agent.test.asserts.ListWriterAssert
88
import datadog.trace.api.Config
99
import datadog.trace.api.DDSpanTypes
@@ -50,6 +50,7 @@ import datadog.trace.civisibility.writer.ddintake.CiTestCycleMapperV1
5050
import datadog.trace.common.writer.ListWriter
5151
import datadog.trace.common.writer.RemoteMapper
5252
import datadog.trace.core.DDSpan
53+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
5354
import org.msgpack.jackson.dataformat.MessagePackFactory
5455

5556
import java.lang.reflect.Method
@@ -61,7 +62,7 @@ import java.util.concurrent.TimeUnit
6162
import java.util.function.Predicate
6263
import java.util.stream.Collectors
6364

64-
abstract class CiVisibilityInstrumentationTest extends AgentTestRunner {
65+
abstract class CiVisibilityInstrumentationTest extends InstrumentationSpecification {
6566

6667
public static final int SLOW_TEST_THRESHOLD_MILLIS = 1000
6768
public static final int VERY_SLOW_TEST_THRESHOLD_MILLIS = 2000
@@ -290,6 +291,7 @@ abstract class CiVisibilityInstrumentationTest extends AgentTestRunner {
290291
return true
291292
}
292293

294+
@SuppressFBWarnings("UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS")
293295
boolean waitForSpan(Predicate<DDSpan> predicate, long timeoutMillis) {
294296
long deadline = System.currentTimeMillis() + timeoutMillis
295297
synchronized (lock) {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apply from: "$rootDir/gradle/java.gradle"
2+
apply from: "$rootDir/gradle/version.gradle"
3+
4+
dependencies {
5+
api project(':dd-java-agent:agent-ci-visibility')
6+
api project(':dd-java-agent:testing')
7+
8+
api group: 'org.skyscreamer', name: 'jsonassert', version: '1.5.1'
9+
api group: 'org.freemarker', name: 'freemarker', version: '2.3.31'
10+
api group: 'com.jayway.jsonpath', name: 'json-path', version: '2.8.0'
11+
api group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.16.0'
12+
api group: 'org.msgpack', name: 'jackson-dataformat-msgpack', version: '0.9.6'
13+
api group: 'org.xmlunit', name: 'xmlunit-core', version: '2.10.3'
14+
}
15+
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ abstract class CiVisibilityTestUtils {
171171
println "Expected JSON: $expectedJson"
172172
println "Actual JSON: $actualJson"
173173
}
174-
throw new AssertionFailedError("Coverage report events mismatch", expectedJson, actualJson, e)
174+
throw new AssertionFailedError("Expected and actual JSON mismatch", expectedJson, actualJson, e)
175175
}
176176
}
177177

dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ConfigurationApiImplTest.groovy

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@ import datadog.trace.api.civisibility.config.TestFQN
1010
import datadog.trace.api.civisibility.config.TestIdentifier
1111
import datadog.trace.api.civisibility.config.TestMetadata
1212
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector
13-
import datadog.trace.civisibility.CiVisibilityTestUtils
1413
import datadog.trace.api.intake.Intake
14+
import freemarker.core.Environment
15+
import freemarker.core.InvalidReferenceException
16+
import freemarker.template.Template
17+
import freemarker.template.TemplateException
18+
import freemarker.template.TemplateExceptionHandler
1519
import okhttp3.HttpUrl
1620
import okhttp3.OkHttpClient
1721
import org.apache.commons.io.IOUtils
@@ -233,7 +237,7 @@ class ConfigurationApiImplTest extends Specification {
233237
httpServer {
234238
handlers {
235239
prefix(path) {
236-
def expectedRequestBody = CiVisibilityTestUtils.getFreemarkerTemplate(requestTemplate, requestData)
240+
def expectedRequestBody = getFreemarkerTemplate(requestTemplate, requestData)
237241

238242
def response = response
239243
try {
@@ -242,7 +246,7 @@ class ConfigurationApiImplTest extends Specification {
242246
response.status(400).send(error.getMessage().bytes)
243247
}
244248

245-
def responseBody = CiVisibilityTestUtils.getFreemarkerTemplate(responseTemplate, responseData).bytes
249+
def responseBody = getFreemarkerTemplate(responseTemplate, responseData).bytes
246250
def header = request.getHeader("Accept-Encoding")
247251
def gzipSupported = header != null && header.contains("gzip")
248252
if (gzipSupported) {
@@ -315,4 +319,37 @@ class ConfigurationApiImplTest extends Specification {
315319
}
316320
return bitSet
317321
}
322+
323+
static final TemplateExceptionHandler SUPPRESS_EXCEPTION_HANDLER = new TemplateExceptionHandler() {
324+
@Override
325+
void handleTemplateException(TemplateException e, Environment environment, Writer writer) throws TemplateException {
326+
if (e instanceof InvalidReferenceException) {
327+
writer.write('"<VALUE_MISSING>"')
328+
} else {
329+
throw e
330+
}
331+
}
332+
}
333+
334+
static final freemarker.template.Configuration FREEMARKER = new freemarker.template.Configuration(freemarker.template.Configuration.VERSION_2_3_30) { {
335+
setClassLoaderForTemplateLoading(ConfigurationApiImplTest.classLoader, "")
336+
setDefaultEncoding("UTF-8")
337+
setTemplateExceptionHandler(SUPPRESS_EXCEPTION_HANDLER)
338+
setLogTemplateExceptions(false)
339+
setWrapUncheckedExceptions(true)
340+
setFallbackOnNullLoopVariable(false)
341+
setNumberFormat("0.######")
342+
}
343+
}
344+
345+
static String getFreemarkerTemplate(String templatePath, Map<String, Object> replacements, List<Map<?, ?>> replacementsSource = []) {
346+
try {
347+
Template coveragesTemplate = FREEMARKER.getTemplate(templatePath)
348+
StringWriter coveragesOut = new StringWriter()
349+
coveragesTemplate.process(replacements, coveragesOut)
350+
return coveragesOut.toString()
351+
} catch (Exception e) {
352+
throw new RuntimeException("Could not get Freemarker template " + templatePath + "; replacements map: " + replacements + "; replacements source: " + replacementsSource, e)
353+
}
354+
}
318355
}

0 commit comments

Comments
 (0)