Skip to content

Commit 7755dab

Browse files
authored
[sidekiq] better and isolated rails specs (#2723)
* fix(sidekiq): disable :redis patch in specs * chore(sidekiq): add spec:isolated rake task * chore(sidekiq): move rails_spec to spec:isolated group * chore(ci): remove usage of obsolete env var Now rails spec for sidekiq runs always as an isolated spec. * Restore redis patch * Fix specs after restoring redis patch
1 parent 36de35d commit 7755dab

File tree

6 files changed

+39
-36
lines changed

6 files changed

+39
-36
lines changed

.github/workflows/sentry_sidekiq_test.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ jobs:
7171
redis-version: ${{ (contains(matrix.sidekiq_version, '7.0') || contains(matrix.sidekiq_version, '8.0')) && 6 || 5 }}
7272

7373
- name: Run specs with Sidekiq ${{ matrix.sidekiq_version }}
74-
env:
75-
WITH_SENTRY_RAILS: 1
7674
run: bundle exec rake
7775

7876
- name: Upload Coverage

sentry-sidekiq/Rakefile

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
# frozen_string_literal: true
22

33
require "bundler/gem_tasks"
4-
require "rspec/core/rake_task"
4+
require_relative "../lib/sentry/test/rake_tasks"
55

6-
RSpec::Core::RakeTask.new(:spec).tap do |task|
7-
task.rspec_opts = "--order rand"
8-
end
6+
Sentry::Test::RakeTasks.define_spec_tasks(
7+
spec_pattern: "spec/sentry/**/*_spec.rb",
8+
spec_rspec_opts: "--order rand --format progress",
9+
isolated_specs_pattern: "spec/isolated/**/*_spec.rb",
10+
isolated_rspec_opts: "--format progress"
11+
)
912

10-
task default: :spec
13+
task default: [:spec, :"spec:isolated"]

sentry-sidekiq/spec/sentry/rails_spec.rb renamed to sentry-sidekiq/spec/isolated/rails_spec.rb

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
# frozen_string_literal: true
22

3-
return unless ENV["WITH_SENTRY_RAILS"]
4-
5-
require "logger"
3+
begin
4+
require "simplecov"
5+
SimpleCov.command_name "SidekiqRails"
6+
rescue LoadError
7+
end
68

7-
require "rails"
89
require "sentry-rails"
9-
require "spec_helper"
1010

11-
require "action_controller/railtie"
11+
# This MUST be required after sentry-rails because it requires sentry-sidekiq
12+
# which checks if Railtie is defined to properly set things up
13+
require_relative "../spec_helper"
1214

1315
class TestApp < Rails::Application
1416
end
@@ -23,15 +25,9 @@ def self.name
2325
app.config.hosts = nil
2426
app.config.secret_key_base = "test"
2527
app.config.eager_load = false
28+
2629
app.initializer :configure_sentry do
27-
Sentry.init do |config|
28-
config.release = 'beta'
29-
config.dsn = "dummy://12345:67890@sentry.localdomain:3000/sentry/42"
30-
config.transport.transport_class = Sentry::DummyTransport
31-
# for sending events synchronously
32-
config.background_worker_threads = 0
33-
yield(config, app) if block_given?
34-
end
30+
perform_basic_setup
3531
end
3632

3733
app.initialize!

sentry-sidekiq/spec/sentry/sidekiq/cron/job_spec.rb

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@
109109

110110
expect(::Sidekiq::Queue.new.size).to eq(1)
111111
expect(transport.events.count).to eq(1)
112-
event = transport.events.last
113-
expect(event.spans.count).to eq(1)
114-
expect(event.spans[0][:op]).to eq("queue.publish")
115-
expect(event.spans[0][:data]['messaging.destination.name']).to eq('default')
112+
113+
span = transport.events.last.spans.detect { |span| span[:op] == "queue.publish" }
114+
expect(span[:op]).to eq("queue.publish")
115+
expect(span[:data]['messaging.destination.name']).to eq('default')
116116
end
117117

118118
it 'adds job to sidekiq within transaction' do
@@ -124,12 +124,16 @@
124124
expect(::Sidekiq::Queue.new.size).to eq(2)
125125
expect(transport.events.count).to eq(2)
126126
events = transport.events
127-
expect(events[0].spans.count).to eq(1)
128-
expect(events[0].spans[0][:op]).to eq("queue.publish")
129-
expect(events[0].spans[0][:data]['messaging.destination.name']).to eq('default')
130-
expect(events[1].spans.count).to eq(1)
131-
expect(events[1].spans[0][:op]).to eq("queue.publish")
132-
expect(events[1].spans[0][:data]['messaging.destination.name']).to eq('default')
127+
128+
span = events[0].spans.detect { |span| span[:op] == "queue.publish" }
129+
expect(span).not_to be_nil
130+
expect(span[:op]).to eq("queue.publish")
131+
expect(span[:data]['messaging.destination.name']).to eq('default')
132+
133+
span = events[1].spans.detect { |span| span[:op] == "queue.publish" }
134+
expect(span).not_to be_nil
135+
expect(span[:op]).to eq("queue.publish")
136+
expect(span[:data]['messaging.destination.name']).to eq('default')
133137

134138
expect(events[0].dynamic_sampling_context['trace_id']).to_not eq(events[1].dynamic_sampling_context['trace_id'])
135139
end

sentry-sidekiq/spec/sentry/sidekiq/sentry_context_middleware_spec.rb

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,11 +222,12 @@ def ensure_queue_empty(queue, timeout: 0.1)
222222
transaction.finish
223223

224224
expect(transport.events.count).to eq(1)
225-
event = transport.events.last
226-
expect(event.spans.count).to eq(1)
227-
expect(event.spans[0][:op]).to eq("queue.publish")
228-
expect(event.spans[0][:data]['messaging.message.id']).to eq(message_id)
229-
expect(event.spans[0][:data]['messaging.destination.name']).to eq('default')
225+
226+
span = transport.events.last.spans.detect { |span| span[:op] == "queue.publish" }
227+
expect(span).not_to be_nil
228+
expect(span[:op]).to eq("queue.publish")
229+
expect(span[:data]['messaging.message.id']).to eq(message_id)
230+
expect(span[:data]['messaging.destination.name']).to eq('default')
230231
end
231232

232233
it "does not propagate headers with propagate_traces = false" do

sentry-sidekiq/spec/spec_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@ def perform_basic_setup
344344
config.sdk_logger = ::Logger.new(nil)
345345
config.background_worker_threads = 0
346346
config.transport.transport_class = Sentry::DummyTransport
347+
347348
yield config if block_given?
348349
end
349350
end

0 commit comments

Comments
 (0)