From 452b59df7e8f6d188c9696de6347e4b6f8281fdc Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Wed, 3 Jan 2024 08:43:46 +0100 Subject: [PATCH] as ActiveSupport::TestCase overrides test_order, use presence of Minitest::Parallel::Test in ancestors chain to detect parallelized Runnable --- .../ci/contrib/minitest/{suite.rb => helpers.rb} | 10 ++++++---- lib/datadog/ci/contrib/minitest/hooks.rb | 12 ++++-------- lib/datadog/ci/contrib/minitest/runnable.rb | 10 +++------- sig/datadog/ci/contrib/minitest/helpers.rbs | 13 +++++++++++++ sig/datadog/ci/contrib/minitest/hooks.rbs | 2 -- sig/datadog/ci/contrib/minitest/runnable.rbs | 2 -- sig/datadog/ci/contrib/minitest/suite.rbs | 11 ----------- 7 files changed, 26 insertions(+), 34 deletions(-) rename lib/datadog/ci/contrib/minitest/{suite.rb => helpers.rb} (66%) create mode 100644 sig/datadog/ci/contrib/minitest/helpers.rbs delete mode 100644 sig/datadog/ci/contrib/minitest/suite.rbs diff --git a/lib/datadog/ci/contrib/minitest/suite.rb b/lib/datadog/ci/contrib/minitest/helpers.rb similarity index 66% rename from lib/datadog/ci/contrib/minitest/suite.rb rename to lib/datadog/ci/contrib/minitest/helpers.rb index c675384f..2837a3a5 100644 --- a/lib/datadog/ci/contrib/minitest/suite.rb +++ b/lib/datadog/ci/contrib/minitest/helpers.rb @@ -4,15 +4,17 @@ module Datadog module CI module Contrib module Minitest - # Minitest integration constants - # TODO: mark as `@public_api` when GA, to protect from resource and tag name changes. - module Suite - def self.name(klass, method_name) + module Helpers + def self.test_suite_name(klass, method_name) source_location, = klass.instance_method(method_name).source_location source_file_path = Pathname.new(source_location.to_s).relative_path_from(Pathname.pwd).to_s "#{klass.name} at #{source_file_path}" end + + def self.parallel?(klass) + klass.ancestors.include?(::Minitest::Parallel::Test) + end end end end diff --git a/lib/datadog/ci/contrib/minitest/hooks.rb b/lib/datadog/ci/contrib/minitest/hooks.rb index 00a3a3bd..bef8591a 100644 --- a/lib/datadog/ci/contrib/minitest/hooks.rb +++ b/lib/datadog/ci/contrib/minitest/hooks.rb @@ -2,7 +2,7 @@ require_relative "../../ext/test" require_relative "ext" -require_relative "suite" +require_relative "helpers" module Datadog module CI @@ -16,8 +16,8 @@ def before_setup test_name = "#{class_name}##{name}" - test_suite_name = Suite.name(self.class, name) - if parallel? + test_suite_name = Helpers.test_suite_name(self.class, name) + if Helpers.parallel?(self.class) test_suite_name = "#{test_suite_name} (#{name} concurrently)" # for parallel execution we need to start a new test suite for each test @@ -41,7 +41,7 @@ def after_teardown return super unless test_span finish_test(test_span, result_code) - if parallel? + if Helpers.parallel?(self.class) finish_test_suite(test_span.test_suite, result_code) end @@ -78,10 +78,6 @@ def finish_with_result(span, result_code) span.finish end - def parallel? - self.class.test_order == :parallel - end - def datadog_configuration Datadog.configuration.ci[:minitest] end diff --git a/lib/datadog/ci/contrib/minitest/runnable.rb b/lib/datadog/ci/contrib/minitest/runnable.rb index f1903de0..cd239ae0 100644 --- a/lib/datadog/ci/contrib/minitest/runnable.rb +++ b/lib/datadog/ci/contrib/minitest/runnable.rb @@ -1,4 +1,4 @@ -require_relative "suite" +require_relative "helpers" module Datadog module CI @@ -12,12 +12,12 @@ def self.included(base) module ClassMethods def run(*) return super unless datadog_configuration[:enabled] - return super if parallel? + return super if Helpers.parallel?(self) method = runnable_methods.first return super if method.nil? - test_suite_name = Suite.name(self, method) + test_suite_name = Helpers.test_suite_name(self, method) test_suite = Datadog::CI.start_test_suite(test_suite_name) test_suite.passed! # will be overridden if any test fails @@ -31,10 +31,6 @@ def run(*) private - def parallel? - test_order == :parallel - end - def datadog_configuration Datadog.configuration.ci[:minitest] end diff --git a/sig/datadog/ci/contrib/minitest/helpers.rbs b/sig/datadog/ci/contrib/minitest/helpers.rbs new file mode 100644 index 00000000..4ceb76c5 --- /dev/null +++ b/sig/datadog/ci/contrib/minitest/helpers.rbs @@ -0,0 +1,13 @@ +module Datadog + module CI + module Contrib + module Minitest + module Helpers + def self.test_suite_name: (untyped klass, String? method_name) -> ::String + + def self.parallel?: (untyped klass) -> bool + end + end + end + end +end diff --git a/sig/datadog/ci/contrib/minitest/hooks.rbs b/sig/datadog/ci/contrib/minitest/hooks.rbs index ccc07f7f..4cad85e4 100644 --- a/sig/datadog/ci/contrib/minitest/hooks.rbs +++ b/sig/datadog/ci/contrib/minitest/hooks.rbs @@ -11,8 +11,6 @@ module Datadog private - def parallel?: () -> bool - def datadog_configuration: () -> untyped def finish_test: (Datadog::CI::Test test_span, String result_code) -> void diff --git a/sig/datadog/ci/contrib/minitest/runnable.rbs b/sig/datadog/ci/contrib/minitest/runnable.rbs index 09b724f6..a9e11f58 100644 --- a/sig/datadog/ci/contrib/minitest/runnable.rbs +++ b/sig/datadog/ci/contrib/minitest/runnable.rbs @@ -11,8 +11,6 @@ module Datadog private - def parallel?: () -> bool - def datadog_configuration: () -> untyped def test_order: () -> (nil | :parallel | :random | :sorted | :alpha) diff --git a/sig/datadog/ci/contrib/minitest/suite.rbs b/sig/datadog/ci/contrib/minitest/suite.rbs deleted file mode 100644 index e87a538a..00000000 --- a/sig/datadog/ci/contrib/minitest/suite.rbs +++ /dev/null @@ -1,11 +0,0 @@ -module Datadog - module CI - module Contrib - module Minitest - module Suite - def self.name: (untyped klass, String? method_name) -> ::String - end - end - end - end -end