Skip to content
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

[WIP] Add file attribute to JUnit reports #8085

Closed
wants to merge 3 commits into from
Closed
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
17 changes: 17 additions & 0 deletions .circleci/upload_ciapp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ java_prop() {
echo "$JAVA_PROPS" | grep "$PROP_NAME" | head -n1 | cut -d'=' -f2 | xargs
}

# Add the 'file' attribute to the JUnit XML file
add_source_file_to_xml() {
local XML_FILE=$1
local ESCAPED_FILE

# Escape special characters in the filename (such as /, &, etc.)
ESCAPED_FILE=$(printf '%s' "$XML_FILE" | sed 's/[&/\]/\\&/g')

# Insert the 'file=ESCAPED_FILE' attribute in each <testcase>
sed -i '' "/<testcase/ s/\(<testcase[^>]*\)\(\/\)/\1 file=\"$ESCAPED_FILE\"\2/" "$XML_FILE"
}

# Upload test results to CI Visibility
junit_upload() {
# based on tracer implementation: https://github.com/DataDog/dd-trace-java/blob/master/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/TestDecorator.java#L55-L77
Expand All @@ -36,6 +48,11 @@ junit_upload() {
# Make sure we do not use DATADOG_API_KEY from the environment
unset DATADOG_API_KEY

# Modify the JUnit XML results by adding the 'file' attribute
for XML_FILE in ./results/*.xml; do
add_source_file_to_xml "$XML_FILE"
done

# Upload test results to production environment like all other CI jobs
junit_upload "$DATADOG_API_KEY_PROD"
# And also upload to staging environment to benefit from the new features not yet released
Expand Down
2 changes: 1 addition & 1 deletion dd-java-agent/agent-jmxfetch/integrations-core
4 changes: 4 additions & 0 deletions dd-java-agent/instrumentation/jdbc/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ addTestSuiteForDir('latestDepTest', 'test')
addTestSuiteExtendingForDir('latestDepJava11Test', 'latestDepTest', 'test')

dependencies {
// junit extension
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.x.x'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.x.x'

compileOnly group: 'com.zaxxer', name: 'HikariCP', version: '2.4.0'
testImplementation(testFixtures(project(':dd-java-agent:agent-iast')))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ import datadog.trace.api.Config
import datadog.trace.api.DDSpanTypes
import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags
import datadog.trace.bootstrap.instrumentation.api.Tags
import datadog.trace.test.util.TestSourceFileExtension
import org.apache.derby.jdbc.EmbeddedDataSource
import org.h2.jdbcx.JdbcDataSource
import org.junit.jupiter.api.extension.ExtendWith
import spock.lang.Shared
import test.TestConnection
import test.WrappedConnection
Expand All @@ -24,6 +26,7 @@ import static datadog.trace.agent.test.utils.TraceUtils.basicSpan
import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace
import static datadog.trace.api.config.TraceInstrumentationConfig.DB_CLIENT_HOST_SPLIT_BY_INSTANCE

@ExtendWith(TestSourceFileExtension)
abstract class JDBCInstrumentationTest extends VersionedNamingTestBase {

@Shared
Expand Down Expand Up @@ -752,7 +755,7 @@ abstract class JDBCInstrumentationTest extends VersionedNamingTestBase {
for (int i = 0; i < numQueries; ++i) {
res[i] == 3
}
assertTraces(5) {
assertTraces(6) {
trace(1) {
span {
operationName this.operation(dbType)
Expand Down Expand Up @@ -849,6 +852,7 @@ abstract class JDBCInstrumentationTest extends VersionedNamingTestBase {
protected abstract boolean dbmTraceInjected()
}

@ExtendWith(TestSourceFileExtension)
class JDBCInstrumentationV0Test extends JDBCInstrumentationTest {

@Override
Expand All @@ -872,6 +876,7 @@ class JDBCInstrumentationV0Test extends JDBCInstrumentationTest {
}
}

TestSourceFileExtension
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be inside extendwith?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, but for some reason codenarc won't pass unless this specific line is outside and I remove the "redundant" .class specifications when I try to use @ExtendWith(TestSourceFileExtension.class).

class JDBCInstrumentationV1ForkedTest extends JDBCInstrumentationTest {

@Override
Expand All @@ -895,6 +900,7 @@ class JDBCInstrumentationV1ForkedTest extends JDBCInstrumentationTest {
}
}

@ExtendWith(TestSourceFileExtension)
class JDBCInstrumentationDBMTraceInjectedForkedTest extends JDBCInstrumentationTest {

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package datadog.trace.test.util

import org.junit.jupiter.api.extension.ExtensionContext
import org.junit.jupiter.api.extension.TestWatcher

class TestSourceFileExtension implements TestWatcher {
TestSourceFileExtension() {
System.out.println("TestSourceFileExtension initialized!")
}

@Override
void testSuccessful(ExtensionContext context) {
System.out.println("test was successful!")
getTestData(context)
}

@Override
void testFailed(ExtensionContext context, Throwable cause) {
System.out.println("test failed!")
getTestData(context)
}

@Override
void testAborted(ExtensionContext context, Throwable cause) {
System.out.println("test aborted!")
getTestData(context)
}

@Override
void testDisabled(ExtensionContext context, Optional<String> reason) {
System.out.println("test disabled!")
getTestData(context)
}

private static void getTestData(ExtensionContext context) {
String testClassName = context.getTestClass().get().getSimpleName()
String testMethodName = context.getTestMethod().get().getName()
String className = context.getClass()
String requiredTestClassName = context.getRequiredTestClass().getName()
String requiredTestMethodName = context.getRequiredTestMethod().getName()

System.out.println("--------------------------")
System.out.println("testClassName: " + testClassName)
System.out.println("testMethodName: " + testMethodName)
System.out.println("className: " + className)
System.out.println("requiredTestClassName: " + requiredTestClassName)
System.out.println("requiredTestMethodName: " + requiredTestMethodName)
System.out.println("--------------------------")
}
}
Loading