bunny 1.7.0 → 2.17.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 (141) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE.md +18 -0
  3. data/.gitignore +6 -1
  4. data/.rspec +1 -3
  5. data/.travis.yml +21 -14
  6. data/CONTRIBUTING.md +132 -0
  7. data/ChangeLog.md +745 -1
  8. data/Gemfile +13 -13
  9. data/LICENSE +1 -1
  10. data/README.md +41 -75
  11. data/Rakefile +54 -0
  12. data/bunny.gemspec +4 -10
  13. data/docker-compose.yml +28 -0
  14. data/docker/Dockerfile +24 -0
  15. data/docker/apt/preferences.d/erlang +3 -0
  16. data/docker/apt/sources.list.d/bintray.rabbitmq.list +2 -0
  17. data/docker/docker-entrypoint.sh +26 -0
  18. data/docker/rabbitmq.conf +29 -0
  19. data/examples/connection/automatic_recovery_with_basic_get.rb +1 -1
  20. data/examples/connection/automatic_recovery_with_client_named_queues.rb +1 -1
  21. data/examples/connection/automatic_recovery_with_multiple_consumers.rb +1 -1
  22. data/examples/connection/automatic_recovery_with_republishing.rb +1 -1
  23. data/examples/connection/automatic_recovery_with_server_named_queues.rb +1 -1
  24. data/examples/connection/channel_level_exception.rb +1 -9
  25. data/examples/connection/disabled_automatic_recovery.rb +1 -1
  26. data/examples/connection/heartbeat.rb +1 -1
  27. data/examples/consumers/high_and_low_priority.rb +1 -1
  28. data/examples/guides/extensions/alternate_exchange.rb +2 -0
  29. data/examples/guides/getting_started/hello_world.rb +2 -0
  30. data/examples/guides/getting_started/weathr.rb +2 -0
  31. data/examples/guides/queues/one_off_consumer.rb +2 -0
  32. data/examples/guides/queues/redeliveries.rb +2 -0
  33. data/lib/bunny.rb +6 -2
  34. data/lib/bunny/channel.rb +192 -109
  35. data/lib/bunny/channel_id_allocator.rb +6 -4
  36. data/lib/bunny/concurrent/continuation_queue.rb +34 -13
  37. data/lib/bunny/consumer_work_pool.rb +34 -6
  38. data/lib/bunny/cruby/socket.rb +29 -16
  39. data/lib/bunny/cruby/ssl_socket.rb +20 -7
  40. data/lib/bunny/exceptions.rb +7 -1
  41. data/lib/bunny/exchange.rb +11 -7
  42. data/lib/bunny/get_response.rb +1 -1
  43. data/lib/bunny/heartbeat_sender.rb +3 -2
  44. data/lib/bunny/jruby/socket.rb +23 -6
  45. data/lib/bunny/jruby/ssl_socket.rb +5 -0
  46. data/lib/bunny/queue.rb +12 -10
  47. data/lib/bunny/reader_loop.rb +31 -18
  48. data/lib/bunny/session.rb +389 -134
  49. data/lib/bunny/test_kit.rb +14 -0
  50. data/lib/bunny/timeout.rb +1 -12
  51. data/lib/bunny/transport.rb +114 -67
  52. data/lib/bunny/version.rb +1 -1
  53. data/repl +1 -1
  54. data/spec/config/rabbitmq.conf +13 -0
  55. data/spec/higher_level_api/integration/basic_ack_spec.rb +154 -22
  56. data/spec/higher_level_api/integration/basic_cancel_spec.rb +77 -11
  57. data/spec/higher_level_api/integration/basic_consume_spec.rb +60 -55
  58. data/spec/higher_level_api/integration/basic_consume_with_objects_spec.rb +6 -6
  59. data/spec/higher_level_api/integration/basic_get_spec.rb +31 -7
  60. data/spec/higher_level_api/integration/basic_nack_spec.rb +22 -19
  61. data/spec/higher_level_api/integration/basic_publish_spec.rb +11 -100
  62. data/spec/higher_level_api/integration/basic_qos_spec.rb +32 -4
  63. data/spec/higher_level_api/integration/basic_reject_spec.rb +94 -16
  64. data/spec/higher_level_api/integration/basic_return_spec.rb +4 -4
  65. data/spec/higher_level_api/integration/channel_close_spec.rb +51 -10
  66. data/spec/higher_level_api/integration/channel_open_spec.rb +12 -12
  67. data/spec/higher_level_api/integration/connection_recovery_spec.rb +412 -286
  68. data/spec/higher_level_api/integration/connection_spec.rb +284 -134
  69. data/spec/higher_level_api/integration/connection_stop_spec.rb +31 -19
  70. data/spec/higher_level_api/integration/consumer_cancellation_notification_spec.rb +17 -17
  71. data/spec/higher_level_api/integration/dead_lettering_spec.rb +14 -14
  72. data/spec/higher_level_api/integration/exchange_bind_spec.rb +5 -5
  73. data/spec/higher_level_api/integration/exchange_declare_spec.rb +32 -31
  74. data/spec/higher_level_api/integration/exchange_delete_spec.rb +12 -12
  75. data/spec/higher_level_api/integration/exchange_unbind_spec.rb +5 -5
  76. data/spec/higher_level_api/integration/exclusive_queue_spec.rb +5 -5
  77. data/spec/higher_level_api/integration/heartbeat_spec.rb +4 -4
  78. data/spec/higher_level_api/integration/message_properties_access_spec.rb +49 -49
  79. data/spec/higher_level_api/integration/predeclared_exchanges_spec.rb +2 -2
  80. data/spec/higher_level_api/integration/publisher_confirms_spec.rb +92 -27
  81. data/spec/higher_level_api/integration/publishing_edge_cases_spec.rb +19 -19
  82. data/spec/higher_level_api/integration/queue_bind_spec.rb +23 -23
  83. data/spec/higher_level_api/integration/queue_declare_spec.rb +129 -34
  84. data/spec/higher_level_api/integration/queue_delete_spec.rb +2 -2
  85. data/spec/higher_level_api/integration/queue_purge_spec.rb +5 -5
  86. data/spec/higher_level_api/integration/queue_unbind_spec.rb +6 -6
  87. data/spec/higher_level_api/integration/read_only_consumer_spec.rb +9 -9
  88. data/spec/higher_level_api/integration/sender_selected_distribution_spec.rb +10 -10
  89. data/spec/higher_level_api/integration/tls_connection_spec.rb +218 -112
  90. data/spec/higher_level_api/integration/toxiproxy_spec.rb +76 -0
  91. data/spec/higher_level_api/integration/tx_commit_spec.rb +1 -1
  92. data/spec/higher_level_api/integration/tx_rollback_spec.rb +1 -1
  93. data/spec/higher_level_api/integration/with_channel_spec.rb +2 -2
  94. data/spec/issues/issue100_spec.rb +11 -12
  95. data/spec/issues/issue141_spec.rb +13 -14
  96. data/spec/issues/issue202_spec.rb +1 -1
  97. data/spec/issues/issue224_spec.rb +5 -5
  98. data/spec/issues/issue465_spec.rb +32 -0
  99. data/spec/issues/issue549_spec.rb +30 -0
  100. data/spec/issues/issue78_spec.rb +21 -24
  101. data/spec/issues/issue83_spec.rb +5 -6
  102. data/spec/issues/issue97_spec.rb +44 -45
  103. data/spec/lower_level_api/integration/basic_cancel_spec.rb +15 -16
  104. data/spec/lower_level_api/integration/basic_consume_spec.rb +20 -21
  105. data/spec/spec_helper.rb +2 -19
  106. data/spec/stress/channel_close_stress_spec.rb +3 -3
  107. data/spec/stress/channel_open_stress_spec.rb +4 -4
  108. data/spec/stress/channel_open_stress_with_single_threaded_connection_spec.rb +7 -7
  109. data/spec/stress/concurrent_consumers_stress_spec.rb +18 -16
  110. data/spec/stress/concurrent_publishers_stress_spec.rb +16 -19
  111. data/spec/stress/connection_open_close_spec.rb +9 -9
  112. data/spec/stress/merry_go_round_spec.rb +105 -0
  113. data/spec/tls/ca_certificate.pem +27 -16
  114. data/spec/tls/ca_key.pem +52 -27
  115. data/spec/tls/client_certificate.pem +27 -16
  116. data/spec/tls/client_key.pem +49 -25
  117. data/spec/tls/generate-server-cert.sh +8 -0
  118. data/spec/tls/server-openssl.cnf +10 -0
  119. data/spec/tls/server.csr +16 -0
  120. data/spec/tls/server_certificate.pem +27 -16
  121. data/spec/tls/server_key.pem +49 -25
  122. data/spec/toxiproxy_helper.rb +28 -0
  123. data/spec/unit/bunny_spec.rb +5 -5
  124. data/spec/unit/concurrent/atomic_fixnum_spec.rb +6 -6
  125. data/spec/unit/concurrent/condition_spec.rb +8 -8
  126. data/spec/unit/concurrent/linked_continuation_queue_spec.rb +2 -2
  127. data/spec/unit/concurrent/synchronized_sorted_set_spec.rb +16 -16
  128. data/spec/unit/exchange_recovery_spec.rb +39 -0
  129. data/spec/unit/version_delivery_tag_spec.rb +3 -3
  130. metadata +42 -35
  131. data/lib/bunny/system_timer.rb +0 -20
  132. data/spec/config/rabbitmq.config +0 -18
  133. data/spec/higher_level_api/integration/basic_recover_spec.rb +0 -18
  134. data/spec/higher_level_api/integration/confirm_select_spec.rb +0 -19
  135. data/spec/higher_level_api/integration/consistent_hash_exchange_spec.rb +0 -50
  136. data/spec/higher_level_api/integration/merry_go_round_spec.rb +0 -85
  137. data/spec/stress/long_running_consumer_spec.rb +0 -83
  138. data/spec/tls/cacert.pem +0 -18
  139. data/spec/tls/client_cert.pem +0 -18
  140. data/spec/tls/server_cert.pem +0 -18
  141. data/spec/unit/system_timer_spec.rb +0 -10
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
 
3
3
  describe Bunny::Consumer, "#cancel" do
4
4
  let(:connection) do
5
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
5
+ c = Bunny.new(username: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed")
6
6
  c.start
7
7
  c
8
8
  end
@@ -19,14 +19,14 @@ describe Bunny::Consumer, "#cancel" do
19
19
 
20
20
  t = Thread.new do
21
21
  ch = connection.create_channel
22
- q = ch.queue(queue_name, :auto_delete => true, :durable => false)
23
- consumer = q.subscribe(:block => false) do |_, _, payload|
22
+ q = ch.queue(queue_name, auto_delete: true, durable: false)
23
+ consumer = q.subscribe do |_, _, payload|
24
24
  delivered_data << payload
25
25
  end
26
26
 
27
- consumer.consumer_tag.should_not be_nil
27
+ expect(consumer.consumer_tag).not_to be_nil
28
28
  cancel_ok = consumer.cancel
29
- cancel_ok.consumer_tag.should == consumer.consumer_tag
29
+ expect(cancel_ok.consumer_tag).to eq consumer.consumer_tag
30
30
 
31
31
  ch.close
32
32
  end
@@ -34,10 +34,10 @@ describe Bunny::Consumer, "#cancel" do
34
34
  sleep 0.5
35
35
 
36
36
  ch = connection.create_channel
37
- ch.default_exchange.publish("", :routing_key => queue_name)
37
+ ch.default_exchange.publish("", routing_key: queue_name)
38
38
 
39
39
  sleep 0.7
40
- delivered_data.should be_empty
40
+ expect(delivered_data).to be_empty
41
41
  end
42
42
  end
43
43
 
@@ -51,14 +51,14 @@ describe Bunny::Consumer, "#cancel" do
51
51
 
52
52
  t = Thread.new do
53
53
  ch = connection.create_channel
54
- q = ch.queue(queue_name, :auto_delete => true, :durable => false)
54
+ q = ch.queue(queue_name, auto_delete: true, durable: false)
55
55
 
56
56
  consumer = Bunny::Consumer.new(ch, q)
57
57
  consumer.on_delivery do |_, _, payload|
58
58
  delivered_data << payload
59
59
  end
60
60
 
61
- q.subscribe_with(consumer, :block => false)
61
+ q.subscribe_with(consumer)
62
62
  end
63
63
  t.abort_on_exception = true
64
64
  sleep 1.0
@@ -67,10 +67,76 @@ describe Bunny::Consumer, "#cancel" do
67
67
  sleep 1.0
68
68
 
69
69
  ch = connection.create_channel
70
- ch.default_exchange.publish("", :routing_key => queue_name)
70
+ ch.default_exchange.publish("", routing_key: queue_name)
71
71
 
72
72
  sleep 0.7
73
- delivered_data.should be_empty
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
74
140
  end
75
141
  end
76
142
  end
@@ -3,7 +3,7 @@ require "set"
3
3
 
4
4
  describe Bunny::Queue, "#subscribe" do
5
5
  let(:connection) do
6
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
6
+ c = Bunny.new(username: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed")
7
7
  c.start
8
8
  c
9
9
  end
@@ -21,8 +21,8 @@ describe Bunny::Queue, "#subscribe" do
21
21
 
22
22
  t = Thread.new do
23
23
  ch = connection.create_channel
24
- q = ch.queue(queue_name, :auto_delete => true, :durable => false)
25
- q.subscribe(:exclusive => false, :manual_ack => false) do |delivery_info, properties, payload|
24
+ q = ch.queue(queue_name, auto_delete: true, durable: false)
25
+ q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
26
26
  delivered_keys << delivery_info.routing_key
27
27
  delivered_data << payload
28
28
  end
@@ -32,13 +32,13 @@ describe Bunny::Queue, "#subscribe" do
32
32
 
33
33
  ch = connection.create_channel
34
34
  x = ch.default_exchange
35
- x.publish("hello", :routing_key => queue_name)
35
+ x.publish("hello", routing_key: queue_name)
36
36
 
37
37
  sleep 0.7
38
- delivered_keys.should include(queue_name)
39
- delivered_data.should include("hello")
38
+ expect(delivered_keys).to include(queue_name)
39
+ expect(delivered_data).to include("hello")
40
40
 
41
- ch.queue(queue_name, :auto_delete => true, :durable => false).message_count.should == 0
41
+ expect(ch.queue(queue_name, auto_delete: true, durable: false).message_count).to eq 0
42
42
 
43
43
  ch.close
44
44
  end
@@ -50,8 +50,8 @@ describe Bunny::Queue, "#subscribe" do
50
50
  delivery_tags = SortedSet.new
51
51
 
52
52
  cch = connection.create_channel
53
- q = cch.queue(queue_name, :auto_delete => true, :durable => false)
54
- q.subscribe(:exclusive => false, :manual_ack => false) do |delivery_info, properties, payload|
53
+ q = cch.queue(queue_name, auto_delete: true, durable: false)
54
+ q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
55
55
  delivery_tags << delivery_info.delivery_tag
56
56
  end
57
57
  sleep 0.5
@@ -59,13 +59,13 @@ describe Bunny::Queue, "#subscribe" do
59
59
  ch = connection.create_channel
60
60
  x = ch.default_exchange
61
61
  100.times do
62
- x.publish("hello", :routing_key => queue_name)
62
+ x.publish("hello", routing_key: queue_name)
63
63
  end
64
64
 
65
65
  sleep 1.0
66
- delivery_tags.should == SortedSet.new(Range.new(1, 100).to_a)
66
+ expect(delivery_tags).to eq SortedSet.new(Range.new(1, 100).to_a)
67
67
 
68
- ch.queue(queue_name, :auto_delete => true, :durable => false).message_count.should == 0
68
+ expect(ch.queue(queue_name, auto_delete: true, durable: false).message_count).to eq 0
69
69
 
70
70
  ch.close
71
71
  end
@@ -79,10 +79,10 @@ describe Bunny::Queue, "#subscribe" do
79
79
  delivery_tags = SortedSet.new
80
80
 
81
81
  cch = connection.create_channel
82
- q = cch.queue(queue_name, :auto_delete => true, :durable => false)
82
+ q = cch.queue(queue_name, auto_delete: true, durable: false)
83
83
 
84
84
  7.times do
85
- q.subscribe(:exclusive => false, :manual_ack => false) do |delivery_info, properties, payload|
85
+ q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
86
86
  delivery_tags << delivery_info.delivery_tag
87
87
  end
88
88
  end
@@ -91,13 +91,13 @@ describe Bunny::Queue, "#subscribe" do
91
91
  ch = connection.create_channel
92
92
  x = ch.default_exchange
93
93
  100.times do
94
- x.publish("hello", :routing_key => queue_name)
94
+ x.publish("hello", routing_key: queue_name)
95
95
  end
96
96
 
97
97
  sleep 1.5
98
- delivery_tags.should == SortedSet.new(Range.new(1, 100).to_a)
98
+ expect(delivery_tags).to eq SortedSet.new(Range.new(1, 100).to_a)
99
99
 
100
- ch.queue(queue_name, :auto_delete => true, :durable => false).message_count.should == 0
100
+ expect(ch.queue(queue_name, auto_delete: true, durable: false).message_count).to eq 0
101
101
 
102
102
  ch.close
103
103
  end
@@ -113,8 +113,8 @@ describe Bunny::Queue, "#subscribe" do
113
113
 
114
114
  t = Thread.new do
115
115
  ch = connection.create_channel
116
- q = ch.queue(queue_name, :auto_delete => true, :durable => false)
117
- q.subscribe(:exclusive => false, :manual_ack => true) do |delivery_info, properties, payload|
116
+ q = ch.queue(queue_name, auto_delete: true, durable: false)
117
+ q.subscribe(exclusive: false, manual_ack: true) do |delivery_info, properties, payload|
118
118
  delivered_keys << delivery_info.routing_key
119
119
  delivered_data << payload
120
120
 
@@ -126,13 +126,13 @@ describe Bunny::Queue, "#subscribe" do
126
126
 
127
127
  ch = connection.create_channel
128
128
  x = ch.default_exchange
129
- x.publish("hello", :routing_key => queue_name)
129
+ x.publish("hello", routing_key: queue_name)
130
130
 
131
131
  sleep 0.7
132
- delivered_keys.should include(queue_name)
133
- delivered_data.should include("hello")
132
+ expect(delivered_keys).to include(queue_name)
133
+ expect(delivered_data).to include("hello")
134
134
 
135
- ch.queue(queue_name, :auto_delete => true, :durable => false).message_count.should == 0
135
+ expect(ch.queue(queue_name, auto_delete: true, durable: false).message_count).to eq 0
136
136
 
137
137
  ch.close
138
138
  end
@@ -147,19 +147,19 @@ describe Bunny::Queue, "#subscribe" do
147
147
  delivered_data = []
148
148
 
149
149
  ch = connection.create_channel
150
- q = ch.queue(queue_name, :auto_delete => true, :durable => false)
150
+ q = ch.queue(queue_name, auto_delete: true, durable: false)
151
151
  x = ch.default_exchange
152
152
  100.times do
153
- x.publish("hello", :routing_key => queue_name)
153
+ x.publish("hello", routing_key: queue_name)
154
154
  end
155
155
 
156
156
  sleep 0.7
157
- q.message_count.should be > 50
157
+ expect(q.message_count).to be > 50
158
158
 
159
159
  t = Thread.new do
160
160
  ch = connection.create_channel
161
- q = ch.queue(queue_name, :auto_delete => true, :durable => false)
162
- q.subscribe(:exclusive => false, :manual_ack => false) do |delivery_info, properties, payload|
161
+ q = ch.queue(queue_name, auto_delete: true, durable: false)
162
+ q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
163
163
  delivered_keys << delivery_info.routing_key
164
164
  delivered_data << payload
165
165
  end
@@ -167,10 +167,10 @@ describe Bunny::Queue, "#subscribe" do
167
167
  t.abort_on_exception = true
168
168
  sleep 0.5
169
169
 
170
- delivered_keys.should include(queue_name)
171
- delivered_data.should include("hello")
170
+ expect(delivered_keys).to include(queue_name)
171
+ expect(delivered_data).to include("hello")
172
172
 
173
- ch.queue(queue_name, :auto_delete => true, :durable => false).message_count.should == 0
173
+ expect(ch.queue(queue_name, auto_delete: true, durable: false).message_count).to eq 0
174
174
 
175
175
  ch.close
176
176
  end
@@ -189,17 +189,17 @@ describe Bunny::Queue, "#subscribe" do
189
189
  ch = connection.create_channel
190
190
  q = ch.queue(queue_name)
191
191
 
192
- c1 = q.subscribe(:exclusive => false, :manual_ack => false, :block => false) do |delivery_info, properties, payload|
192
+ c1 = q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
193
193
  end
194
194
  c1.cancel
195
195
 
196
- c2 = q.subscribe(:exclusive => false, :manual_ack => false, :block => false) do |delivery_info, properties, payload|
196
+ c2 = q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
197
197
  delivered_keys << delivery_info.routing_key
198
198
  delivered_data << payload
199
199
  end
200
200
  c2.cancel
201
201
 
202
- q.subscribe(:exclusive => false, :manual_ack => false, :block => true) do |delivery_info, properties, payload|
202
+ q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
203
203
  delivered_keys << delivery_info.routing_key
204
204
  delivered_data << payload
205
205
  end
@@ -209,13 +209,13 @@ describe Bunny::Queue, "#subscribe" do
209
209
 
210
210
  ch = connection.create_channel
211
211
  x = ch.default_exchange
212
- x.publish("hello", :routing_key => queue_name)
212
+ x.publish("hello", routing_key: queue_name)
213
213
 
214
214
  sleep 0.7
215
- delivered_keys.should include(queue_name)
216
- delivered_data.should include("hello")
215
+ expect(delivered_keys).to include(queue_name)
216
+ expect(delivered_data).to include("hello")
217
217
 
218
- ch.queue(queue_name).message_count.should == 0
218
+ expect(ch.queue(queue_name).message_count).to eq 0
219
219
 
220
220
  ch.queue_delete(queue_name)
221
221
  ch.close
@@ -231,13 +231,13 @@ describe Bunny::Queue, "#subscribe" do
231
231
  caught = nil
232
232
  t = Thread.new do
233
233
  ch = connection.create_channel
234
- q = ch.queue(queue_name, :auto_delete => true, :durable => false)
234
+ q = ch.queue(queue_name, auto_delete: true, durable: false)
235
235
 
236
236
  ch.on_uncaught_exception do |e, consumer|
237
237
  caught = e
238
238
  end
239
239
 
240
- q.subscribe(:exclusive => false, :manual_ack => false) do |delivery_info, properties, payload|
240
+ q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
241
241
  raise RuntimeError.new(queue_name)
242
242
  end
243
243
  end
@@ -246,10 +246,10 @@ describe Bunny::Queue, "#subscribe" do
246
246
 
247
247
  ch = connection.create_channel
248
248
  x = ch.default_exchange
249
- x.publish("hello", :routing_key => queue_name)
249
+ x.publish("hello", routing_key: queue_name)
250
250
  sleep 0.5
251
251
 
252
- caught.message.should == queue_name
252
+ expect(caught.message).to eq queue_name
253
253
 
254
254
  ch.close
255
255
  end
@@ -260,11 +260,14 @@ describe Bunny::Queue, "#subscribe" do
260
260
  let(:queue_name) { "bunny.basic_consume#{rand}" }
261
261
 
262
262
  it "uses exception handler" do
263
+ caughts = []
263
264
  t = Thread.new do
265
+ allow(connection.logger).to receive(:error) { |x| caughts << x }
266
+
264
267
  ch = connection.create_channel
265
- q = ch.queue(queue_name, :auto_delete => true, :durable => false)
268
+ q = ch.queue(queue_name, auto_delete: true, durable: false)
266
269
 
267
- q.subscribe(:exclusive => false, :manual_ack => false) do |delivery_info, properties, payload|
270
+ q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
268
271
  raise RuntimeError.new(queue_name)
269
272
  end
270
273
  end
@@ -273,9 +276,11 @@ describe Bunny::Queue, "#subscribe" do
273
276
 
274
277
  ch = connection.create_channel
275
278
  x = ch.default_exchange
276
- 5.times { x.publish("hello", :routing_key => queue_name) }
279
+ 5.times { x.publish("hello", routing_key: queue_name) }
277
280
  sleep 1.5
278
281
 
282
+ expect(caughts.size).to eq(5)
283
+
279
284
  ch.close
280
285
  end
281
286
  end
@@ -288,8 +293,8 @@ describe Bunny::Queue, "#subscribe" do
288
293
  delivery_tags = SortedSet.new
289
294
 
290
295
  cch = connection.create_channel
291
- q = cch.queue(queue_name, :auto_delete => true, :durable => false)
292
- q.subscribe(:exclusive => false, :manual_ack => false) do |delivery_info, properties, payload|
296
+ q = cch.queue(queue_name, auto_delete: true, durable: false)
297
+ q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
293
298
  delivery_tags << delivery_info.delivery_tag
294
299
  end
295
300
  sleep 0.5
@@ -297,13 +302,13 @@ describe Bunny::Queue, "#subscribe" do
297
302
  ch = connection.create_channel
298
303
  x = ch.default_exchange
299
304
  100.times do
300
- x.publish("hello", :routing_key => queue_name)
305
+ x.publish("hello", routing_key: queue_name)
301
306
  end
302
307
 
303
308
  sleep 1.0
304
- delivery_tags.should == SortedSet.new(Range.new(1, 100).to_a)
309
+ expect(delivery_tags).to eq SortedSet.new(Range.new(1, 100).to_a)
305
310
 
306
- ch.queue(queue_name, :auto_delete => true, :durable => false).message_count.should == 0
311
+ expect(ch.queue(queue_name, auto_delete: true, durable: false).message_count).to eq 0
307
312
 
308
313
  ch.close
309
314
  end
@@ -317,10 +322,10 @@ describe Bunny::Queue, "#subscribe" do
317
322
  delivery_tags = SortedSet.new
318
323
 
319
324
  cch = connection.create_channel
320
- q = cch.queue(queue_name, :auto_delete => true, :durable => false)
325
+ q = cch.queue(queue_name, auto_delete: true, durable: false)
321
326
 
322
327
  7.times do
323
- q.subscribe(:exclusive => false, :manual_ack => false) do |delivery_info, properties, payload|
328
+ q.subscribe(exclusive: false, manual_ack: false) do |delivery_info, properties, payload|
324
329
  delivery_tags << delivery_info.delivery_tag
325
330
  end
326
331
  end
@@ -329,13 +334,13 @@ describe Bunny::Queue, "#subscribe" do
329
334
  ch = connection.create_channel
330
335
  x = ch.default_exchange
331
336
  100.times do
332
- x.publish("hello", :routing_key => queue_name)
337
+ x.publish("hello", routing_key: queue_name)
333
338
  end
334
339
 
335
340
  sleep 1.5
336
- delivery_tags.should == SortedSet.new(Range.new(1, 100).to_a)
341
+ expect(delivery_tags).to eq SortedSet.new(Range.new(1, 100).to_a)
337
342
 
338
- ch.queue(queue_name, :auto_delete => true, :durable => false).message_count.should == 0
343
+ expect(ch.queue(queue_name, auto_delete: true, durable: false).message_count).to eq 0
339
344
 
340
345
  ch.close
341
346
  end
@@ -3,7 +3,7 @@ require "set"
3
3
 
4
4
  describe Bunny::Queue, "#subscribe_with" do
5
5
  let(:connection) do
6
- c = Bunny.new(:user => "bunny_gem", :password => "bunny_password", :vhost => "bunny_testbed")
6
+ c = Bunny.new(username: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed")
7
7
  c.start
8
8
  c
9
9
  end
@@ -32,23 +32,23 @@ describe Bunny::Queue, "#subscribe_with" do
32
32
  it "requeues messages on channel closure" do
33
33
  ch1 = connection.create_channel
34
34
  ch2 = connection.create_channel
35
- q1 = ch1.queue("bunny.tests.consumer_object1", :exclusive => true)
36
- q2 = ch2.queue("bunny.tests.consumer_object1", :exclusive => true)
35
+ q1 = ch1.queue("bunny.tests.consumer_object1", exclusive: true)
36
+ q2 = ch2.queue("bunny.tests.consumer_object1", exclusive: true)
37
37
  ec = ExampleConsumer.new(ch1, q1, "", false)
38
38
  x = ch2.default_exchange
39
39
 
40
40
  t = Thread.new do
41
41
  50.times do
42
- x.publish("hello", :routing_key => q2.name)
42
+ x.publish("hello", routing_key: q2.name)
43
43
  end
44
44
  end
45
45
  t.abort_on_exception = true
46
46
 
47
- q1.subscribe_with(ec, :manual_ack => true)
47
+ q1.subscribe_with(ec, manual_ack: true)
48
48
  sleep 2
49
49
  ch1.close
50
50
 
51
- q2.message_count.should == 50
51
+ expect(q2.message_count).to eq 50
52
52
  end
53
53
  end
54
54
  end