|
5 | 5 | return unless defined?(Sidekiq::Cron::Job) |
6 | 6 |
|
7 | 7 | RSpec.describe Sentry::Sidekiq::Cron::Job do |
| 8 | + let(:processor) do |
| 9 | + new_processor |
| 10 | + end |
| 11 | + |
| 12 | + let(:transport) do |
| 13 | + Sentry.get_current_client.transport |
| 14 | + end |
| 15 | + |
8 | 16 | before do |
9 | | - perform_basic_setup { |c| c.enabled_patches += [:sidekiq_cron] } |
| 17 | + perform_basic_setup do |c| |
| 18 | + c.enabled_patches += [:sidekiq_cron] |
| 19 | + c.traces_sample_rate = 1.0 |
| 20 | + end |
10 | 21 | end |
11 | 22 |
|
12 | 23 | before do |
| 24 | + Sidekiq::Cron::Job.destroy_all! |
| 25 | + Sidekiq::Queue.all.each(&:clear) |
13 | 26 | schedule_file = 'spec/fixtures/sidekiq-cron-schedule.yml' |
14 | 27 | schedule = Sidekiq::Cron::Support.load_yaml(ERB.new(IO.read(schedule_file)).result) |
15 | 28 | schedule = schedule.merge(symbol_name: { cron: '* * * * *', class: HappyWorkerWithSymbolName }) |
|
79 | 92 | it 'does not patch ReportingWorker because of invalid schedule' do |
80 | 93 | expect(ReportingWorker.ancestors).not_to include(Sentry::Cron::MonitorSchedule) |
81 | 94 | end |
| 95 | + |
| 96 | + describe 'sidekiq-cron' do |
| 97 | + it 'adds job to sidekiq within transaction' do |
| 98 | + job = Sidekiq::Cron::Job.new(name: 'test', cron: 'not a crontab', class: 'HappyWorkerForCron') |
| 99 | + job.send(Sentry::Sidekiq::Cron::Job.enqueueing_method) |
| 100 | + |
| 101 | + expect(::Sidekiq::Queue.new.size).to eq(1) |
| 102 | + expect(transport.events.count).to eq(1) |
| 103 | + event = transport.events.last |
| 104 | + expect(event.spans.count).to eq(1) |
| 105 | + expect(event.spans[0][:op]).to eq("queue.publish") |
| 106 | + expect(event.spans[0][:data]['messaging.destination.name']).to eq('default') |
| 107 | + end |
| 108 | + |
| 109 | + it 'adds job to sidekiq within transaction' do |
| 110 | + job = Sidekiq::Cron::Job.new(name: 'test', cron: 'not a crontab', class: 'HappyWorkerForCron') |
| 111 | + job.send(Sentry::Sidekiq::Cron::Job.enqueueing_method) |
| 112 | + # Time passes. |
| 113 | + job.send(Sentry::Sidekiq::Cron::Job.enqueueing_method) |
| 114 | + |
| 115 | + expect(::Sidekiq::Queue.new.size).to eq(2) |
| 116 | + expect(transport.events.count).to eq(2) |
| 117 | + events = transport.events |
| 118 | + expect(events[0].spans.count).to eq(1) |
| 119 | + expect(events[0].spans[0][:op]).to eq("queue.publish") |
| 120 | + expect(events[0].spans[0][:data]['messaging.destination.name']).to eq('default') |
| 121 | + expect(events[1].spans.count).to eq(1) |
| 122 | + expect(events[1].spans[0][:op]).to eq("queue.publish") |
| 123 | + expect(events[1].spans[0][:data]['messaging.destination.name']).to eq('default') |
| 124 | + |
| 125 | + expect(events[0].dynamic_sampling_context['trace_id']).to_not eq(events[1].dynamic_sampling_context['trace_id']) |
| 126 | + end |
| 127 | + end |
82 | 128 | end |
0 commit comments