diff --git a/dd-java-agent/instrumentation/weaver/build.gradle b/dd-java-agent/instrumentation/weaver/build.gradle index 41cd569242d..27f3e8d666e 100644 --- a/dd-java-agent/instrumentation/weaver/build.gradle +++ b/dd-java-agent/instrumentation/weaver/build.gradle @@ -19,12 +19,14 @@ muzzle { } } -addTestSuiteForDir('latestDepTest', 'test') +addTestSuiteForDir('latestDepTest', 'latestDepTest') // weaver 0.8.4 is the earliest supported version before the org migration addTestSuiteForDir('weaver084Test', 'test') dependencies { compileOnly group: 'org.typelevel', name: 'weaver-cats_3', version: '0.9.0' + // Weaver is published for Scala > 2.12 + compileOnly group: 'org.scala-lang', name: 'scala-library', version: '2.12.20' testImplementation project(':dd-java-agent:agent-ci-visibility:civisibility-instrumentation-test-fixtures') diff --git a/dd-java-agent/instrumentation/weaver/gradle.lockfile b/dd-java-agent/instrumentation/weaver/gradle.lockfile index 8a8d16e0d27..9be9664302b 100644 --- a/dd-java-agent/instrumentation/weaver/gradle.lockfile +++ b/dd-java-agent/instrumentation/weaver/gradle.lockfile @@ -241,13 +241,13 @@ org.typelevel:cats-kernel_3:2.10.0=compileClasspath,testCompileClasspath,testRun org.typelevel:cats-kernel_3:2.11.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.typelevel:cats-mtl_3:1.3.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.typelevel:scalac-compat-annotation_3:0.1.4=compileClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath,weaver084TestCompileClasspath,weaver084TestRuntimeClasspath -org.typelevel:weaver-cats-core_3:0.10.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.typelevel:weaver-cats-core_3:0.11.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.typelevel:weaver-cats-core_3:0.9.0=compileClasspath,testCompileClasspath,testRuntimeClasspath,weaver084TestCompileClasspath,weaver084TestRuntimeClasspath -org.typelevel:weaver-cats_3:0.10.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.typelevel:weaver-cats_3:0.11.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.typelevel:weaver-cats_3:0.9.0=compileClasspath,testCompileClasspath,testRuntimeClasspath,weaver084TestCompileClasspath,weaver084TestRuntimeClasspath -org.typelevel:weaver-core_3:0.10.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.typelevel:weaver-core_3:0.11.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.typelevel:weaver-core_3:0.9.0=compileClasspath,testCompileClasspath,testRuntimeClasspath,weaver084TestCompileClasspath,weaver084TestRuntimeClasspath -org.typelevel:weaver-framework_3:0.10.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.typelevel:weaver-framework_3:0.11.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.typelevel:weaver-framework_3:0.9.0=compileClasspath,testCompileClasspath,testRuntimeClasspath,weaver084TestCompileClasspath,weaver084TestRuntimeClasspath org.webjars:jquery:3.5.1=latestDepTestRuntimeClasspath,testRuntimeClasspath,weaver084TestRuntimeClasspath org.xmlresolver:xmlresolver:4.4.3=spotbugs diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/groovy/WeaverLatestDepTest.groovy b/dd-java-agent/instrumentation/weaver/src/latestDepTest/groovy/WeaverLatestDepTest.groovy new file mode 100644 index 00000000000..517cd06c778 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/groovy/WeaverLatestDepTest.groovy @@ -0,0 +1,59 @@ +import datadog.trace.api.DisableTestTrace +import datadog.trace.civisibility.CiVisibilityInstrumentationTest +import datadog.trace.instrumentation.weaver.DatadogWeaverReporter +import datadog.trace.instrumentation.weaver.WeaverIntegrationTestRunner +import datadog.trace.instrumentation.weaver.WeaverUtils +import org.example.TestFailed +import org.example.TestFailedExceptionPure +import org.example.TestFailedPure +import org.example.TestIgnored +import org.example.TestSucceed +import org.example.TestSucceedGlobalResource +import org.example.TestSucceedPure +import org.example.TestSucceedSuiteResource + +@DisableTestTrace(reason = "avoid self-tracing") +class WeaverLatestDepTest extends CiVisibilityInstrumentationTest { + + def "test #testcaseName"() { + runTests(tests) + + assertSpansData(testcaseName) + + where: + testcaseName | tests + "test-succeed-pure" | [TestSucceedPure] + "test-failed-pure" | [TestFailedPure] + "test-failed-exception-pure" | [TestFailedExceptionPure] + "test-succeeded" | [TestSucceed] + "test-failed" | [TestFailed] + "test-ignored" | [TestIgnored] + "test-succeed-suite-resource" | [TestSucceedSuiteResource] + "test-succeed-global-resource" | [TestSucceedGlobalResource] + } + + def "test capabilities tagging"() { + setup: + runTests([TestSucceed]) + + expect: + assertCapabilities(WeaverUtils.CAPABILITIES, 4) + } + + @Override + String instrumentedLibraryName() { + return "weaver" + } + + @Override + String instrumentedLibraryVersion() { + return WeaverUtils.weaverVersion + } + + void runTests(List> tests) { + DatadogWeaverReporter.start() + def testNames = tests.collect { it.name } + WeaverIntegrationTestRunner.runTests(testNames) + DatadogWeaverReporter.stop() + } +} diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-exception-pure/coverages.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-exception-pure/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-exception-pure/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-exception-pure/events.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-exception-pure/events.ftl new file mode 100644 index 00000000000..0f4509d3477 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-exception-pure/events.ftl @@ -0,0 +1,150 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.source.file" : "dummy_source_path", + "test.status" : "fail", + "test.suite" : "org.example.TestFailedExceptionPure", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count}, + "test.source.end" : 19, + "test.source.start" : 11 + }, + "name" : "weaver.test_suite", + "resource" : "org.example.TestFailedExceptionPure", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 1, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "error.message" : ${content_meta_error_message}, + "error.stack" : ${content_meta_error_stack}, + "error.type" : "java.lang.RuntimeException", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.name" : "pure exception test", + "test.source.file" : "dummy_source_path", + "test.status" : "fail", + "test.suite" : "org.example.TestFailedExceptionPure", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_2}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test", + "parent_id" : ${content_parent_id}, + "resource" : "org.example.TestFailedExceptionPure.pure exception test", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start_2}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id}, + "trace_id" : ${content_trace_id} + }, + "type" : "test", + "version" : 2 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_2}, + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test_session_end", + "test.command" : "weaver", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.status" : "fail", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_3}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test_session", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_3}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.status" : "fail", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_4} + }, + "name" : "weaver.test_module", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_4}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_module_end", + "version" : 1 +} ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-pure/coverages.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-pure/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-pure/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-pure/events.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-pure/events.ftl new file mode 100644 index 00000000000..108d0027475 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed-pure/events.ftl @@ -0,0 +1,150 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.source.file" : "dummy_source_path", + "test.status" : "fail", + "test.suite" : "org.example.TestFailedPure", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count}, + "test.source.end" : 19, + "test.source.start" : 11 + }, + "name" : "weaver.test_suite", + "resource" : "org.example.TestFailedPure", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 1, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "error.message" : ${content_meta_error_message}, + "error.stack" : ${content_meta_error_stack}, + "error.type" : "weaver.ExpectationFailed", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.name" : "pure test fails", + "test.source.file" : "dummy_source_path", + "test.status" : "fail", + "test.suite" : "org.example.TestFailedPure", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_2}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test", + "parent_id" : ${content_parent_id}, + "resource" : "org.example.TestFailedPure.pure test fails", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start_2}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id}, + "trace_id" : ${content_trace_id} + }, + "type" : "test", + "version" : 2 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_2}, + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test_session_end", + "test.command" : "weaver", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.status" : "fail", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_3}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test_session", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_3}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.status" : "fail", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_4} + }, + "name" : "weaver.test_module", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_4}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_module_end", + "version" : 1 +} ] diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed/coverages.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed/events.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed/events.ftl new file mode 100644 index 00000000000..f4588084cbe --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-failed/events.ftl @@ -0,0 +1,150 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.source.file" : "dummy_source_path", + "test.status" : "fail", + "test.suite" : "org.example.TestFailed", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count}, + "test.source.end" : 19, + "test.source.start" : 11 + }, + "name" : "weaver.test_suite", + "resource" : "org.example.TestFailed", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 1, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "error.message" : ${content_meta_error_message}, + "error.stack" : ${content_meta_error_stack}, + "error.type" : "weaver.ExpectationFailed", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.name" : "test fails", + "test.source.file" : "dummy_source_path", + "test.status" : "fail", + "test.suite" : "org.example.TestFailed", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_2}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test", + "parent_id" : ${content_parent_id}, + "resource" : "org.example.TestFailed.test fails", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start_2}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id}, + "trace_id" : ${content_trace_id} + }, + "type" : "test", + "version" : 2 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_2}, + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test_session_end", + "test.command" : "weaver", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.status" : "fail", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_3}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test_session", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_3}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.status" : "fail", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_4} + }, + "name" : "weaver.test_module", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_4}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_module_end", + "version" : 1 +} ] diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-ignored/coverages.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-ignored/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-ignored/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-ignored/events.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-ignored/events.ftl new file mode 100644 index 00000000000..c9592574a1e --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-ignored/events.ftl @@ -0,0 +1,148 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.source.file" : "dummy_source_path", + "test.status" : "skip", + "test.suite" : "org.example.TestIgnored", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count}, + "test.source.end" : 19, + "test.source.start" : 11 + }, + "name" : "weaver.test_suite", + "resource" : "org.example.TestIgnored", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.name" : "test ignored", + "test.skip_reason" : "ignore reason", + "test.source.file" : "dummy_source_path", + "test.status" : "skip", + "test.suite" : "org.example.TestIgnored", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_2}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test", + "parent_id" : ${content_parent_id}, + "resource" : "org.example.TestIgnored.test ignored", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start_2}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id}, + "trace_id" : ${content_trace_id} + }, + "type" : "test", + "version" : 2 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_2}, + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test_session_end", + "test.command" : "weaver", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.status" : "skip", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_3}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test_session", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_3}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.status" : "skip", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_4} + }, + "name" : "weaver.test_module", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_4}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_module_end", + "version" : 1 +} ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-global-resource/coverages.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-global-resource/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-global-resource/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-global-resource/events.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-global-resource/events.ftl new file mode 100644 index 00000000000..6a7b9c1ca06 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-global-resource/events.ftl @@ -0,0 +1,147 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.source.file" : "dummy_source_path", + "test.status" : "pass", + "test.suite" : "org.example.TestSucceedGlobalResource", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count}, + "test.source.end" : 19, + "test.source.start" : 11 + }, + "name" : "weaver.test_suite", + "resource" : "org.example.TestSucceedGlobalResource", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.name" : "Test Global Resource", + "test.source.file" : "dummy_source_path", + "test.status" : "pass", + "test.suite" : "org.example.TestSucceedGlobalResource", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_2}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test", + "parent_id" : ${content_parent_id}, + "resource" : "org.example.TestSucceedGlobalResource.Test Global Resource", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start_2}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id}, + "trace_id" : ${content_trace_id} + }, + "type" : "test", + "version" : 2 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_2}, + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test_session_end", + "test.command" : "weaver", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_3}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test_session", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_3}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_4} + }, + "name" : "weaver.test_module", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_4}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_module_end", + "version" : 1 +} ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-pure/coverages.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-pure/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-pure/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-pure/events.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-pure/events.ftl new file mode 100644 index 00000000000..84092c32abf --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-pure/events.ftl @@ -0,0 +1,147 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.source.file" : "dummy_source_path", + "test.status" : "pass", + "test.suite" : "org.example.TestSucceedPure", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count}, + "test.source.end" : 19, + "test.source.start" : 11 + }, + "name" : "weaver.test_suite", + "resource" : "org.example.TestSucceedPure", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.name" : "pure test succeeds", + "test.source.file" : "dummy_source_path", + "test.status" : "pass", + "test.suite" : "org.example.TestSucceedPure", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_2}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test", + "parent_id" : ${content_parent_id}, + "resource" : "org.example.TestSucceedPure.pure test succeeds", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start_2}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id}, + "trace_id" : ${content_trace_id} + }, + "type" : "test", + "version" : 2 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_2}, + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test_session_end", + "test.command" : "weaver", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_3}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test_session", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_3}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_4} + }, + "name" : "weaver.test_module", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_4}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_module_end", + "version" : 1 +} ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-suite-resource/coverages.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-suite-resource/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-suite-resource/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-suite-resource/events.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-suite-resource/events.ftl new file mode 100644 index 00000000000..3a3bee4592f --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeed-suite-resource/events.ftl @@ -0,0 +1,191 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.source.file" : "dummy_source_path", + "test.status" : "pass", + "test.suite" : "org.example.TestSucceedSuiteResource", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count}, + "test.source.end" : 19, + "test.source.start" : 11 + }, + "name" : "weaver.test_suite", + "resource" : "org.example.TestSucceedSuiteResource", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.name" : "Test 1 Shared Suite Resource", + "test.source.file" : "dummy_source_path", + "test.status" : "pass", + "test.suite" : "org.example.TestSucceedSuiteResource", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_2}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test", + "parent_id" : ${content_parent_id}, + "resource" : "org.example.TestSucceedSuiteResource.Test 1 Shared Suite Resource", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start_2}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id}, + "trace_id" : ${content_trace_id} + }, + "type" : "test", + "version" : 2 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.name" : "Test 2 Shared Suite Resource", + "test.source.file" : "dummy_source_path", + "test.status" : "pass", + "test.suite" : "org.example.TestSucceedSuiteResource", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_3}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test", + "parent_id" : ${content_parent_id}, + "resource" : "org.example.TestSucceedSuiteResource.Test 2 Shared Suite Resource", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_2}, + "start" : ${content_start_3}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id}, + "trace_id" : ${content_trace_id_2} + }, + "type" : "test", + "version" : 2 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_2}, + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test_session_end", + "test.command" : "weaver", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_4}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test_session", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_4}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_5}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_5} + }, + "name" : "weaver.test_module", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_5}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_module_end", + "version" : 1 +} ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeeded/coverages.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeeded/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeeded/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeeded/events.ftl b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeeded/events.ftl new file mode 100644 index 00000000000..c3e6eb60d52 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/resources/test-succeeded/events.ftl @@ -0,0 +1,147 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.source.file" : "dummy_source_path", + "test.status" : "pass", + "test.suite" : "org.example.TestSucceed", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count}, + "test.source.end" : 19, + "test.source.start" : 11 + }, + "name" : "weaver.test_suite", + "resource" : "org.example.TestSucceed", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test", + "test.codeowners" : "[\"owner1\",\"owner2\"]", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.name" : "test succeeds", + "test.source.file" : "dummy_source_path", + "test.status" : "pass", + "test.suite" : "org.example.TestSucceed", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_2}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test", + "parent_id" : ${content_parent_id}, + "resource" : "org.example.TestSucceed.test succeeds", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start_2}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id}, + "test_suite_id" : ${content_test_suite_id}, + "trace_id" : ${content_trace_id} + }, + "type" : "test", + "version" : 2 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_2}, + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test_session_end", + "test.command" : "weaver", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_3}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "weaver.test_session", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_3}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "weaver", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "weaver", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "weaver", + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_4} + }, + "name" : "weaver.test_module", + "resource" : "weaver", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_4}, + "test_module_id" : ${content_test_module_id}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_module_end", + "version" : 1 +} ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestFailed.scala b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestFailed.scala new file mode 100644 index 00000000000..c7ce794a08c --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestFailed.scala @@ -0,0 +1,13 @@ +package org.example + +import cats.effect._ +import weaver._ + +object TestFailed extends SimpleIOSuite { + test("test fails") { + for { + x <- IO.delay(1) + y <- IO.delay(2) + } yield expect(x == y) + } +} diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestFailedExceptionPure.scala b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestFailedExceptionPure.scala new file mode 100644 index 00000000000..516f196132c --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestFailedExceptionPure.scala @@ -0,0 +1,10 @@ +package org.example + +import weaver._ + +object TestFailedExceptionPure extends FunSuite { + test("pure exception test") { + expect(1 == 1) + throw new RuntimeException("Exception inside test.") + } +} diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestFailedPure.scala b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestFailedPure.scala new file mode 100644 index 00000000000..f8395ce0246 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestFailedPure.scala @@ -0,0 +1,9 @@ +package org.example + +import weaver._ + +object TestFailedPure extends FunSuite { + test("pure test fails") { + expect(2 == 1) + } +} diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestIgnored.scala b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestIgnored.scala new file mode 100644 index 00000000000..3b307ba44cc --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestIgnored.scala @@ -0,0 +1,12 @@ +package org.example + +import cats.effect._ +import weaver._ + +object TestIgnored extends SimpleIOSuite { + test("test ignored") { + for { + _ <- ignore("ignore reason") + } yield expect(1 == 1) + } +} diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceed.scala b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceed.scala new file mode 100644 index 00000000000..573d1d4266f --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceed.scala @@ -0,0 +1,13 @@ +package org.example + +import cats.effect._ +import weaver._ + +object TestSucceed extends SimpleIOSuite { + test("test succeeds") { + for { + x <- IO.delay(1) + y <- IO.delay(1) + } yield expect(x == y) + } +} diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceedGlobalResource.scala b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceedGlobalResource.scala new file mode 100644 index 00000000000..720fc08d59a --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceedGlobalResource.scala @@ -0,0 +1,35 @@ +package org.example + +import cats.effect.* +import weaver.* + +object MyResource extends GlobalResource { + override def sharedResources(global: GlobalWrite): Resource[IO, Unit] = + baseResources.flatMap(global.putR(_)) + + def baseResources: Resource[IO, String] = Resource.pure[IO, String]("hello world!") + + def sharedResourceOrFallback(read: GlobalRead): Resource[IO, String] = + read.getR[String]().flatMap { + case Some(value) => Resource.eval(IO(value)) + case None => baseResources + } +} + +class TestSucceedGlobalResourceClass(global: GlobalRead) extends IOSuite { + + import MyResource.* + + override type Res = String + + override def sharedResource: Resource[IO, String] = sharedResourceOrFallback(global) + + test("Test Global Resource") { sharedString => + IO(expect(sharedString == "hello world!")) + } +} + +object TestSucceedGlobalResource + extends TestSucceedGlobalResourceClass( + global = GlobalResourceF.Read.empty[IO](IO.asyncForIO) + ) {} diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceedPure.scala b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceedPure.scala new file mode 100644 index 00000000000..c4b00ad26c2 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceedPure.scala @@ -0,0 +1,9 @@ +package org.example + +import weaver._ + +object TestSucceedPure extends FunSuite { + test("pure test succeeds") { + expect(1 == 1) + } +} diff --git a/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceedSuiteResource.scala b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceedSuiteResource.scala new file mode 100644 index 00000000000..57b7d9f53a1 --- /dev/null +++ b/dd-java-agent/instrumentation/weaver/src/latestDepTest/scala/org/example/TestSucceedSuiteResource.scala @@ -0,0 +1,19 @@ +package org.example + +import cats.effect._ +import weaver._ + +object TestSucceedSuiteResource extends IOSuite { + + override type Res = Int + + override def sharedResource: Resource[IO, Res] = Resource.pure[IO, Res](42) + + test("Test 1 Shared Suite Resource") { res => + IO(expect(res == 42)) + } + + test("Test 2 Shared Suite Resource") { res => + IO(expect(res != 45)) + } +} diff --git a/dd-java-agent/instrumentation/weaver/src/main/java/datadog/trace/instrumentation/weaver/DatadogWeaverReporter.java b/dd-java-agent/instrumentation/weaver/src/main/java/datadog/trace/instrumentation/weaver/DatadogWeaverReporter.java index 2873c97a84a..404b7389b1c 100644 --- a/dd-java-agent/instrumentation/weaver/src/main/java/datadog/trace/instrumentation/weaver/DatadogWeaverReporter.java +++ b/dd-java-agent/instrumentation/weaver/src/main/java/datadog/trace/instrumentation/weaver/DatadogWeaverReporter.java @@ -12,6 +12,7 @@ import java.util.Collection; import java.util.Collections; import sbt.testing.TaskDef; +import scala.Option; import weaver.Result; import weaver.TestOutcome; import weaver.framework.RunEvent; @@ -116,26 +117,44 @@ public static void onTestFinished(TestFinished event, TaskDef taskDef) { startMicros, executionHistory); - if (testOutcome.result() instanceof Result.Ignored) { - Result.Ignored result = (Result.Ignored) testOutcome.result(); - String reason = result.reason().getOrElse(null); - TEST_EVENTS_HANDLER.onTestSkip(testDescriptor, reason); - } else if (testOutcome.result() instanceof Result.Cancelled) { - Result.Cancelled result = (Result.Cancelled) testOutcome.result(); - String reason = result.reason().getOrElse(null); - TEST_EVENTS_HANDLER.onTestSkip(testDescriptor, reason); - } else if (testOutcome.result() instanceof Result.Failure) { - Result.Failure result = (Result.Failure) testOutcome.result(); - Throwable throwable = result.source().getOrElse(null); - TEST_EVENTS_HANDLER.onTestFailure(testDescriptor, throwable); - } else if (testOutcome.result() instanceof Result.Failures) { - Result.Failures result = (Result.Failures) testOutcome.result(); - Throwable throwable = result.failures().head().source().getOrElse(null); - TEST_EVENTS_HANDLER.onTestFailure(testDescriptor, throwable); - } else if (testOutcome.result() instanceof Result.Exception) { - Result.Exception result = (Result.Exception) testOutcome.result(); - Throwable throwable = result.source(); - TEST_EVENTS_HANDLER.onTestFailure(testDescriptor, throwable); + if (testOutcome.result() != null) { + // Failed outcomes + if (WeaverUtils.isResultFailure(testOutcome.result())) { + Throwable throwable = + WeaverUtils.unwrap( + WeaverUtils.METHOD_HANDLES.invoke( + WeaverUtils.GET_FAILURE_SOURCE_HANDLE, testOutcome.result()), + Throwable.class); + TEST_EVENTS_HANDLER.onTestFailure(testDescriptor, throwable); + } else if (testOutcome.result() instanceof Result.Failures) { + Result.Failures result = (Result.Failures) testOutcome.result(); + Object headFailure = result.failures().head(); + Throwable throwable = + WeaverUtils.unwrap( + WeaverUtils.METHOD_HANDLES.invoke( + WeaverUtils.GET_FAILURE_SOURCE_HANDLE, headFailure), + Throwable.class); + TEST_EVENTS_HANDLER.onTestFailure(testDescriptor, throwable); + } else if (testOutcome.result() instanceof Result.Exception) { + Result.Exception result = (Result.Exception) testOutcome.result(); + Throwable throwable = result.source(); + TEST_EVENTS_HANDLER.onTestFailure(testDescriptor, throwable); + + // Skipped outcomes + } else if (testOutcome.result() instanceof Result.Ignored) { + Result.Ignored result = (Result.Ignored) testOutcome.result(); + String reason = + WeaverUtils.unwrap( + WeaverUtils.METHOD_HANDLES.invoke( + WeaverUtils.GET_IGNORED_REASON_HANDLE, testOutcome.result()), + String.class); + TEST_EVENTS_HANDLER.onTestSkip(testDescriptor, reason); + } else if (WeaverUtils.isResultCancelled(testOutcome.result())) { + Option reason = + WeaverUtils.METHOD_HANDLES.invoke( + WeaverUtils.GET_CANCELLED_REASON_HANDLE, testOutcome.result()); + TEST_EVENTS_HANDLER.onTestSkip(testDescriptor, reason.getOrElse(null)); + } } TEST_EVENTS_HANDLER.onTestFinish(testDescriptor, endMicros, executionHistory); diff --git a/dd-java-agent/instrumentation/weaver/src/main/java/datadog/trace/instrumentation/weaver/WeaverUtils.java b/dd-java-agent/instrumentation/weaver/src/main/java/datadog/trace/instrumentation/weaver/WeaverUtils.java index c06b8f5c6f5..e77328abd61 100644 --- a/dd-java-agent/instrumentation/weaver/src/main/java/datadog/trace/instrumentation/weaver/WeaverUtils.java +++ b/dd-java-agent/instrumentation/weaver/src/main/java/datadog/trace/instrumentation/weaver/WeaverUtils.java @@ -1,14 +1,19 @@ package datadog.trace.instrumentation.weaver; import datadog.trace.api.civisibility.config.LibraryCapability; +import datadog.trace.util.MethodHandles; import java.io.InputStream; +import java.lang.invoke.MethodHandle; import java.net.URL; import java.util.Collections; import java.util.List; import java.util.Properties; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import scala.Option; +import weaver.Result; import weaver.framework.SbtTask; public abstract class WeaverUtils { @@ -16,6 +21,21 @@ public abstract class WeaverUtils { private static final Logger log = LoggerFactory.getLogger(WeaverUtils.class); private static final ClassLoader CLASS_LOADER = SbtTask.class.getClassLoader(); + public static final MethodHandles METHOD_HANDLES = new MethodHandles(CLASS_LOADER); + + // Reflection used due to changes in Weaver v0.11: + // - Result.Cancelled was removed + private static final String RESULT_CANCELLED_CLASS_NAME = "weaver.Result$Cancelled"; + public static final MethodHandle GET_CANCELLED_REASON_HANDLE = + METHOD_HANDLES.method(getClass(RESULT_CANCELLED_CLASS_NAME), "reason"); + // - Ignore.reason() changed from Optional to String + public static final MethodHandle GET_IGNORED_REASON_HANDLE = + METHOD_HANDLES.method(Result.Ignored.class, "reason"); + // - Result.Failure changed to Result.Failures.Failure + private static final String RESULT_FAILURE_CLASS_NAME = "weaver.Result$Failure"; + private static final String RESULT_FAILURES_FAILURE_CLASS_NAME = "weaver.Result$Failures$Failure"; + // - Failure.source changed from Optional to Throwable + public static final MethodHandle GET_FAILURE_SOURCE_HANDLE = createFailureSourceHandle(); public static final List CAPABILITIES = Collections.emptyList(); @@ -54,4 +74,33 @@ public static Class getClass(String className) { return null; } } + + @Nullable + private static MethodHandle createFailureSourceHandle() { + Class newFailureClass = getClass(RESULT_FAILURES_FAILURE_CLASS_NAME); + if (newFailureClass != null) { + return METHOD_HANDLES.method(newFailureClass, "source"); + } + // Fallback to old location (Result.Failure) + return METHOD_HANDLES.method(getClass(RESULT_FAILURE_CLASS_NAME), "source"); + } + + public static boolean isResultFailure(@Nonnull Result result) { + String className = result.getClass().getName(); + return RESULT_FAILURE_CLASS_NAME.equals(className) + || RESULT_FAILURES_FAILURE_CLASS_NAME.equals(className); + } + + public static boolean isResultCancelled(@Nonnull Result result) { + String className = result.getClass().getName(); + return RESULT_CANCELLED_CLASS_NAME.equals(className); + } + + public static T unwrap(Object value, Class type) { + if (value instanceof Option) { + return ((Option) value).getOrElse(null); + } else { + return type.cast(value); + } + } }