Skip to content

Commit

Permalink
Merge pull request #1128 from DataDog/update_sucker_punch_tests_to_rspec
Browse files Browse the repository at this point in the history
migrate sucker_punch tests from minitest to rspec
  • Loading branch information
ericmustin authored Aug 13, 2020
2 parents 3ffb846 + ddff680 commit 228f4df
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 115 deletions.
9 changes: 0 additions & 9 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,6 @@ namespace :test do
end

[
:sucker_punch
].each do |contrib|
Rake::TestTask.new(contrib) do |t|
t.libs << %w[test lib]
Expand Down Expand Up @@ -200,7 +199,6 @@ task :ci do
if RUBY_PLATFORM != 'java'
# Contrib minitests
sh 'bundle exec appraisal contrib-old rake test:monkey'
sh 'bundle exec appraisal contrib-old rake test:sucker_punch'
# Contrib specs
sh 'bundle exec appraisal contrib-old rake spec:active_model_serializers'
sh 'bundle exec appraisal contrib-old rake spec:active_record'
Expand Down Expand Up @@ -257,7 +255,6 @@ task :ci do
if RUBY_PLATFORM != 'java'
# Contrib minitests
sh 'bundle exec appraisal contrib-old rake test:monkey'
sh 'bundle exec appraisal contrib-old rake test:sucker_punch'
# Contrib specs
sh 'bundle exec appraisal contrib-old rake spec:active_model_serializers'
sh 'bundle exec appraisal contrib-old rake spec:active_record'
Expand Down Expand Up @@ -320,7 +317,6 @@ task :ci do

if RUBY_PLATFORM != 'java'
# Contrib minitests
sh 'bundle exec appraisal contrib rake test:sucker_punch'
# Contrib specs
sh 'bundle exec appraisal contrib rake spec:action_pack'
sh 'bundle exec appraisal contrib rake spec:action_view'
Expand Down Expand Up @@ -395,7 +391,6 @@ task :ci do

if RUBY_PLATFORM != 'java'
# Contrib minitests
sh 'bundle exec appraisal contrib rake test:sucker_punch'
# Contrib specs
sh 'bundle exec appraisal contrib rake spec:action_pack'
sh 'bundle exec appraisal contrib rake spec:action_view'
Expand Down Expand Up @@ -475,7 +470,6 @@ task :ci do
# Benchmarks
sh 'bundle exec rake benchmark'
# Contrib minitests
sh 'bundle exec appraisal contrib rake test:sucker_punch'
# Contrib specs
sh 'bundle exec appraisal contrib rake spec:action_pack'
sh 'bundle exec appraisal contrib rake spec:action_view'
Expand Down Expand Up @@ -537,7 +531,6 @@ task :ci do
sh 'bundle exec rake spec:benchmark' if RUBY_PLATFORM != 'java' # Too slow due to repeated JVM instantiation
sh 'bundle exec rake benchmark'
# Contrib minitests
sh 'bundle exec appraisal contrib rake test:sucker_punch'
# Contrib specs
sh 'bundle exec appraisal contrib rake spec:action_pack'
sh 'bundle exec appraisal contrib rake spec:action_view'
Expand Down Expand Up @@ -611,7 +604,6 @@ task :ci do
# Benchmarks
sh 'bundle exec rake benchmark'
# Contrib minitests
sh 'bundle exec appraisal contrib rake test:sucker_punch'
# Contrib specs
sh 'bundle exec appraisal contrib rake spec:action_pack'
sh 'bundle exec appraisal contrib rake spec:action_view'
Expand Down Expand Up @@ -685,7 +677,6 @@ task :ci do
# Benchmarks
sh 'bundle exec rake benchmark'
# Contrib minitests
sh 'bundle exec appraisal contrib rake test:sucker_punch'
# Contrib specs
sh 'bundle exec appraisal contrib rake spec:action_pack'
sh 'bundle exec appraisal contrib rake spec:action_view'
Expand Down
128 changes: 128 additions & 0 deletions spec/ddtrace/contrib/sucker_punch/patcher_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
require 'ddtrace/contrib/support/spec_helper'
require 'ddtrace/contrib/analytics_examples'
require 'sucker_punch'
require 'ddtrace'

RSpec.describe 'sucker_punch instrumentation' do
before do
Datadog.configure do |c|
c.use :sucker_punch
end

SuckerPunch::Queue.clear
SuckerPunch::RUNNING.make_true
end

after do
SuckerPunch::Queue.clear
end

around do |example|
# Reset before and after each example; don't allow global state to linger.
Datadog.registry[:sucker_punch].reset_configuration!
example.run
Datadog.registry[:sucker_punch].reset_configuration!
end

let(:worker_class) do
Class.new do
include SuckerPunch::Job

def perform(action = :none)
1 / 0 if action == :fail
end
end
end

context 'successful job' do
subject(:dummy_worker_success) { worker_class.perform_async }
let(:job_span) { spans.find { |s| s.resource[/PROCESS/] } }
let(:enqueue_span) { spans.find { |s| s.resource[/ENQUEUE/] } }
let(:span) { spans.first }

it_behaves_like 'measured span for integration', true do
before do
dummy_worker_success
try_wait_until { fetch_spans.any? }
end
end

it 'should generate two spans, one for pushing to enqueue and one for the job itself' do
is_expected.to be true
try_wait_until { fetch_spans.length == 2 }
expect(spans.length).to eq(2)
end

it 'should instrument successful job' do
is_expected.to be true
try_wait_until { fetch_spans.length == 2 }

expect(job_span.service).to eq('sucker_punch')
expect(job_span.name).to eq('sucker_punch.perform')
expect(job_span.resource).to eq("PROCESS #{worker_class}")
expect(job_span.get_tag('sucker_punch.queue')).to eq(worker_class.to_s)
expect(job_span.status).not_to eq(Datadog::Ext::Errors::STATUS)
end

it 'should instrument successful enqueuing' do
is_expected.to be true
try_wait_until { fetch_spans.any? }

expect(enqueue_span.service).to eq('sucker_punch')
expect(enqueue_span.name).to eq('sucker_punch.perform_async')
expect(enqueue_span.resource).to eq("ENQUEUE #{worker_class}")
expect(enqueue_span.get_tag('sucker_punch.queue')).to eq(worker_class.to_s)
expect(enqueue_span.get_metric('_dd.measured')).to eq(1.0)
end
end

context 'failed job' do
subject(:dummy_worker_fail) { worker_class.perform_async(:fail) }
let(:job_span) { spans.find { |s| s.resource[/PROCESS/] } }
let(:span) { spans.first }

it_behaves_like 'measured span for integration', true do
before do
dummy_worker_fail
try_wait_until { fetch_spans.any? }
end
end

it 'should instrument a failed job' do
is_expected.to be true
try_wait_until { fetch_spans.length == 2 }

expect(job_span.service).to eq('sucker_punch')
expect(job_span.name).to eq('sucker_punch.perform')
expect(job_span.resource).to eq("PROCESS #{worker_class}")
expect(job_span.get_tag('sucker_punch.queue')).to eq(worker_class.to_s)
expect(job_span).to have_error
expect(job_span).to have_error_type('ZeroDivisionError')
expect(job_span).to have_error_message('divided by 0')
end
end

context 'delayed job' do
subject(:dummy_worker_delay) { worker_class.perform_in(0) }
let(:enqueue_span) { spans.find { |s| s.resource[/ENQUEUE/] } }
let(:span) { spans.first }

it_behaves_like 'measured span for integration', true do
before do
dummy_worker_delay
try_wait_until { fetch_spans.any? }
end
end

it 'should instrument enqueuing for a delayed job' do
is_expected.to be true
try_wait_until { fetch_spans.any? }

expect(enqueue_span.service).to eq('sucker_punch')
expect(enqueue_span.name).to eq('sucker_punch.perform_in')
expect(enqueue_span.resource).to eq("ENQUEUE #{worker_class}")
expect(enqueue_span.get_tag('sucker_punch.queue')).to eq(worker_class.to_s)
expect(enqueue_span.get_tag('sucker_punch.perform_in')).to eq(0)
end
end
end
9 changes: 0 additions & 9 deletions test/contrib/sucker_punch/dummy_worker.rb

This file was deleted.

97 changes: 0 additions & 97 deletions test/contrib/sucker_punch/patcher_test.rb

This file was deleted.

0 comments on commit 228f4df

Please sign in to comment.