bunny 2.19.0 → 2.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -32
  3. data/lib/bunny/channel.rb +86 -10
  4. data/lib/bunny/consumer.rb +2 -2
  5. data/lib/bunny/delivery_info.rb +1 -1
  6. data/lib/bunny/queue.rb +33 -2
  7. data/lib/bunny/session.rb +1 -1
  8. data/lib/bunny/transport.rb +30 -1
  9. data/lib/bunny/version.rb +1 -1
  10. data/lib/bunny.rb +45 -4
  11. metadata +4 -144
  12. data/spec/config/enabled_plugins +0 -1
  13. data/spec/config/rabbitmq.conf +0 -13
  14. data/spec/higher_level_api/integration/basic_ack_spec.rb +0 -230
  15. data/spec/higher_level_api/integration/basic_cancel_spec.rb +0 -142
  16. data/spec/higher_level_api/integration/basic_consume_spec.rb +0 -357
  17. data/spec/higher_level_api/integration/basic_consume_with_objects_spec.rb +0 -54
  18. data/spec/higher_level_api/integration/basic_get_spec.rb +0 -80
  19. data/spec/higher_level_api/integration/basic_nack_spec.rb +0 -82
  20. data/spec/higher_level_api/integration/basic_publish_spec.rb +0 -74
  21. data/spec/higher_level_api/integration/basic_qos_spec.rb +0 -57
  22. data/spec/higher_level_api/integration/basic_reject_spec.rb +0 -152
  23. data/spec/higher_level_api/integration/basic_return_spec.rb +0 -33
  24. data/spec/higher_level_api/integration/channel_close_spec.rb +0 -66
  25. data/spec/higher_level_api/integration/channel_open_spec.rb +0 -57
  26. data/spec/higher_level_api/integration/connection_recovery_spec.rb +0 -483
  27. data/spec/higher_level_api/integration/connection_spec.rb +0 -589
  28. data/spec/higher_level_api/integration/connection_stop_spec.rb +0 -83
  29. data/spec/higher_level_api/integration/consumer_cancellation_notification_spec.rb +0 -128
  30. data/spec/higher_level_api/integration/dead_lettering_spec.rb +0 -75
  31. data/spec/higher_level_api/integration/exchange_bind_spec.rb +0 -31
  32. data/spec/higher_level_api/integration/exchange_declare_spec.rb +0 -237
  33. data/spec/higher_level_api/integration/exchange_delete_spec.rb +0 -105
  34. data/spec/higher_level_api/integration/exchange_unbind_spec.rb +0 -40
  35. data/spec/higher_level_api/integration/exclusive_queue_spec.rb +0 -28
  36. data/spec/higher_level_api/integration/heartbeat_spec.rb +0 -49
  37. data/spec/higher_level_api/integration/message_properties_access_spec.rb +0 -95
  38. data/spec/higher_level_api/integration/predeclared_exchanges_spec.rb +0 -24
  39. data/spec/higher_level_api/integration/publisher_confirms_spec.rb +0 -191
  40. data/spec/higher_level_api/integration/publishing_edge_cases_spec.rb +0 -87
  41. data/spec/higher_level_api/integration/queue_bind_spec.rb +0 -109
  42. data/spec/higher_level_api/integration/queue_declare_spec.rb +0 -285
  43. data/spec/higher_level_api/integration/queue_delete_spec.rb +0 -41
  44. data/spec/higher_level_api/integration/queue_purge_spec.rb +0 -30
  45. data/spec/higher_level_api/integration/queue_unbind_spec.rb +0 -54
  46. data/spec/higher_level_api/integration/read_only_consumer_spec.rb +0 -60
  47. data/spec/higher_level_api/integration/sender_selected_distribution_spec.rb +0 -36
  48. data/spec/higher_level_api/integration/tls_connection_spec.rb +0 -255
  49. data/spec/higher_level_api/integration/toxiproxy_spec.rb +0 -76
  50. data/spec/higher_level_api/integration/tx_commit_spec.rb +0 -21
  51. data/spec/higher_level_api/integration/tx_rollback_spec.rb +0 -21
  52. data/spec/higher_level_api/integration/with_channel_spec.rb +0 -25
  53. data/spec/issues/issue100_spec.rb +0 -42
  54. data/spec/issues/issue141_spec.rb +0 -43
  55. data/spec/issues/issue202_spec.rb +0 -15
  56. data/spec/issues/issue224_spec.rb +0 -40
  57. data/spec/issues/issue465_spec.rb +0 -32
  58. data/spec/issues/issue549_spec.rb +0 -30
  59. data/spec/issues/issue609_spec.rb +0 -84
  60. data/spec/issues/issue78_spec.rb +0 -72
  61. data/spec/issues/issue83_spec.rb +0 -30
  62. data/spec/issues/issue97_attachment.json +0 -1
  63. data/spec/issues/issue97_spec.rb +0 -175
  64. data/spec/lower_level_api/integration/basic_cancel_spec.rb +0 -83
  65. data/spec/lower_level_api/integration/basic_consume_spec.rb +0 -99
  66. data/spec/spec_helper.rb +0 -47
  67. data/spec/stress/channel_close_stress_spec.rb +0 -64
  68. data/spec/stress/channel_open_stress_spec.rb +0 -84
  69. data/spec/stress/channel_open_stress_with_single_threaded_connection_spec.rb +0 -28
  70. data/spec/stress/concurrent_consumers_stress_spec.rb +0 -71
  71. data/spec/stress/concurrent_publishers_stress_spec.rb +0 -54
  72. data/spec/stress/connection_open_close_spec.rb +0 -52
  73. data/spec/stress/merry_go_round_spec.rb +0 -105
  74. data/spec/toxiproxy_helper.rb +0 -28
  75. data/spec/unit/bunny_spec.rb +0 -15
  76. data/spec/unit/concurrent/atomic_fixnum_spec.rb +0 -35
  77. data/spec/unit/concurrent/condition_spec.rb +0 -82
  78. data/spec/unit/concurrent/linked_continuation_queue_spec.rb +0 -35
  79. data/spec/unit/concurrent/synchronized_sorted_set_spec.rb +0 -73
  80. data/spec/unit/exchange_recovery_spec.rb +0 -39
  81. data/spec/unit/version_delivery_tag_spec.rb +0 -28
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bunny
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.19.0
4
+ version: 2.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Duncan
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2021-06-25 00:00:00.000000000 Z
15
+ date: 2022-12-16 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: amq-protocol
@@ -101,76 +101,6 @@ files:
101
101
  - lib/bunny/transport.rb
102
102
  - lib/bunny/version.rb
103
103
  - lib/bunny/versioned_delivery_tag.rb
104
- - spec/config/enabled_plugins
105
- - spec/config/rabbitmq.conf
106
- - spec/higher_level_api/integration/basic_ack_spec.rb
107
- - spec/higher_level_api/integration/basic_cancel_spec.rb
108
- - spec/higher_level_api/integration/basic_consume_spec.rb
109
- - spec/higher_level_api/integration/basic_consume_with_objects_spec.rb
110
- - spec/higher_level_api/integration/basic_get_spec.rb
111
- - spec/higher_level_api/integration/basic_nack_spec.rb
112
- - spec/higher_level_api/integration/basic_publish_spec.rb
113
- - spec/higher_level_api/integration/basic_qos_spec.rb
114
- - spec/higher_level_api/integration/basic_reject_spec.rb
115
- - spec/higher_level_api/integration/basic_return_spec.rb
116
- - spec/higher_level_api/integration/channel_close_spec.rb
117
- - spec/higher_level_api/integration/channel_open_spec.rb
118
- - spec/higher_level_api/integration/connection_recovery_spec.rb
119
- - spec/higher_level_api/integration/connection_spec.rb
120
- - spec/higher_level_api/integration/connection_stop_spec.rb
121
- - spec/higher_level_api/integration/consumer_cancellation_notification_spec.rb
122
- - spec/higher_level_api/integration/dead_lettering_spec.rb
123
- - spec/higher_level_api/integration/exchange_bind_spec.rb
124
- - spec/higher_level_api/integration/exchange_declare_spec.rb
125
- - spec/higher_level_api/integration/exchange_delete_spec.rb
126
- - spec/higher_level_api/integration/exchange_unbind_spec.rb
127
- - spec/higher_level_api/integration/exclusive_queue_spec.rb
128
- - spec/higher_level_api/integration/heartbeat_spec.rb
129
- - spec/higher_level_api/integration/message_properties_access_spec.rb
130
- - spec/higher_level_api/integration/predeclared_exchanges_spec.rb
131
- - spec/higher_level_api/integration/publisher_confirms_spec.rb
132
- - spec/higher_level_api/integration/publishing_edge_cases_spec.rb
133
- - spec/higher_level_api/integration/queue_bind_spec.rb
134
- - spec/higher_level_api/integration/queue_declare_spec.rb
135
- - spec/higher_level_api/integration/queue_delete_spec.rb
136
- - spec/higher_level_api/integration/queue_purge_spec.rb
137
- - spec/higher_level_api/integration/queue_unbind_spec.rb
138
- - spec/higher_level_api/integration/read_only_consumer_spec.rb
139
- - spec/higher_level_api/integration/sender_selected_distribution_spec.rb
140
- - spec/higher_level_api/integration/tls_connection_spec.rb
141
- - spec/higher_level_api/integration/toxiproxy_spec.rb
142
- - spec/higher_level_api/integration/tx_commit_spec.rb
143
- - spec/higher_level_api/integration/tx_rollback_spec.rb
144
- - spec/higher_level_api/integration/with_channel_spec.rb
145
- - spec/issues/issue100_spec.rb
146
- - spec/issues/issue141_spec.rb
147
- - spec/issues/issue202_spec.rb
148
- - spec/issues/issue224_spec.rb
149
- - spec/issues/issue465_spec.rb
150
- - spec/issues/issue549_spec.rb
151
- - spec/issues/issue609_spec.rb
152
- - spec/issues/issue78_spec.rb
153
- - spec/issues/issue83_spec.rb
154
- - spec/issues/issue97_attachment.json
155
- - spec/issues/issue97_spec.rb
156
- - spec/lower_level_api/integration/basic_cancel_spec.rb
157
- - spec/lower_level_api/integration/basic_consume_spec.rb
158
- - spec/spec_helper.rb
159
- - spec/stress/channel_close_stress_spec.rb
160
- - spec/stress/channel_open_stress_spec.rb
161
- - spec/stress/channel_open_stress_with_single_threaded_connection_spec.rb
162
- - spec/stress/concurrent_consumers_stress_spec.rb
163
- - spec/stress/concurrent_publishers_stress_spec.rb
164
- - spec/stress/connection_open_close_spec.rb
165
- - spec/stress/merry_go_round_spec.rb
166
- - spec/toxiproxy_helper.rb
167
- - spec/unit/bunny_spec.rb
168
- - spec/unit/concurrent/atomic_fixnum_spec.rb
169
- - spec/unit/concurrent/condition_spec.rb
170
- - spec/unit/concurrent/linked_continuation_queue_spec.rb
171
- - spec/unit/concurrent/synchronized_sorted_set_spec.rb
172
- - spec/unit/exchange_recovery_spec.rb
173
- - spec/unit/version_delivery_tag_spec.rb
174
104
  homepage: http://rubybunny.info
175
105
  licenses:
176
106
  - MIT
@@ -183,7 +113,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
183
113
  requirements:
184
114
  - - ">="
185
115
  - !ruby/object:Gem::Version
186
- version: '2.2'
116
+ version: '2.5'
187
117
  required_rubygems_version: !ruby/object:Gem::Requirement
188
118
  requirements:
189
119
  - - ">="
@@ -194,74 +124,4 @@ rubygems_version: 3.1.4
194
124
  signing_key:
195
125
  specification_version: 4
196
126
  summary: Popular easy to use Ruby client for RabbitMQ
197
- test_files:
198
- - spec/config/enabled_plugins
199
- - spec/config/rabbitmq.conf
200
- - spec/higher_level_api/integration/basic_ack_spec.rb
201
- - spec/higher_level_api/integration/basic_cancel_spec.rb
202
- - spec/higher_level_api/integration/basic_consume_spec.rb
203
- - spec/higher_level_api/integration/basic_consume_with_objects_spec.rb
204
- - spec/higher_level_api/integration/basic_get_spec.rb
205
- - spec/higher_level_api/integration/basic_nack_spec.rb
206
- - spec/higher_level_api/integration/basic_publish_spec.rb
207
- - spec/higher_level_api/integration/basic_qos_spec.rb
208
- - spec/higher_level_api/integration/basic_reject_spec.rb
209
- - spec/higher_level_api/integration/basic_return_spec.rb
210
- - spec/higher_level_api/integration/channel_close_spec.rb
211
- - spec/higher_level_api/integration/channel_open_spec.rb
212
- - spec/higher_level_api/integration/connection_recovery_spec.rb
213
- - spec/higher_level_api/integration/connection_spec.rb
214
- - spec/higher_level_api/integration/connection_stop_spec.rb
215
- - spec/higher_level_api/integration/consumer_cancellation_notification_spec.rb
216
- - spec/higher_level_api/integration/dead_lettering_spec.rb
217
- - spec/higher_level_api/integration/exchange_bind_spec.rb
218
- - spec/higher_level_api/integration/exchange_declare_spec.rb
219
- - spec/higher_level_api/integration/exchange_delete_spec.rb
220
- - spec/higher_level_api/integration/exchange_unbind_spec.rb
221
- - spec/higher_level_api/integration/exclusive_queue_spec.rb
222
- - spec/higher_level_api/integration/heartbeat_spec.rb
223
- - spec/higher_level_api/integration/message_properties_access_spec.rb
224
- - spec/higher_level_api/integration/predeclared_exchanges_spec.rb
225
- - spec/higher_level_api/integration/publisher_confirms_spec.rb
226
- - spec/higher_level_api/integration/publishing_edge_cases_spec.rb
227
- - spec/higher_level_api/integration/queue_bind_spec.rb
228
- - spec/higher_level_api/integration/queue_declare_spec.rb
229
- - spec/higher_level_api/integration/queue_delete_spec.rb
230
- - spec/higher_level_api/integration/queue_purge_spec.rb
231
- - spec/higher_level_api/integration/queue_unbind_spec.rb
232
- - spec/higher_level_api/integration/read_only_consumer_spec.rb
233
- - spec/higher_level_api/integration/sender_selected_distribution_spec.rb
234
- - spec/higher_level_api/integration/tls_connection_spec.rb
235
- - spec/higher_level_api/integration/toxiproxy_spec.rb
236
- - spec/higher_level_api/integration/tx_commit_spec.rb
237
- - spec/higher_level_api/integration/tx_rollback_spec.rb
238
- - spec/higher_level_api/integration/with_channel_spec.rb
239
- - spec/issues/issue100_spec.rb
240
- - spec/issues/issue141_spec.rb
241
- - spec/issues/issue202_spec.rb
242
- - spec/issues/issue224_spec.rb
243
- - spec/issues/issue465_spec.rb
244
- - spec/issues/issue549_spec.rb
245
- - spec/issues/issue609_spec.rb
246
- - spec/issues/issue78_spec.rb
247
- - spec/issues/issue83_spec.rb
248
- - spec/issues/issue97_attachment.json
249
- - spec/issues/issue97_spec.rb
250
- - spec/lower_level_api/integration/basic_cancel_spec.rb
251
- - spec/lower_level_api/integration/basic_consume_spec.rb
252
- - spec/spec_helper.rb
253
- - spec/stress/channel_close_stress_spec.rb
254
- - spec/stress/channel_open_stress_spec.rb
255
- - spec/stress/channel_open_stress_with_single_threaded_connection_spec.rb
256
- - spec/stress/concurrent_consumers_stress_spec.rb
257
- - spec/stress/concurrent_publishers_stress_spec.rb
258
- - spec/stress/connection_open_close_spec.rb
259
- - spec/stress/merry_go_round_spec.rb
260
- - spec/toxiproxy_helper.rb
261
- - spec/unit/bunny_spec.rb
262
- - spec/unit/concurrent/atomic_fixnum_spec.rb
263
- - spec/unit/concurrent/condition_spec.rb
264
- - spec/unit/concurrent/linked_continuation_queue_spec.rb
265
- - spec/unit/concurrent/synchronized_sorted_set_spec.rb
266
- - spec/unit/exchange_recovery_spec.rb
267
- - spec/unit/version_delivery_tag_spec.rb
127
+ test_files: []
@@ -1 +0,0 @@
1
- [rabbitmq_management, rabbitmq_consistent_hash_exchange].
@@ -1,13 +0,0 @@
1
- listeners.tcp.1 = 0.0.0.0:5672
2
-
3
- listeners.ssl.default = 5671
4
-
5
- # mounted by docker-compose
6
- ssl_options.cacertfile = /spec/tls/ca_certificate.pem
7
- ssl_options.certfile = /spec/tls/server_certificate.pem
8
- ssl_options.keyfile = /spec/tls/server_key.pem
9
-
10
- ssl_options.verify = verify_none
11
- ssl_options.fail_if_no_peer_cert = false
12
-
13
- loopback_users = none
@@ -1,230 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Bunny::Channel, "#ack" do
4
- let(:connection) do
5
- c = Bunny.new(username: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed")
6
- c.start
7
- c
8
- end
9
-
10
- after :each do
11
- connection.close if connection.open?
12
- end
13
-
14
- context "with a valid (known) delivery tag" do
15
- it "acknowledges a message" do
16
- ch = connection.create_channel
17
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
18
- x = ch.default_exchange
19
-
20
- x.publish("bunneth", routing_key: q.name)
21
- sleep 0.5
22
- expect(q.message_count).to eq 1
23
- delivery_details, properties, content = q.pop(manual_ack: true)
24
-
25
- ch.ack(delivery_details.delivery_tag, true)
26
- ch.close
27
-
28
- ch = connection.create_channel
29
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
30
- expect(q.message_count).to eq 0
31
- ch.close
32
- end
33
- end
34
-
35
- context "with a valid (known) delivery tag (multiple = true)" do
36
- it "acknowledges a message" do
37
- ch = connection.create_channel
38
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
39
- x = ch.default_exchange
40
-
41
- x.publish("bunneth", routing_key: q.name)
42
- x.publish("bunneth", routing_key: q.name)
43
- sleep 0.5
44
- expect(q.message_count).to eq 2
45
- delivery_details_1, _properties, _content = q.pop(manual_ack: true)
46
- delivery_details_2, _properties, _content = q.pop(manual_ack: true)
47
-
48
- ch.ack(delivery_details_2.delivery_tag, true)
49
- ch.close
50
-
51
- ch = connection.create_channel
52
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
53
- expect(q.message_count).to eq 0
54
- ch.close
55
- end
56
- end
57
-
58
- context "with a valid (known) delivery tag (multiple = false)" do
59
- it "acknowledges a message" do
60
- ch = connection.create_channel
61
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
62
- x = ch.default_exchange
63
-
64
- x.publish("bunneth", routing_key: q.name)
65
- x.publish("bunneth", routing_key: q.name)
66
- sleep 0.5
67
- expect(q.message_count).to eq 2
68
- delivery_details_1, _properties, _content = q.pop(manual_ack: true)
69
- delivery_details_2, _properties, _content = q.pop(manual_ack: true)
70
-
71
- ch.ack(delivery_details_2.delivery_tag, false)
72
- ch.close
73
-
74
- ch = connection.create_channel
75
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
76
- expect(q.message_count).to eq 1
77
- ch.close
78
- end
79
- end
80
-
81
- context "with a valid (known) delivery tag and automatic ack mode" do
82
- it "results in a channel exception" do
83
- ch = connection.create_channel
84
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
85
- x = ch.default_exchange
86
-
87
- q.subscribe(manual_ack: false) do |delivery_info, properties, payload|
88
- ch.ack(delivery_info.delivery_tag, false)
89
- end
90
-
91
- x.publish("bunneth", routing_key: q.name)
92
- sleep 0.5
93
- expect do
94
- q.message_count
95
- end.to raise_error(Bunny::ChannelAlreadyClosed)
96
- end
97
- end
98
-
99
- context "with an invalid (random) delivery tag" do
100
- it "causes a channel-level error" do
101
- ch = connection.create_channel
102
- q = ch.queue("bunny.basic.ack.unknown-delivery-tag", exclusive: true)
103
- x = ch.default_exchange
104
-
105
- x.publish("bunneth", routing_key: q.name)
106
- sleep 0.5
107
- expect(q.message_count).to eq 1
108
- _, _, content = q.pop(manual_ack: true)
109
-
110
- ch.on_error do |ch, channel_close|
111
- @channel_close = channel_close
112
- end
113
- ch.ack(82, true)
114
- sleep 0.25
115
-
116
- expect(@channel_close.reply_code).to eq AMQ::Protocol::PreconditionFailed::VALUE
117
- end
118
- end
119
-
120
- context "with a valid (known) delivery tag" do
121
- it "gets a depricated message warning for using :ack" do
122
- ch = connection.create_channel
123
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
124
- x = ch.default_exchange
125
-
126
- x.publish("bunneth", routing_key: q.name)
127
- sleep 0.5
128
- expect(q.message_count).to eq 1
129
-
130
- orig_stderr = $stderr
131
- $stderr = StringIO.new
132
-
133
- delivery_details, properties, content = q.pop(ack: true)
134
-
135
- $stderr.rewind
136
- expect($stderr.string.chomp).to eq("[DEPRECATION] `:ack` is deprecated. Please use `:manual_ack` instead.\n[DEPRECATION] `:ack` is deprecated. Please use `:manual_ack` instead.")
137
-
138
- $stderr = orig_stderr
139
-
140
- ch.ack(delivery_details.delivery_tag, true)
141
- ch.close
142
-
143
- ch = connection.create_channel
144
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
145
- expect(q.message_count).to eq 0
146
- ch.close
147
- end
148
- end
149
- end
150
-
151
- describe Bunny::Channel, "#basic_ack" do
152
- let(:connection) do
153
- c = Bunny.new(username: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed")
154
- c.start
155
- c
156
- end
157
-
158
- after :each do
159
- connection.close if connection.open?
160
- end
161
-
162
- context "with a valid (known) delivery tag (multiple = true)" do
163
- it "acknowledges a message" do
164
- ch = connection.create_channel
165
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
166
- x = ch.default_exchange
167
-
168
- x.publish("bunneth", routing_key: q.name)
169
- x.publish("bunneth", routing_key: q.name)
170
- sleep 0.5
171
- expect(q.message_count).to eq 2
172
- delivery_details_1, _properties, _content = q.pop(manual_ack: true)
173
- delivery_details_2, _properties, _content = q.pop(manual_ack: true)
174
-
175
- ch.basic_ack(delivery_details_2.delivery_tag.to_i, true)
176
- ch.close
177
-
178
- ch = connection.create_channel
179
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
180
- expect(q.message_count).to eq 0
181
- ch.close
182
- end
183
- end
184
-
185
- context "with a valid (known) delivery tag (multiple = false)" do
186
- it "acknowledges a message" do
187
- ch = connection.create_channel
188
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
189
- x = ch.default_exchange
190
-
191
- x.publish("bunneth", routing_key: q.name)
192
- x.publish("bunneth", routing_key: q.name)
193
- sleep 0.5
194
- expect(q.message_count).to eq 2
195
- delivery_details_1, _properties, _content = q.pop(manual_ack: true)
196
- delivery_details_2, _properties, _content = q.pop(manual_ack: true)
197
-
198
- ch.basic_ack(delivery_details_2.delivery_tag.to_i, false)
199
- ch.close
200
-
201
- ch = connection.create_channel
202
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
203
- expect(q.message_count).to eq 1
204
- ch.close
205
- end
206
- end
207
-
208
- context "with a valid (known) delivery tag (multiple = default)" do
209
- it "acknowledges a message" do
210
- ch = connection.create_channel
211
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
212
- x = ch.default_exchange
213
-
214
- x.publish("bunneth", routing_key: q.name)
215
- x.publish("bunneth", routing_key: q.name)
216
- sleep 0.5
217
- expect(q.message_count).to eq 2
218
- delivery_details_1, _properties, _content = q.pop(manual_ack: true)
219
- delivery_details_2, _properties, _content = q.pop(manual_ack: true)
220
-
221
- ch.basic_ack(delivery_details_2.delivery_tag.to_i)
222
- ch.close
223
-
224
- ch = connection.create_channel
225
- q = ch.queue("bunny.basic.ack.manual-acks", exclusive: true)
226
- expect(q.message_count).to eq 1
227
- ch.close
228
- end
229
- end
230
- end
@@ -1,142 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Bunny::Consumer, "#cancel" do
4
- let(:connection) do
5
- c = Bunny.new(username: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed")
6
- c.start
7
- c
8
- end
9
-
10
- after :each do
11
- connection.close if connection.open?
12
- end
13
-
14
- context "with a non-blocking consumer" do
15
- let(:queue_name) { "bunny.queues.#{rand}" }
16
-
17
- it "cancels the consumer" do
18
- delivered_data = []
19
-
20
- t = Thread.new do
21
- ch = connection.create_channel
22
- q = ch.queue(queue_name, auto_delete: true, durable: false)
23
- consumer = q.subscribe do |_, _, payload|
24
- delivered_data << payload
25
- end
26
-
27
- expect(consumer.consumer_tag).not_to be_nil
28
- cancel_ok = consumer.cancel
29
- expect(cancel_ok.consumer_tag).to eq consumer.consumer_tag
30
-
31
- ch.close
32
- end
33
- t.abort_on_exception = true
34
- sleep 0.5
35
-
36
- ch = connection.create_channel
37
- ch.default_exchange.publish("", routing_key: queue_name)
38
-
39
- sleep 0.7
40
- expect(delivered_data).to be_empty
41
- end
42
- end
43
-
44
-
45
- context "with a blocking consumer" do
46
- let(:queue_name) { "bunny.queues.#{rand}" }
47
-
48
- it "cancels the consumer" do
49
- delivered_data = []
50
- consumer = nil
51
-
52
- t = Thread.new do
53
- ch = connection.create_channel
54
- q = ch.queue(queue_name, auto_delete: true, durable: false)
55
-
56
- consumer = Bunny::Consumer.new(ch, q)
57
- consumer.on_delivery do |_, _, payload|
58
- delivered_data << payload
59
- end
60
-
61
- q.subscribe_with(consumer)
62
- end
63
- t.abort_on_exception = true
64
- sleep 1.0
65
-
66
- consumer.cancel
67
- sleep 1.0
68
-
69
- ch = connection.create_channel
70
- ch.default_exchange.publish("", routing_key: queue_name)
71
-
72
- sleep 0.7
73
- expect(delivered_data).to be_empty
74
- end
75
- end
76
-
77
- context "with a worker pool shutdown timeout configured" do
78
- let(:queue_name) { "bunny.queues.#{rand}" }
79
-
80
- it "processes the message if processing completes within the timeout" do
81
- delivered_data = []
82
- consumer = nil
83
-
84
- t = Thread.new do
85
- ch = connection.create_channel(nil, 1, false, 5)
86
- q = ch.queue(queue_name, auto_delete: true, durable: false)
87
-
88
- consumer = Bunny::Consumer.new(ch, q)
89
- consumer.on_delivery do |_, _, payload|
90
- sleep 2
91
- delivered_data << payload
92
- end
93
-
94
- q.subscribe_with(consumer)
95
- end
96
- t.abort_on_exception = true
97
- sleep 1.0
98
-
99
- ch = connection.create_channel
100
- ch.confirm_select
101
- ch.default_exchange.publish("", routing_key: queue_name)
102
- ch.wait_for_confirms
103
- sleep 0.5
104
-
105
- consumer.cancel
106
- sleep 1.0
107
-
108
- expect(delivered_data).to_not be_empty
109
- end
110
-
111
- it "kills the consumer if processing takes longer than the timeout" do
112
- delivered_data = []
113
- consumer = nil
114
-
115
- t = Thread.new do
116
- ch = connection.create_channel(nil, 1, false, 1)
117
- q = ch.queue(queue_name, auto_delete: true, durable: false)
118
-
119
- consumer = Bunny::Consumer.new(ch, q)
120
- consumer.on_delivery do |_, _, payload|
121
- sleep 3
122
- delivered_data << payload
123
- end
124
-
125
- q.subscribe_with(consumer)
126
- end
127
- t.abort_on_exception = true
128
- sleep 1.0
129
-
130
- ch = connection.create_channel
131
- ch.confirm_select
132
- ch.default_exchange.publish("", routing_key: queue_name)
133
- ch.wait_for_confirms
134
- sleep 0.5
135
-
136
- consumer.cancel
137
- sleep 1.0
138
-
139
- expect(delivered_data).to be_empty
140
- end
141
- end
142
- end