message-driver 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -17
  3. data/CHANGELOG.md +6 -1
  4. data/Guardfile +3 -3
  5. data/Rakefile +0 -2
  6. data/ci/reset_vhost +5 -0
  7. data/ci/travis_setup +10 -0
  8. data/features/.nav +5 -2
  9. data/features/CHANGELOG.md +6 -1
  10. data/features/amqp_specific_features/declaring_amqp_exchanges.feature +3 -3
  11. data/features/amqp_specific_features/nack_redelivered_messages.feature +2 -2
  12. data/features/amqp_specific_features/server_named_destinations.feature +3 -4
  13. data/features/connecting_to_multiple_brokers.feature +51 -0
  14. data/features/destination_metadata.feature +2 -2
  15. data/features/dynamic_destinations.feature +2 -2
  16. data/features/error_handling.feature +2 -4
  17. data/features/logging.feature +3 -2
  18. data/features/message_consumers/auto_ack_consumers.feature +4 -4
  19. data/features/{message_consumers.feature → message_consumers/basics.feature} +2 -2
  20. data/features/message_consumers/manual_ack_consumers.feature +5 -5
  21. data/features/message_consumers/prefetch_size.feature +4 -4
  22. data/features/message_consumers/transactional_ack_consumers.feature +7 -4
  23. data/features/rabbitmq_specific_features/dead_letter_queueing.feature +3 -3
  24. data/features/step_definitions/dynamic_destinations_steps.rb +2 -2
  25. data/features/step_definitions/logging_steps.rb +5 -1
  26. data/features/step_definitions/message_consumers_steps.rb +1 -1
  27. data/features/step_definitions/steps.rb +13 -4
  28. data/features/support/env.rb +1 -1
  29. data/features/support/test_runner.rb +6 -1
  30. data/lib/message_driver/adapters/base.rb +7 -1
  31. data/lib/message_driver/adapters/bunny_adapter.rb +22 -57
  32. data/lib/message_driver/adapters/in_memory_adapter.rb +3 -2
  33. data/lib/message_driver/adapters/stomp_adapter.rb +6 -6
  34. data/lib/message_driver/broker.rb +80 -19
  35. data/lib/message_driver/client.rb +50 -29
  36. data/lib/message_driver/destination.rb +2 -2
  37. data/lib/message_driver/errors.rb +2 -0
  38. data/lib/message_driver/logging.rb +7 -1
  39. data/lib/message_driver/message.rb +15 -4
  40. data/lib/message_driver/version.rb +1 -1
  41. data/lib/message_driver.rb +12 -5
  42. data/spec/integration/bunny/amqp_integration_spec.rb +15 -20
  43. data/spec/integration/bunny/bunny_adapter_spec.rb +13 -13
  44. data/spec/integration/in_memory/in_memory_adapter_spec.rb +2 -1
  45. data/spec/integration/stomp/stomp_adapter_spec.rb +6 -8
  46. data/spec/spec_helper.rb +9 -0
  47. data/spec/support/shared/adapter_examples.rb +6 -0
  48. data/spec/support/shared/context_examples.rb +2 -0
  49. data/spec/support/shared/destination_examples.rb +2 -0
  50. data/spec/units/message_driver/adapters/base_spec.rb +0 -8
  51. data/spec/units/message_driver/broker_spec.rb +240 -109
  52. data/spec/units/message_driver/client_spec.rb +69 -62
  53. data/spec/units/message_driver/message_spec.rb +59 -22
  54. data/test_lib/broker_config.rb +2 -1
  55. metadata +8 -7
  56. data/lib/bunny/session_patch.rb +0 -19
  57. data/spec/units/message_driver/logging_spec.rb +0 -18
@@ -6,49 +6,86 @@ module MessageDriver::Message
6
6
  let(:body) { "The message body" }
7
7
  let(:headers) { { foo: :bar, bar: :baz} }
8
8
  let(:properties) { {persistent: true, client_ack: true} }
9
+ let(:ctx) { double("adapter_context") }
9
10
 
10
11
  context "sets the body, header and properites on initialization" do
11
- subject { described_class.new(body, headers, properties) }
12
+ subject { described_class.new(ctx, body, headers, properties) }
12
13
 
14
+ its(:ctx) { should be(ctx) }
13
15
  its(:body) { should eq(body) }
14
16
  its(:headers) { should eq(headers) }
15
17
  its(:properties) { should eq(properties) }
16
18
  end
17
19
  end
18
20
 
19
- subject(:message) { described_class.new("body", {}, {}) }
21
+ let(:logger) { MessageDriver.logger }
22
+ let(:ctx) { double("adapter_context") }
23
+ let(:options) { double("options") }
24
+ subject(:message) { described_class.new(ctx, "body", {}, {}) }
20
25
 
21
26
  describe "#ack" do
22
- let(:options) { {foo: :bar} }
23
-
24
27
  before do
25
- MessageDriver::Client.stub(:ack_message)
28
+ allow(ctx).to receive(:ack_message)
26
29
  end
27
- it "passes itself to Client.ack_message" do
28
- subject.ack
29
- expect(MessageDriver::Client).to have_received(:ack_message).with(subject, {})
30
+ context "when the adapter supports client acks" do
31
+ before do
32
+ allow(ctx).to receive(:supports_client_acks?) { true }
33
+ end
34
+ it "calls #ack_message with the message" do
35
+ subject.ack
36
+ expect(ctx).to have_received(:ack_message).with(subject, {})
37
+ end
38
+ it "passes the supplied options to ack_message" do
39
+ subject.ack(options)
40
+ expect(ctx).to have_received(:ack_message).with(subject, options)
41
+ end
30
42
  end
31
-
32
- it "passes the options to Client.ack_message" do
33
- subject.ack(options)
34
- expect(MessageDriver::Client).to have_received(:ack_message).with(subject, options)
43
+ context "when the adapter doesn't support client acks" do
44
+ before do
45
+ allow(ctx).to receive(:supports_client_acks?) { false }
46
+ end
47
+ it "doesn't call #ack_message" do
48
+ subject.ack
49
+ expect(ctx).not_to have_received(:ack_message)
50
+ end
51
+ it "logs a warning" do
52
+ allow(logger).to receive(:debug)
53
+ subject.ack
54
+ expect(logger).to have_received(:debug).with("this adapter does not support client acks")
55
+ end
35
56
  end
36
57
  end
37
58
 
38
59
  describe "#nack" do
39
- let(:options) { {foo: :bar} }
40
-
41
60
  before do
42
- MessageDriver::Client.stub(:nack_message)
61
+ allow(ctx).to receive(:nack_message)
43
62
  end
44
- it "passes itself to Client.nack_message" do
45
- subject.nack
46
- expect(MessageDriver::Client).to have_received(:nack_message).with(subject, {})
63
+ context "when the adapter supports client nacks" do
64
+ before do
65
+ allow(ctx).to receive(:supports_client_acks?) { true }
66
+ end
67
+ it "calls #nack_message with the message" do
68
+ subject.nack
69
+ expect(ctx).to have_received(:nack_message).with(subject, {})
70
+ end
71
+ it "passes the supplied options to nack_message" do
72
+ subject.nack(options)
73
+ expect(ctx).to have_received(:nack_message).with(subject, options)
74
+ end
47
75
  end
48
-
49
- it "passes the options to Client.nack_message" do
50
- subject.nack(options)
51
- expect(MessageDriver::Client).to have_received(:nack_message).with(subject, options)
76
+ context "when the adapter doesn't support client nacks" do
77
+ before do
78
+ allow(ctx).to receive(:supports_client_acks?) { false }
79
+ end
80
+ it "doesn't call #nack_message" do
81
+ subject.nack
82
+ expect(ctx).not_to have_received(:nack_message)
83
+ end
84
+ it "logs a warning" do
85
+ allow(logger).to receive(:debug)
86
+ subject.nack
87
+ expect(logger).to have_received(:debug).with("this adapter does not support client acks")
88
+ end
52
89
  end
53
90
  end
54
91
  end
@@ -7,7 +7,8 @@ class BrokerConfig
7
7
  when 'bunny'
8
8
  {
9
9
  adapter: :bunny,
10
- vhost: 'message-driver-test'
10
+ vhost: 'message-driver-test',
11
+ continuation_timeout: 10000
11
12
  }
12
13
  when 'in_memory'
13
14
  {adapter: :in_memory}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: message-driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Campbell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-21 00:00:00.000000000 Z
11
+ date: 2014-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -83,6 +83,8 @@ files:
83
83
  - LICENSE.txt
84
84
  - README.md
85
85
  - Rakefile
86
+ - ci/reset_vhost
87
+ - ci/travis_setup
86
88
  - examples/basic_producer_and_consumer/Gemfile
87
89
  - examples/basic_producer_and_consumer/common.rb
88
90
  - examples/basic_producer_and_consumer/consumer.rb
@@ -98,13 +100,14 @@ files:
98
100
  - features/amqp_specific_features/requeueing_on_nack.feature
99
101
  - features/amqp_specific_features/server_named_destinations.feature
100
102
  - features/client_acks.feature
103
+ - features/connecting_to_multiple_brokers.feature
101
104
  - features/destination_metadata.feature
102
105
  - features/dynamic_destinations.feature
103
106
  - features/error_handling.feature
104
107
  - features/getting_started.md
105
108
  - features/logging.feature
106
- - features/message_consumers.feature
107
109
  - features/message_consumers/auto_ack_consumers.feature
110
+ - features/message_consumers/basics.feature
108
111
  - features/message_consumers/manual_ack_consumers.feature
109
112
  - features/message_consumers/prefetch_size.feature
110
113
  - features/message_consumers/subscribe_with_a_block.feature
@@ -124,7 +127,6 @@ files:
124
127
  - features/support/no_error_matcher.rb
125
128
  - features/support/test_runner.rb
126
129
  - features/support/transforms.rb
127
- - lib/bunny/session_patch.rb
128
130
  - lib/message-driver.rb
129
131
  - lib/message_driver.rb
130
132
  - lib/message_driver/adapters/base.rb
@@ -159,7 +161,6 @@ files:
159
161
  - spec/units/message_driver/broker_spec.rb
160
162
  - spec/units/message_driver/client_spec.rb
161
163
  - spec/units/message_driver/destination_spec.rb
162
- - spec/units/message_driver/logging_spec.rb
163
164
  - spec/units/message_driver/message_spec.rb
164
165
  - spec/units/message_driver/subscription_spec.rb
165
166
  - test_lib/broker_config.rb
@@ -199,13 +200,14 @@ test_files:
199
200
  - features/amqp_specific_features/requeueing_on_nack.feature
200
201
  - features/amqp_specific_features/server_named_destinations.feature
201
202
  - features/client_acks.feature
203
+ - features/connecting_to_multiple_brokers.feature
202
204
  - features/destination_metadata.feature
203
205
  - features/dynamic_destinations.feature
204
206
  - features/error_handling.feature
205
207
  - features/getting_started.md
206
208
  - features/logging.feature
207
- - features/message_consumers.feature
208
209
  - features/message_consumers/auto_ack_consumers.feature
210
+ - features/message_consumers/basics.feature
209
211
  - features/message_consumers/manual_ack_consumers.feature
210
212
  - features/message_consumers/prefetch_size.feature
211
213
  - features/message_consumers/subscribe_with_a_block.feature
@@ -241,6 +243,5 @@ test_files:
241
243
  - spec/units/message_driver/broker_spec.rb
242
244
  - spec/units/message_driver/client_spec.rb
243
245
  - spec/units/message_driver/destination_spec.rb
244
- - spec/units/message_driver/logging_spec.rb
245
246
  - spec/units/message_driver/message_spec.rb
246
247
  - spec/units/message_driver/subscription_spec.rb
@@ -1,19 +0,0 @@
1
- require 'bunny'
2
-
3
- module Bunny
4
- class Session
5
- def cleanup_threads
6
- log_errors { self.maybe_shutdown_heartbeat_sender }
7
- log_errors { self.maybe_shutdown_reader_loop }
8
- log_errors { self.close_transport }
9
- end
10
-
11
- def log_errors
12
- begin
13
- yield
14
- rescue => e
15
- @logger.info "#{e.class}: #{e.to_s}"
16
- end
17
- end
18
- end
19
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module MessageDriver
4
- describe Logging do
5
- class TestLogger
6
- include Logging
7
- end
8
- subject { TestLogger.new }
9
-
10
- describe "#logger" do
11
- let(:logger) { double(Logger) }
12
- it "returns the broker logger" do
13
- allow(MessageDriver::Broker).to receive(:logger).and_return(logger)
14
- expect(subject.logger).to be logger
15
- end
16
- end
17
- end
18
- end