From f4baad81c4aac10e2f98cf0f2124abd7e02f6e41 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 19 Sep 2024 13:53:33 +0200 Subject: [PATCH 1/7] add type-level metadata dictionaries to msgpack header --- lib/datadog/ci/ext/test.rb | 3 +++ lib/datadog/ci/test_visibility/transport.rb | 11 ++++++++++- sig/datadog/ci/ext/test.rbs | 2 ++ spec/datadog/ci/test_visibility/transport_spec.rb | 5 +++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/datadog/ci/ext/test.rb b/lib/datadog/ci/ext/test.rb index cc6c64b4..bf7493f4 100644 --- a/lib/datadog/ci/ext/test.rb +++ b/lib/datadog/ci/ext/test.rb @@ -68,6 +68,9 @@ module Test TAG_SPAN_KIND = "span.kind" SPAN_KIND_TEST = "test" + # common tags that are serialized directly in msgpack header in metadata field + METADATA_TAG_TEST_SESSION_NAME = "test_session.name" + # 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/transport.rb b/lib/datadog/ci/test_visibility/transport.rb index 3fcf8868..8e26fe1c 100644 --- a/lib/datadog/ci/test_visibility/transport.rb +++ b/lib/datadog/ci/test_visibility/transport.rb @@ -3,6 +3,7 @@ require "datadog/core/environment/identity" require_relative "serializers/factories/test_level" +require_relative "../ext/app_types" require_relative "../ext/telemetry" require_relative "../ext/transport" require_relative "../transport/event_platform_transport" @@ -75,7 +76,7 @@ def write_payload_header(packer) packer.write(1) packer.write("metadata") - packer.write_map_header(1) + packer.write_map_header(1 + Ext::AppTypes::CI_SPAN_TYPES.size) packer.write("*") metadata_fields_count = dd_env ? 4 : 3 @@ -95,6 +96,14 @@ def write_payload_header(packer) packer.write("library_version") packer.write(Datadog::CI::VERSION::STRING) + Ext::AppTypes::CI_SPAN_TYPES.each do |ci_span_type| + packer.write(ci_span_type) + packer.write_map_header(1) + + packer.write(Ext::Test::METADATA_TAG_TEST_SESSION_NAME) + packer.write("dummy") + end + packer.write("events") end diff --git a/sig/datadog/ci/ext/test.rbs b/sig/datadog/ci/ext/test.rbs index 95147249..62ef6eda 100644 --- a/sig/datadog/ci/ext/test.rbs +++ b/sig/datadog/ci/ext/test.rbs @@ -96,6 +96,8 @@ module Datadog EARLY_FLAKE_FAULTY: "faulty" + METADATA_TAG_TEST_SESSION_NAME: "test_session.name" + module Status PASS: "pass" diff --git a/spec/datadog/ci/test_visibility/transport_spec.rb b/spec/datadog/ci/test_visibility/transport_spec.rb index 377fa4fe..857dc272 100644 --- a/spec/datadog/ci/test_visibility/transport_spec.rb +++ b/spec/datadog/ci/test_visibility/transport_spec.rb @@ -48,6 +48,11 @@ expect(metadata).to include("runtime-id", "library_version") expect(metadata["language"]).to eq("ruby") + Datadog::CI::Ext::AppTypes::CI_SPAN_TYPES.each do |type| + type_metadata = payload["metadata"][type] + expect(type_metadata).to include("test_session.name" => "dummy") + end + events = payload["events"] expect(events.count).to eq(1) expect(events.first["content"]["resource"]).to include("calculator_tests") From d060cfb332da22baad4328fcbde65b0d9fa1be41 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 19 Sep 2024 14:39:42 +0200 Subject: [PATCH 2/7] use DD_TEST_SESSION_NAME env variable to set settings.ci.test_session_name --- lib/datadog/ci/configuration/settings.rb | 5 +++ lib/datadog/ci/ext/settings.rb | 1 + sig/datadog/ci/ext/settings.rbs | 1 + .../datadog/ci/configuration/settings_spec.rb | 37 ++++++++++++++++++- 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/lib/datadog/ci/configuration/settings.rb b/lib/datadog/ci/configuration/settings.rb index 3d7f8a80..fc154923 100644 --- a/lib/datadog/ci/configuration/settings.rb +++ b/lib/datadog/ci/configuration/settings.rb @@ -24,6 +24,11 @@ def self.add_settings!(base) o.default false end + option :test_session_name do |o| + o.type :string, nilable: true + o.env CI::Ext::Settings::ENV_TEST_SESSION_NAME + end + option :agentless_mode_enabled do |o| o.type :bool o.env CI::Ext::Settings::ENV_AGENTLESS_MODE_ENABLED diff --git a/lib/datadog/ci/ext/settings.rb b/lib/datadog/ci/ext/settings.rb index a318ee26..a7739dc2 100644 --- a/lib/datadog/ci/ext/settings.rb +++ b/lib/datadog/ci/ext/settings.rb @@ -19,6 +19,7 @@ module Settings ENV_RETRY_FAILED_TESTS_MAX_ATTEMPTS = "DD_CIVISIBILITY_FLAKY_RETRY_COUNT" ENV_RETRY_FAILED_TESTS_TOTAL_LIMIT = "DD_CIVISIBILITY_TOTAL_FLAKY_RETRY_COUNT" ENV_RETRY_NEW_TESTS_ENABLED = "DD_CIVISIBILITY_EARLY_FLAKE_DETECTION_ENABLED" + ENV_TEST_SESSION_NAME = "DD_TEST_SESSION_NAME" # Source: https://docs.datadoghq.com/getting_started/site/ DD_SITE_ALLOWLIST = %w[ diff --git a/sig/datadog/ci/ext/settings.rbs b/sig/datadog/ci/ext/settings.rbs index d96adf24..e2ba7e74 100644 --- a/sig/datadog/ci/ext/settings.rbs +++ b/sig/datadog/ci/ext/settings.rbs @@ -16,6 +16,7 @@ module Datadog ENV_RETRY_FAILED_TESTS_MAX_ATTEMPTS: String ENV_RETRY_FAILED_TESTS_TOTAL_LIMIT: String ENV_RETRY_NEW_TESTS_ENABLED: String + ENV_TEST_SESSION_NAME: String DD_SITE_ALLOWLIST: Array[String] end diff --git a/spec/datadog/ci/configuration/settings_spec.rb b/spec/datadog/ci/configuration/settings_spec.rb index b70eae46..9a8fe759 100644 --- a/spec/datadog/ci/configuration/settings_spec.rb +++ b/spec/datadog/ci/configuration/settings_spec.rb @@ -98,6 +98,41 @@ def patcher end end + describe "#test_session_name" do + subject(:test_session_name) { settings.ci.test_session_name } + + it { is_expected.to be nil } + + context "when #{Datadog::CI::Ext::Settings::ENV_TEST_SESSION_NAME}" do + around do |example| + ClimateControl.modify(Datadog::CI::Ext::Settings::ENV_TEST_SESSION_NAME => test_session_name) do + example.run + end + end + + context "is not defined" do + let(:test_session_name) { nil } + + it { is_expected.to be nil } + end + + context "is set to some value" do + let(:test_session_name) { "knapsack-pro-circle-ci-runner-1" } + + it { is_expected.to eq test_session_name } + end + end + end + + describe "#test_session_name=" do + it "updates the #test_session_name setting" do + expect { settings.ci.test_session_name = "rspec" } + .to change { settings.ci.test_session_name } + .from(nil) + .to("rspec") + end + end + describe "#agentless_mode_enabled" do subject(:agentless_mode_enabled) { settings.ci.agentless_mode_enabled } @@ -166,7 +201,7 @@ def patcher end describe "#agentless_url=" do - it "updates the #enabled setting" do + it "updates the #agentless_url setting" do expect { settings.ci.agentless_url = "example.com" } .to change { settings.ci.agentless_url } .from(nil) From 0bb302c7d2a6d57c0b73522fc40af89692e76fd7 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 20 Sep 2024 10:18:15 +0200 Subject: [PATCH 3/7] add logical_test_session_name to TestVisibility::Component --- lib/datadog/ci/configuration/components.rb | 3 ++- lib/datadog/ci/test_visibility/component.rb | 13 +++++++++++-- sig/datadog/ci/test_visibility/component.rbs | 6 +++++- .../ci/test_visibility/component_spec.rb | 18 ++++++++++++++++++ spec/support/contexts/ci_mode.rb | 4 ++++ 5 files changed, 40 insertions(+), 4 deletions(-) diff --git a/lib/datadog/ci/configuration/components.rb b/lib/datadog/ci/configuration/components.rb index 582a164d..0fc277cb 100644 --- a/lib/datadog/ci/configuration/components.rb +++ b/lib/datadog/ci/configuration/components.rb @@ -123,7 +123,8 @@ def activate_ci!(settings) # @type ivar @test_optimisation: Datadog::CI::TestOptimisation::Component @test_optimisation = build_test_optimisation(settings, test_visibility_api) @test_visibility = TestVisibility::Component.new( - test_suite_level_visibility_enabled: !settings.ci.force_test_level_visibility + test_suite_level_visibility_enabled: !settings.ci.force_test_level_visibility, + logical_test_session_name: settings.ci.test_session_name ) end diff --git a/lib/datadog/ci/test_visibility/component.rb b/lib/datadog/ci/test_visibility/component.rb index 572ce78b..c3fc1741 100644 --- a/lib/datadog/ci/test_visibility/component.rb +++ b/lib/datadog/ci/test_visibility/component.rb @@ -17,15 +17,17 @@ module CI module TestVisibility # Common behavior for CI tests class Component - attr_reader :test_suite_level_visibility_enabled + attr_reader :test_suite_level_visibility_enabled, :logical_test_session_name def initialize( test_suite_level_visibility_enabled: false, - codeowners: Codeowners::Parser.new(Git::LocalRepository.root).parse + codeowners: Codeowners::Parser.new(Git::LocalRepository.root).parse, + logical_test_session_name: nil ) @test_suite_level_visibility_enabled = test_suite_level_visibility_enabled @context = Context.new @codeowners = codeowners + @logical_test_session_name = logical_test_session_name end def start_test_session(service: nil, tags: {}, total_tests_count: 0) @@ -152,6 +154,9 @@ def on_test_session_started(test_session) Telemetry.test_session_started(test_session) Telemetry.event_created(test_session) + # sets logical test session name if none provided by the user + override_logical_test_session_name!(test_session) if logical_test_session_name.nil? + # signal Remote::Component to configure the library remote.configure(test_session) end @@ -269,6 +274,10 @@ def validate_test_suite_level_visibility_correctness(test) end end + def override_logical_test_session_name!(test_session) + @logical_test_session_name = Utils::TestRun.command + end + def test_optimisation Datadog.send(:components).test_optimisation end diff --git a/sig/datadog/ci/test_visibility/component.rbs b/sig/datadog/ci/test_visibility/component.rbs index 29aabee0..9620ea08 100644 --- a/sig/datadog/ci/test_visibility/component.rbs +++ b/sig/datadog/ci/test_visibility/component.rbs @@ -9,7 +9,9 @@ module Datadog attr_reader test_suite_level_visibility_enabled: bool - def initialize: (?test_suite_level_visibility_enabled: bool, ?codeowners: Datadog::CI::Codeowners::Matcher) -> void + attr_reader logical_test_session_name: String? + + def initialize: (?test_suite_level_visibility_enabled: bool, ?codeowners: Datadog::CI::Codeowners::Matcher, ?logical_test_session_name: String?) -> void def trace_test: (String span_name, String test_suite_name, ?service: String?, ?tags: Hash[untyped, untyped]) ?{ (Datadog::CI::Test span) -> untyped } -> untyped @@ -77,6 +79,8 @@ module Datadog def subscribe_to_after_stop_event: (Datadog::Tracing::SpanOperation span) -> void + def override_logical_test_session_name!: (Datadog::CI::TestSession test_session) -> void + def test_optimisation: () -> Datadog::CI::TestOptimisation::Component def test_retries: () -> Datadog::CI::TestRetries::Component diff --git a/spec/datadog/ci/test_visibility/component_spec.rb b/spec/datadog/ci/test_visibility/component_spec.rb index c7379fbd..a067b537 100644 --- a/spec/datadog/ci/test_visibility/component_spec.rb +++ b/spec/datadog/ci/test_visibility/component_spec.rb @@ -425,6 +425,24 @@ end end + context "with logical test session name set" do + let(:logical_test_session_name) { "my-logical-test-session" } + + it "sets the logical test session name" do + subject + + expect(test_visibility.logical_test_session_name).to eq(logical_test_session_name) + end + end + + context "without logical test session name set" do + it "uses the test command" do + subject + + expect(test_visibility.logical_test_session_name).to eq(test_command) + end + end + it_behaves_like "span with environment tags" it_behaves_like "span with default tags" it_behaves_like "span with runtime tags" diff --git a/spec/support/contexts/ci_mode.rb b/spec/support/contexts/ci_mode.rb index 2245f24e..f37da894 100644 --- a/spec/support/contexts/ci_mode.rb +++ b/spec/support/contexts/ci_mode.rb @@ -14,6 +14,7 @@ include CoverageHelpers let(:test_command) { "command" } + let(:logical_test_session_name) { nil } let(:integration_name) { :no_instrument } let(:integration_options) { {} } @@ -124,6 +125,9 @@ c.ci.retry_failed_tests_max_attempts = retry_failed_tests_max_attempts c.ci.retry_failed_tests_total_limit = retry_failed_tests_total_limit + # logical test session name + c.ci.test_session_name = logical_test_session_name + # instrumentation unless integration_name == :no_instrument c.ci.instrument integration_name, integration_options From d0c52db84fce8543a4382e896dad5dfee5a50e16 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 20 Sep 2024 10:30:33 +0200 Subject: [PATCH 4/7] Add #test_command, #ci_provider, #ci_job_name helper methods to Datadog::CI::TestSession --- lib/datadog/ci/test_session.rb | 18 +++++++++++ lib/datadog/ci/test_visibility/component.rb | 2 +- .../ci/test_visibility/null_component.rb | 7 +++++ lib/datadog/ci/test_visibility/telemetry.rb | 4 +-- sig/datadog/ci/test_session.rbs | 6 ++++ spec/datadog/ci/test_session_spec.rb | 30 +++++++++++++++++++ .../ci/test_visibility/telemetry_spec.rb | 2 +- 7 files changed, 64 insertions(+), 5 deletions(-) diff --git a/lib/datadog/ci/test_session.rb b/lib/datadog/ci/test_session.rb index 713d195b..18516bc6 100644 --- a/lib/datadog/ci/test_session.rb +++ b/lib/datadog/ci/test_session.rb @@ -28,6 +28,24 @@ def name get_tag(Ext::Test::TAG_COMMAND) end + # Return the test session's command used to run the tests + # @return [String] the command for this test session. + def test_command + get_tag(Ext::Test::TAG_COMMAND) + end + + # Return the test session's CI provider name (e.g. "travis", "circleci", etc.) + # @return [String] the provider name for this test session. + def ci_provider + get_tag(Ext::Environment::TAG_PROVIDER_NAME) + end + + # Return the test session's CI job name (e.g. "build", "test", etc.) + # @return [String] the job name for this test session. + def ci_job_name + get_tag(Ext::Environment::TAG_JOB_NAME) + end + def skipping_tests? get_tag(Ext::Test::TAG_ITR_TEST_SKIPPING_ENABLED) == "true" end diff --git a/lib/datadog/ci/test_visibility/component.rb b/lib/datadog/ci/test_visibility/component.rb index c3fc1741..4416376f 100644 --- a/lib/datadog/ci/test_visibility/component.rb +++ b/lib/datadog/ci/test_visibility/component.rb @@ -275,7 +275,7 @@ def validate_test_suite_level_visibility_correctness(test) end def override_logical_test_session_name!(test_session) - @logical_test_session_name = Utils::TestRun.command + @logical_test_session_name = test_session.test_command end def test_optimisation diff --git a/lib/datadog/ci/test_visibility/null_component.rb b/lib/datadog/ci/test_visibility/null_component.rb index 817313ba..35757e29 100644 --- a/lib/datadog/ci/test_visibility/null_component.rb +++ b/lib/datadog/ci/test_visibility/null_component.rb @@ -53,6 +53,13 @@ def set_test_finished_callback(_) def remove_test_finished_callback end + def test_suite_level_visibility_enabled + false + end + + def logical_test_session_name + end + private def skip_tracing(block = nil) diff --git a/lib/datadog/ci/test_visibility/telemetry.rb b/lib/datadog/ci/test_visibility/telemetry.rb index bcc9a753..b65637dd 100644 --- a/lib/datadog/ci/test_visibility/telemetry.rb +++ b/lib/datadog/ci/test_visibility/telemetry.rb @@ -34,9 +34,7 @@ def self.test_session_started(test_session) 1, { Ext::Telemetry::TAG_AUTO_INJECTED => "false", # ruby doesn't support auto injection yet - Ext::Telemetry::TAG_PROVIDER => - test_session.get_tag(Ext::Environment::TAG_PROVIDER_NAME) || - Ext::Telemetry::Provider::UNSUPPORTED + Ext::Telemetry::TAG_PROVIDER => test_session.ci_provider || Ext::Telemetry::Provider::UNSUPPORTED } ) end diff --git a/sig/datadog/ci/test_session.rbs b/sig/datadog/ci/test_session.rbs index 01433d41..0225f0bf 100644 --- a/sig/datadog/ci/test_session.rbs +++ b/sig/datadog/ci/test_session.rbs @@ -5,6 +5,12 @@ module Datadog @inheritable_tags: Hash[untyped, untyped] def inheritable_tags: () -> Hash[untyped, untyped] + + def test_command: () -> String? + + def ci_provider: () -> String? + + def ci_job_name: () -> String? end end end diff --git a/spec/datadog/ci/test_session_spec.rb b/spec/datadog/ci/test_session_spec.rb index ae2f0642..aee56f15 100644 --- a/spec/datadog/ci/test_session_spec.rb +++ b/spec/datadog/ci/test_session_spec.rb @@ -43,6 +43,36 @@ it { is_expected.to eq("test command") } end + describe "#test_command" do + subject(:test_command) { ci_test_session.test_command } + + before do + tracer_span.set_tag(Datadog::CI::Ext::Test::TAG_COMMAND, "test command") + end + + it { is_expected.to eq("test command") } + end + + describe "#ci_provider" do + subject(:ci_provider) { ci_test_session.ci_provider } + + before do + tracer_span.set_tag(Datadog::CI::Ext::Environment::TAG_PROVIDER_NAME, "ci provider") + end + + it { is_expected.to eq("ci provider") } + end + + describe "#ci_job_name" do + subject(:ci_job_name) { ci_test_session.ci_job_name } + + before do + tracer_span.set_tag(Datadog::CI::Ext::Environment::TAG_JOB_NAME, "ci job name") + end + + it { is_expected.to eq("ci job name") } + end + describe "#skipping_tests?" do subject(:skipping_tests?) { ci_test_session.skipping_tests? } diff --git a/spec/datadog/ci/test_visibility/telemetry_spec.rb b/spec/datadog/ci/test_visibility/telemetry_spec.rb index 3eeb853b..4d012201 100644 --- a/spec/datadog/ci/test_visibility/telemetry_spec.rb +++ b/spec/datadog/ci/test_visibility/telemetry_spec.rb @@ -274,7 +274,7 @@ let(:test_session) do instance_double( Datadog::CI::TestSession, - get_tag: provider_tag + ci_provider: provider_tag ) end From 59f9323b87428a1b1861cc1ee13f54ce151381af Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 20 Sep 2024 10:47:31 +0200 Subject: [PATCH 5/7] use CI job name as part of the logical test session name if available --- lib/datadog/ci/test_visibility/component.rb | 4 ++++ .../ci/test_visibility/component_spec.rb | 22 ++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lib/datadog/ci/test_visibility/component.rb b/lib/datadog/ci/test_visibility/component.rb index 4416376f..67503874 100644 --- a/lib/datadog/ci/test_visibility/component.rb +++ b/lib/datadog/ci/test_visibility/component.rb @@ -276,6 +276,10 @@ def validate_test_suite_level_visibility_correctness(test) def override_logical_test_session_name!(test_session) @logical_test_session_name = test_session.test_command + ci_job_name = test_session.ci_job_name + if ci_job_name + @logical_test_session_name = "#{ci_job_name}-#{@logical_test_session_name}" + end end def test_optimisation diff --git a/spec/datadog/ci/test_visibility/component_spec.rb b/spec/datadog/ci/test_visibility/component_spec.rb index a067b537..015c915f 100644 --- a/spec/datadog/ci/test_visibility/component_spec.rb +++ b/spec/datadog/ci/test_visibility/component_spec.rb @@ -436,10 +436,26 @@ end context "without logical test session name set" do - it "uses the test command" do - subject + context "without CI job name available" do + it "uses the test command" do + subject + + expect(test_visibility.logical_test_session_name).to eq(test_command) + end + end + + context "with CI job name available" do + let(:ci_job_name) { "my-ci-job" } - expect(test_visibility.logical_test_session_name).to eq(test_command) + before do + allow_any_instance_of(Datadog::CI::TestSession).to receive(:ci_job_name).and_return(ci_job_name) + end + + it "uses the CI job name and test command" do + subject + + expect(test_visibility.logical_test_session_name).to eq("#{ci_job_name}-#{test_command}") + end end end From 6f756b82c0e3637ed8378422202acfa5ee99807f Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 20 Sep 2024 10:54:49 +0200 Subject: [PATCH 6/7] send logical test session in the metadata payload for all test levels --- lib/datadog/ci/test_visibility/transport.rb | 15 ++++++++++++--- sig/datadog/ci/test_visibility/transport.rbs | 5 ++++- spec/datadog/ci/test_visibility/transport_spec.rb | 3 ++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/datadog/ci/test_visibility/transport.rb b/lib/datadog/ci/test_visibility/transport.rb index 8e26fe1c..b9bab02c 100644 --- a/lib/datadog/ci/test_visibility/transport.rb +++ b/lib/datadog/ci/test_visibility/transport.rb @@ -52,7 +52,12 @@ def encode_events(traces) end def encode_span(trace, span) - serializer = serializers_factory.serializer(trace, span, options: {itr_correlation_id: itr&.correlation_id}) + serializer = serializers_factory.serializer( + trace, + span, + options: {itr_correlation_id: test_optimisation&.correlation_id} + ) + if serializer.valid? encoded = encoder.encode(serializer) return nil if event_too_large?(span, encoded) @@ -101,15 +106,19 @@ def write_payload_header(packer) packer.write_map_header(1) packer.write(Ext::Test::METADATA_TAG_TEST_SESSION_NAME) - packer.write("dummy") + packer.write(test_visibility&.logical_test_session_name) end packer.write("events") end - def itr + def test_optimisation @test_optimisation ||= Datadog::CI.send(:test_optimisation) end + + def test_visibility + @test_visibility ||= Datadog::CI.send(:test_visibility) + end end end end diff --git a/sig/datadog/ci/test_visibility/transport.rbs b/sig/datadog/ci/test_visibility/transport.rbs index 9e38b0b0..7d0169c6 100644 --- a/sig/datadog/ci/test_visibility/transport.rbs +++ b/sig/datadog/ci/test_visibility/transport.rbs @@ -7,7 +7,9 @@ module Datadog @dd_env: String? @serializers_factory: singleton(Datadog::CI::TestVisibility::Serializers::Factories::TestLevel) | singleton(Datadog::CI::TestVisibility::Serializers::Factories::TestSuiteLevel) + @test_optimisation: Datadog::CI::TestOptimisation::Component? + @test_visibility: Datadog::CI::TestVisibility::Component? def initialize: ( api: Datadog::CI::Transport::Api::Base, @@ -21,7 +23,8 @@ module Datadog def send_payload: (String encoded_payload) -> Datadog::CI::Transport::Adapters::Net::Response def encode_events: (Array[Datadog::Tracing::TraceSegment] traces) -> ::Array[String] def encode_span: (Datadog::Tracing::TraceSegment trace, Datadog::Tracing::Span span) -> String? - def itr: () -> Datadog::CI::TestOptimisation::Component? + def test_optimisation: () -> Datadog::CI::TestOptimisation::Component? + def test_visibility: () -> Datadog::CI::TestVisibility::Component? end end end diff --git a/spec/datadog/ci/test_visibility/transport_spec.rb b/spec/datadog/ci/test_visibility/transport_spec.rb index 857dc272..8d9a4640 100644 --- a/spec/datadog/ci/test_visibility/transport_spec.rb +++ b/spec/datadog/ci/test_visibility/transport_spec.rb @@ -6,6 +6,7 @@ include_context "Telemetry spy" include_context "CI mode activated" do let(:integration_name) { :rspec } + let(:logical_test_session_name) { "logical_test_session_name" } end subject(:transport) do @@ -50,7 +51,7 @@ Datadog::CI::Ext::AppTypes::CI_SPAN_TYPES.each do |type| type_metadata = payload["metadata"][type] - expect(type_metadata).to include("test_session.name" => "dummy") + expect(type_metadata).to include("test_session.name" => logical_test_session_name) end events = payload["events"] From 96c32c706b29a06c9df1482ac5d7674a1c0c3b23 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 20 Sep 2024 11:11:14 +0200 Subject: [PATCH 7/7] make test session name tests more stable --- spec/datadog/ci/test_visibility/component_spec.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/spec/datadog/ci/test_visibility/component_spec.rb b/spec/datadog/ci/test_visibility/component_spec.rb index 015c915f..e3dd67f1 100644 --- a/spec/datadog/ci/test_visibility/component_spec.rb +++ b/spec/datadog/ci/test_visibility/component_spec.rb @@ -436,7 +436,13 @@ end context "without logical test session name set" do + before do + allow_any_instance_of(Datadog::CI::TestSession).to receive(:ci_job_name).and_return(ci_job_name) + end + context "without CI job name available" do + let(:ci_job_name) { nil } + it "uses the test command" do subject @@ -447,10 +453,6 @@ context "with CI job name available" do let(:ci_job_name) { "my-ci-job" } - before do - allow_any_instance_of(Datadog::CI::TestSession).to receive(:ci_job_name).and_return(ci_job_name) - end - it "uses the CI job name and test command" do subject