Skip to content

Commit 7f0db03

Browse files
Merge pull request #400 from sharshenov/ci
Fix CI
2 parents 365f279 + ed5f032 commit 7f0db03

File tree

4 files changed

+61
-17
lines changed

4 files changed

+61
-17
lines changed

.github/workflows/test.yml

+3-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@ concurrency:
44
group: ${{ github.ref }}
55
cancel-in-progress: true
66

7-
on:
8-
push:
9-
branches: [ master ]
10-
pull_request:
7+
on: [push,pull_request,workflow_dispatch]
118

129
jobs:
1310
test:
@@ -29,6 +26,8 @@ jobs:
2926
- 2.7
3027
- 3.0
3128
- 3.1
29+
- 3.2
30+
- 3.3
3231

3332
steps:
3433
- uses: actions/checkout@v3

spec/hutch/error_handlers/bugsnag_spec.rb

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
before do
99
Bugsnag.configure do |bugsnag|
1010
bugsnag.api_key = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
11+
bugsnag.logger = Logger.new(File::NULL) # suppress logging
1112
end
1213
end
1314

spec/hutch/tracers/datadog_spec.rb

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
require 'spec_helper'
22

33
RSpec.describe Hutch::Tracers::Datadog do
4+
::Datadog.logger.level = Logger::FATAL # suppress logging
5+
46
describe "#handle" do
57
subject(:handle) { tracer.handle(message) }
68

spec/hutch/worker_spec.rb

+55-13
Original file line numberDiff line numberDiff line change
@@ -69,29 +69,32 @@
6969
end
7070

7171
describe '#handle_message' do
72+
subject { worker.handle_message(consumer, delivery_info, properties, payload) }
7273
let(:payload) { '{}' }
7374
let(:consumer_instance) { double('Consumer instance') }
7475
let(:delivery_info) { double('Delivery Info', routing_key: '',
7576
delivery_tag: 'dt') }
7677
let(:properties) { double('Properties', message_id: nil, content_type: "application/json") }
78+
let(:log) { StringIO.new }
7779
before { allow(consumer).to receive_messages(new: consumer_instance) }
7880
before { allow(broker).to receive(:ack) }
7981
before { allow(broker).to receive(:nack) }
8082
before { allow(consumer_instance).to receive(:broker=) }
8183
before { allow(consumer_instance).to receive(:delivery_info=) }
84+
before { allow(Hutch::Logging).to receive(:logger).and_return(Logger.new(log)) }
8285

8386
it 'passes the message to the consumer' do
8487
expect(consumer_instance).to receive(:process).
8588
with(an_instance_of(Hutch::Message))
8689
expect(consumer_instance).to receive(:message_rejected?).and_return(false)
87-
worker.handle_message(consumer, delivery_info, properties, payload)
90+
subject
8891
end
8992

9093
it 'acknowledges the message' do
9194
allow(consumer_instance).to receive(:process)
9295
expect(broker).to receive(:ack).with(delivery_info.delivery_tag)
9396
expect(consumer_instance).to receive(:message_rejected?).and_return(false)
94-
worker.handle_message(consumer, delivery_info, properties, payload)
97+
subject
9598
end
9699

97100
context 'when the consumer fails and a requeue is configured' do
@@ -108,40 +111,79 @@
108111
expect(broker).to_not receive(:nack)
109112
expect(broker).to receive(:requeue)
110113

111-
worker.handle_message(consumer, delivery_info, properties, payload)
114+
subject
112115
end
113116
end
114117

115118

116119
context 'when the consumer raises an exception' do
120+
let(:expected_log) { /ERROR .+ error in consumer .+ RuntimeError .+ backtrace:/m }
117121
before { allow(consumer_instance).to receive(:process).and_raise('a consumer error') }
118122

119123
it 'logs the error' do
120-
Hutch::Config[:error_handlers].each do |backend|
121-
expect(backend).to receive(:handle)
122-
end
123-
worker.handle_message(consumer, delivery_info, properties, payload)
124+
expect { subject }.to change { log.tap(&:rewind).read }.from("").to(expected_log)
124125
end
125126

126127
it 'rejects the message' do
127128
expect(broker).to receive(:nack).with(delivery_info.delivery_tag)
128-
worker.handle_message(consumer, delivery_info, properties, payload)
129+
subject
130+
end
131+
132+
context 'when a custom error handler supports delivery info' do
133+
let(:error_handler) do
134+
Class.new(Hutch::ErrorHandlers::Base) do
135+
def handle(_properties, _payload, _consumer, _ex, delivery_info)
136+
raise unless delivery_info.delivery_tag == 'dt'
137+
puts 'handled!'
138+
end
139+
end
140+
end
141+
142+
around do |example|
143+
original = Hutch::Config[:error_handlers]
144+
Hutch::Config[:error_handlers] = [error_handler.new]
145+
example.run
146+
Hutch::Config[:error_handlers] = original
147+
end
148+
149+
it 'calls the custom handler with delivery info' do
150+
expect { subject }.to output("handled!\n").to_stdout
151+
end
152+
end
153+
154+
context 'when a custom error handler does not support delivery info' do
155+
let(:error_handler) do
156+
Class.new(Hutch::ErrorHandlers::Base) do
157+
def handle(_properties, _payload, _consumer, _ex)
158+
puts 'handled!'
159+
end
160+
end
161+
end
162+
163+
around do |example|
164+
original = Hutch::Config[:error_handlers]
165+
Hutch::Config[:error_handlers] = [error_handler.new]
166+
example.run
167+
Hutch::Config[:error_handlers] = original
168+
end
169+
170+
it 'calls the custom handler with delivery info' do
171+
expect { subject }.to output("handled!\n").to_stdout
172+
end
129173
end
130174
end
131175

132176
context "when the payload is not valid json" do
133177
let(:payload) { "Not Valid JSON" }
178+
let(:expected_log) { /ERROR .+ error in consumer .+ MultiJson::ParseError .+ backtrace:/m }
134179

135180
it 'logs the error' do
136-
Hutch::Config[:error_handlers].each do |backend|
137-
expect(backend).to receive(:handle)
138-
end
139-
worker.handle_message(consumer, delivery_info, properties, payload)
181+
expect { subject }.to change { log.tap(&:rewind).read }.from("").to(expected_log)
140182
end
141183

142184
it 'rejects the message' do
143185
expect(broker).to receive(:nack).with(delivery_info.delivery_tag)
144-
worker.handle_message(consumer, delivery_info, properties, payload)
186+
subject
145187
end
146188
end
147189
end

0 commit comments

Comments
 (0)