From 35a94bf17b908790d0daf064ae758abd25e0278e Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Mon, 13 Jul 2026 12:19:49 +0200 Subject: [PATCH 1/2] refactor: group karate instrumentation modules under karate/ --- .github/CODEOWNERS | 2 +- .../instrumentation/{ => karate}/karate-1.0/build.gradle | 0 .../instrumentation/{ => karate}/karate-1.0/gradle.lockfile | 0 .../datadog/trace/instrumentation/karate/ExecutionContext.java | 0 .../instrumentation/karate/KarateExecutionInstrumentation.java | 0 .../trace/instrumentation/karate/KarateInstrumentation.java | 0 .../datadog/trace/instrumentation/karate/KarateTracingHook.java | 0 .../java/datadog/trace/instrumentation/karate/KarateUtils.java | 0 .../trace/instrumentation/karate/TestEventsHandlerHolder.java | 0 .../{ => karate}/karate-1.0/src/test/groovy/KarateTest.groovy | 0 .../karate-1.0/src/test/java/org/example/Flaky.java | 0 .../{ => karate}/karate-1.0/src/test/java/org/example/Slow.java | 0 .../test/java/org/example/TestContinueOnStepFailureKarate.java | 0 .../src/test/java/org/example/TestFailedBuiltInRetryKarate.java | 0 .../karate-1.0/src/test/java/org/example/TestFailedKarate.java | 0 .../test/java/org/example/TestFailedParameterizedKarate.java | 0 .../src/test/java/org/example/TestFailedThenSucceedKarate.java | 0 .../src/test/java/org/example/TestParameterizedKarate.java | 0 .../test/java/org/example/TestParameterizedMoreCasesKarate.java | 0 .../src/test/java/org/example/TestSkippedFeatureKarate.java | 0 .../karate-1.0/src/test/java/org/example/TestSucceedKarate.java | 0 .../src/test/java/org/example/TestSucceedKarateSkipEfd.java | 0 .../src/test/java/org/example/TestSucceedKarateSlow.java | 0 .../src/test/java/org/example/TestSucceedOneCaseKarate.java | 0 .../src/test/java/org/example/TestSucceedParallelKarate.java | 0 .../src/test/java/org/example/TestUnskippableKarate.java | 0 .../src/test/java/org/example/TestWithSetupKarate.java | 0 .../karate-1.0/src/test/java/org/example/karate-config.js | 0 .../test/java/org/example/test_continue_on_step_failure.feature | 0 .../karate-1.0/src/test/java/org/example/test_failed.feature | 0 .../src/test/java/org/example/test_failed_parameterized.feature | 0 .../src/test/java/org/example/test_failed_then_succeed.feature | 0 .../src/test/java/org/example/test_parameterized.feature | 0 .../test/java/org/example/test_parameterized_more_cases.feature | 0 .../karate-1.0/src/test/java/org/example/test_succeed.feature | 0 .../src/test/java/org/example/test_succeed_one_case.feature | 0 .../src/test/java/org/example/test_succeed_skip_efd.feature | 0 .../src/test/java/org/example/test_succeed_slow.feature | 0 .../src/test/java/org/example/test_unskippable.feature | 0 .../src/test/java/org/example/test_with_setup.feature | 0 .../resources/test-attempt-to-fix-disabled-failed/coverages.ftl | 0 .../resources/test-attempt-to-fix-disabled-failed/events.ftl | 0 .../test-attempt-to-fix-disabled-succeeded/coverages.ftl | 0 .../resources/test-attempt-to-fix-disabled-succeeded/events.ftl | 0 .../src/test/resources/test-attempt-to-fix-failed/coverages.ftl | 0 .../src/test/resources/test-attempt-to-fix-failed/events.ftl | 0 .../test-attempt-to-fix-quarantined-failed/coverages.ftl | 0 .../resources/test-attempt-to-fix-quarantined-failed/events.ftl | 0 .../test-attempt-to-fix-quarantined-succeeded/coverages.ftl | 0 .../test-attempt-to-fix-quarantined-succeeded/events.ftl | 0 .../test/resources/test-attempt-to-fix-succeeded/coverages.ftl | 0 .../src/test/resources/test-attempt-to-fix-succeeded/events.ftl | 0 .../src/test/resources/test-built-in-retry/coverages.ftl | 0 .../src/test/resources/test-built-in-retry/events.ftl | 0 .../src/test/resources/test-disabled-failed/coverages.ftl | 0 .../src/test/resources/test-disabled-failed/events.ftl | 0 .../resources/test-efd-faulty-session-threshold/coverages.ftl | 0 .../test/resources/test-efd-faulty-session-threshold/events.ftl | 0 .../resources/test-efd-known-parameterized-test/coverages.ftl | 0 .../test/resources/test-efd-known-parameterized-test/events.ftl | 0 .../src/test/resources/test-efd-known-test/coverages.ftl | 0 .../src/test/resources/test-efd-known-test/events.ftl | 0 .../resources/test-efd-new-parameterized-test/coverages.ftl | 0 .../test/resources/test-efd-new-parameterized-test/events.ftl | 0 .../src/test/resources/test-efd-new-slow-test/coverages.ftl | 0 .../src/test/resources/test-efd-new-slow-test/events.ftl | 0 .../src/test/resources/test-efd-new-test/coverages.ftl | 0 .../karate-1.0/src/test/resources/test-efd-new-test/events.ftl | 0 .../src/test/resources/test-efd-skip-new-test/coverages.ftl | 0 .../src/test/resources/test-efd-skip-new-test/events.ftl | 0 .../src/test/resources/test-failed-then-succeed/coverages.ftl | 0 .../src/test/resources/test-failed-then-succeed/events.ftl | 0 .../karate-1.0/src/test/resources/test-failed/coverages.ftl | 0 .../karate-1.0/src/test/resources/test-failed/events.ftl | 0 .../resources/test-itr-skipping-parameterized/coverages.ftl | 0 .../test/resources/test-itr-skipping-parameterized/events.ftl | 0 .../src/test/resources/test-itr-skipping/coverages.ftl | 0 .../karate-1.0/src/test/resources/test-itr-skipping/events.ftl | 0 .../src/test/resources/test-itr-unskippable/coverages.ftl | 0 .../src/test/resources/test-itr-unskippable/events.ftl | 0 .../src/test/resources/test-parameterized/coverages.ftl | 0 .../karate-1.0/src/test/resources/test-parameterized/events.ftl | 0 .../test/resources/test-quarantined-failed-atr/coverages.ftl | 0 .../src/test/resources/test-quarantined-failed-atr/events.ftl | 0 .../test/resources/test-quarantined-failed-efd/coverages.ftl | 0 .../src/test/resources/test-quarantined-failed-efd/events.ftl | 0 .../test/resources/test-quarantined-failed-known/coverages.ftl | 0 .../src/test/resources/test-quarantined-failed-known/events.ftl | 0 .../src/test/resources/test-quarantined-failed/coverages.ftl | 0 .../src/test/resources/test-quarantined-failed/events.ftl | 0 .../resources/test-retry-continue-on-step-failure/coverages.ftl | 0 .../resources/test-retry-continue-on-step-failure/events.ftl | 0 .../src/test/resources/test-retry-failed/coverages.ftl | 0 .../karate-1.0/src/test/resources/test-retry-failed/events.ftl | 0 .../src/test/resources/test-retry-parameterized/coverages.ftl | 0 .../src/test/resources/test-retry-parameterized/events.ftl | 0 .../src/test/resources/test-skipped-feature/coverages.ftl | 0 .../src/test/resources/test-skipped-feature/events.ftl | 0 .../src/test/resources/test-succeed-parallel/coverages.ftl | 0 .../src/test/resources/test-succeed-parallel/events.ftl | 0 .../karate-1.0/src/test/resources/test-succeed/coverages.ftl | 0 .../karate-1.0/src/test/resources/test-succeed/events.ftl | 0 .../karate-1.0/src/test/resources/test-with-setup/coverages.ftl | 0 .../karate-1.0/src/test/resources/test-with-setup/events.ftl | 0 settings.gradle.kts | 2 +- 105 files changed, 2 insertions(+), 2 deletions(-) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/build.gradle (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/gradle.lockfile (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/ExecutionContext.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateExecutionInstrumentation.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateInstrumentation.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateTracingHook.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateUtils.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/TestEventsHandlerHolder.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/groovy/KarateTest.groovy (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/Flaky.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/Slow.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestContinueOnStepFailureKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestFailedBuiltInRetryKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestFailedKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestFailedParameterizedKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestFailedThenSucceedKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestParameterizedKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestParameterizedMoreCasesKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestSkippedFeatureKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestSucceedKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestSucceedKarateSkipEfd.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestSucceedKarateSlow.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestSucceedOneCaseKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestSucceedParallelKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestUnskippableKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/TestWithSetupKarate.java (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/karate-config.js (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_continue_on_step_failure.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_failed.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_failed_parameterized.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_failed_then_succeed.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_parameterized.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_parameterized_more_cases.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_succeed.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_succeed_one_case.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_succeed_skip_efd.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_succeed_slow.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_unskippable.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/java/org/example/test_with_setup.feature (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-failed/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-failed/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-succeeded/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-succeeded/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-failed/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-failed/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-failed/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-failed/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-succeeded/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-succeeded/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-succeeded/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-attempt-to-fix-succeeded/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-built-in-retry/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-built-in-retry/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-disabled-failed/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-disabled-failed/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-faulty-session-threshold/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-faulty-session-threshold/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-known-parameterized-test/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-known-parameterized-test/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-known-test/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-known-test/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-new-parameterized-test/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-new-parameterized-test/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-new-slow-test/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-new-slow-test/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-new-test/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-new-test/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-skip-new-test/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-efd-skip-new-test/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-failed-then-succeed/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-failed-then-succeed/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-failed/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-failed/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-itr-skipping-parameterized/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-itr-skipping-parameterized/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-itr-skipping/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-itr-skipping/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-itr-unskippable/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-itr-unskippable/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-parameterized/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-parameterized/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-quarantined-failed-atr/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-quarantined-failed-atr/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-quarantined-failed-efd/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-quarantined-failed-efd/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-quarantined-failed-known/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-quarantined-failed-known/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-quarantined-failed/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-quarantined-failed/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-retry-continue-on-step-failure/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-retry-continue-on-step-failure/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-retry-failed/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-retry-failed/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-retry-parameterized/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-retry-parameterized/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-skipped-feature/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-skipped-feature/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-succeed-parallel/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-succeed-parallel/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-succeed/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-succeed/events.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-with-setup/coverages.ftl (100%) rename dd-java-agent/instrumentation/{ => karate}/karate-1.0/src/test/resources/test-with-setup/events.ftl (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cce00af1d0d..703cec827ac 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -110,7 +110,7 @@ /dd-java-agent/instrumentation/cucumber-5.4/ @DataDog/ci-app-libraries /dd-java-agent/instrumentation/jacoco-0.8.9/ @DataDog/ci-app-libraries /dd-java-agent/instrumentation/junit @DataDog/ci-app-libraries -/dd-java-agent/instrumentation/karate-1.0/ @DataDog/ci-app-libraries +/dd-java-agent/instrumentation/karate/ @DataDog/ci-app-libraries /dd-java-agent/instrumentation/scalatest-3.0.8/ @DataDog/ci-app-libraries /dd-java-agent/instrumentation/selenium-3.13/ @DataDog/ci-app-libraries /dd-java-agent/instrumentation/testng/ @DataDog/ci-app-libraries diff --git a/dd-java-agent/instrumentation/karate-1.0/build.gradle b/dd-java-agent/instrumentation/karate/karate-1.0/build.gradle similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/build.gradle rename to dd-java-agent/instrumentation/karate/karate-1.0/build.gradle diff --git a/dd-java-agent/instrumentation/karate-1.0/gradle.lockfile b/dd-java-agent/instrumentation/karate/karate-1.0/gradle.lockfile similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/gradle.lockfile rename to dd-java-agent/instrumentation/karate/karate-1.0/gradle.lockfile diff --git a/dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/ExecutionContext.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/ExecutionContext.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/ExecutionContext.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/ExecutionContext.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateExecutionInstrumentation.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateExecutionInstrumentation.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateExecutionInstrumentation.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateExecutionInstrumentation.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateInstrumentation.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateInstrumentation.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateInstrumentation.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateInstrumentation.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateTracingHook.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateTracingHook.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateTracingHook.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateTracingHook.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateUtils.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateUtils.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateUtils.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/KarateUtils.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/TestEventsHandlerHolder.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/TestEventsHandlerHolder.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/TestEventsHandlerHolder.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/main/java/datadog/trace/instrumentation/karate/TestEventsHandlerHolder.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/groovy/KarateTest.groovy b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/groovy/KarateTest.groovy similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/groovy/KarateTest.groovy rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/groovy/KarateTest.groovy diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/Flaky.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/Flaky.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/Flaky.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/Flaky.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/Slow.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/Slow.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/Slow.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/Slow.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestContinueOnStepFailureKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestContinueOnStepFailureKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestContinueOnStepFailureKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestContinueOnStepFailureKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestFailedBuiltInRetryKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestFailedBuiltInRetryKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestFailedBuiltInRetryKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestFailedBuiltInRetryKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestFailedKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestFailedKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestFailedKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestFailedKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestFailedParameterizedKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestFailedParameterizedKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestFailedParameterizedKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestFailedParameterizedKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestFailedThenSucceedKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestFailedThenSucceedKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestFailedThenSucceedKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestFailedThenSucceedKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestParameterizedKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestParameterizedKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestParameterizedKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestParameterizedKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestParameterizedMoreCasesKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestParameterizedMoreCasesKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestParameterizedMoreCasesKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestParameterizedMoreCasesKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSkippedFeatureKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSkippedFeatureKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSkippedFeatureKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSkippedFeatureKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSucceedKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSucceedKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSucceedKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSucceedKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSucceedKarateSkipEfd.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSucceedKarateSkipEfd.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSucceedKarateSkipEfd.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSucceedKarateSkipEfd.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSucceedKarateSlow.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSucceedKarateSlow.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSucceedKarateSlow.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSucceedKarateSlow.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSucceedOneCaseKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSucceedOneCaseKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSucceedOneCaseKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSucceedOneCaseKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSucceedParallelKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSucceedParallelKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestSucceedParallelKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestSucceedParallelKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestUnskippableKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestUnskippableKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestUnskippableKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestUnskippableKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestWithSetupKarate.java b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestWithSetupKarate.java similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/TestWithSetupKarate.java rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/TestWithSetupKarate.java diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/karate-config.js b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/karate-config.js similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/karate-config.js rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/karate-config.js diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_continue_on_step_failure.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_continue_on_step_failure.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_continue_on_step_failure.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_continue_on_step_failure.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_failed.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_failed.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_failed.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_failed.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_failed_parameterized.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_failed_parameterized.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_failed_parameterized.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_failed_parameterized.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_failed_then_succeed.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_failed_then_succeed.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_failed_then_succeed.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_failed_then_succeed.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_parameterized.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_parameterized.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_parameterized.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_parameterized.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_parameterized_more_cases.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_parameterized_more_cases.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_parameterized_more_cases.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_parameterized_more_cases.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_succeed.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_succeed.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_succeed.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_succeed.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_succeed_one_case.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_succeed_one_case.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_succeed_one_case.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_succeed_one_case.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_succeed_skip_efd.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_succeed_skip_efd.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_succeed_skip_efd.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_succeed_skip_efd.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_succeed_slow.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_succeed_slow.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_succeed_slow.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_succeed_slow.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_unskippable.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_unskippable.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_unskippable.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_unskippable.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_with_setup.feature b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_with_setup.feature similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/java/org/example/test_with_setup.feature rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/java/org/example/test_with_setup.feature diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-failed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-failed/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-failed/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-failed/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-failed/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-failed/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-failed/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-failed/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-succeeded/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-succeeded/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-succeeded/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-succeeded/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-succeeded/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-succeeded/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-succeeded/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-disabled-succeeded/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-failed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-failed/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-failed/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-failed/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-failed/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-failed/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-failed/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-failed/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-failed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-failed/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-failed/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-failed/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-failed/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-failed/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-failed/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-failed/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-succeeded/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-succeeded/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-succeeded/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-succeeded/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-succeeded/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-succeeded/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-succeeded/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-quarantined-succeeded/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-succeeded/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-succeeded/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-succeeded/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-succeeded/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-succeeded/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-succeeded/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-attempt-to-fix-succeeded/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-attempt-to-fix-succeeded/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-built-in-retry/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-built-in-retry/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-built-in-retry/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-built-in-retry/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-built-in-retry/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-built-in-retry/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-built-in-retry/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-built-in-retry/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-disabled-failed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-disabled-failed/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-disabled-failed/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-disabled-failed/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-disabled-failed/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-disabled-failed/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-disabled-failed/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-disabled-failed/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-faulty-session-threshold/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-faulty-session-threshold/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-faulty-session-threshold/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-faulty-session-threshold/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-faulty-session-threshold/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-faulty-session-threshold/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-faulty-session-threshold/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-faulty-session-threshold/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-known-parameterized-test/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-known-parameterized-test/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-known-parameterized-test/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-known-parameterized-test/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-known-parameterized-test/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-known-parameterized-test/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-known-parameterized-test/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-known-parameterized-test/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-known-test/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-known-test/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-known-test/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-known-test/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-known-test/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-known-test/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-known-test/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-known-test/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-parameterized-test/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-parameterized-test/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-parameterized-test/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-parameterized-test/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-parameterized-test/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-parameterized-test/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-parameterized-test/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-parameterized-test/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-slow-test/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-slow-test/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-slow-test/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-slow-test/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-slow-test/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-slow-test/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-slow-test/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-slow-test/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-test/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-test/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-test/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-test/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-test/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-test/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-new-test/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-new-test/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-skip-new-test/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-skip-new-test/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-skip-new-test/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-skip-new-test/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-skip-new-test/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-skip-new-test/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-efd-skip-new-test/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-efd-skip-new-test/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-failed-then-succeed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-failed-then-succeed/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-failed-then-succeed/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-failed-then-succeed/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-failed-then-succeed/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-failed-then-succeed/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-failed-then-succeed/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-failed-then-succeed/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-failed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-failed/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-failed/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-failed/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-failed/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-failed/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-failed/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-failed/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-skipping-parameterized/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-skipping-parameterized/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-skipping-parameterized/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-skipping-parameterized/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-skipping-parameterized/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-skipping-parameterized/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-skipping-parameterized/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-skipping-parameterized/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-skipping/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-skipping/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-skipping/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-skipping/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-skipping/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-skipping/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-skipping/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-skipping/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-unskippable/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-unskippable/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-unskippable/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-unskippable/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-unskippable/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-unskippable/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-itr-unskippable/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-itr-unskippable/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-parameterized/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-parameterized/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-parameterized/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-parameterized/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-parameterized/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-parameterized/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-parameterized/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-parameterized/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-atr/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-atr/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-atr/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-atr/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-atr/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-atr/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-atr/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-atr/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-efd/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-efd/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-efd/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-efd/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-efd/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-efd/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-efd/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-efd/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-known/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-known/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-known/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-known/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-known/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-known/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed-known/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed-known/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-quarantined-failed/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-quarantined-failed/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-continue-on-step-failure/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-continue-on-step-failure/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-continue-on-step-failure/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-continue-on-step-failure/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-continue-on-step-failure/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-continue-on-step-failure/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-continue-on-step-failure/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-continue-on-step-failure/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-failed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-failed/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-failed/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-failed/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-failed/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-failed/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-failed/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-failed/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-parameterized/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-parameterized/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-parameterized/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-parameterized/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-parameterized/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-parameterized/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-retry-parameterized/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-retry-parameterized/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-skipped-feature/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-skipped-feature/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-skipped-feature/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-skipped-feature/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-skipped-feature/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-skipped-feature/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-skipped-feature/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-skipped-feature/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-succeed-parallel/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-succeed-parallel/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-succeed-parallel/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-succeed-parallel/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-succeed-parallel/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-succeed-parallel/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-succeed-parallel/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-succeed-parallel/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-succeed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-succeed/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-succeed/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-succeed/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-succeed/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-succeed/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-succeed/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-succeed/events.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-with-setup/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-with-setup/coverages.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-with-setup/coverages.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-with-setup/coverages.ftl diff --git a/dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-with-setup/events.ftl b/dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-with-setup/events.ftl similarity index 100% rename from dd-java-agent/instrumentation/karate-1.0/src/test/resources/test-with-setup/events.ftl rename to dd-java-agent/instrumentation/karate/karate-1.0/src/test/resources/test-with-setup/events.ftl diff --git a/settings.gradle.kts b/settings.gradle.kts index 36b1d9b95df..1d62faeba93 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -464,7 +464,7 @@ include( ":dd-java-agent:instrumentation:kafka:kafka-connect-0.11", ":dd-java-agent:instrumentation:kafka:kafka-streams-0.11", ":dd-java-agent:instrumentation:kafka:kafka-streams-1.0", - ":dd-java-agent:instrumentation:karate-1.0", + ":dd-java-agent:instrumentation:karate:karate-1.0", ":dd-java-agent:instrumentation:kotlin-coroutines-1.3", ":dd-java-agent:instrumentation:lettuce:lettuce-4.0", ":dd-java-agent:instrumentation:lettuce:lettuce-5.0", From e459f4bc8e3eab96451bed4ed5dcb0213d3523b0 Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Mon, 13 Jul 2026 12:20:09 +0200 Subject: [PATCH 2/2] feat: test visibility for karate v2 --- .../karate/karate-2.0/build.gradle | 52 +++ .../karate2/KarateInstrumentation.java | 44 +++ .../karate2/KarateBuilderAdvice.java | 20 ++ .../karate2/KarateTracingListener.java | 240 +++++++++++++ .../instrumentation/karate2/KarateUtils.java | 178 ++++++++++ .../karate2/TestEventsHandlerHolder.java | 32 ++ .../src/test/groovy/KarateV2Test.groovy | 108 ++++++ .../java/org/example/TestFailedKarate.java | 16 + .../org/example/TestParameterizedKarate.java | 16 + .../java/org/example/TestSucceedKarate.java | 16 + .../test/java/org/example/karate-config.js | 2 + .../test/java/org/example/test_failed.feature | 7 + .../org/example/test_parameterized.feature | 13 + .../java/org/example/test_succeed.feature | 9 + .../test/resources/test-failed/coverages.ftl | 1 + .../src/test/resources/test-failed/events.ftl | 239 +++++++++++++ .../coverages.ftl | 1 + .../events.ftl | 274 +++++++++++++++ .../resources/test-itr-skipping/coverages.ftl | 1 + .../resources/test-itr-skipping/events.ftl | 227 ++++++++++++ .../test-parameterized/coverages.ftl | 1 + .../resources/test-parameterized/events.ftl | 331 ++++++++++++++++++ .../test/resources/test-succeed/coverages.ftl | 1 + .../test/resources/test-succeed/events.ftl | 236 +++++++++++++ settings.gradle.kts | 1 + 25 files changed, 2066 insertions(+) create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/build.gradle create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/main/java/datadog/trace/instrumentation/karate2/KarateInstrumentation.java create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateBuilderAdvice.java create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateTracingListener.java create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateUtils.java create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/TestEventsHandlerHolder.java create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/groovy/KarateV2Test.groovy create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestFailedKarate.java create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestParameterizedKarate.java create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestSucceedKarate.java create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/karate-config.js create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_failed.feature create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_parameterized.feature create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_succeed.feature create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-failed/coverages.ftl create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-failed/events.ftl create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping-parameterized/coverages.ftl create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping-parameterized/events.ftl create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping/coverages.ftl create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping/events.ftl create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-parameterized/coverages.ftl create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-parameterized/events.ftl create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-succeed/coverages.ftl create mode 100644 dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-succeed/events.ftl diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/build.gradle b/dd-java-agent/instrumentation/karate/karate-2.0/build.gradle new file mode 100644 index 00000000000..d3f81242750 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/build.gradle @@ -0,0 +1,52 @@ +plugins { + id 'dd-trace-java.instrumentation.testing-framework-tests' +} + +apply from: "$rootDir/gradle/java.gradle" + +// Karate 2.x is compiled with Java 21 (uses virtual threads for parallelism) +tracerJava { + addSourceSetFor(JavaVersion.VERSION_21) +} + +muzzle { + pass { + group = 'io.karatelabs' + module = 'karate-core' + versions = '[2.0.0,)' + javaVersion = '21' + } +} + +["compileMain_java21Java", "compileTestJava"].each { + tasks.named(it, JavaCompile) { + configureCompiler(it, 21, JavaVersion.VERSION_21) + } +} + +tasks.withType(GroovyCompile).configureEach { + configureCompiler(it, 21) +} + +dependencies { + main_java21CompileOnly group: 'io.karatelabs', name: 'karate-core', version: '2.0.9' + + testImplementation project(':dd-java-agent:agent-ci-visibility:civisibility-instrumentation-test-fixtures') + testImplementation group: 'org.junit.platform', name: 'junit-platform-launcher', version: libs.versions.junit.platform.get() + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: libs.versions.junit5.get() + + testImplementation(group: 'io.karatelabs', name: 'karate-core', version: '2.0.9') { + // excluding logback to avoid conflicts with libs.bundles.test.logging + exclude group: 'ch.qos.logback', module: 'logback-classic' + } +} + +// Using recommended Karate project layout where Karate feature files sit in same /test/java folders as their java counterparts +sourceSets { + test { + resources { + srcDir file('src/test/java') + exclude '**/*.java' + } + } +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java/datadog/trace/instrumentation/karate2/KarateInstrumentation.java b/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java/datadog/trace/instrumentation/karate2/KarateInstrumentation.java new file mode 100644 index 00000000000..5b3b7ad8d54 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java/datadog/trace/instrumentation/karate2/KarateInstrumentation.java @@ -0,0 +1,44 @@ +package datadog.trace.instrumentation.karate2; + +import static net.bytebuddy.matcher.ElementMatchers.isConstructor; + +import com.google.auto.service.AutoService; +import datadog.trace.agent.tooling.Instrumenter; +import datadog.trace.agent.tooling.InstrumenterModule; + +/** + * Registers a {@code io.karatelabs.core.RunListener} on every {@code + * io.karatelabs.core.Runner.Builder}. + * + *

This module is compiled for Java 8 so the agent can enumerate it on any JVM; the advice and + * helper classes that reference the Java 21 {@code io.karatelabs} API live in the {@code java21} + * source set and are referenced by name. + */ +@AutoService(InstrumenterModule.class) +public class KarateInstrumentation extends InstrumenterModule.CiVisibility + implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { + + public KarateInstrumentation() { + super("ci-visibility", "karate"); + } + + @Override + public String instrumentedType() { + return "io.karatelabs.core.Runner$Builder"; + } + + @Override + public String[] helperClassNames() { + return new String[] { + packageName + ".KarateUtils", + packageName + ".TestEventsHandlerHolder", + packageName + ".KarateTracingListener", + packageName + ".KarateBuilderAdvice" + }; + } + + @Override + public void methodAdvice(MethodTransformer transformer) { + transformer.applyAdvice(isConstructor(), packageName + ".KarateBuilderAdvice"); + } +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateBuilderAdvice.java b/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateBuilderAdvice.java new file mode 100644 index 00000000000..3126c907eea --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateBuilderAdvice.java @@ -0,0 +1,20 @@ +package datadog.trace.instrumentation.karate2; + +import io.karatelabs.core.RunEvent; +import io.karatelabs.core.RunListener; +import io.karatelabs.core.Runner; +import net.bytebuddy.asm.Advice; + +/** Advice for the {@code io.karatelabs.core.Runner.Builder} constructor. */ +public class KarateBuilderAdvice { + + @Advice.OnMethodExit + public static void onRunnerBuilderConstructorExit(@Advice.This Runner.Builder builder) { + builder.listener(new KarateTracingListener()); + } + + // Karate 2.0.0 and above + public static void muzzleCheck(RunListener runListener) { + runListener.onEvent((RunEvent) null); + } +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateTracingListener.java b/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateTracingListener.java new file mode 100644 index 00000000000..2fa59009dd8 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateTracingListener.java @@ -0,0 +1,240 @@ +package datadog.trace.instrumentation.karate2; + +import datadog.trace.api.Config; +import datadog.trace.api.civisibility.CIConstants; +import datadog.trace.api.civisibility.config.TestIdentifier; +import datadog.trace.api.civisibility.config.TestSourceData; +import datadog.trace.api.civisibility.events.TestDescriptor; +import datadog.trace.api.civisibility.events.TestSuiteDescriptor; +import datadog.trace.api.civisibility.telemetry.tag.SkipReason; +import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation; +import datadog.trace.bootstrap.instrumentation.api.AgentSpan; +import datadog.trace.bootstrap.instrumentation.api.AgentTracer; +import datadog.trace.bootstrap.instrumentation.api.Tags; +import io.karatelabs.core.FeatureResult; +import io.karatelabs.core.FeatureRunEvent; +import io.karatelabs.core.FeatureRuntime; +import io.karatelabs.core.RunEvent; +import io.karatelabs.core.RunEventType; +import io.karatelabs.core.RunListener; +import io.karatelabs.core.ScenarioResult; +import io.karatelabs.core.ScenarioRunEvent; +import io.karatelabs.core.ScenarioRuntime; +import io.karatelabs.core.StepResult; +import io.karatelabs.core.StepRunEvent; +import io.karatelabs.gherkin.Feature; +import io.karatelabs.gherkin.Scenario; +import io.karatelabs.gherkin.Step; +import java.util.Collection; +import java.util.List; + +public class KarateTracingListener implements RunListener { + + private static final String FRAMEWORK_NAME = "karate"; + public static final String FRAMEWORK_VERSION = KarateUtils.getKarateVersion(); + public static final String KARATE_STEP_SPAN_NAME = "karate.step"; + + @Override + public boolean onEvent(RunEvent event) { + RunEventType type = event.getType(); + if (type == RunEventType.FEATURE_ENTER) { + return beforeFeature((FeatureRunEvent) event); + } else if (type == RunEventType.FEATURE_EXIT) { + afterFeature((FeatureRunEvent) event); + } else if (type == RunEventType.SCENARIO_ENTER) { + return beforeScenario((ScenarioRunEvent) event); + } else if (type == RunEventType.SCENARIO_EXIT) { + afterScenario((ScenarioRunEvent) event); + } else if (type == RunEventType.STEP_ENTER) { + beforeStep((StepRunEvent) event); + } else if (type == RunEventType.STEP_EXIT) { + afterStep((StepRunEvent) event); + } + return true; + } + + private boolean beforeFeature(FeatureRunEvent event) { + FeatureRuntime fr = event.source(); + if (skipTracking(fr)) { + return true; + } + TestSuiteDescriptor suiteDescriptor = KarateUtils.toSuiteDescriptor(fr); + Feature feature = fr.getFeature(); + TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteStart( + suiteDescriptor, + KarateUtils.getFeatureNameForReport(feature), + FRAMEWORK_NAME, + FRAMEWORK_VERSION, + null, + KarateUtils.getCategories(feature.getTags()), + isParallel(fr), + TestFrameworkInstrumentation.KARATE, + null); + return true; + } + + private void afterFeature(FeatureRunEvent event) { + FeatureRuntime fr = event.source(); + if (skipTracking(fr)) { + return; + } + TestSuiteDescriptor suiteDescriptor = KarateUtils.toSuiteDescriptor(fr); + FeatureResult result = event.result(); + if (result != null && result.isFailed()) { + TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteFailure( + suiteDescriptor, suiteThrowable(result)); + } else if (result != null && result.isEmpty()) { + TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteSkip(suiteDescriptor, null); + } + TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSuiteFinish(suiteDescriptor, null); + } + + private boolean beforeScenario(ScenarioRunEvent event) { + ScenarioRuntime sr = event.source(); + if (skipTracking(sr)) { + return true; + } + Scenario scenario = sr.getScenario(); + TestSuiteDescriptor suiteDescriptor = KarateUtils.toSuiteDescriptor(sr.getFeatureRuntime()); + TestDescriptor testDescriptor = KarateUtils.toTestDescriptor(sr); + String scenarioName = KarateUtils.getScenarioName(scenario); + String parameters = KarateUtils.getParameters(scenario); + Collection categories = KarateUtils.getCategories(scenario.getTagsEffective()); + + if (Config.get().isCiVisibilityTestSkippingEnabled() + || Config.get().isCiVisibilityTestManagementEnabled()) { + TestIdentifier skippableTest = KarateUtils.toTestIdentifier(scenario); + SkipReason skipReason = TestEventsHandlerHolder.TEST_EVENTS_HANDLER.skipReason(skippableTest); + + if (skipReason != null + && !(skipReason == SkipReason.ITR + && categories.contains(CIConstants.Tags.ITR_UNSKIPPABLE_TAG))) { + TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestIgnore( + suiteDescriptor, + testDescriptor, + scenarioName, + FRAMEWORK_NAME, + FRAMEWORK_VERSION, + parameters, + categories, + TestSourceData.UNKNOWN, + skipReason.getDescription(), + null); + return false; + } + } + + TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestStart( + suiteDescriptor, + testDescriptor, + scenarioName, + FRAMEWORK_NAME, + FRAMEWORK_VERSION, + parameters, + categories, + TestSourceData.UNKNOWN, + null, + null); + return true; + } + + private void afterScenario(ScenarioRunEvent event) { + ScenarioRuntime sr = event.source(); + if (skipTracking(sr)) { + return; + } + ScenarioResult result = event.result(); + TestDescriptor testDescriptor = KarateUtils.toTestDescriptor(sr); + + Throwable failedReason = getFailedReason(result); + if ((result != null && result.isFailed()) || failedReason != null) { + TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestFailure(testDescriptor, failedReason); + } else if (result == null || result.getStepResults().isEmpty()) { + TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestSkip(testDescriptor, null); + } + + TestEventsHandlerHolder.TEST_EVENTS_HANDLER.onTestFinish(testDescriptor, null, null); + } + + private void beforeStep(StepRunEvent event) { + Step step = event.step(); + if (skipTracking(step)) { + return; + } + AgentSpan span = AgentTracer.startSpan("karate", KARATE_STEP_SPAN_NAME); + AgentTracer.activateSpanWithoutScope(span); + String stepName = step.getPrefix() + " " + step.getText(); + span.setResourceName(stepName); + span.setTag(Tags.COMPONENT, "karate"); + span.spanContext().setIntegrationName("karate"); + span.setTag("step.name", stepName); + span.setTag("step.startLine", step.getLine()); + span.setTag("step.endLine", step.getEndLine()); + span.setTag("step.docString", step.getDocString()); + } + + private void afterStep(StepRunEvent event) { + if (skipTracking(event.step())) { + return; + } + + AgentSpan span = AgentTracer.activeSpan(); + if (span == null) { + return; + } + + AgentTracer.closeActive(); + span.finish(); + } + + private static Throwable getFailedReason(ScenarioResult result) { + if (result == null) { + return null; + } + Throwable error = result.getError(); + if (error != null) { + return error; + } + for (StepResult stepResult : result.getStepResults()) { + if (stepResult.getError() != null) { + return stepResult.getError(); + } + } + return null; + } + + private static Throwable suiteThrowable(FeatureResult result) { + List scenarioResults = result.getScenarioResults(); + if (scenarioResults != null) { + for (ScenarioResult scenarioResult : scenarioResults) { + Throwable error = scenarioResult.getError(); + if (error != null) { + return error; + } + } + } + return new RuntimeException(result.getFailureMessage()); + } + + private static boolean isParallel(FeatureRuntime fr) { + return fr.getSuite() != null && fr.getSuite().parallel; + } + + private static boolean skipTracking(FeatureRuntime fr) { + // do not track nested (called) feature runs + return fr.getCaller() != null; + } + + private static boolean skipTracking(ScenarioRuntime sr) { + // do not track nested (called) scenario runs and setup scenarios + return sr.getFeatureRuntime().getCaller() != null || sr.getScenario().isSetup(); + } + + private static boolean skipTracking(Step step) { + // do not track steps that are not children of a tracked scenario or another tracked step + AgentSpan activeSpan = AgentTracer.activeSpan(); + return activeSpan == null + || (!KARATE_STEP_SPAN_NAME.contentEquals(activeSpan.getSpanName()) + && !Tags.SPAN_KIND_TEST.contentEquals(activeSpan.getSpanType())); + } +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateUtils.java b/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateUtils.java new file mode 100644 index 00000000000..7a8b4bb4e7c --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/KarateUtils.java @@ -0,0 +1,178 @@ +package datadog.trace.instrumentation.karate2; + +import static datadog.json.JsonMapper.toJson; + +import datadog.trace.api.civisibility.config.LibraryCapability; +import datadog.trace.api.civisibility.config.TestIdentifier; +import datadog.trace.api.civisibility.events.TestDescriptor; +import datadog.trace.api.civisibility.events.TestSuiteDescriptor; +import datadog.trace.util.Strings; +import io.karatelabs.core.FeatureRuntime; +import io.karatelabs.core.Globals; +import io.karatelabs.core.ScenarioRuntime; +import io.karatelabs.gherkin.Feature; +import io.karatelabs.gherkin.Scenario; +import io.karatelabs.gherkin.Tag; +import java.net.URI; +import java.net.URL; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +public abstract class KarateUtils { + + private KarateUtils() {} + + public static final List CAPABILITIES = Collections.emptyList(); + + private static final ConcurrentHashMap CLASSPATH_NAME_CACHE = + new ConcurrentHashMap<>(); + + public static Feature getFeature(FeatureRuntime featureRuntime) { + return featureRuntime.getFeature(); + } + + /** + * Produces the karate-1.0-compatible suite identifier {@code "[] + * "} (e.g. {@code "[org/example/test_succeed] test succeed"}). + * + *

We can't use v2's {@code Feature.getNameForReport()} directly: it derives the path from + * {@code Resource.getRelativePath()}, which v2 relativizes against the JVM working directory and + * falls back to the absolute path when the file is outside it. + * + *

We recover that form by asking the classloader to resolve progressively longer suffixes of + * the feature's path; the shortest suffix that resolves back to the same file is the + * classpath-relative name. Falls back to Karate's working-directory-relative path if nothing + * resolves. + */ + public static String getFeatureNameForReport(Feature feature) { + if (feature == null) { + return null; + } + String classpathPath = resolveClasspathRelativeName(feature); + String name = feature.getName(); + if (name == null || name.isEmpty()) { + return "[" + classpathPath + "]"; + } + return "[" + classpathPath + "] " + name; + } + + private static String resolveClasspathRelativeName(Feature feature) { + URI uri = feature.getResource() != null ? feature.getResource().getUri() : null; + // use Karate's own relative path as fallback for anything the classloader can't resolve + String fallback = resourceRelativeName(feature); + if (uri == null) { + return fallback; + } + return CLASSPATH_NAME_CACHE.computeIfAbsent( + uri, u -> computeClasspathRelativeName(u, fallback)); + } + + private static String resourceRelativeName(Feature feature) { + String relativePath = + feature.getResource() != null ? feature.getResource().getRelativePath() : null; + if (relativePath != null && !relativePath.isEmpty()) { + return stripFeatureExtension(relativePath); + } + return feature.getName() != null ? feature.getName() : ""; + } + + private static String computeClasspathRelativeName(URI uri, String fallback) { + Path path; + try { + path = Paths.get(uri); + } catch (Exception e) { + // non-file URI (e.g. a feature packaged inside a jar): can't walk filesystem segments + return fallback; + } + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + if (cl == null) { + cl = Feature.class.getClassLoader(); + } + int segments = path.getNameCount(); + for (int start = segments - 1; start >= 0; start--) { + StringBuilder candidate = new StringBuilder(); + for (int i = start; i < segments; i++) { + if (i > start) { + candidate.append('/'); + } + candidate.append(path.getName(i).toString()); + } + URL resolved = cl.getResource(candidate.toString()); + if (resolved != null) { + try { + if (Paths.get(resolved.toURI()).equals(path)) { + return stripFeatureExtension(candidate.toString()); + } + } catch (Exception ignored) { + // continue searching + } + } + } + return fallback; + } + + private static String stripFeatureExtension(String path) { + return path.endsWith(".feature") + ? path.substring(0, path.length() - ".feature".length()) + : path; + } + + public static String getScenarioName(Scenario scenario) { + String scenarioName = scenario.getName(); + if (Strings.isNotBlank(scenarioName)) { + return scenarioName; + } else { + return scenario.getRefId(); + } + } + + public static List getCategories(List tags) { + if (tags == null) { + return Collections.emptyList(); + } + + List categories = new ArrayList<>(tags.size()); + for (Tag tag : tags) { + categories.add(tag.getName()); + } + return categories; + } + + public static String getParameters(Scenario scenario) { + return scenario.getExampleData() != null ? toJson(scenario.getExampleData()) : null; + } + + public static TestIdentifier toTestIdentifier(Scenario scenario) { + Feature feature = scenario.getFeature(); + String featureName = getFeatureNameForReport(feature); + String scenarioName = getScenarioName(scenario); + String parameters = getParameters(scenario); + return new TestIdentifier(featureName, scenarioName, parameters); + } + + public static TestDescriptor toTestDescriptor(ScenarioRuntime scenarioRuntime) { + Scenario scenario = scenarioRuntime.getScenario(); + Feature feature = scenario.getFeature(); + String featureName = getFeatureNameForReport(feature); + String scenarioName = getScenarioName(scenario); + String parameters = getParameters(scenario); + return new TestDescriptor(featureName, null, scenarioName, parameters, scenarioRuntime); + } + + public static TestSuiteDescriptor toSuiteDescriptor(FeatureRuntime featureRuntime) { + String featureName = getFeatureNameForReport(featureRuntime.getFeature()); + return new TestSuiteDescriptor(featureName, null); + } + + public static String getKarateVersion() { + return Globals.KARATE_VERSION; + } + + public static List capabilities() { + return CAPABILITIES; + } +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/TestEventsHandlerHolder.java b/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/TestEventsHandlerHolder.java new file mode 100644 index 00000000000..d2c4c495cab --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/main/java21/datadog/trace/instrumentation/karate2/TestEventsHandlerHolder.java @@ -0,0 +1,32 @@ +package datadog.trace.instrumentation.karate2; + +import datadog.trace.api.civisibility.InstrumentationBridge; +import datadog.trace.api.civisibility.events.TestDescriptor; +import datadog.trace.api.civisibility.events.TestEventsHandler; +import datadog.trace.api.civisibility.events.TestSuiteDescriptor; +import datadog.trace.api.internal.VisibleForTesting; + +public abstract class TestEventsHandlerHolder { + + public static volatile TestEventsHandler TEST_EVENTS_HANDLER; + + static { + start(); + } + + public static void start() { + TEST_EVENTS_HANDLER = + InstrumentationBridge.createTestEventsHandler( + "karate", null, null, KarateUtils.capabilities()); + } + + @VisibleForTesting + public static void stop() { + if (TEST_EVENTS_HANDLER != null) { + TEST_EVENTS_HANDLER.close(); + TEST_EVENTS_HANDLER = null; + } + } + + private TestEventsHandlerHolder() {} +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/groovy/KarateV2Test.groovy b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/groovy/KarateV2Test.groovy new file mode 100644 index 00000000000..0d7b3d7e53f --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/groovy/KarateV2Test.groovy @@ -0,0 +1,108 @@ +import datadog.trace.api.DisableTestTrace +import datadog.trace.api.civisibility.config.TestIdentifier +import datadog.trace.civisibility.CiVisibilityInstrumentationTest +import datadog.trace.instrumentation.karate2.KarateUtils +import datadog.trace.instrumentation.karate2.TestEventsHandlerHolder +import org.example.TestFailedKarate +import org.example.TestParameterizedKarate +import org.example.TestSucceedKarate +import org.junit.jupiter.engine.JupiterTestEngine +import org.junit.platform.engine.DiscoverySelector +import org.junit.platform.engine.TestExecutionResult +import org.junit.platform.launcher.TestExecutionListener +import org.junit.platform.launcher.core.LauncherConfig +import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder +import org.junit.platform.launcher.core.LauncherFactory + +import java.util.concurrent.ConcurrentHashMap +import java.util.concurrent.CopyOnWriteArrayList + +import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass + +@DisableTestTrace(reason = "avoid self-tracing") +class KarateV2Test extends CiVisibilityInstrumentationTest { + + def "test #testcaseName"() { + runTests(tests, success) + + assertSpansData(testcaseName) + + where: + testcaseName | success | tests + "test-succeed" | true | [TestSucceedKarate] + "test-parameterized" | true | [TestParameterizedKarate] + "test-failed" | false | [TestFailedKarate] + } + + def "test ITR #testcaseName"() { + givenSkippableTests(skippedTests) + + runTests(tests) + + assertSpansData(testcaseName) + + where: + testcaseName | tests | skippedTests + "test-itr-skipping" | [TestSucceedKarate] | [new TestIdentifier("[org/example/test_succeed] test succeed", "first scenario", null)] + "test-itr-skipping-parameterized" | [TestParameterizedKarate] | [ + new TestIdentifier("[org/example/test_parameterized] test parameterized", "first scenario as an outline", '{"param":"\'a\'","value":"aa"}') + ] + } + + private void runTests(List> tests, boolean expectSuccess = true) { + TestEventsHandlerHolder.start() + + DiscoverySelector[] selectors = new DiscoverySelector[tests.size()] + for (i in 0..> testsByStatus = new ConcurrentHashMap<>() + + void executionFinished(org.junit.platform.launcher.TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) { + testsByStatus.computeIfAbsent(testExecutionResult.status, k -> new CopyOnWriteArrayList<>()).add(testIdentifier) + } + } +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestFailedKarate.java b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestFailedKarate.java new file mode 100644 index 00000000000..0aa667d0a7d --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestFailedKarate.java @@ -0,0 +1,16 @@ +package org.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.intuit.karate.Results; +import com.intuit.karate.Runner; +import org.junit.jupiter.api.Test; + +public class TestFailedKarate { + + @Test + public void test() { + Results results = Runner.path("classpath:org/example/test_failed.feature").parallel(1); + assertEquals(0, results.getFailCount(), results.getErrorMessages()); + } +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestParameterizedKarate.java b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestParameterizedKarate.java new file mode 100644 index 00000000000..3d849359504 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestParameterizedKarate.java @@ -0,0 +1,16 @@ +package org.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.intuit.karate.Results; +import com.intuit.karate.Runner; +import org.junit.jupiter.api.Test; + +public class TestParameterizedKarate { + + @Test + public void test() { + Results results = Runner.path("classpath:org/example/test_parameterized.feature").parallel(1); + assertEquals(0, results.getFailCount(), results.getErrorMessages()); + } +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestSucceedKarate.java b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestSucceedKarate.java new file mode 100644 index 00000000000..3c3ae82182d --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/TestSucceedKarate.java @@ -0,0 +1,16 @@ +package org.example; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.intuit.karate.Results; +import com.intuit.karate.Runner; +import org.junit.jupiter.api.Test; + +public class TestSucceedKarate { + + @Test + public void test() { + Results results = Runner.path("classpath:org/example/test_succeed.feature").parallel(1); + assertEquals(0, results.getFailCount(), results.getErrorMessages()); + } +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/karate-config.js b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/karate-config.js new file mode 100644 index 00000000000..7e70e8ac51b --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/karate-config.js @@ -0,0 +1,2 @@ +function fn() { +} diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_failed.feature b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_failed.feature new file mode 100644 index 00000000000..534144ae715 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_failed.feature @@ -0,0 +1,7 @@ +Feature: test failed + + Scenario: first scenario + * print 'first' + + Scenario: second scenario + * assert false diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_parameterized.feature b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_parameterized.feature new file mode 100644 index 00000000000..62beb7ae198 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_parameterized.feature @@ -0,0 +1,13 @@ +Feature: test parameterized + + Scenario Outline: first scenario as an outline + (to prevent a particular bug from re-appearing) + + Given def p = + When def response = p + p + Then match response == value + + Examples: + | param | value | + | 'a' | aa | + | 'b' | bb | diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_succeed.feature b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_succeed.feature new file mode 100644 index 00000000000..a82428ed0c6 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/java/org/example/test_succeed.feature @@ -0,0 +1,9 @@ +@foo +Feature: test succeed + + @bar + Scenario: first scenario + * print 'first' + + Scenario: second scenario + * print 'second' diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-failed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-failed/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-failed/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-failed/events.ftl b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-failed/events.ftl new file mode 100644 index 00000000000..d1e680f8cfb --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-failed/events.ftl @@ -0,0 +1,239 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "* 'first'" + }, + "metrics" : { + "step.endLine" : 4, + "step.startLine" : 4 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id}, + "resource" : "* 'first'", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start}, + "trace_id" : ${content_trace_id} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "* false" + }, + "metrics" : { + "step.endLine" : 7, + "step.startLine" : 7 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id_2}, + "resource" : "* false", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_2}, + "start" : ${content_start_2}, + "trace_id" : ${content_trace_id_2} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 1, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "karate", + "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.AssertionError", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.status" : "fail", + "test.suite" : "[org/example/test_failed] test failed", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count} + }, + "name" : "karate.test_suite", + "resource" : "[org/example/test_failed] test failed", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "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} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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.final_status" : "pass", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.name" : "first scenario", + "test.status" : "pass", + "test.suite" : "[org/example/test_failed] test failed", + "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" : "karate.test", + "parent_id" : ${content_parent_id_3}, + "resource" : "[org/example/test_failed] test failed.first scenario", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_parent_id}, + "start" : ${content_start_4}, + "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_5}, + "error" : 1, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "error.message" : ${content_meta_error_message}, + "error.stack" : ${content_meta_error_stack_2}, + "error.type" : "java.lang.AssertionError", + "language" : "jvm", + "library_version" : ${content_meta_library_version}, + "runtime-id" : ${content_meta_runtime_id}, + "span.kind" : "test", + "test.final_status" : "fail", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.name" : "second scenario", + "test.status" : "fail", + "test.suite" : "[org/example/test_failed] test failed", + "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" : "karate.test", + "parent_id" : ${content_parent_id_3}, + "resource" : "[org/example/test_failed] test failed.second scenario", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_parent_id_2}, + "start" : ${content_start_5}, + "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_6}, + "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" : "karate", + "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" : "karate-2.0", + "test.framework" : "karate", + "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_4}, + "_dd.profiling.enabled" : 0, + "_dd.trace_span_attribute_schema" : 0, + "process_id" : ${content_metrics_process_id} + }, + "name" : "karate.test_session", + "resource" : "karate-2.0", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_6}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_7}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "karate", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.status" : "fail", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_5} + }, + "name" : "karate.test_module", + "resource" : "karate-2.0", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_7}, + "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/karate/karate-2.0/src/test/resources/test-itr-skipping-parameterized/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping-parameterized/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping-parameterized/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping-parameterized/events.ftl b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping-parameterized/events.ftl new file mode 100644 index 00000000000..a2c029a9497 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping-parameterized/events.ftl @@ -0,0 +1,274 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "Given p = 'b'" + }, + "metrics" : { + "step.endLine" : 6, + "step.startLine" : 6 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id}, + "resource" : "Given p = 'b'", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start}, + "trace_id" : ${content_trace_id} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "Then response == value" + }, + "metrics" : { + "step.endLine" : 8, + "step.startLine" : 8 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id}, + "resource" : "Then response == value", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_2}, + "start" : ${content_start_2}, + "trace_id" : ${content_trace_id} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "When response = p + p" + }, + "metrics" : { + "step.endLine" : 7, + "step.startLine" : 7 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id}, + "resource" : "When response = p + p", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_3}, + "start" : ${content_start_3}, + "trace_id" : ${content_trace_id} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "karate", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.itr.tests_skipping.enabled" : "true", + "test.module" : "karate-2.0", + "test.status" : "pass", + "test.suite" : "[org/example/test_parameterized] test parameterized", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count} + }, + "name" : "karate.test_suite", + "resource" : "[org/example/test_parameterized] test parameterized", + "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}, + "test_suite_id" : ${content_test_suite_id} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_5}, + "error" : 0, + "itr_correlation_id" : "itrCorrelationId", + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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.final_status" : "skip", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.itr.tests_skipping.enabled" : "true", + "test.module" : "karate-2.0", + "test.name" : "first scenario as an outline", + "test.parameters" : "{\"param\":\"'a'\",\"value\":\"aa\"}", + "test.skip_reason" : "Skipped by Datadog Test Impact Analysis", + "test.skipped_by_itr" : "true", + "test.status" : "skip", + "test.suite" : "[org/example/test_parameterized] test parameterized", + "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" : "karate.test", + "parent_id" : ${content_parent_id_2}, + "resource" : "[org/example/test_parameterized] test parameterized.first scenario as an outline", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_4}, + "start" : ${content_start_5}, + "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_6}, + "error" : 0, + "itr_correlation_id" : "itrCorrelationId", + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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.final_status" : "pass", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.itr.tests_skipping.enabled" : "true", + "test.module" : "karate-2.0", + "test.name" : "first scenario as an outline", + "test.parameters" : "{\"param\":\"'b'\",\"value\":\"bb\"}", + "test.status" : "pass", + "test.suite" : "[org/example/test_parameterized] test parameterized", + "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" : "karate.test", + "parent_id" : ${content_parent_id_2}, + "resource" : "[org/example/test_parameterized] test parameterized.first scenario as an outline", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_parent_id}, + "start" : ${content_start_6}, + "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_7}, + "error" : 0, + "meta" : { + "_dd.ci.itr.tests_skipped" : "true", + "_dd.p.tid" : ${content_meta__dd_p_tid_2}, + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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" : "karate-2.0", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.itr.tests_skipping.enabled" : "true", + "test.itr.tests_skipping.type" : "test", + "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}, + "test.itr.tests_skipping.count" : 1 + }, + "name" : "karate.test_session", + "resource" : "karate-2.0", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_7}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_8}, + "error" : 0, + "meta" : { + "_dd.ci.itr.tests_skipped" : "true", + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "karate", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.itr.tests_skipping.enabled" : "true", + "test.itr.tests_skipping.type" : "test", + "test.module" : "karate-2.0", + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_5}, + "test.itr.tests_skipping.count" : 1 + }, + "name" : "karate.test_module", + "resource" : "karate-2.0", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_8}, + "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/karate/karate-2.0/src/test/resources/test-itr-skipping/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping/events.ftl b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping/events.ftl new file mode 100644 index 00000000000..a208d424c82 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-itr-skipping/events.ftl @@ -0,0 +1,227 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "* 'second'" + }, + "metrics" : { + "step.endLine" : 9, + "step.startLine" : 9 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id}, + "resource" : "* 'second'", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start}, + "trace_id" : ${content_trace_id} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "karate", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.itr.tests_skipping.enabled" : "true", + "test.module" : "karate-2.0", + "test.status" : "pass", + "test.suite" : "[org/example/test_succeed] test succeed", + "test.traits" : "{\"category\":[\"foo\"]}", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count} + }, + "name" : "karate.test_suite", + "resource" : "[org/example/test_succeed] test succeed", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "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} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "itr_correlation_id" : "itrCorrelationId", + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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.final_status" : "skip", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.itr.tests_skipping.enabled" : "true", + "test.module" : "karate-2.0", + "test.name" : "first scenario", + "test.skip_reason" : "Skipped by Datadog Test Impact Analysis", + "test.skipped_by_itr" : "true", + "test.status" : "skip", + "test.suite" : "[org/example/test_succeed] test succeed", + "test.traits" : "{\"category\":[\"foo\",\"bar\"]}", + "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" : "karate.test", + "parent_id" : ${content_parent_id_2}, + "resource" : "[org/example/test_succeed] test succeed.first scenario", + "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, + "itr_correlation_id" : "itrCorrelationId", + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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.final_status" : "pass", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.itr.tests_skipping.enabled" : "true", + "test.module" : "karate-2.0", + "test.name" : "second scenario", + "test.status" : "pass", + "test.suite" : "[org/example/test_succeed] test succeed", + "test.traits" : "{\"category\":[\"foo\"]}", + "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" : "karate.test", + "parent_id" : ${content_parent_id_2}, + "resource" : "[org/example/test_succeed] test succeed.second scenario", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_parent_id}, + "start" : ${content_start_4}, + "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_5}, + "error" : 0, + "meta" : { + "_dd.ci.itr.tests_skipped" : "true", + "_dd.p.tid" : ${content_meta__dd_p_tid_2}, + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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" : "karate-2.0", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.itr.tests_skipping.enabled" : "true", + "test.itr.tests_skipping.type" : "test", + "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}, + "test.itr.tests_skipping.count" : 1 + }, + "name" : "karate.test_session", + "resource" : "karate-2.0", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_5}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_6}, + "error" : 0, + "meta" : { + "_dd.ci.itr.tests_skipped" : "true", + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "karate", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.itr.tests_skipping.enabled" : "true", + "test.itr.tests_skipping.type" : "test", + "test.module" : "karate-2.0", + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_5}, + "test.itr.tests_skipping.count" : 1 + }, + "name" : "karate.test_module", + "resource" : "karate-2.0", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_6}, + "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/karate/karate-2.0/src/test/resources/test-parameterized/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-parameterized/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-parameterized/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-parameterized/events.ftl b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-parameterized/events.ftl new file mode 100644 index 00000000000..a4123cde6c5 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-parameterized/events.ftl @@ -0,0 +1,331 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "Given p = 'a'" + }, + "metrics" : { + "step.endLine" : 6, + "step.startLine" : 6 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id}, + "resource" : "Given p = 'a'", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start}, + "trace_id" : ${content_trace_id} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "Given p = 'b'" + }, + "metrics" : { + "step.endLine" : 6, + "step.startLine" : 6 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id_2}, + "resource" : "Given p = 'b'", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_2}, + "start" : ${content_start_2}, + "trace_id" : ${content_trace_id_2} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "Then response == value" + }, + "metrics" : { + "step.endLine" : 8, + "step.startLine" : 8 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id}, + "resource" : "Then response == value", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_3}, + "start" : ${content_start_3}, + "trace_id" : ${content_trace_id} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "Then response == value" + }, + "metrics" : { + "step.endLine" : 8, + "step.startLine" : 8 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id_2}, + "resource" : "Then response == value", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_4}, + "start" : ${content_start_4}, + "trace_id" : ${content_trace_id_2} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_5}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "When response = p + p" + }, + "metrics" : { + "step.endLine" : 7, + "step.startLine" : 7 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id}, + "resource" : "When response = p + p", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_5}, + "start" : ${content_start_5}, + "trace_id" : ${content_trace_id} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_6}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "When response = p + p" + }, + "metrics" : { + "step.endLine" : 7, + "step.startLine" : 7 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id_2}, + "resource" : "When response = p + p", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_6}, + "start" : ${content_start_6}, + "trace_id" : ${content_trace_id_2} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_7}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "karate", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.status" : "pass", + "test.suite" : "[org/example/test_parameterized] test parameterized", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count} + }, + "name" : "karate.test_suite", + "resource" : "[org/example/test_parameterized] test parameterized", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_7}, + "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_8}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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.final_status" : "pass", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.name" : "first scenario as an outline", + "test.parameters" : "{\"param\":\"'a'\",\"value\":\"aa\"}", + "test.status" : "pass", + "test.suite" : "[org/example/test_parameterized] test parameterized", + "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" : "karate.test", + "parent_id" : ${content_parent_id_3}, + "resource" : "[org/example/test_parameterized] test parameterized.first scenario as an outline", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_parent_id}, + "start" : ${content_start_8}, + "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_9}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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.final_status" : "pass", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.name" : "first scenario as an outline", + "test.parameters" : "{\"param\":\"'b'\",\"value\":\"bb\"}", + "test.status" : "pass", + "test.suite" : "[org/example/test_parameterized] test parameterized", + "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" : "karate.test", + "parent_id" : ${content_parent_id_3}, + "resource" : "[org/example/test_parameterized] test parameterized.first scenario as an outline", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_parent_id_2}, + "start" : ${content_start_9}, + "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_10}, + "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" : "karate", + "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" : "karate-2.0", + "test.framework" : "karate", + "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" : "karate.test_session", + "resource" : "karate-2.0", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_10}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_11}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "karate", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_5} + }, + "name" : "karate.test_module", + "resource" : "karate-2.0", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_11}, + "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/karate/karate-2.0/src/test/resources/test-succeed/coverages.ftl b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-succeed/coverages.ftl new file mode 100644 index 00000000000..8878e547a79 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-succeed/coverages.ftl @@ -0,0 +1 @@ +[ ] \ No newline at end of file diff --git a/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-succeed/events.ftl b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-succeed/events.ftl new file mode 100644 index 00000000000..c2acf214162 --- /dev/null +++ b/dd-java-agent/instrumentation/karate/karate-2.0/src/test/resources/test-succeed/events.ftl @@ -0,0 +1,236 @@ +[ { + "content" : { + "duration" : ${content_duration}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "* 'first'" + }, + "metrics" : { + "step.endLine" : 6, + "step.startLine" : 6 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id}, + "resource" : "* 'first'", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id}, + "start" : ${content_start}, + "trace_id" : ${content_trace_id} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_2}, + "error" : 0, + "meta" : { + "component" : "karate", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "step.name" : "* 'second'" + }, + "metrics" : { + "step.endLine" : 9, + "step.startLine" : 9 + }, + "name" : "karate.step", + "parent_id" : ${content_parent_id_2}, + "resource" : "* 'second'", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_span_id_2}, + "start" : ${content_start_2}, + "trace_id" : ${content_trace_id_2} + }, + "type" : "span", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_3}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid}, + "component" : "karate", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_suite_end", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.status" : "pass", + "test.suite" : "[org/example/test_succeed] test succeed", + "test.traits" : "{\"category\":[\"foo\"]}", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count} + }, + "name" : "karate.test_suite", + "resource" : "[org/example/test_succeed] test succeed", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "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} + }, + "type" : "test_suite_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_4}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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.final_status" : "pass", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.name" : "first scenario", + "test.status" : "pass", + "test.suite" : "[org/example/test_succeed] test succeed", + "test.traits" : "{\"category\":[\"foo\",\"bar\"]}", + "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" : "karate.test", + "parent_id" : ${content_parent_id_3}, + "resource" : "[org/example/test_succeed] test succeed.first scenario", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_parent_id}, + "start" : ${content_start_4}, + "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_5}, + "error" : 0, + "meta" : { + "_dd.profiling.ctx" : "test", + "_dd.tracer_host" : ${content_meta__dd_tracer_host}, + "component" : "karate", + "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.final_status" : "pass", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.name" : "second scenario", + "test.status" : "pass", + "test.suite" : "[org/example/test_succeed] test succeed", + "test.traits" : "{\"category\":[\"foo\"]}", + "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" : "karate.test", + "parent_id" : ${content_parent_id_3}, + "resource" : "[org/example/test_succeed] test succeed.second scenario", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "span_id" : ${content_parent_id_2}, + "start" : ${content_start_5}, + "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_6}, + "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" : "karate", + "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" : "karate-2.0", + "test.framework" : "karate", + "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" : "karate.test_session", + "resource" : "karate-2.0", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_6}, + "test_session_id" : ${content_test_session_id} + }, + "type" : "test_session_end", + "version" : 1 +}, { + "content" : { + "duration" : ${content_duration_7}, + "error" : 0, + "meta" : { + "_dd.p.tid" : ${content_meta__dd_p_tid_3}, + "component" : "karate", + "dummy_ci_tag" : "dummy_ci_tag_value", + "env" : "none", + "library_version" : ${content_meta_library_version}, + "span.kind" : "test_module_end", + "test.framework" : "karate", + "test.framework_version" : ${content_meta_test_framework_version}, + "test.module" : "karate-2.0", + "test.status" : "pass", + "test.type" : "test", + "test_session.name" : "session-name" + }, + "metrics" : { + "_dd.host.vcpu_count" : ${content_metrics__dd_host_vcpu_count_5} + }, + "name" : "karate.test_module", + "resource" : "karate-2.0", + "service" : "worker.org.gradle.process.internal.worker.gradleworkermain", + "start" : ${content_start_7}, + "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/settings.gradle.kts b/settings.gradle.kts index 1d62faeba93..231dffad538 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -465,6 +465,7 @@ include( ":dd-java-agent:instrumentation:kafka:kafka-streams-0.11", ":dd-java-agent:instrumentation:kafka:kafka-streams-1.0", ":dd-java-agent:instrumentation:karate:karate-1.0", + ":dd-java-agent:instrumentation:karate:karate-2.0", ":dd-java-agent:instrumentation:kotlin-coroutines-1.3", ":dd-java-agent:instrumentation:lettuce:lettuce-4.0", ":dd-java-agent:instrumentation:lettuce:lettuce-5.0",