From cd9f8d81fba3d60d2538fd5713ed98a8f4e30f0f Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 19 Dec 2024 13:52:46 +0100 Subject: [PATCH 1/3] use logical test session name as part of test session span's resource instead of test command --- lib/datadog/ci/test_session.rb | 2 +- .../ci/test_visibility/serializers/base.rb | 4 ++++ .../test_visibility/serializers/test_session.rb | 2 +- .../ci/test_visibility/serializers/base.rbs | 2 ++ spec/datadog/ci/test_session_spec.rb | 8 ++------ .../serializers/test_session_spec.rb | 17 +++++++++++++++++ 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/lib/datadog/ci/test_session.rb b/lib/datadog/ci/test_session.rb index 18516bc6..c8798bd4 100644 --- a/lib/datadog/ci/test_session.rb +++ b/lib/datadog/ci/test_session.rb @@ -25,7 +25,7 @@ def finish # Return the test session's name which is equal to test command used # @return [String] the command for this test session. def name - get_tag(Ext::Test::TAG_COMMAND) + test_visibility.logical_test_session_name || "test_session" end # Return the test session's command used to run the tests diff --git a/lib/datadog/ci/test_visibility/serializers/base.rb b/lib/datadog/ci/test_visibility/serializers/base.rb index 0872e648..d62d2e3f 100644 --- a/lib/datadog/ci/test_visibility/serializers/base.rb +++ b/lib/datadog/ci/test_visibility/serializers/base.rb @@ -238,6 +238,10 @@ def to_s def to_integer(value) value&.to_i end + + def test_visibility + @test_visibility ||= Datadog::CI.send(:test_visibility) + end end end end diff --git a/lib/datadog/ci/test_visibility/serializers/test_session.rb b/lib/datadog/ci/test_visibility/serializers/test_session.rb index 5ea4e0fe..15f862db 100644 --- a/lib/datadog/ci/test_visibility/serializers/test_session.rb +++ b/lib/datadog/ci/test_visibility/serializers/test_session.rb @@ -31,7 +31,7 @@ def name end def resource - "#{@span.get_tag(Ext::Test::TAG_FRAMEWORK)}.test_session.#{@span.get_tag(Ext::Test::TAG_COMMAND)}" + "#{@span.get_tag(Ext::Test::TAG_FRAMEWORK)}.test_session.#{test_visibility.logical_test_session_name}" end private diff --git a/sig/datadog/ci/test_visibility/serializers/base.rbs b/sig/datadog/ci/test_visibility/serializers/base.rbs index d5a76e41..6d56fcf6 100644 --- a/sig/datadog/ci/test_visibility/serializers/base.rbs +++ b/sig/datadog/ci/test_visibility/serializers/base.rbs @@ -93,6 +93,8 @@ module Datadog def to_integer: (String? value) -> Integer? def content_fields_count: () -> Integer + + def test_visibility: () -> Datadog::CI::TestVisibility::Component end end end diff --git a/spec/datadog/ci/test_session_spec.rb b/spec/datadog/ci/test_session_spec.rb index aee56f15..ea51af40 100644 --- a/spec/datadog/ci/test_session_spec.rb +++ b/spec/datadog/ci/test_session_spec.rb @@ -2,7 +2,7 @@ RSpec.describe Datadog::CI::TestSession do let(:tracer_span) { Datadog::Tracing::SpanOperation.new("session") } - let(:test_visibility) { spy("test_visibility") } + let(:test_visibility) { spy("test_visibility", logical_test_session_name: "my_test_session") } before { allow_any_instance_of(described_class).to receive(:test_visibility).and_return(test_visibility) } subject(:ci_test_session) { described_class.new(tracer_span) } @@ -36,11 +36,7 @@ describe "#name" do subject(:name) { ci_test_session.name } - before do - tracer_span.set_tag(Datadog::CI::Ext::Test::TAG_COMMAND, "test command") - end - - it { is_expected.to eq("test command") } + it { is_expected.to eq("my_test_session") } end describe "#test_command" do 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 1ce055a9..6b4ca7cc 100644 --- a/spec/datadog/ci/test_visibility/serializers/test_session_spec.rb +++ b/spec/datadog/ci/test_visibility/serializers/test_session_spec.rb @@ -38,6 +38,23 @@ expect(meta["_test.session_id"]).to be_nil end + + context "logical test session name is provided" do + let(:logical_test_session_name) { "logical_test_session_name" } + before do + expect_any_instance_of(Datadog::CI::TestVisibility::Component).to( + receive(:logical_test_session_name).and_return(logical_test_session_name) + ) + end + + it "uses logical test session name as part of span's resource instead of command" do + expect(content).to include( + { + "resource" => "rspec.test_session.#{logical_test_session_name}" + } + ) + end + end end context "trace a failed test" do From 1e972194838f4b3fc2bcbc812c3d85ee079dad79 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 19 Dec 2024 14:04:33 +0100 Subject: [PATCH 2/3] simplify TestSession's serializer test --- .../serializers/test_session_spec.rb | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) 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 6b4ca7cc..db3e69b8 100644 --- a/spec/datadog/ci/test_visibility/serializers/test_session_spec.rb +++ b/spec/datadog/ci/test_visibility/serializers/test_session_spec.rb @@ -13,6 +13,13 @@ produce_test_session_trace end + let(:logical_test_session_name) { "logical_test_session_name" } + before do + expect_any_instance_of(Datadog::CI::TestVisibility::Component).to( + receive(:logical_test_session_name).and_return(logical_test_session_name) + ) + end + it "serializes test event to messagepack" do expect_event_header(type: Datadog::CI::Ext::AppTypes::TYPE_TEST_SESSION) @@ -22,7 +29,7 @@ "name" => "rspec.test_session", "service" => "rspec-test-suite", "type" => Datadog::CI::Ext::AppTypes::TYPE_TEST_SESSION, - "resource" => "rspec.test_session.#{test_command}" + "resource" => "rspec.test_session.#{logical_test_session_name}" } ) @@ -38,23 +45,6 @@ expect(meta["_test.session_id"]).to be_nil end - - context "logical test session name is provided" do - let(:logical_test_session_name) { "logical_test_session_name" } - before do - expect_any_instance_of(Datadog::CI::TestVisibility::Component).to( - receive(:logical_test_session_name).and_return(logical_test_session_name) - ) - end - - it "uses logical test session name as part of span's resource instead of command" do - expect(content).to include( - { - "resource" => "rspec.test_session.#{logical_test_session_name}" - } - ) - end - end end context "trace a failed test" do From 7611ec841e42531b05cd4f5f9aaeacd976ee7669 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 19 Dec 2024 14:21:13 +0100 Subject: [PATCH 3/3] fix wrong assertion --- spec/datadog/ci/test_visibility/component_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/datadog/ci/test_visibility/component_spec.rb b/spec/datadog/ci/test_visibility/component_spec.rb index 78e62aa7..b0901e90 100644 --- a/spec/datadog/ci/test_visibility/component_spec.rb +++ b/spec/datadog/ci/test_visibility/component_spec.rb @@ -394,7 +394,7 @@ it "returns a new CI test_session span" do expect(subject).to be_kind_of(Datadog::CI::TestSession) - expect(subject.name).to eq(test_command) + expect(subject.name).to eq(test_visibility.logical_test_session_name) expect(subject.service).to eq(service) expect(subject.type).to eq(Datadog::CI::Ext::AppTypes::TYPE_TEST_SESSION) end