pwwka 0.15.0 → 0.15.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 34728502586c650b28ce76b44de9e7038ae5b980
4
- data.tar.gz: 8732f047a559e0feae6469c1d68d0267b9537757
3
+ metadata.gz: e2d3849c6e410b41770f48dcdcd6a3362ffb632c
4
+ data.tar.gz: 79c4b07513148802d9235c3606fcd176dd49ce71
5
5
  SHA512:
6
- metadata.gz: 0cbb4d1b802b266e087adb0726ee3878c7f939ea4a920bc0f5a8044371437e7330b085a2a7382d8e85659442880723da35e691e4639e7f42473954994a4374bc
7
- data.tar.gz: 67259184b9333de0cdb7df54d1f1b6a223ddf569932e1b3d574afac2d64eef8ee9d6b6006db1e405ce3a0ff9a71e7b22edd98aea38d4fa8e676bdfa3b5fa55be
6
+ metadata.gz: d69b7df9738dc5d3689158a9114316f2e9405287c6f35bbea725a6f2a77e298276f3a66462abf0366e12ac40b37042f2e75845bddc93a314b7663ede5dbfc0d1
7
+ data.tar.gz: 6d03c19a90c1db1e4bcd334abd23eb9d7d4ffa11ef7cedeb6446598d5099d80c8a2ec1c4e4b731dd477069287cd2865a6a637a7f7f4f7e69d649fee69ea8668c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pwwka (0.15.0)
4
+ pwwka (0.15.1)
5
5
  activemodel
6
6
  activesupport
7
7
  bunny
@@ -13,18 +13,23 @@ module Pwwka
13
13
  @error_handlers.unshift(message_handler_klass.send(:error_handler))
14
14
  end
15
15
  @error_handlers.reduce(true) { |keep_going,error_handler|
16
- logf "%{error_handler_class} is being evaluated as part of pwwka's error-handling chain", error_handler_class: error_handler
17
- if keep_going
18
- keep_going = error_handler.new.handle_error(receiver,queue_name,payload,delivery_info,exception)
16
+ begin
17
+ logf "%{error_handler_class} is being evaluated as part of pwwka's error-handling chain", error_handler_class: error_handler
19
18
  if keep_going
20
- logf "%{error_handler_class} has asked to continue pwwka's error-handling chain", error_handler_class: error_handler
19
+ keep_going = error_handler.new.handle_error(receiver,queue_name,payload,delivery_info,exception)
20
+ if keep_going
21
+ logf "%{error_handler_class} has asked to continue pwwka's error-handling chain", error_handler_class: error_handler
22
+ else
23
+ logf "%{error_handler_class} has halted pwwka's error-handling chain", error_handler_class: error_handler
24
+ end
21
25
  else
22
- logf "%{error_handler_class} has halted pwwka's error-handling chain", error_handler_class: error_handler
26
+ logf "Skipping %{error_handler_class} as we were asked to abort pwwka's error-handling chain", error_handler_class: error_handler
23
27
  end
24
- else
25
- logf "Skipping %{error_handler_class} as we were asked to abort pwwka's error-handling chain", error_handler_class: error_handler
28
+ keep_going
29
+ rescue StandardError => exception
30
+ logf "'%{error_handler_class}' aborting due to unhandled exception '%{exception}'", at: :fatal, error_handler_class: error_handler, exception: exception
31
+ false
26
32
  end
27
- keep_going
28
33
  }
29
34
  end
30
35
  end
data/lib/pwwka/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pwwka
2
- VERSION = '0.15.0'
2
+ VERSION = '0.15.1'
3
3
  end
@@ -5,6 +5,19 @@ require_relative "support/integration_test_setup"
5
5
  require_relative "support/logging_receiver"
6
6
  require_relative "support/integration_test_helpers"
7
7
 
8
+ class PoorlyBehavingErrorHandler < Pwwka::ErrorHandlers::BaseErrorHandler
9
+ def handle_error(receiver,queue_name,payload,delivery_info,exception)
10
+ raise "whoops, do I break everything behind me?"
11
+ keep_going
12
+ end
13
+ end
14
+
15
+ class ErrorHandlerThatWorksFine < Pwwka::ErrorHandlers::BaseErrorHandler
16
+ def handle_error(receiver,queue_name,payload,delivery_info,exception)
17
+ keep_going
18
+ end
19
+ end
20
+
8
21
  class EvilPayload
9
22
  def to_json
10
23
  "This is not JSON by any stretch"
@@ -167,6 +180,33 @@ describe "receivers with unhandled errors", :integration do
167
180
  end
168
181
  end
169
182
 
183
+ context "a custom error handler in the pwwka error handling chain throws its own exception" do
184
+ before do
185
+ @testing_setup.make_queue_and_setup_receiver(ExceptionThrowingReceiver,"exception_throwing_receiver_pwwkatesting","#")
186
+ ExceptionThrowingReceiver.reset!
187
+
188
+ Pwwka.configuration.instance_variable_set("@error_handling_chain",
189
+ [
190
+ PoorlyBehavingErrorHandler,
191
+ ErrorHandlerThatWorksFine
192
+ ])
193
+ end
194
+
195
+ after do
196
+ Pwwka.configuration.instance_variable_set("@error_handling_chain",nil)
197
+ end
198
+
199
+ it "confirms subsequent error handlers do not run when there is an exception earlier in the chain" do
200
+ Pwwka::Transmitter.send_message!({ sample: "payload", has: { deeply: true, nested: 4 }},
201
+ "pwwka.testing.foo")
202
+
203
+ allow_receivers_to_process_queues
204
+
205
+ expect(ExceptionThrowingReceiver.messages_received.size).to eq(1)
206
+ expect(@testing_setup.threads[ExceptionThrowingReceiver].alive?).to eq(true)
207
+ end
208
+ end
209
+
170
210
  def setup_receivers(exception_throwing_receiver_klass=ExceptionThrowingReceiver)
171
211
  [
172
212
  [exception_throwing_receiver_klass, "exception_throwing_receiver_pwwkatesting"],
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe Pwwka::ErrorHandlers::Chain do
4
+ subject(:chain) { described_class.new(default_handler_chain) }
5
+
6
+ describe "#handle_error" do
7
+ context "when an error handler raises an unhandled exception" do
8
+ let(:default_handler_chain) { [bad_error_handler_klass, good_error_handler_klass] }
9
+ let(:bad_error_handler_klass) { double("bad error handler klass", new: bad_error_handler) }
10
+ let(:bad_error_handler) {
11
+ handler = double("bad error handler")
12
+ allow(handler).to receive(:handle_error).and_raise("unhandled exception in error handler")
13
+ handler
14
+ }
15
+ let(:good_error_handler_klass) { double("good error handler klass") }
16
+
17
+ before { allow(bad_error_handler).to receive(:error_handler).and_raise("Wibble") }
18
+
19
+ it "does not run subsequent error handlers" do
20
+ expect(good_error_handler_klass).to_not receive(:new)
21
+
22
+ chain.handle_error(double,double,double,double,double,double.as_null_object)
23
+ end
24
+
25
+ it "logs exceptions that occur in the error handling chain" do
26
+ allow(chain.logger).to receive(:send).with(any_args)
27
+ expect(chain.logger).to receive(:send).with(:fatal, /aborting due to unhandled exception/)
28
+
29
+ chain.handle_error(double,double,double,double,double,double.as_null_object)
30
+ end
31
+ end
32
+ end
33
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwwka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.15.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stitch Fix Engineering
@@ -15,7 +15,7 @@ authors:
15
15
  autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
- date: 2017-10-30 00:00:00.000000000 Z
18
+ date: 2017-12-02 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: bunny
@@ -237,6 +237,7 @@ files:
237
237
  - spec/legacy/receiver_spec.rb
238
238
  - spec/legacy/send_message_async_job_spec.rb
239
239
  - spec/legacy/transmitter_spec.rb
240
+ - spec/lib/pwwka/error_handlers/chain_spec.rb
240
241
  - spec/spec_helper.rb
241
242
  - spec/support/test_configuration.rb
242
243
  - spec/unit/channel_connector_spec.rb
@@ -267,7 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
267
268
  version: '0'
268
269
  requirements: []
269
270
  rubyforge_project:
270
- rubygems_version: 2.6.14
271
+ rubygems_version: 2.6.11
271
272
  signing_key:
272
273
  specification_version: 4
273
274
  summary: Send and receive messages via RabbitMQ
@@ -283,6 +284,7 @@ test_files:
283
284
  - spec/legacy/receiver_spec.rb
284
285
  - spec/legacy/send_message_async_job_spec.rb
285
286
  - spec/legacy/transmitter_spec.rb
287
+ - spec/lib/pwwka/error_handlers/chain_spec.rb
286
288
  - spec/spec_helper.rb
287
289
  - spec/support/test_configuration.rb
288
290
  - spec/unit/channel_connector_spec.rb