From e2541deb5495b609ad2d77d6812ce902d459686d Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Tue, 19 Sep 2023 14:07:23 -0700 Subject: [PATCH 1/4] Detect Cucumber as a development environment --- Steepfile | 1 + lib/datadog/core/environment/execution.rb | 7 +++- sig/datadog/core/environment/execution.rbs | 2 + .../core/environment/execution_spec.rb | 39 ++++++++++++++++++- vendor/rbs/cucumber/0/cucumber.rbs | 4 ++ 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 vendor/rbs/cucumber/0/cucumber.rbs diff --git a/Steepfile b/Steepfile index c6320217e25..1d4cc7f23cc 100644 --- a/Steepfile +++ b/Steepfile @@ -652,6 +652,7 @@ target :ddtrace do library 'digest' repo_path 'vendor/rbs' + library 'cucumber' library 'ffi' library 'jruby' library 'gem' diff --git a/lib/datadog/core/environment/execution.rb b/lib/datadog/core/environment/execution.rb index c300abf2ad8..2049773a8d4 100644 --- a/lib/datadog/core/environment/execution.rb +++ b/lib/datadog/core/environment/execution.rb @@ -34,7 +34,7 @@ def webmock_enabled? # Is this process running a test? def test? - rspec? || minitest? + rspec? || minitest? || cucumber? end # Is this process running inside on a Read–eval–print loop? @@ -66,6 +66,11 @@ def minitest? ::Minitest::Unit.class_variable_get(:@@installed_at_exit)) end + # Check if we are running from `bin/cucumber` or `cucumber/rake/task`. + def cucumber? + defined?(::Cucumber::Cli) + end + # If this is a Rails application, use different heuristics to detect # whether this is a development environment or not. def rails_development? diff --git a/sig/datadog/core/environment/execution.rbs b/sig/datadog/core/environment/execution.rbs index 6428ca8092e..c27ddad58e5 100644 --- a/sig/datadog/core/environment/execution.rbs +++ b/sig/datadog/core/environment/execution.rbs @@ -5,6 +5,8 @@ module Datadog def self.development?: () -> bool def self.webmock_enabled?: () -> bool + def self.cucumber?: -> bool + private def self.test?: () -> bool def self.repl?: () -> bool diff --git a/spec/datadog/core/environment/execution_spec.rb b/spec/datadog/core/environment/execution_spec.rb index 56534f9d47e..309cc3a1f8b 100644 --- a/spec/datadog/core/environment/execution_spec.rb +++ b/spec/datadog/core/environment/execution_spec.rb @@ -40,14 +40,14 @@ end let(:repl_script) do - <<-RUBY + <<-'RUBY' # Load the working directory version of `ddtrace` lib = File.expand_path('lib', __dir__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'datadog/core/environment/execution' # Print actual value to STDERR, as STDOUT tends to have more noise in REPL sessions. - STDERR.print Datadog::Core::Environment::Execution.development? + STDERR.print "ACTUAL:#{Datadog::Core::Environment::Execution.development?}" RUBY end @@ -149,6 +149,41 @@ end end end + + context 'for Cucumber' do + before do + unless PlatformHelpers.ci? || Gem.loaded_specs['cucumber'] + skip('cucumber gem not present. In CI, this test is never skipped.') + end + end + + let(:script) do + <<-'RUBY' + require 'bundler/inline' + + gemfile(true) do + source 'https://rubygems.org' + gem 'cucumber', '>= 3' + end + + load Gem.bin_path('cucumber', 'cucumber') + RUBY + end + + it 'returns true' do + Dir.mktmpdir do |dir| + Dir.chdir(dir) do + FileUtils.mkdir_p('features/support') + + # Add our script to `env.rb`, which is always run before any feature is executed. + File.write('features/support/env.rb', repl_script) + + _, err, = Open3.capture3('ruby', stdin_data: script) + expect(err).to include('ACTUAL:true') + end + end + end + end end context 'when webmock has enabled net-http adapter' do diff --git a/vendor/rbs/cucumber/0/cucumber.rbs b/vendor/rbs/cucumber/0/cucumber.rbs new file mode 100644 index 00000000000..5f26f6334a3 --- /dev/null +++ b/vendor/rbs/cucumber/0/cucumber.rbs @@ -0,0 +1,4 @@ +module Cucumber + module Cli + end +end From 1ac4c7c83035a1fa924bd5f92e13860b5250111e Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Tue, 19 Sep 2023 14:19:09 -0700 Subject: [PATCH 2/4] Fix pry test --- spec/datadog/core/environment/execution_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/datadog/core/environment/execution_spec.rb b/spec/datadog/core/environment/execution_spec.rb index 309cc3a1f8b..79671a6c0f4 100644 --- a/spec/datadog/core/environment/execution_spec.rb +++ b/spec/datadog/core/environment/execution_spec.rb @@ -71,7 +71,7 @@ f.close out, = Open3.capture2e('pry', '-f', '--noprompt', f.path) - expect(out).to eq('true') + expect(out).to eq('ACTUAL:true') end end end From 8660a751ca7901473ac0007847eb26e76783488f Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Tue, 19 Sep 2023 14:36:39 -0700 Subject: [PATCH 3/4] Encapsulate bundler test --- spec/datadog/core/environment/execution_spec.rb | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/spec/datadog/core/environment/execution_spec.rb b/spec/datadog/core/environment/execution_spec.rb index 79671a6c0f4..9e76e426f9c 100644 --- a/spec/datadog/core/environment/execution_spec.rb +++ b/spec/datadog/core/environment/execution_spec.rb @@ -39,15 +39,15 @@ end end - let(:repl_script) do - <<-'RUBY' + let!(:repl_script) do + lib = File.expand_path('lib') + <<-RUBY # Load the working directory version of `ddtrace` - lib = File.expand_path('lib', __dir__) - $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) + $LOAD_PATH.unshift("#{lib}") unless $LOAD_PATH.include?("#{lib}") require 'datadog/core/environment/execution' # Print actual value to STDERR, as STDOUT tends to have more noise in REPL sessions. - STDERR.print "ACTUAL:#{Datadog::Core::Environment::Execution.development?}" + STDERR.print "ACTUAL:\#{Datadog::Core::Environment::Execution.development?}" RUBY end @@ -178,7 +178,9 @@ # Add our script to `env.rb`, which is always run before any feature is executed. File.write('features/support/env.rb', repl_script) - _, err, = Open3.capture3('ruby', stdin_data: script) + _, err = Bundler.with_clean_env do # Ruby 2.6 does not have irb by default in a bundle, but has it outside of it. + Open3.capture3('ruby', stdin_data: script) + end expect(err).to include('ACTUAL:true') end end From 87d494dab68c3a65f36d569de1954a42b099958b Mon Sep 17 00:00:00 2001 From: Marco Costa Date: Tue, 19 Sep 2023 14:38:12 -0700 Subject: [PATCH 4/4] Remove misleading comment --- spec/datadog/core/environment/execution_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/datadog/core/environment/execution_spec.rb b/spec/datadog/core/environment/execution_spec.rb index 9e76e426f9c..76c56be2bbb 100644 --- a/spec/datadog/core/environment/execution_spec.rb +++ b/spec/datadog/core/environment/execution_spec.rb @@ -178,7 +178,7 @@ # Add our script to `env.rb`, which is always run before any feature is executed. File.write('features/support/env.rb', repl_script) - _, err = Bundler.with_clean_env do # Ruby 2.6 does not have irb by default in a bundle, but has it outside of it. + _, err = Bundler.with_clean_env do Open3.capture3('ruby', stdin_data: script) end expect(err).to include('ACTUAL:true')