message-driver 0.1.0 → 0.2.0.rc1
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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +18 -7
- data/CHANGELOG.md +12 -2
- data/Gemfile +17 -0
- data/Guardfile +8 -4
- data/README.md +14 -5
- data/Rakefile +44 -11
- data/examples/basic_producer_and_consumer/Gemfile +5 -0
- data/examples/basic_producer_and_consumer/common.rb +17 -0
- data/examples/basic_producer_and_consumer/consumer.rb +24 -0
- data/examples/basic_producer_and_consumer/producer.rb +33 -0
- data/features/.nav +8 -0
- data/features/CHANGELOG.md +12 -2
- data/features/amqp_specific_features/binding_amqp_destinations.feature +7 -7
- data/features/amqp_specific_features/declaring_amqp_exchanges.feature +3 -3
- data/features/amqp_specific_features/nack_redelivered_messages.feature +92 -0
- data/features/amqp_specific_features/requeueing_on_nack.feature +44 -0
- data/features/amqp_specific_features/server_named_destinations.feature +5 -5
- data/features/client_acks.feature +92 -0
- data/features/destination_metadata.feature +9 -11
- data/features/dynamic_destinations.feature +7 -7
- data/features/error_handling.feature +11 -9
- data/features/logging.feature +14 -0
- data/features/message_consumers/auto_ack_consumers.feature +79 -0
- data/features/message_consumers/manual_ack_consumers.feature +95 -0
- data/features/message_consumers/transactional_ack_consumers.feature +77 -0
- data/features/message_consumers.feature +54 -0
- data/features/publishing_a_message.feature +6 -10
- data/features/publishing_with_transactions.feature +10 -14
- data/features/rabbitmq_specific_features/dead_letter_queueing.feature +116 -0
- data/features/step_definitions/dynamic_destinations_steps.rb +3 -3
- data/features/step_definitions/error_handling_steps.rb +4 -2
- data/features/step_definitions/logging_steps.rb +28 -0
- data/features/step_definitions/message_consumers_steps.rb +29 -0
- data/features/step_definitions/steps.rb +60 -9
- data/features/support/broker_config_helper.rb +19 -0
- data/features/support/env.rb +1 -0
- data/features/support/firewall_helper.rb +8 -11
- data/features/support/message_table_matcher.rb +21 -5
- data/features/support/test_runner.rb +39 -16
- data/lib/message_driver/adapters/base.rb +51 -4
- data/lib/message_driver/adapters/bunny_adapter.rb +251 -127
- data/lib/message_driver/adapters/in_memory_adapter.rb +97 -18
- data/lib/message_driver/adapters/stomp_adapter.rb +127 -0
- data/lib/message_driver/broker.rb +23 -24
- data/lib/message_driver/client.rb +157 -0
- data/lib/message_driver/destination.rb +7 -4
- data/lib/message_driver/errors.rb +27 -0
- data/lib/message_driver/logging.rb +11 -0
- data/lib/message_driver/message.rb +8 -0
- data/lib/message_driver/subscription.rb +18 -0
- data/lib/message_driver/vendor/.document +0 -0
- data/lib/message_driver/vendor/nesty/nested_error.rb +26 -0
- data/lib/message_driver/vendor/nesty.rb +1 -0
- data/lib/message_driver/version.rb +1 -1
- data/lib/message_driver.rb +4 -2
- data/message-driver.gemspec +4 -4
- data/spec/integration/{amqp_integration_spec.rb → bunny/amqp_integration_spec.rb} +29 -28
- data/spec/integration/bunny/bunny_adapter_spec.rb +339 -0
- data/spec/integration/in_memory/in_memory_adapter_spec.rb +126 -0
- data/spec/integration/stomp/stomp_adapter_spec.rb +142 -0
- data/spec/spec_helper.rb +5 -2
- data/spec/support/shared/adapter_examples.rb +17 -0
- data/spec/support/shared/client_ack_examples.rb +18 -0
- data/spec/support/shared/context_examples.rb +14 -0
- data/spec/support/shared/destination_examples.rb +4 -5
- data/spec/support/shared/subscription_examples.rb +146 -0
- data/spec/support/shared/transaction_examples.rb +43 -0
- data/spec/support/utils.rb +14 -0
- data/spec/units/message_driver/adapters/base_spec.rb +38 -19
- data/spec/units/message_driver/broker_spec.rb +71 -18
- data/spec/units/message_driver/client_spec.rb +375 -0
- data/spec/units/message_driver/destination_spec.rb +9 -0
- data/spec/units/message_driver/logging_spec.rb +18 -0
- data/spec/units/message_driver/message_spec.rb +36 -0
- data/spec/units/message_driver/subscription_spec.rb +24 -0
- data/test_lib/broker_config.rb +50 -20
- metadata +83 -45
- data/.rbenv-version +0 -1
- data/lib/message_driver/exceptions.rb +0 -18
- data/lib/message_driver/message_publisher.rb +0 -15
- data/spec/integration/message_driver/adapters/bunny_adapter_spec.rb +0 -301
- data/spec/units/message_driver/adapters/in_memory_adapter_spec.rb +0 -43
- data/spec/units/message_driver/message_publisher_spec.rb +0 -65
metadata
CHANGED
@@ -1,89 +1,79 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: message-driver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0.rc1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Matt Campbell
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-09-23 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version: 2.
|
33
|
+
version: 2.14.0
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version: 2.
|
40
|
+
version: 2.14.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: cucumber
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
56
|
+
name: aruba
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0
|
61
|
+
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0
|
68
|
+
version: '0'
|
78
69
|
description: Easy message queues for ruby using AMQ, STOMP and others
|
79
70
|
email:
|
80
|
-
-
|
71
|
+
- message-driver@soupmatt.com
|
81
72
|
executables: []
|
82
73
|
extensions: []
|
83
74
|
extra_rdoc_files: []
|
84
75
|
files:
|
85
76
|
- .gitignore
|
86
|
-
- .rbenv-version
|
87
77
|
- .relish
|
88
78
|
- .rspec
|
89
79
|
- .travis.yml
|
@@ -93,6 +83,10 @@ files:
|
|
93
83
|
- LICENSE.txt
|
94
84
|
- README.md
|
95
85
|
- Rakefile
|
86
|
+
- examples/basic_producer_and_consumer/Gemfile
|
87
|
+
- examples/basic_producer_and_consumer/common.rb
|
88
|
+
- examples/basic_producer_and_consumer/consumer.rb
|
89
|
+
- examples/basic_producer_and_consumer/producer.rb
|
96
90
|
- features/.nav
|
97
91
|
- features/CHANGELOG.md
|
98
92
|
- features/README.md
|
@@ -100,16 +94,28 @@ files:
|
|
100
94
|
- features/amqp_specific_features/README.md
|
101
95
|
- features/amqp_specific_features/binding_amqp_destinations.feature
|
102
96
|
- features/amqp_specific_features/declaring_amqp_exchanges.feature
|
97
|
+
- features/amqp_specific_features/nack_redelivered_messages.feature
|
98
|
+
- features/amqp_specific_features/requeueing_on_nack.feature
|
103
99
|
- features/amqp_specific_features/server_named_destinations.feature
|
100
|
+
- features/client_acks.feature
|
104
101
|
- features/destination_metadata.feature
|
105
102
|
- features/dynamic_destinations.feature
|
106
103
|
- features/error_handling.feature
|
107
104
|
- features/getting_started.md
|
105
|
+
- features/logging.feature
|
106
|
+
- features/message_consumers.feature
|
107
|
+
- features/message_consumers/auto_ack_consumers.feature
|
108
|
+
- features/message_consumers/manual_ack_consumers.feature
|
109
|
+
- features/message_consumers/transactional_ack_consumers.feature
|
108
110
|
- features/publishing_a_message.feature
|
109
111
|
- features/publishing_with_transactions.feature
|
112
|
+
- features/rabbitmq_specific_features/dead_letter_queueing.feature
|
110
113
|
- features/step_definitions/dynamic_destinations_steps.rb
|
111
114
|
- features/step_definitions/error_handling_steps.rb
|
115
|
+
- features/step_definitions/logging_steps.rb
|
116
|
+
- features/step_definitions/message_consumers_steps.rb
|
112
117
|
- features/step_definitions/steps.rb
|
118
|
+
- features/support/broker_config_helper.rb
|
113
119
|
- features/support/env.rb
|
114
120
|
- features/support/firewall_helper.rb
|
115
121
|
- features/support/message_table_matcher.rb
|
@@ -121,51 +127,62 @@ files:
|
|
121
127
|
- lib/message_driver/adapters/base.rb
|
122
128
|
- lib/message_driver/adapters/bunny_adapter.rb
|
123
129
|
- lib/message_driver/adapters/in_memory_adapter.rb
|
130
|
+
- lib/message_driver/adapters/stomp_adapter.rb
|
124
131
|
- lib/message_driver/broker.rb
|
132
|
+
- lib/message_driver/client.rb
|
125
133
|
- lib/message_driver/destination.rb
|
126
|
-
- lib/message_driver/
|
134
|
+
- lib/message_driver/errors.rb
|
135
|
+
- lib/message_driver/logging.rb
|
127
136
|
- lib/message_driver/message.rb
|
128
|
-
- lib/message_driver/
|
137
|
+
- lib/message_driver/subscription.rb
|
138
|
+
- lib/message_driver/vendor/.document
|
139
|
+
- lib/message_driver/vendor/nesty.rb
|
140
|
+
- lib/message_driver/vendor/nesty/nested_error.rb
|
129
141
|
- lib/message_driver/version.rb
|
130
142
|
- message-driver.gemspec
|
131
|
-
- spec/integration/amqp_integration_spec.rb
|
132
|
-
- spec/integration/
|
143
|
+
- spec/integration/bunny/amqp_integration_spec.rb
|
144
|
+
- spec/integration/bunny/bunny_adapter_spec.rb
|
145
|
+
- spec/integration/in_memory/in_memory_adapter_spec.rb
|
146
|
+
- spec/integration/stomp/stomp_adapter_spec.rb
|
133
147
|
- spec/spec_helper.rb
|
148
|
+
- spec/support/shared/adapter_examples.rb
|
149
|
+
- spec/support/shared/client_ack_examples.rb
|
150
|
+
- spec/support/shared/context_examples.rb
|
134
151
|
- spec/support/shared/destination_examples.rb
|
152
|
+
- spec/support/shared/subscription_examples.rb
|
153
|
+
- spec/support/shared/transaction_examples.rb
|
154
|
+
- spec/support/utils.rb
|
135
155
|
- spec/units/message_driver/adapters/base_spec.rb
|
136
|
-
- spec/units/message_driver/adapters/in_memory_adapter_spec.rb
|
137
156
|
- spec/units/message_driver/broker_spec.rb
|
157
|
+
- spec/units/message_driver/client_spec.rb
|
138
158
|
- spec/units/message_driver/destination_spec.rb
|
139
|
-
- spec/units/message_driver/
|
159
|
+
- spec/units/message_driver/logging_spec.rb
|
140
160
|
- spec/units/message_driver/message_spec.rb
|
161
|
+
- spec/units/message_driver/subscription_spec.rb
|
141
162
|
- test_lib/broker_config.rb
|
142
|
-
homepage: https://github.com/
|
163
|
+
homepage: https://github.com/message-driver/message-driver
|
143
164
|
licenses:
|
144
165
|
- MIT
|
166
|
+
metadata: {}
|
145
167
|
post_install_message:
|
146
168
|
rdoc_options: []
|
147
169
|
require_paths:
|
148
170
|
- lib
|
149
171
|
required_ruby_version: !ruby/object:Gem::Requirement
|
150
|
-
none: false
|
151
172
|
requirements:
|
152
|
-
- -
|
173
|
+
- - '>='
|
153
174
|
- !ruby/object:Gem::Version
|
154
175
|
version: 1.9.2
|
155
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
-
none: false
|
157
177
|
requirements:
|
158
|
-
- -
|
178
|
+
- - '>'
|
159
179
|
- !ruby/object:Gem::Version
|
160
|
-
version:
|
161
|
-
segments:
|
162
|
-
- 0
|
163
|
-
hash: 1747639069992114351
|
180
|
+
version: 1.3.1
|
164
181
|
requirements: []
|
165
182
|
rubyforge_project:
|
166
|
-
rubygems_version:
|
183
|
+
rubygems_version: 2.0.3
|
167
184
|
signing_key:
|
168
|
-
specification_version:
|
185
|
+
specification_version: 4
|
169
186
|
summary: Easy message queues for ruby
|
170
187
|
test_files:
|
171
188
|
- features/.nav
|
@@ -175,29 +192,50 @@ test_files:
|
|
175
192
|
- features/amqp_specific_features/README.md
|
176
193
|
- features/amqp_specific_features/binding_amqp_destinations.feature
|
177
194
|
- features/amqp_specific_features/declaring_amqp_exchanges.feature
|
195
|
+
- features/amqp_specific_features/nack_redelivered_messages.feature
|
196
|
+
- features/amqp_specific_features/requeueing_on_nack.feature
|
178
197
|
- features/amqp_specific_features/server_named_destinations.feature
|
198
|
+
- features/client_acks.feature
|
179
199
|
- features/destination_metadata.feature
|
180
200
|
- features/dynamic_destinations.feature
|
181
201
|
- features/error_handling.feature
|
182
202
|
- features/getting_started.md
|
203
|
+
- features/logging.feature
|
204
|
+
- features/message_consumers.feature
|
205
|
+
- features/message_consumers/auto_ack_consumers.feature
|
206
|
+
- features/message_consumers/manual_ack_consumers.feature
|
207
|
+
- features/message_consumers/transactional_ack_consumers.feature
|
183
208
|
- features/publishing_a_message.feature
|
184
209
|
- features/publishing_with_transactions.feature
|
210
|
+
- features/rabbitmq_specific_features/dead_letter_queueing.feature
|
185
211
|
- features/step_definitions/dynamic_destinations_steps.rb
|
186
212
|
- features/step_definitions/error_handling_steps.rb
|
213
|
+
- features/step_definitions/logging_steps.rb
|
214
|
+
- features/step_definitions/message_consumers_steps.rb
|
187
215
|
- features/step_definitions/steps.rb
|
216
|
+
- features/support/broker_config_helper.rb
|
188
217
|
- features/support/env.rb
|
189
218
|
- features/support/firewall_helper.rb
|
190
219
|
- features/support/message_table_matcher.rb
|
191
220
|
- features/support/no_error_matcher.rb
|
192
221
|
- features/support/test_runner.rb
|
193
222
|
- features/support/transforms.rb
|
194
|
-
- spec/integration/amqp_integration_spec.rb
|
195
|
-
- spec/integration/
|
223
|
+
- spec/integration/bunny/amqp_integration_spec.rb
|
224
|
+
- spec/integration/bunny/bunny_adapter_spec.rb
|
225
|
+
- spec/integration/in_memory/in_memory_adapter_spec.rb
|
226
|
+
- spec/integration/stomp/stomp_adapter_spec.rb
|
196
227
|
- spec/spec_helper.rb
|
228
|
+
- spec/support/shared/adapter_examples.rb
|
229
|
+
- spec/support/shared/client_ack_examples.rb
|
230
|
+
- spec/support/shared/context_examples.rb
|
197
231
|
- spec/support/shared/destination_examples.rb
|
232
|
+
- spec/support/shared/subscription_examples.rb
|
233
|
+
- spec/support/shared/transaction_examples.rb
|
234
|
+
- spec/support/utils.rb
|
198
235
|
- spec/units/message_driver/adapters/base_spec.rb
|
199
|
-
- spec/units/message_driver/adapters/in_memory_adapter_spec.rb
|
200
236
|
- spec/units/message_driver/broker_spec.rb
|
237
|
+
- spec/units/message_driver/client_spec.rb
|
201
238
|
- spec/units/message_driver/destination_spec.rb
|
202
|
-
- spec/units/message_driver/
|
239
|
+
- spec/units/message_driver/logging_spec.rb
|
203
240
|
- spec/units/message_driver/message_spec.rb
|
241
|
+
- spec/units/message_driver/subscription_spec.rb
|
data/.rbenv-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.9.3-p327
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module MessageDriver
|
2
|
-
class Exception < ::Exception; end
|
3
|
-
|
4
|
-
class WrappedException < Exception
|
5
|
-
attr_reader :other
|
6
|
-
|
7
|
-
def initialize(other, msg=nil)
|
8
|
-
super(msg || other.to_s)
|
9
|
-
@other = other
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
class QueueNotFound < WrappedException; end
|
14
|
-
|
15
|
-
class ConnectionException < WrappedException; end
|
16
|
-
|
17
|
-
class TransactionRollbackOnly < Exception; end
|
18
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module MessageDriver
|
2
|
-
module MessagePublisher
|
3
|
-
def publish(destination, body, headers={}, properties={})
|
4
|
-
Broker.publish(destination, body, headers, properties)
|
5
|
-
end
|
6
|
-
|
7
|
-
def pop_message(destination, options={})
|
8
|
-
Broker.pop_message(destination, options)
|
9
|
-
end
|
10
|
-
|
11
|
-
def with_message_transaction(options={}, &block)
|
12
|
-
Broker.with_transaction(options, &block)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,301 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
require 'message_driver/adapters/bunny_adapter'
|
4
|
-
|
5
|
-
module MessageDriver::Adapters
|
6
|
-
describe BunnyAdapter, :bunny, type: :integration do
|
7
|
-
|
8
|
-
let(:valid_connection_attrs) { BrokerConfig.config }
|
9
|
-
|
10
|
-
describe "#initialize" do
|
11
|
-
context "differing bunny versions" do
|
12
|
-
shared_examples "raises an error" do
|
13
|
-
it "raises an error" do
|
14
|
-
stub_const("Bunny::VERSION", version)
|
15
|
-
expect {
|
16
|
-
described_class.new(valid_connection_attrs)
|
17
|
-
}.to raise_error MessageDriver::Exception, "bunny 0.9.0.pre7 or later is required for the bunny adapter"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
shared_examples "doesn't raise an error" do
|
21
|
-
it "doesn't raise an an error" do
|
22
|
-
stub_const("Bunny::VERSION", version)
|
23
|
-
adapter = nil
|
24
|
-
expect {
|
25
|
-
adapter = described_class.new(valid_connection_attrs)
|
26
|
-
}.to_not raise_error
|
27
|
-
end
|
28
|
-
end
|
29
|
-
%w(0.8.0 0.9.0.pre6).each do |v|
|
30
|
-
context "bunny version #{v}" do
|
31
|
-
let(:version) { v }
|
32
|
-
include_examples "raises an error"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
%w(0.9.0.pre7 0.9.0.rc1 0.9.0 0.9.1).each do |v|
|
36
|
-
context "bunny version #{v}" do
|
37
|
-
let(:version) { v }
|
38
|
-
include_examples "doesn't raise an error"
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
it "connects to the rabbit broker" do
|
44
|
-
adapter = described_class.new(valid_connection_attrs)
|
45
|
-
|
46
|
-
expect(adapter.connection).to be_a Bunny::Session
|
47
|
-
expect(adapter.connection).to be_open
|
48
|
-
end
|
49
|
-
|
50
|
-
it "connects to the rabbit broker lazily" do
|
51
|
-
adapter = described_class.new(valid_connection_attrs)
|
52
|
-
|
53
|
-
expect(adapter.connection(false)).to_not be_open
|
54
|
-
end
|
55
|
-
|
56
|
-
it "forces bunny into non-threaded mode" do
|
57
|
-
#FIXME can be changed once ruby-amqp/bunny#112 is fixed
|
58
|
-
adapter = described_class.new(valid_connection_attrs)
|
59
|
-
expect(adapter.connection(false).threaded).to be_false
|
60
|
-
|
61
|
-
adapter = described_class.new(valid_connection_attrs.merge(threaded: true))
|
62
|
-
expect(adapter.connection(false).threaded).to be_false
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
shared_context "a connected adapter" do
|
67
|
-
let(:adapter) { described_class.new(valid_connection_attrs) }
|
68
|
-
let(:connection) { adapter.connection }
|
69
|
-
|
70
|
-
after do
|
71
|
-
connection.close
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
shared_context "with a queue" do
|
76
|
-
include_context "a connected adapter"
|
77
|
-
|
78
|
-
let(:channel) { connection.create_channel }
|
79
|
-
let(:tmp_queue_name) { "my_temp_queue" }
|
80
|
-
let(:tmp_queue) { channel.queue(tmp_queue_name, exclusive: true) }
|
81
|
-
end
|
82
|
-
|
83
|
-
describe "#pop_message" do
|
84
|
-
include_context "with a queue"
|
85
|
-
it "needs some real tests"
|
86
|
-
end
|
87
|
-
|
88
|
-
describe "#create_destination" do
|
89
|
-
include_context "a connected adapter"
|
90
|
-
|
91
|
-
context "with defaults" do
|
92
|
-
context "the resulting destination" do
|
93
|
-
let(:dest_name) { "my_dest" }
|
94
|
-
subject(:result) { adapter.create_destination(dest_name, exclusive: true) }
|
95
|
-
|
96
|
-
it { should be_a BunnyAdapter::QueueDestination }
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
context "the type is queue" do
|
101
|
-
context "and there is no destination name given" do
|
102
|
-
subject(:destination) { adapter.create_destination("", type: :queue, exclusive: true) }
|
103
|
-
it { should be_a BunnyAdapter::QueueDestination }
|
104
|
-
its(:name) { should be_a String }
|
105
|
-
its(:name) { should_not be_empty }
|
106
|
-
end
|
107
|
-
context "the resulting destination" do
|
108
|
-
let(:dest_name) { "my_dest" }
|
109
|
-
subject(:destination) { adapter.create_destination(dest_name, type: :queue, exclusive: true) }
|
110
|
-
before do
|
111
|
-
destination
|
112
|
-
end
|
113
|
-
|
114
|
-
it { should be_a BunnyAdapter::QueueDestination }
|
115
|
-
its(:name) { should be_a String }
|
116
|
-
its(:name) { should eq(dest_name) }
|
117
|
-
|
118
|
-
include_examples "supports #message_count"
|
119
|
-
|
120
|
-
it "strips off the type so it isn't set on the destination" do
|
121
|
-
expect(subject.dest_options).to_not have_key :type
|
122
|
-
end
|
123
|
-
it "ensures the queue is declared" do
|
124
|
-
expect {
|
125
|
-
connection.with_channel do |ch|
|
126
|
-
ch.queue(dest_name, passive: true)
|
127
|
-
end
|
128
|
-
}.to_not raise_error
|
129
|
-
end
|
130
|
-
context "publishing a message" do
|
131
|
-
let(:body) { "Testing the QueueDestination" }
|
132
|
-
let(:headers) { {"foo" => "bar"} }
|
133
|
-
let(:properties) { {persistent: false} }
|
134
|
-
before do
|
135
|
-
subject.publish(body, headers, properties)
|
136
|
-
end
|
137
|
-
it "publishes via the default exchange" do
|
138
|
-
msg = subject.pop_message
|
139
|
-
expect(msg.body).to eq(body)
|
140
|
-
expect(msg.headers).to eq(headers)
|
141
|
-
expect(msg.properties[:delivery_mode]).to eq(1)
|
142
|
-
expect(msg.delivery_info.exchange).to eq("")
|
143
|
-
expect(msg.delivery_info.routing_key).to eq(subject.name)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
it_behaves_like "a destination"
|
147
|
-
end
|
148
|
-
context "and bindings are provided" do
|
149
|
-
let(:dest_name) { "binding_test_queue" }
|
150
|
-
let(:exchange) { adapter.create_destination("amq.direct", type: :exchange) }
|
151
|
-
|
152
|
-
it "raises an exception if you don't provide a source" do
|
153
|
-
expect {
|
154
|
-
adapter.create_destination("bad_bind_queue", type: :queue, exclusive: true, bindings: [{args: {routing_key: "test_exchange_bind"}}])
|
155
|
-
}.to raise_error MessageDriver::Exception, /must provide a source/
|
156
|
-
end
|
157
|
-
|
158
|
-
it "routes message to the queue through the exchange" do
|
159
|
-
destination = adapter.create_destination(dest_name, type: :queue, exclusive: true, bindings: [{source: "amq.direct", args: {routing_key: "test_queue_bind"}}])
|
160
|
-
exchange.publish("test queue bindings", {}, {routing_key: "test_queue_bind"})
|
161
|
-
message = destination.pop_message
|
162
|
-
expect(message).to_not be_nil
|
163
|
-
expect(message.body).to eq("test queue bindings")
|
164
|
-
end
|
165
|
-
end
|
166
|
-
|
167
|
-
context "we are not yet connected to the broker and :no_declare is provided" do
|
168
|
-
it "doesn't cause a connection to the broker" do
|
169
|
-
connection.stop
|
170
|
-
adapter.create_destination("test_queue", no_declare: true, type: :queue, exclusive: true)
|
171
|
-
expect(adapter.connection(false)).to_not be_open
|
172
|
-
end
|
173
|
-
|
174
|
-
context "with a server-named queue" do
|
175
|
-
it "raises an error" do
|
176
|
-
expect {
|
177
|
-
adapter.create_destination("", no_declare: true, type: :queue, exclusive: true)
|
178
|
-
}.to raise_error MessageDriver::Exception, "server-named queues must be declared, but you provided :no_declare => true"
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
context "with bindings" do
|
183
|
-
it "raises an error" do
|
184
|
-
expect {
|
185
|
-
adapter.create_destination("tmp_queue", no_declare: true, bindings: [{source: "amq.fanout"}], type: :queue, exclusive: true)
|
186
|
-
}.to raise_error MessageDriver::Exception, "queues with bindings must be declared, but you provided :no_declare => true"
|
187
|
-
end
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
context "the type is exchange" do
|
193
|
-
context "the resulting destination" do
|
194
|
-
let(:dest_name) { "my_dest" }
|
195
|
-
subject(:destination) { adapter.create_destination(dest_name, type: :exchange) }
|
196
|
-
|
197
|
-
it { should be_a BunnyAdapter::ExchangeDestination }
|
198
|
-
include_examples "doesn't support #message_count"
|
199
|
-
|
200
|
-
it "strips off the type so it isn't set on the destination" do
|
201
|
-
expect(subject.dest_options).to_not have_key :type
|
202
|
-
end
|
203
|
-
|
204
|
-
it "raises an error when pop_message is called" do
|
205
|
-
expect {
|
206
|
-
subject.pop_message(dest_name)
|
207
|
-
}.to raise_error MessageDriver::Exception, "You can't pop a message off an exchange"
|
208
|
-
end
|
209
|
-
|
210
|
-
context "publishing a message" do
|
211
|
-
let(:body) { "Testing the ExchangeDestination" }
|
212
|
-
let(:headers) { {"foo" => "bar"} }
|
213
|
-
let(:properties) { {persistent: false} }
|
214
|
-
before { connection.with_channel { |ch| ch.fanout(dest_name, auto_delete: true) } }
|
215
|
-
let!(:queue) do
|
216
|
-
q = nil
|
217
|
-
connection.with_channel do |ch|
|
218
|
-
q = ch.queue("", exclusive: true)
|
219
|
-
q.bind(dest_name)
|
220
|
-
end
|
221
|
-
q
|
222
|
-
end
|
223
|
-
before do
|
224
|
-
subject.publish(body, headers, properties)
|
225
|
-
end
|
226
|
-
|
227
|
-
it "publishes to the specified exchange" do
|
228
|
-
connection.with_channel do |ch|
|
229
|
-
q = ch.queue(queue.name, passive: true)
|
230
|
-
msg = q.pop
|
231
|
-
expect(msg[2]).to eq(body)
|
232
|
-
expect(msg[0].exchange).to eq(dest_name)
|
233
|
-
expect(msg[1][:headers]).to eq(headers)
|
234
|
-
expect(msg[1][:delivery_mode]).to eq(1)
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
context "declaring an exchange on the broker" do
|
241
|
-
let(:dest_name) { "my.cool.exchange" }
|
242
|
-
|
243
|
-
it "creates the exchange if you include 'declare' in the options" do
|
244
|
-
exchange = adapter.create_destination(dest_name, type: :exchange, declare: {type: :fanout, auto_delete: true})
|
245
|
-
queue = adapter.create_destination("", type: :queue, exclusive: true, bindings: [{source: dest_name}])
|
246
|
-
exchange.publish("test declaring exchange")
|
247
|
-
message = queue.pop_message
|
248
|
-
expect(message).to_not be_nil
|
249
|
-
expect(message.body).to eq("test declaring exchange")
|
250
|
-
end
|
251
|
-
|
252
|
-
it "raises an error if you don't provide a type" do
|
253
|
-
expect {
|
254
|
-
adapter.create_destination(dest_name, type: :exchange, declare: {auto_delete: true})
|
255
|
-
}.to raise_error MessageDriver::Exception, /you must provide a valid exchange type/
|
256
|
-
end
|
257
|
-
|
258
|
-
end
|
259
|
-
|
260
|
-
context "and bindings are provided" do
|
261
|
-
let(:dest_name) { "binding_exchange_queue" }
|
262
|
-
let(:exchange) { adapter.create_destination("amq.direct", type: :exchange) }
|
263
|
-
|
264
|
-
it "raises an exception if you don't provide a source" do
|
265
|
-
expect {
|
266
|
-
adapter.create_destination("amq.fanout", type: :exchange, bindings: [{args: {routing_key: "test_exchange_bind"}}])
|
267
|
-
}.to raise_error MessageDriver::Exception, /must provide a source/
|
268
|
-
end
|
269
|
-
|
270
|
-
it "routes message to the queue through the exchange" do
|
271
|
-
adapter.create_destination("amq.fanout", type: :exchange, bindings: [{source: "amq.direct", args: {routing_key: "test_exchange_bind"}}])
|
272
|
-
destination = adapter.create_destination(dest_name, type: :queue, exclusive: true, bindings: [{source: "amq.fanout"}])
|
273
|
-
exchange.publish("test exchange bindings", {}, {routing_key: "test_exchange_bind"})
|
274
|
-
message = destination.pop_message
|
275
|
-
expect(message).to_not be_nil
|
276
|
-
expect(message.body).to eq("test exchange bindings")
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
context "we are not yet connected to the broker" do
|
281
|
-
before do
|
282
|
-
connection.stop
|
283
|
-
end
|
284
|
-
|
285
|
-
it "doesn't cause a connection to the broker" do
|
286
|
-
adapter.create_destination("amq.fanout", type: :exchange)
|
287
|
-
expect(adapter.connection(false)).to_not be_open
|
288
|
-
end
|
289
|
-
end
|
290
|
-
end
|
291
|
-
|
292
|
-
context "the type is invalid" do
|
293
|
-
it "raises in an error" do
|
294
|
-
expect {
|
295
|
-
adapter.create_destination("my_dest", type: :foo_bar)
|
296
|
-
}.to raise_error MessageDriver::Exception, "invalid destination type #{:foo_bar}"
|
297
|
-
end
|
298
|
-
end
|
299
|
-
end
|
300
|
-
end
|
301
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
require 'message_driver/adapters/in_memory_adapter'
|
4
|
-
|
5
|
-
module MessageDriver::Adapters
|
6
|
-
describe InMemoryAdapter do
|
7
|
-
let(:adapter) { described_class.new }
|
8
|
-
|
9
|
-
describe "#create_destination" do
|
10
|
-
describe "the resulting destination" do
|
11
|
-
let!(:destination) { adapter.create_destination("my_test_dest") }
|
12
|
-
it_behaves_like "a destination"
|
13
|
-
|
14
|
-
subject { destination }
|
15
|
-
|
16
|
-
it { should be_a InMemoryAdapter::Destination }
|
17
|
-
|
18
|
-
include_examples "supports #message_count"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#reset_after_tests" do
|
23
|
-
#make some destinations
|
24
|
-
# throw some messages on it
|
25
|
-
# assert the messages are in the destinations
|
26
|
-
# empty the queues on each destination via method
|
27
|
-
# assert destinations are empty
|
28
|
-
|
29
|
-
it "empties all the destination queues" do
|
30
|
-
destinations = (1..3).map(&adapter.method(:create_destination))
|
31
|
-
destinations.each do |destination|
|
32
|
-
destination.publish("There's always money in the banana stand!", {}, {})
|
33
|
-
end
|
34
|
-
|
35
|
-
adapter.reset_after_tests
|
36
|
-
|
37
|
-
destinations.each do |destination|
|
38
|
-
expect(destination.pop_message).to be_nil
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|