From af2d55f077aafe9b6ce7b397b17ed9b6670d94cb Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Wed, 17 Jan 2024 11:56:23 +0100 Subject: [PATCH 1/4] TAG_TYPE is a test level tag and must not appear for sesions, modules, and suites --- lib/datadog/ci/contrib/cucumber/formatter.rb | 3 +-- lib/datadog/ci/contrib/minitest/plugin.rb | 3 +-- lib/datadog/ci/contrib/rspec/runner.rb | 3 +-- lib/datadog/ci/ext/test.rb | 5 +++-- spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb | 9 --------- spec/datadog/ci/contrib/minitest/instrumentation_spec.rb | 9 --------- spec/datadog/ci/contrib/rspec/instrumentation_spec.rb | 9 --------- .../ci/test_visibility/serializers/test_module_spec.rb | 1 - .../ci/test_visibility/serializers/test_session_spec.rb | 1 - .../ci/test_visibility/serializers/test_suite_spec.rb | 1 - spec/support/tracer_helpers.rb | 3 +-- 11 files changed, 7 insertions(+), 40 deletions(-) diff --git a/lib/datadog/ci/contrib/cucumber/formatter.rb b/lib/datadog/ci/contrib/cucumber/formatter.rb index 7689a988..91cd1ee4 100644 --- a/lib/datadog/ci/contrib/cucumber/formatter.rb +++ b/lib/datadog/ci/contrib/cucumber/formatter.rb @@ -37,8 +37,7 @@ def on_test_run_started(event) test_session = CI.start_test_session( tags: { CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK, - CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Cucumber::Integration.version.to_s, - CI::Ext::Test::TAG_TYPE => CI::Ext::Test::TEST_TYPE + CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Cucumber::Integration.version.to_s }, service: configuration[:service_name] ) diff --git a/lib/datadog/ci/contrib/minitest/plugin.rb b/lib/datadog/ci/contrib/minitest/plugin.rb index 0df4892c..0595dcbf 100644 --- a/lib/datadog/ci/contrib/minitest/plugin.rb +++ b/lib/datadog/ci/contrib/minitest/plugin.rb @@ -50,8 +50,7 @@ def plugin_datadog_ci_init(*) test_session = CI.start_test_session( tags: { CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK, - CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Minitest::Integration.version.to_s, - CI::Ext::Test::TAG_TYPE => CI::Ext::Test::TEST_TYPE + CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Minitest::Integration.version.to_s }, service: datadog_configuration[:service_name] ) diff --git a/lib/datadog/ci/contrib/rspec/runner.rb b/lib/datadog/ci/contrib/rspec/runner.rb index 1ce11dd5..75af699f 100644 --- a/lib/datadog/ci/contrib/rspec/runner.rb +++ b/lib/datadog/ci/contrib/rspec/runner.rb @@ -20,8 +20,7 @@ def run_specs(*) test_session = CI.start_test_session( tags: { CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK, - CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::RSpec::Integration.version.to_s, - CI::Ext::Test::TAG_TYPE => CI::Ext::Test::TEST_TYPE + CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::RSpec::Integration.version.to_s }, service: datadog_configuration[:service_name] ) diff --git a/lib/datadog/ci/ext/test.rb b/lib/datadog/ci/ext/test.rb index f242d791..86eeca11 100644 --- a/lib/datadog/ci/ext/test.rb +++ b/lib/datadog/ci/ext/test.rb @@ -23,6 +23,7 @@ module Test TAG_CODEOWNERS = "test.codeowners" TAG_PARAMETERS = "test.parameters" + # test types (e.g. test, benchmark, browser) TEST_TYPE = "test" # those tags are special and they are used to correlate tests with the test sessions, suites, and modules @@ -31,8 +32,8 @@ module Test TAG_TEST_SUITE_ID = "_test.suite_id" SPECIAL_TAGS = [TAG_TEST_SESSION_ID, TAG_TEST_MODULE_ID, TAG_TEST_SUITE_ID].freeze - # tags that can be inherited from the test session - INHERITABLE_TAGS = [TAG_FRAMEWORK, TAG_FRAMEWORK_VERSION, TAG_TYPE].freeze + # tags that are common for the whole session and can be inherited from the test session + INHERITABLE_TAGS = [TAG_FRAMEWORK, TAG_FRAMEWORK_VERSION].freeze # Environment runtime tags TAG_OS_ARCHITECTURE = "os.architecture" diff --git a/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb b/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb index 220d53c2..ef2dd2c4 100644 --- a/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb @@ -120,9 +120,6 @@ expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION)).to eq( Datadog::CI::Contrib::Cucumber::Integration.version.to_s ) - expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq( - Datadog::CI::Ext::Test::TEST_TYPE - ) expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_STATUS)).to eq(Datadog::CI::Ext::Test::Status::PASS) end @@ -139,9 +136,6 @@ expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION)).to eq( Datadog::CI::Contrib::Cucumber::Integration.version.to_s ) - expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq( - Datadog::CI::Ext::Test::TEST_TYPE - ) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_STATUS)).to eq(Datadog::CI::Ext::Test::Status::PASS) end @@ -158,9 +152,6 @@ expect(test_suite_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION)).to eq( Datadog::CI::Contrib::Cucumber::Integration.version.to_s ) - expect(test_suite_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq( - Datadog::CI::Ext::Test::TEST_TYPE - ) expect(test_suite_span.get_tag(Datadog::CI::Ext::Test::TAG_STATUS)).to eq(Datadog::CI::Ext::Test::Status::PASS) end diff --git a/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb b/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb index 1cc5e773..d3610d3b 100644 --- a/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb @@ -411,9 +411,6 @@ def test_pass_other expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( Datadog::CI::Ext::AppTypes::TYPE_TEST ) - expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq( - Datadog::CI::Ext::Test::TEST_TYPE - ) expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::Minitest::Ext::FRAMEWORK ) @@ -434,9 +431,6 @@ def test_pass_other expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( Datadog::CI::Ext::AppTypes::TYPE_TEST ) - expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq( - Datadog::CI::Ext::Test::TEST_TYPE - ) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::Minitest::Ext::FRAMEWORK ) @@ -457,9 +451,6 @@ def test_pass_other expect(test_suite_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( Datadog::CI::Ext::AppTypes::TYPE_TEST ) - expect(test_suite_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq( - Datadog::CI::Ext::Test::TEST_TYPE - ) expect(test_suite_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::Minitest::Ext::FRAMEWORK ) diff --git a/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb b/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb index 2e38dce0..a0ca22c7 100644 --- a/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb @@ -271,9 +271,6 @@ def rspec_session_run(with_failed_test: false, with_shared_test: false) expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( Datadog::CI::Ext::AppTypes::TYPE_TEST ) - expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq( - Datadog::CI::Ext::Test::TEST_TYPE - ) expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::RSpec::Ext::FRAMEWORK ) @@ -296,9 +293,6 @@ def rspec_session_run(with_failed_test: false, with_shared_test: false) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( Datadog::CI::Ext::AppTypes::TYPE_TEST ) - expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq( - Datadog::CI::Ext::Test::TEST_TYPE - ) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::RSpec::Ext::FRAMEWORK ) @@ -321,9 +315,6 @@ def rspec_session_run(with_failed_test: false, with_shared_test: false) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( Datadog::CI::Ext::AppTypes::TYPE_TEST ) - expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq( - Datadog::CI::Ext::Test::TEST_TYPE - ) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::RSpec::Ext::FRAMEWORK ) diff --git a/spec/datadog/ci/test_visibility/serializers/test_module_spec.rb b/spec/datadog/ci/test_visibility/serializers/test_module_spec.rb index 287702cb..c3f61799 100644 --- a/spec/datadog/ci/test_visibility/serializers/test_module_spec.rb +++ b/spec/datadog/ci/test_visibility/serializers/test_module_spec.rb @@ -33,7 +33,6 @@ "test.module" => "arithmetic", "test.framework" => "rspec", "test.framework_version" => "1.0.0", - "test.type" => "test", "test.status" => "pass", "_dd.origin" => "ciapp-test" } diff --git a/spec/datadog/ci/test_visibility/serializers/test_session_spec.rb b/spec/datadog/ci/test_visibility/serializers/test_session_spec.rb index 3855cd8c..6eb38231 100644 --- a/spec/datadog/ci/test_visibility/serializers/test_session_spec.rb +++ b/spec/datadog/ci/test_visibility/serializers/test_session_spec.rb @@ -32,7 +32,6 @@ "test.framework" => "rspec", "test.framework_version" => "1.0.0", "test.status" => "pass", - "test.type" => "test", "_dd.origin" => "ciapp-test" } ) diff --git a/spec/datadog/ci/test_visibility/serializers/test_suite_spec.rb b/spec/datadog/ci/test_visibility/serializers/test_suite_spec.rb index 095e421b..6a5c2e6a 100644 --- a/spec/datadog/ci/test_visibility/serializers/test_suite_spec.rb +++ b/spec/datadog/ci/test_visibility/serializers/test_suite_spec.rb @@ -36,7 +36,6 @@ "test.suite" => "calculator_tests", "test.framework" => "rspec", "test.framework_version" => "1.0.0", - "test.type" => "test", "test.status" => "pass", "_dd.origin" => "ciapp-test" } diff --git a/spec/support/tracer_helpers.rb b/spec/support/tracer_helpers.rb index c9022a1e..96eeccff 100644 --- a/spec/support/tracer_helpers.rb +++ b/spec/support/tracer_helpers.rb @@ -65,8 +65,7 @@ def produce_test_session_trace( service: service, tags: { Datadog::CI::Ext::Test::TAG_FRAMEWORK => framework, - Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION => "1.0.0", - Datadog::CI::Ext::Test::TAG_TYPE => "test" + Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION => "1.0.0" } ) From ca781df6f6e690b41638610743ecd523d2162da6 Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Wed, 17 Jan 2024 12:07:54 +0100 Subject: [PATCH 2/4] refactor TEST_TYPE constant --- lib/datadog/ci/contrib/cucumber/formatter.rb | 2 +- lib/datadog/ci/contrib/minitest/hooks.rb | 2 +- lib/datadog/ci/contrib/rspec/example.rb | 2 +- lib/datadog/ci/ext/test.rb | 11 +++- sig/datadog/ci/ext/test.rbs | 61 ++++++++++--------- .../contrib/cucumber/instrumentation_spec.rb | 2 +- .../contrib/minitest/instrumentation_spec.rb | 2 +- .../ci/contrib/rspec/instrumentation_spec.rb | 2 +- 8 files changed, 47 insertions(+), 37 deletions(-) diff --git a/lib/datadog/ci/contrib/cucumber/formatter.rb b/lib/datadog/ci/contrib/cucumber/formatter.rb index 91cd1ee4..39a4b020 100644 --- a/lib/datadog/ci/contrib/cucumber/formatter.rb +++ b/lib/datadog/ci/contrib/cucumber/formatter.rb @@ -58,7 +58,7 @@ def on_test_case_started(event) tags = { CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK, CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Cucumber::Integration.version.to_s, - CI::Ext::Test::TAG_TYPE => CI::Ext::Test::TEST_TYPE, + CI::Ext::Test::TAG_TYPE => CI::Ext::Test::Type::TEST, CI::Ext::Test::TAG_SOURCE_FILE => Utils::Git.relative_to_root(event.test_case.location.file), CI::Ext::Test::TAG_SOURCE_START => event.test_case.location.line.to_s } diff --git a/lib/datadog/ci/contrib/minitest/hooks.rb b/lib/datadog/ci/contrib/minitest/hooks.rb index c635c0ab..14d71a62 100644 --- a/lib/datadog/ci/contrib/minitest/hooks.rb +++ b/lib/datadog/ci/contrib/minitest/hooks.rb @@ -30,7 +30,7 @@ def before_setup tags: { CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK, CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Minitest::Integration.version.to_s, - CI::Ext::Test::TAG_TYPE => CI::Ext::Test::TEST_TYPE, + CI::Ext::Test::TAG_TYPE => CI::Ext::Test::Type::TEST, CI::Ext::Test::TAG_SOURCE_FILE => Utils::Git.relative_to_root(source_file), CI::Ext::Test::TAG_SOURCE_START => line_number.to_s }, diff --git a/lib/datadog/ci/contrib/rspec/example.rb b/lib/datadog/ci/contrib/rspec/example.rb index 3014d758..ada403e1 100644 --- a/lib/datadog/ci/contrib/rspec/example.rb +++ b/lib/datadog/ci/contrib/rspec/example.rb @@ -36,7 +36,7 @@ def run(*) tags: { CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK, CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::RSpec::Integration.version.to_s, - CI::Ext::Test::TAG_TYPE => CI::Ext::Test::TEST_TYPE, + CI::Ext::Test::TAG_TYPE => CI::Ext::Test::Type::TEST, CI::Ext::Test::TAG_SOURCE_FILE => Utils::Git.relative_to_root(metadata[:file_path]), CI::Ext::Test::TAG_SOURCE_START => metadata[:line_number].to_s }, diff --git a/lib/datadog/ci/ext/test.rb b/lib/datadog/ci/ext/test.rb index 86eeca11..f3e1f673 100644 --- a/lib/datadog/ci/ext/test.rb +++ b/lib/datadog/ci/ext/test.rb @@ -23,9 +23,6 @@ module Test TAG_CODEOWNERS = "test.codeowners" TAG_PARAMETERS = "test.parameters" - # test types (e.g. test, benchmark, browser) - TEST_TYPE = "test" - # those tags are special and they are used to correlate tests with the test sessions, suites, and modules TAG_TEST_SESSION_ID = "_test.session_id" TAG_TEST_MODULE_ID = "_test.module_id" @@ -41,13 +38,21 @@ module Test TAG_RUNTIME_NAME = "runtime.name" TAG_RUNTIME_VERSION = "runtime.version" + # internal APM tag to mark a span as a test span TAG_SPAN_KIND = "span.kind" + # test status as recognized by Datadog module Status PASS = "pass" FAIL = "fail" SKIP = "skip" end + + # test types (e.g. test, benchmark, browser) + module Type + TEST = "test" + BENCHMARK = "benchmark" # DEV: not used yet, will be used when benchmarks are supported + end end end end diff --git a/sig/datadog/ci/ext/test.rbs b/sig/datadog/ci/ext/test.rbs index e9d9ba42..ffc3d2e4 100644 --- a/sig/datadog/ci/ext/test.rbs +++ b/sig/datadog/ci/ext/test.rbs @@ -2,63 +2,68 @@ module Datadog module CI module Ext module Test - CONTEXT_ORIGIN: String + CONTEXT_ORIGIN: "ciapp-test" - TAG_ARGUMENTS: String + TAG_ARGUMENTS: "test.arguments" - TAG_FRAMEWORK: String + TAG_FRAMEWORK: "test.framework" - TAG_FRAMEWORK_VERSION: String + TAG_FRAMEWORK_VERSION: "test.framework_version" - TAG_NAME: String + TAG_NAME: "test.name" - TAG_SKIP_REASON: String + TAG_SKIP_REASON: "test.skip_reason" - TAG_STATUS: String + TAG_STATUS: "test.status" - TAG_SUITE: String + TAG_SUITE: "test.suite" - TAG_MODULE: String + TAG_MODULE: "test.module" - TAG_TYPE: String + TAG_TYPE: "test.type" - TAG_COMMAND: String + TAG_COMMAND: "test.command" - TAG_SOURCE_FILE: String + TAG_SOURCE_FILE: "test.source.file" - TAG_SOURCE_START: String + TAG_SOURCE_START: "test.source.start" - TAG_CODEOWNERS: String + TAG_CODEOWNERS: "test.codeowners" - TAG_PARAMETERS: String + TAG_PARAMETERS: "test.parameters" - TAG_TEST_SESSION_ID: String + TAG_TEST_SESSION_ID: "_test.session_id" - TAG_TEST_MODULE_ID: String + TAG_TEST_MODULE_ID: "_test.module_id" - TAG_TEST_SUITE_ID: String - - TEST_TYPE: String + TAG_TEST_SUITE_ID: "_test.suite_id" SPECIAL_TAGS: Array[String] INHERITABLE_TAGS: Array[String] - TAG_OS_ARCHITECTURE: String + TAG_OS_ARCHITECTURE: "os.architecture" + + TAG_OS_PLATFORM: "os.platform" - TAG_OS_PLATFORM: String + TAG_RUNTIME_NAME: "runtime.name" - TAG_RUNTIME_NAME: String + TAG_RUNTIME_VERSION: "runtime.version" - TAG_RUNTIME_VERSION: String - TAG_SPAN_KIND: String + TAG_SPAN_KIND: "span.kind" module Status - PASS: String + PASS: "pass" + + FAIL: "fail" + + SKIP: "skip" + end - FAIL: String + module Type + TEST: "test" - SKIP: String + BENCHMARK: "benchmark" end end end diff --git a/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb b/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb index ef2dd2c4..49deb06a 100644 --- a/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb @@ -82,7 +82,7 @@ expect(scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_SUITE)).to eq( "Datadog integration at spec/datadog/ci/contrib/cucumber/features/passing.feature" ) - expect(scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq(Datadog::CI::Ext::Test::TEST_TYPE) + expect(scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq(Datadog::CI::Ext::Test::Type::TEST) expect(scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::Cucumber::Ext::FRAMEWORK ) diff --git a/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb b/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb index d3610d3b..c95daa8e 100644 --- a/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb @@ -59,7 +59,7 @@ def test_foo "SomeTest at spec/datadog/ci/contrib/minitest/instrumentation_spec.rb" ) expect(span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq(Datadog::CI::Ext::AppTypes::TYPE_TEST) - expect(span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq(Datadog::CI::Ext::Test::TEST_TYPE) + expect(span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq(Datadog::CI::Ext::Test::Type::TEST) expect(span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq(Datadog::CI::Contrib::Minitest::Ext::FRAMEWORK) expect(span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION)).to eq( Datadog::CI::Contrib::Minitest::Integration.version.to_s diff --git a/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb b/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb index a0ca22c7..9f1d527f 100644 --- a/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb @@ -38,7 +38,7 @@ def with_new_rspec_environment expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_SUITE)).to eq("some test at #{spec.file_path}") expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq(Datadog::CI::Ext::AppTypes::TYPE_TEST) - expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq(Datadog::CI::Ext::Test::TEST_TYPE) + expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq(Datadog::CI::Ext::Test::Type::TEST) expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq(Datadog::CI::Contrib::RSpec::Ext::FRAMEWORK) expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION)).to eq( Datadog::CI::Contrib::RSpec::Integration.version.to_s From 93e3aa1beb84631c0305d2da8db7c3a3138e215b Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Wed, 17 Jan 2024 12:16:52 +0100 Subject: [PATCH 3/4] set TAG_TYPE to "test" by default; rename SPECIAL_TAGS to TRANSIENT_TAGS --- lib/datadog/ci/contrib/cucumber/formatter.rb | 1 - lib/datadog/ci/contrib/minitest/hooks.rb | 1 - lib/datadog/ci/contrib/rspec/example.rb | 1 - lib/datadog/ci/ext/test.rb | 5 +++-- lib/datadog/ci/test_visibility/recorder.rb | 1 + lib/datadog/ci/test_visibility/serializers/base.rb | 2 +- sig/datadog/ci/ext/test.rbs | 2 +- spec/support/tracer_helpers.rb | 3 +-- 8 files changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/datadog/ci/contrib/cucumber/formatter.rb b/lib/datadog/ci/contrib/cucumber/formatter.rb index 39a4b020..bd6bb173 100644 --- a/lib/datadog/ci/contrib/cucumber/formatter.rb +++ b/lib/datadog/ci/contrib/cucumber/formatter.rb @@ -58,7 +58,6 @@ def on_test_case_started(event) tags = { CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK, CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Cucumber::Integration.version.to_s, - CI::Ext::Test::TAG_TYPE => CI::Ext::Test::Type::TEST, CI::Ext::Test::TAG_SOURCE_FILE => Utils::Git.relative_to_root(event.test_case.location.file), CI::Ext::Test::TAG_SOURCE_START => event.test_case.location.line.to_s } diff --git a/lib/datadog/ci/contrib/minitest/hooks.rb b/lib/datadog/ci/contrib/minitest/hooks.rb index 14d71a62..e68b657d 100644 --- a/lib/datadog/ci/contrib/minitest/hooks.rb +++ b/lib/datadog/ci/contrib/minitest/hooks.rb @@ -30,7 +30,6 @@ def before_setup tags: { CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK, CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::Minitest::Integration.version.to_s, - CI::Ext::Test::TAG_TYPE => CI::Ext::Test::Type::TEST, CI::Ext::Test::TAG_SOURCE_FILE => Utils::Git.relative_to_root(source_file), CI::Ext::Test::TAG_SOURCE_START => line_number.to_s }, diff --git a/lib/datadog/ci/contrib/rspec/example.rb b/lib/datadog/ci/contrib/rspec/example.rb index ada403e1..3b34f5a3 100644 --- a/lib/datadog/ci/contrib/rspec/example.rb +++ b/lib/datadog/ci/contrib/rspec/example.rb @@ -36,7 +36,6 @@ def run(*) tags: { CI::Ext::Test::TAG_FRAMEWORK => Ext::FRAMEWORK, CI::Ext::Test::TAG_FRAMEWORK_VERSION => CI::Contrib::RSpec::Integration.version.to_s, - CI::Ext::Test::TAG_TYPE => CI::Ext::Test::Type::TEST, CI::Ext::Test::TAG_SOURCE_FILE => Utils::Git.relative_to_root(metadata[:file_path]), CI::Ext::Test::TAG_SOURCE_START => metadata[:line_number].to_s }, diff --git a/lib/datadog/ci/ext/test.rb b/lib/datadog/ci/ext/test.rb index f3e1f673..7508cba0 100644 --- a/lib/datadog/ci/ext/test.rb +++ b/lib/datadog/ci/ext/test.rb @@ -23,11 +23,12 @@ module Test TAG_CODEOWNERS = "test.codeowners" TAG_PARAMETERS = "test.parameters" - # those tags are special and they are used to correlate tests with the test sessions, suites, and modules + # those tags are special and used to correlate tests with the test sessions, suites, and modules + # they are transient and not sent to the backend TAG_TEST_SESSION_ID = "_test.session_id" TAG_TEST_MODULE_ID = "_test.module_id" TAG_TEST_SUITE_ID = "_test.suite_id" - SPECIAL_TAGS = [TAG_TEST_SESSION_ID, TAG_TEST_MODULE_ID, TAG_TEST_SUITE_ID].freeze + TRANSIENT_TAGS = [TAG_TEST_SESSION_ID, TAG_TEST_MODULE_ID, TAG_TEST_SUITE_ID].freeze # tags that are common for the whole session and can be inherited from the test session INHERITABLE_TAGS = [TAG_FRAMEWORK, TAG_FRAMEWORK_VERSION].freeze diff --git a/lib/datadog/ci/test_visibility/recorder.rb b/lib/datadog/ci/test_visibility/recorder.rb index eb4f0db4..6f990898 100644 --- a/lib/datadog/ci/test_visibility/recorder.rb +++ b/lib/datadog/ci/test_visibility/recorder.rb @@ -94,6 +94,7 @@ def trace_test(test_name, test_suite_name, service: nil, tags: {}, &block) set_suite_context(tags, name: test_suite_name) tags[Ext::Test::TAG_NAME] = test_name + tags[Ext::Test::TAG_TYPE] ||= Ext::Test::Type::TEST span_options = build_span_options( service, diff --git a/lib/datadog/ci/test_visibility/serializers/base.rb b/lib/datadog/ci/test_visibility/serializers/base.rb index e54259c1..093a5e74 100644 --- a/lib/datadog/ci/test_visibility/serializers/base.rb +++ b/lib/datadog/ci/test_visibility/serializers/base.rb @@ -34,7 +34,7 @@ def initialize(trace, span) @trace = trace @span = span - @meta = @span.meta.reject { |key, _| Ext::Test::SPECIAL_TAGS.include?(key) } + @meta = @span.meta.reject { |key, _| Ext::Test::TRANSIENT_TAGS.include?(key) } @errors = {} @validated = false diff --git a/sig/datadog/ci/ext/test.rbs b/sig/datadog/ci/ext/test.rbs index ffc3d2e4..ff3ae19d 100644 --- a/sig/datadog/ci/ext/test.rbs +++ b/sig/datadog/ci/ext/test.rbs @@ -38,7 +38,7 @@ module Datadog TAG_TEST_SUITE_ID: "_test.suite_id" - SPECIAL_TAGS: Array[String] + TRANSIENT_TAGS: Array[String] INHERITABLE_TAGS: Array[String] diff --git a/spec/support/tracer_helpers.rb b/spec/support/tracer_helpers.rb index 96eeccff..8b236264 100644 --- a/spec/support/tracer_helpers.rb +++ b/spec/support/tracer_helpers.rb @@ -27,8 +27,7 @@ def produce_test_trace( test_suite, tags: { Datadog::CI::Ext::Test::TAG_FRAMEWORK => framework, - Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION => "1.0.0", - Datadog::CI::Ext::Test::TAG_TYPE => "test" + Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION => "1.0.0" }, service: service ) do |test| From d3f0dabf8c854943071d97bd9653810a94f741e3 Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Wed, 17 Jan 2024 13:05:32 +0100 Subject: [PATCH 4/4] introduce Ext::Test::SPAN_KIND_TEST to make it clear that span.kind has a different purpose from AppTypes::TYPE_TEST --- lib/datadog/ci/ext/test.rb | 1 + lib/datadog/ci/span.rb | 2 +- sig/datadog/ci/ext/test.rbs | 2 ++ spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb | 8 ++++---- spec/datadog/ci/contrib/minitest/instrumentation_spec.rb | 8 ++++---- spec/datadog/ci/contrib/rspec/instrumentation_spec.rb | 8 ++++---- spec/datadog/ci/test_visibility/recorder_spec.rb | 2 +- 7 files changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/datadog/ci/ext/test.rb b/lib/datadog/ci/ext/test.rb index 7508cba0..b5bbea31 100644 --- a/lib/datadog/ci/ext/test.rb +++ b/lib/datadog/ci/ext/test.rb @@ -41,6 +41,7 @@ module Test # internal APM tag to mark a span as a test span TAG_SPAN_KIND = "span.kind" + SPAN_KIND_TEST = "test" # test status as recognized by Datadog module Status diff --git a/lib/datadog/ci/span.rb b/lib/datadog/ci/span.rb index e0609b05..f1ed907f 100644 --- a/lib/datadog/ci/span.rb +++ b/lib/datadog/ci/span.rb @@ -130,7 +130,7 @@ def set_environment_runtime_tags end def set_default_tags - tracer_span.set_tag(Ext::Test::TAG_SPAN_KIND, Ext::AppTypes::TYPE_TEST) + tracer_span.set_tag(Ext::Test::TAG_SPAN_KIND, Ext::Test::SPAN_KIND_TEST) end # Sets the parameters for this span for parametrized tests (e.g. Cucumber examples or RSpec shared specs). diff --git a/sig/datadog/ci/ext/test.rbs b/sig/datadog/ci/ext/test.rbs index ff3ae19d..a2c6588b 100644 --- a/sig/datadog/ci/ext/test.rbs +++ b/sig/datadog/ci/ext/test.rbs @@ -52,6 +52,8 @@ module Datadog TAG_SPAN_KIND: "span.kind" + SPAN_KIND_TEST: "test" + module Status PASS: "pass" diff --git a/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb b/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb index 49deb06a..a0050612 100644 --- a/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb @@ -77,7 +77,7 @@ expect(scenario_span.resource).to eq("cucumber scenario") expect(scenario_span.service).to eq("jalapenos") - expect(scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq(Datadog::CI::Ext::AppTypes::TYPE_TEST) + expect(scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq(Datadog::CI::Ext::Test::SPAN_KIND_TEST) expect(scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_NAME)).to eq("cucumber scenario") expect(scenario_span.get_tag(Datadog::CI::Ext::Test::TAG_SUITE)).to eq( "Datadog integration at spec/datadog/ci/contrib/cucumber/features/passing.feature" @@ -112,7 +112,7 @@ expect(test_session_span).not_to be_nil expect(test_session_span.service).to eq("jalapenos") expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( - Datadog::CI::Ext::AppTypes::TYPE_TEST + Datadog::CI::Ext::Test::SPAN_KIND_TEST ) expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::Cucumber::Ext::FRAMEWORK @@ -128,7 +128,7 @@ expect(test_module_span.name).to eq(test_command) expect(test_module_span.service).to eq("jalapenos") expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( - Datadog::CI::Ext::AppTypes::TYPE_TEST + Datadog::CI::Ext::Test::SPAN_KIND_TEST ) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::Cucumber::Ext::FRAMEWORK @@ -144,7 +144,7 @@ expect(test_suite_span.name).to eq("Datadog integration at spec/datadog/ci/contrib/cucumber/features/passing.feature") expect(test_suite_span.service).to eq("jalapenos") expect(test_suite_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( - Datadog::CI::Ext::AppTypes::TYPE_TEST + Datadog::CI::Ext::Test::SPAN_KIND_TEST ) expect(test_suite_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::Cucumber::Ext::FRAMEWORK diff --git a/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb b/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb index c95daa8e..d8142a98 100644 --- a/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/minitest/instrumentation_spec.rb @@ -58,7 +58,7 @@ def test_foo expect(span.get_tag(Datadog::CI::Ext::Test::TAG_SUITE)).to eq( "SomeTest at spec/datadog/ci/contrib/minitest/instrumentation_spec.rb" ) - expect(span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq(Datadog::CI::Ext::AppTypes::TYPE_TEST) + expect(span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq(Datadog::CI::Ext::Test::SPAN_KIND_TEST) expect(span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq(Datadog::CI::Ext::Test::Type::TEST) expect(span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq(Datadog::CI::Contrib::Minitest::Ext::FRAMEWORK) expect(span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION)).to eq( @@ -409,7 +409,7 @@ def test_pass_other expect(test_session_span).not_to be_nil expect(test_session_span.type).to eq(Datadog::CI::Ext::AppTypes::TYPE_TEST_SESSION) expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( - Datadog::CI::Ext::AppTypes::TYPE_TEST + Datadog::CI::Ext::Test::SPAN_KIND_TEST ) expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::Minitest::Ext::FRAMEWORK @@ -429,7 +429,7 @@ def test_pass_other expect(test_module_span.name).to eq(test_command) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( - Datadog::CI::Ext::AppTypes::TYPE_TEST + Datadog::CI::Ext::Test::SPAN_KIND_TEST ) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::Minitest::Ext::FRAMEWORK @@ -449,7 +449,7 @@ def test_pass_other expect(test_suite_span.name).to eq("SomeTest at spec/datadog/ci/contrib/minitest/instrumentation_spec.rb") expect(test_suite_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( - Datadog::CI::Ext::AppTypes::TYPE_TEST + Datadog::CI::Ext::Test::SPAN_KIND_TEST ) expect(test_suite_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::Minitest::Ext::FRAMEWORK diff --git a/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb b/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb index 9f1d527f..b7602a26 100644 --- a/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb +++ b/spec/datadog/ci/contrib/rspec/instrumentation_spec.rb @@ -37,7 +37,7 @@ def with_new_rspec_environment expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_NAME)).to eq("foo") expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_SUITE)).to eq("some test at #{spec.file_path}") - expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq(Datadog::CI::Ext::AppTypes::TYPE_TEST) + expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq(Datadog::CI::Ext::Test::SPAN_KIND_TEST) expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_TYPE)).to eq(Datadog::CI::Ext::Test::Type::TEST) expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq(Datadog::CI::Contrib::RSpec::Ext::FRAMEWORK) expect(first_test_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK_VERSION)).to eq( @@ -269,7 +269,7 @@ def rspec_session_run(with_failed_test: false, with_shared_test: false) expect(test_session_span.type).to eq(Datadog::CI::Ext::AppTypes::TYPE_TEST_SESSION) expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( - Datadog::CI::Ext::AppTypes::TYPE_TEST + Datadog::CI::Ext::Test::SPAN_KIND_TEST ) expect(test_session_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::RSpec::Ext::FRAMEWORK @@ -291,7 +291,7 @@ def rspec_session_run(with_failed_test: false, with_shared_test: false) expect(test_module_span.name).to eq(test_command) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( - Datadog::CI::Ext::AppTypes::TYPE_TEST + Datadog::CI::Ext::Test::SPAN_KIND_TEST ) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::RSpec::Ext::FRAMEWORK @@ -313,7 +313,7 @@ def rspec_session_run(with_failed_test: false, with_shared_test: false) expect(test_suite_span.name).to eq("SomeTest at #{spec.file_path}") expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND)).to eq( - Datadog::CI::Ext::AppTypes::TYPE_TEST + Datadog::CI::Ext::Test::SPAN_KIND_TEST ) expect(test_module_span.get_tag(Datadog::CI::Ext::Test::TAG_FRAMEWORK)).to eq( Datadog::CI::Contrib::RSpec::Ext::FRAMEWORK diff --git a/spec/datadog/ci/test_visibility/recorder_spec.rb b/spec/datadog/ci/test_visibility/recorder_spec.rb index f519c2e1..d482bf68 100644 --- a/spec/datadog/ci/test_visibility/recorder_spec.rb +++ b/spec/datadog/ci/test_visibility/recorder_spec.rb @@ -24,7 +24,7 @@ it "span.kind is equal to test" do expect( span_under_test.get_tag(Datadog::CI::Ext::Test::TAG_SPAN_KIND) - ).to eq(Datadog::CI::Ext::AppTypes::TYPE_TEST) + ).to eq(Datadog::CI::Ext::Test::SPAN_KIND_TEST) end end