Skip to content

Commit

Permalink
do not send coverage events for tests skipped by test framework or by…
Browse files Browse the repository at this point in the history
… ITR
  • Loading branch information
anmarchenko committed Apr 17, 2024
1 parent 0a2cfa1 commit e24c0ec
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 18 deletions.
9 changes: 6 additions & 3 deletions lib/datadog/ci/itr/runner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,9 @@ def code_coverage?
@code_coverage_enabled
end

def start_coverage
def start_coverage(test)
return if !enabled? || !code_coverage?
return if test.skipped_by_itr?

coverage_collector&.start
end
Expand All @@ -99,7 +100,9 @@ def stop_coverage(test)
return if !enabled? || !code_coverage?

coverage = coverage_collector&.stop
return if coverage.nil?
return if coverage.nil? || coverage.empty?

return if test.skipped? || test.skipped_by_itr?

test_source_file = test.source_file

Expand All @@ -121,7 +124,7 @@ def stop_coverage(test)
end

def mark_if_skippable(test)
return unless enabled? && skipping_tests?
return if !enabled? || !skipping_tests?

test_full_name = Utils::TestRun.test_full_name(test.name, test.test_suite_name)

Expand Down
2 changes: 1 addition & 1 deletion lib/datadog/ci/test_visibility/recorder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ def on_test_finished(test)

def on_test_started(test)
@itr.mark_if_skippable(test)
@itr.start_coverage
@itr.start_coverage(test)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion sig/datadog/ci/itr/runner.rbs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ module Datadog

def code_coverage?: () -> bool

def start_coverage: () -> void
def start_coverage: (Datadog::CI::Test test) -> void

def stop_coverage: (Datadog::CI::Test test) -> Datadog::CI::ITR::Coverage::Event?

Expand Down
6 changes: 3 additions & 3 deletions spec/datadog/ci/contrib/cucumber/instrumentation_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -189,12 +189,12 @@
context "collecting coverage with features dir as root" do
before { skip if PlatformHelpers.jruby? }

it "creates coverage events for each test" do
expect(coverage_events).to have(4).items
it "creates coverage events for each non-skipped test" do
expect(coverage_events).to have(1).item

expect_coverage_events_belong_to_session(test_session_span)
expect_coverage_events_belong_to_suite(first_test_suite_span)
expect_coverage_events_belong_to_tests(test_spans)
expect_coverage_events_belong_to_tests([test_spans.first])
expect_non_empty_coverages

feature_coverage = coverage_events.first.coverage
Expand Down
61 changes: 51 additions & 10 deletions spec/datadog/ci/itr/runner_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
it "does not start coverage" do
expect(runner).not_to receive(:coverage_collector)

runner.start_coverage
runner.start_coverage(test_span)
expect(runner.stop_coverage(test_span)).to be_nil
end
end
Expand All @@ -133,7 +133,7 @@
it "does not start coverage" do
expect(runner).not_to receive(:coverage_collector)

runner.start_coverage
runner.start_coverage(test_span)
expect(runner.stop_coverage(test_span)).to be_nil
end
end
Expand All @@ -148,11 +148,21 @@
it "starts coverage" do
expect(runner).to receive(:coverage_collector).twice.and_call_original

runner.start_coverage
runner.start_coverage(test_span)
expect(1 + 1).to eq(2)
coverage_event = runner.stop_coverage(test_span)
expect(coverage_event.coverage.size).to be > 0
end

context "when test is skipped by ITR" do
it "does not start coverage" do
test_span.set_tag(Datadog::CI::Ext::Test::TAG_ITR_SKIPPED_BY_ITR, "true")

expect(runner).not_to receive(:coverage_collector)

runner.start_coverage(test_span)
end
end
end

context "when JRuby and code coverage is enabled" do
Expand All @@ -166,7 +176,7 @@
expect(runner).not_to receive(:coverage_collector)
expect(runner.code_coverage?).to be(false)

runner.start_coverage
runner.start_coverage(test_span)
expect(runner.stop_coverage(test_span)).to be_nil
end
end
Expand All @@ -182,13 +192,13 @@

configure

expect(test_span).to receive(:id).and_return(1)
expect(test_span).to receive(:test_suite_id).and_return(2)
expect(test_span).to receive(:test_session_id).and_return(3)
allow(test_span).to receive(:id).and_return(1)
allow(test_span).to receive(:test_suite_id).and_return(2)
allow(test_span).to receive(:test_session_id).and_return(3)
end

it "creates coverage event and writes it" do
runner.start_coverage
runner.start_coverage(test_span)
expect(1 + 1).to eq(2)
expect(runner.stop_coverage(test_span)).not_to be_nil

Expand All @@ -200,6 +210,37 @@
expect(event.coverage.size).to be > 0
end
end

context "when test is skipped" do
it "does not write coverage event" do
runner.start_coverage(test_span)
expect(1 + 1).to eq(2)
test_span.set_tag(Datadog::CI::Ext::Test::TAG_ITR_SKIPPED_BY_ITR, "true")

expect(runner.stop_coverage(test_span)).to be_nil
expect(writer).not_to have_received(:write)
end
end

context "when test is skipped by ITR" do
it "does not write coverage event" do
runner.start_coverage(test_span)
expect(1 + 1).to eq(2)
test_span.skipped!

expect(runner.stop_coverage(test_span)).to be_nil
expect(writer).not_to have_received(:write)
end
end

context "when coverage was not collected" do
it "does not write coverage event" do
expect(1 + 1).to eq(2)

expect(runner.stop_coverage(test_span)).to be_nil
expect(writer).not_to have_received(:write)
end
end
end

describe "#mark_if_skippable" do
Expand All @@ -213,7 +254,7 @@
fetch_skippable_tests: instance_double(
Datadog::CI::ITR::Skippable::Response,
correlation_id: "42",
tests: Set.new(["suite.test"])
tests: Set.new(["suite.test", "suite2.test", "suite.test3"])
)
)
end
Expand Down Expand Up @@ -249,7 +290,7 @@
context "when test is not skippable" do
let(:test_span) do
Datadog::CI::Test.new(
Datadog::Tracing::SpanOperation.new("test", tags: {"test.name" => "test", "test.suite" => "test"})
Datadog::Tracing::SpanOperation.new("test", tags: {"test.name" => "test2", "test.suite" => "suite"})
)
end

Expand Down

0 comments on commit e24c0ec

Please sign in to comment.