bunny 2.19.0 → 2.20.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 (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
@@ -1,255 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "spec_helper"
3
-
4
- require "socket"
5
-
6
- CERTIFICATE_DIR = ENV.fetch("BUNNY_CERTIFICATE_DIR", "./spec/tls")
7
- puts "Will use certificates from #{CERTIFICATE_DIR}"
8
-
9
- shared_examples_for "successful TLS connection" do
10
- it "succeeds", skip: ENV["CI"] do
11
- expect(subject).to be_tls
12
- ch = subject.create_channel
13
- ch.confirm_select
14
-
15
- q = ch.queue("", exclusive: true)
16
- x = ch.default_exchange
17
-
18
- x.publish("xyzzy", routing_key: q.name).
19
- publish("xyzzy", routing_key: q.name).
20
- publish("xyzzy", routing_key: q.name).
21
- publish("xyzzy", routing_key: q.name)
22
-
23
- x.wait_for_confirms
24
- expect(q.message_count).to eq 4
25
-
26
- i = 0
27
- q.subscribe do |delivery_info, _, payload|
28
- i += 1
29
- end
30
- sleep 1.0
31
- expect(i).to eq 4
32
- expect(q.message_count).to eq 0
33
-
34
- ch.close
35
- end
36
- end
37
-
38
- def local_hostname
39
- ENV.fetch("BUNNY_RABBITMQ_HOSTNAME", "localhost")
40
- end
41
-
42
- context "initialized with tls: true", skip: ENV["CI"] do
43
- let(:subject) do
44
- Bunny.new(
45
- hostname: local_hostname(),
46
- user: "bunny_gem",
47
- password: "bunny_password",
48
- vhost: "bunny_testbed",
49
- tls: true,
50
- verify_peer: verify_peer,
51
- tls_cert: "#{CERTIFICATE_DIR}/client_certificate.pem",
52
- tls_key: "#{CERTIFICATE_DIR}/client_key.pem",
53
- tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"])
54
- end
55
-
56
- context "peer verification is off" do
57
- let(:verify_peer) { false }
58
-
59
- it "uses TLS port" do
60
- expect(subject.port).to eq AMQ::Protocol::TLS_PORT
61
- end
62
-
63
- it "sends the SNI details" do
64
- # https://github.com/ruby-amqp/bunny/issues/440
65
- subject.start
66
- expect(subject.transport.socket.hostname).to_not be_empty
67
- end
68
-
69
- after :each do
70
- subject.close
71
- end
72
- end
73
-
74
- context "peer verification is on" do
75
- let(:verify_peer) { true }
76
-
77
- it "uses TLS port" do
78
- expect(subject.port).to eq AMQ::Protocol::TLS_PORT
79
- end
80
- end
81
- end
82
-
83
- describe "TLS connection to RabbitMQ with client certificates", skip: ENV["CI"] do
84
- let(:subject) do
85
- c = Bunny.new(
86
- hostname: local_hostname(),
87
- username: "bunny_gem",
88
- password: "bunny_password",
89
- vhost: "bunny_testbed",
90
- tls: true,
91
- tls_protocol: :TLSv1_2,
92
- tls_cert: "#{CERTIFICATE_DIR}/client_certificate.pem",
93
- tls_key: "#{CERTIFICATE_DIR}/client_key.pem",
94
- tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
95
- verify_peer: false)
96
- c.start
97
- c
98
- end
99
-
100
- after :each do
101
- subject.close
102
- end
103
-
104
- include_examples "successful TLS connection"
105
- end
106
-
107
-
108
- describe "TLS connection to RabbitMQ without client certificates", skip: ENV["CI"] do
109
- let(:subject) do
110
- c = Bunny.new(
111
- hostname: local_hostname(),
112
- username: "bunny_gem",
113
- password: "bunny_password",
114
- vhost: "bunny_testbed",
115
- tls: true,
116
- tls_protocol: :TLSv1_2,
117
- tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
118
- verify_peer: false)
119
- c.start
120
- c
121
- end
122
-
123
- after :each do
124
- subject.close
125
- end
126
-
127
- include_examples "successful TLS connection"
128
- end
129
-
130
-
131
- describe "TLS connection to RabbitMQ with a connection string", skip: ENV["CI"] do
132
- let(:subject) do
133
- c = Bunny.new("amqps://bunny_gem:bunny_password@#{local_hostname()}/bunny_testbed",
134
- tls_protocol: :TLSv1_2,
135
- tls_cert: "#{CERTIFICATE_DIR}/client_certificate.pem",
136
- tls_key: "#{CERTIFICATE_DIR}/client_key.pem",
137
- tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
138
- verify_peer: false)
139
- c.start
140
- c
141
- end
142
-
143
- after :each do
144
- subject.close
145
- end
146
-
147
- include_examples "successful TLS connection"
148
-
149
- context "when URI contains query parameters" do
150
- subject(:session) do
151
- Bunny.new("amqps://bunny_gem:bunny_password@#{local_hostname()}/bunny_testbed?heartbeat=10&connection_timeout=100&channel_max=1000&verify=false&cacertfile=#{CERTIFICATE_DIR}/ca_certificate.pem&certfile=#{CERTIFICATE_DIR}/client_certificate.pem&keyfile=#{CERTIFICATE_DIR}/client_key.pem")
152
- end
153
-
154
- it "parses extra connection parameters" do
155
- session.start
156
-
157
- expect(session.uses_tls?).to eq(true)
158
- expect(session.transport.verify_peer).to eq(false)
159
- expect(session.transport.tls_ca_certificates).to eq(["#{CERTIFICATE_DIR}/ca_certificate.pem"])
160
- expect(session.transport.tls_certificate_path).to eq("#{CERTIFICATE_DIR}/client_certificate.pem")
161
- expect(session.transport.tls_key_path).to eq("#{CERTIFICATE_DIR}/client_key.pem")
162
- end
163
- end
164
- end
165
-
166
-
167
- describe "TLS connection to RabbitMQ with a connection string and w/o client certificate and key", skip: ENV["CI"] do
168
- let(:subject) do
169
- c = Bunny.new("amqps://bunny_gem:bunny_password@#{local_hostname()}/bunny_testbed",
170
- tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
171
- tls_protocol: :TLSv1_2,
172
- verify_peer: verify_peer)
173
- c.start
174
- c
175
- end
176
-
177
- after :each do
178
- subject.close
179
- end
180
-
181
- context "peer verification is off" do
182
- let(:verify_peer) { false }
183
-
184
- include_examples "successful TLS connection"
185
-
186
- it "sends the SNI details" do
187
- # https://github.com/ruby-amqp/bunny/issues/440
188
- expect(subject.transport.socket.hostname).to_not be_empty
189
- end
190
- end
191
-
192
- context "peer verification is on" do
193
- let(:verify_peer) { true }
194
-
195
- include_examples "successful TLS connection"
196
-
197
- it "sends the SNI details" do
198
- # https://github.com/ruby-amqp/bunny/issues/440
199
- expect(subject.transport.socket.hostname).to_not be_empty
200
- end
201
- end
202
- end
203
-
204
- describe "TLS connection to RabbitMQ w/o client certificate", skip: ENV["CI"] do
205
- let(:subject) do
206
- c = Bunny.new("amqps://bunny_gem:bunny_password@#{local_hostname()}/bunny_testbed",
207
- tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
208
- tls_protocol: :TLSv1_2,
209
- verify_peer: false,
210
- tls_silence_warnings: should_silence_warnings)
211
- c.start
212
- c
213
- end
214
-
215
- after :each do
216
- subject.close
217
- end
218
-
219
- context "TLS-related warnings are enabled" do
220
- let(:should_silence_warnings) { false }
221
-
222
- include_examples "successful TLS connection"
223
- end
224
-
225
- context "TLS-related warnings are silenced" do
226
- let(:should_silence_warnings) { true }
227
-
228
- include_examples "successful TLS connection"
229
- end
230
- end
231
-
232
-
233
- describe "TLS connection to RabbitMQ with client certificates provided inline", skip: ENV["CI"] do
234
- let(:subject) do
235
- c = Bunny.new(
236
- hostname: local_hostname(),
237
- username: "bunny_gem",
238
- password: "bunny_password",
239
- vhost: "bunny_testbed",
240
- tls: true,
241
- tls_cert: File.read("#{CERTIFICATE_DIR}/client_certificate.pem"),
242
- tls_key: File.read("#{CERTIFICATE_DIR}/client_key.pem"),
243
- tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
244
- tls_protocol: :TLSv1_2,
245
- verify_peer: false)
246
- c.start
247
- c
248
- end
249
-
250
- after :each do
251
- subject.close
252
- end
253
-
254
- include_examples "successful TLS connection"
255
- end
@@ -1,76 +0,0 @@
1
- require "spec_helper"
2
- require_relative "../../toxiproxy_helper"
3
-
4
- if ::Toxiproxy.running?
5
- describe Bunny::Channel, "#basic_publish" do
6
- include RabbitMQ::Toxiproxy
7
-
8
- after :each do
9
- @connection.close if @connection.open?
10
- end
11
-
12
- context "when the the connection detects missed heartbeats with automatic recovery" do
13
- before(:each) do
14
- setup_toxiproxy
15
- @connection = Bunny.new(user: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed",
16
- host: "localhost:11111", heartbeat_timeout: 1, automatically_recover: true)
17
- @connection.start
18
- end
19
-
20
- let(:queue_name) { "bunny.basic.publish.queue#{rand}" }
21
-
22
- it "raises a ConnectionClosedError" do
23
- ch = @connection.create_channel
24
- begin
25
- rabbitmq_toxiproxy.down do
26
- sleep 2
27
- expect { ch.default_exchange.publish("", :routing_key => queue_name) }.to raise_error(Bunny::ConnectionClosedError)
28
- end
29
- ensure
30
- cleanup_toxiproxy
31
- end
32
- end
33
- end
34
-
35
- context "when the the connection detects missed heartbeats without automatic recovery" do
36
- before(:each) do
37
- setup_toxiproxy
38
- @connection = Bunny.new(user: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed",
39
- host: "localhost:11111", heartbeat_timeout: 1, automatically_recover: false, threaded: false)
40
- @connection.start
41
- end
42
-
43
- it "does not raise an exception on session thread" do
44
- rabbitmq_toxiproxy.down do
45
- sleep 5
46
- end
47
- end
48
- end
49
-
50
- context "recovery attempt limit that's exceeded" do
51
- before(:each) do
52
- setup_toxiproxy
53
- @connection = Bunny.new(user: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed",
54
- host: "localhost:11111", heartbeat_timeout: 1, automatically_recover: true, network_recovery_interval: 1,
55
- recovery_attempts: 2, reset_recovery_attempts_after_reconnection: true,
56
- disconnect_timeout: 1)
57
- @connection.start
58
- end
59
-
60
- it "permanently closes connection" do
61
- expect(@connection.open?).to be(true)
62
-
63
- rabbitmq_toxiproxy.down do
64
- sleep 5
65
- end
66
- # give the connection one last chance to recover
67
- sleep 3
68
-
69
- expect(@connection.open?).to be(false)
70
- expect(@connection.closed?).to be(true)
71
- end
72
- end # context
73
- end # describe
74
- else
75
- puts "Toxiproxy isn't running, some examples will be skipped"
76
- end
@@ -1,21 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Bunny::Channel, "#tx_commit" 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
- it "is supported" do
15
- ch = connection.create_channel
16
- ch.tx_select
17
- ch.tx_commit
18
-
19
- ch.close
20
- end
21
- end
@@ -1,21 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Bunny::Channel, "#tx_rollback" 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
- it "is supported" do
15
- ch = connection.create_channel
16
- ch.tx_select
17
- ch.tx_rollback
18
-
19
- ch.close
20
- end
21
- end
@@ -1,25 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Bunny::Channel, "#with_channel" 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
- it "closes if the block throws an exception" do
15
- ch = nil
16
- begin
17
- connection.with_channel do |wch|
18
- ch = wch
19
- raise Exception.new
20
- end
21
- rescue Exception
22
- end
23
- expect(ch).to be_closed
24
- end
25
- end
@@ -1,42 +0,0 @@
1
- require "spec_helper"
2
-
3
- unless ENV["CI"]
4
- describe Bunny::Channel, "#basic_publish" do
5
- before :all do
6
- @connection = Bunny.new(username: "bunny_gem",
7
- password: "bunny_password",
8
- vhost: "bunny_testbed",
9
- write_timeout: 0,
10
- read_timeout: 0)
11
- @connection.start
12
- end
13
-
14
- after :all do
15
- @connection.close if @connection.open?
16
- end
17
-
18
-
19
- context "when publishing thousands of messages" do
20
- let(:n) { 2_000 }
21
- let(:m) { 10 }
22
-
23
- it "successfully publishers them all" do
24
- ch = @connection.create_channel
25
-
26
- q = ch.queue("", exclusive: true)
27
- x = ch.default_exchange
28
-
29
- body = "x" * 1024
30
- m.times do |i|
31
- n.times do
32
- x.publish(body, routing_key: q.name)
33
- end
34
- puts "Published #{i * n} 1K messages..."
35
- end
36
-
37
- q.purge
38
- ch.close
39
- end
40
- end
41
- end
42
- end
@@ -1,43 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "Registering 2nd exclusive consumer on queue" do
4
- before :all do
5
- @connection = Bunny.new(:user => "bunny_gem", password: "bunny_password", :vhost => "bunny_testbed")
6
- @connection.start
7
- end
8
-
9
- after :each do
10
- @connection.close if @connection.open?
11
- end
12
-
13
-
14
- it "raises a meaningful exception" do
15
- xs = []
16
-
17
- ch1 = @connection.create_channel
18
- ch2 = @connection.create_channel
19
- q1 = ch1.queue("", :auto_delete => true)
20
- q2 = ch2.queue(q1.name, :auto_delete => true, :passive => true)
21
-
22
- c1 = q1.subscribe(exclusive: true) do |_, _, payload|
23
- xs << payload
24
- end
25
- sleep 0.1
26
-
27
- expect do
28
- q2.subscribe(exclusive: true) do |_, _, _|
29
- end
30
- end.to raise_error(Bunny::AccessRefused)
31
-
32
- expect(ch1).to be_open
33
- expect(ch2).to be_closed
34
-
35
- q1.publish("abc")
36
- sleep 0.1
37
-
38
- # verify that the first consumer is fine
39
- expect(xs).to eq ["abc"]
40
-
41
- q1.delete
42
- end
43
- end
@@ -1,15 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Bunny::Session do
4
- context "with unreachable host" do
5
- it "raises Bunny::TCPConnectionFailed" do
6
- begin
7
- conn = Bunny.new(:hostname => "127.0.0.254", :port => 1433)
8
- conn.start
9
-
10
- fail "expected 192.192.192.192 to be unreachable"
11
- rescue Bunny::TCPConnectionFailed => e
12
- end
13
- end
14
- end
15
- end
@@ -1,40 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require "spec_helper"
3
-
4
- unless ENV["CI"]
5
- describe "Message framing implementation" do
6
- let(:connection) do
7
- c = Bunny.new(:user => "bunny_gem",
8
- password: "bunny_password",
9
- :vhost => "bunny_testbed",
10
- :port => ENV.fetch("RABBITMQ_PORT", 5672))
11
- c.start
12
- c
13
- end
14
-
15
- after :each do
16
- connection.close if connection.open?
17
- end
18
-
19
-
20
- context "with payload 272179 bytes in size" do
21
- it "successfully frames the message" do
22
- ch = connection.create_channel
23
-
24
- q = ch.queue("", exclusive: true)
25
- x = ch.default_exchange
26
-
27
- as = ("a" * 272179)
28
- x.publish(as, routing_key: q.name, persistent: true)
29
-
30
- sleep(1)
31
- expect(q.message_count).to eq 1
32
-
33
- _, _, payload = q.pop
34
- expect(payload.bytesize).to eq as.bytesize
35
-
36
- ch.close
37
- end
38
- end
39
- end
40
- end
@@ -1,32 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require 'spec_helper'
3
-
4
- describe Bunny::Session do
5
- let(:connection) do
6
- c = Bunny.new(
7
- user: 'bunny_gem', password: 'bunny_password',
8
- vhost: 'bunny_testbed',
9
- port: ENV.fetch('RABBITMQ_PORT', 5672)
10
- )
11
- c.start
12
- c
13
- end
14
-
15
- context 'after the connection has been manually closed' do
16
- before :each do
17
- connection.close
18
- end
19
-
20
- after :each do
21
- connection.close if connection.open?
22
- end
23
-
24
- describe '#create_channel' do
25
- it 'should raise an exception' do
26
- expect {
27
- connection.create_channel
28
- }.to raise_error(Bunny::ConnectionAlreadyClosed)
29
- end
30
- end
31
- end
32
- end
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Bunny::Session do
4
- context 'when retry attempts have been exhausted' do
5
- let(:io) { StringIO.new } # keep test output clear
6
-
7
- def create_session
8
- described_class.new(
9
- host: 'fake.host',
10
- recovery_attempts: 0,
11
- connection_timeout: 0,
12
- network_recovery_interval: 0,
13
- logfile: io,
14
- )
15
- end
16
-
17
- it 'closes the session' do
18
- session = create_session
19
- session.handle_network_failure(StandardError.new)
20
- expect(session.closed?).to be true
21
- end
22
-
23
- it 'stops the reader loop' do
24
- session = create_session
25
- reader_loop = session.reader_loop
26
- session.handle_network_failure(StandardError.new)
27
- expect(reader_loop.stopping?).to be true
28
- end
29
- end
30
- end
@@ -1,84 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Bunny::Session, 'TLS certificate store' do
6
- subject { described_class.new tls: true, tls_ca_certificates: [certificate], logger: logger }
7
-
8
- let(:logger) { Logger.new(io).tap { |l| l.level = :debug } }
9
- let(:io) { StringIO.new }
10
-
11
- context 'when a Windows path given' do
12
- let(:certificate) { 'C:/some/path/cacert.pem' }
13
-
14
- # skipping actual work with file by Windows path as this spec runs in Linux
15
- before do
16
- allow(File).to receive(:readable?).with(certificate).and_return(true)
17
- allow_any_instance_of(OpenSSL::X509::Store).to receive(:add_file)
18
- end
19
-
20
- it 'uses the certificate by path' do
21
- subject
22
-
23
- expect(log_content).to include('Using CA certificates at C:/some/path/cacert.pem')
24
- end
25
- end
26
-
27
- context 'when a POSIX path given' do
28
- let(:certificate) { './spec/tls/ca_certificate.pem' }
29
-
30
- it 'uses the certificate by path' do
31
- subject
32
-
33
- expect(log_content).to include('Using CA certificates at ./spec/tls/ca_certificate.pem')
34
- end
35
- end
36
-
37
- context 'when an inline certificate given' do
38
- let(:certificate) do
39
- <<~CERT
40
- -----BEGIN CERTIFICATE-----
41
- MIIFUDCCAzigAwIBAgIUSnyXq9nGYlkEvmGK0D/vfDW+B0QwDQYJKoZIhvcNAQEL
42
- BQAwMTEgMB4GA1UEAwwXVExTR2VuU2VsZlNpZ25lZHRSb290Q0ExDTALBgNVBAcM
43
- BCQkJCQwHhcNMjEwNDEyMTcwNzIxWhcNMzEwNDEwMTcwNzIxWjAxMSAwHgYDVQQD
44
- DBdUTFNHZW5TZWxmU2lnbmVkdFJvb3RDQTENMAsGA1UEBwwEJCQkJDCCAiIwDQYJ
45
- KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKgPkKUIOi3RJZn0j/TkknErop/N1ylp
46
- qb4A6O9yMjRt7gSui+mouEe6SqcQubhm6n3cQzr0LxmtPO96ShHDUh8SJwzN419Q
47
- HS4x5IyCm4GMWvj4XPWb0LDVPdgbF9JdDSsv+zJPJ5oCh3wxbGrbzWIdClHE3ERm
48
- Fx59P4hgT5aa21LuB/Is/U5ybkUdrmYLP6ZiwYhH6A2mdL8VdqI53/tChrimNDcH
49
- I7dy9gqU75uDVF5DkchELFLPBTOYHS7OPS7sWHw4prQ6X+fZ/YG8Sql0+FAPf3Ro
50
- h2RSIiaGCLiuKpBjF3zK20ZvV+m6p+sYX3YyY3R9PDTctHYl6IW0iXpXjbStY//+
51
- bBK56B74+OgRlWRqQDs/xfTDzm3GXRy6N/Z19ghoQYFST1FrHH04lBhoknNiSmRC
52
- Qf0AuwllLs9p1BLk/yEyoeAjMLA9ZDw0UjAvEaRgIwCFUJ3n2NZ/q+d2bTA00W4z
53
- 2pw6Hju//kkwWKBpAQBnPWRUhi4R3XDHKTa4lwkTjRzwfiyOM7y0JiPTj96WCKDo
54
- xIGEXbWwqZi/z7JTsXaxwxTnwC3ySStSz8SwgE4VjyK9DWeuT/4B6RWy+1sPLhOx
55
- ZXrCdUAd43ZGZp2SOZQrjPG89G3eUtfWQh2gigOabxEJoJmSDQW7LPXDQ64wElE5
56
- I5vR6XcclCM7AgMBAAGjYDBeMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUUdmmGXiv
57
- pidfAl85xXxPAFTDnUowHwYDVR0jBBgwFoAUUdmmGXivpidfAl85xXxPAFTDnUow
58
- DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAobJS8Ej4ZUpqtjWs
59
- OVWGNXja0HdwuKP/IHmBWkcwrjJmMk5R8kGd+REIvCPz4ngofGMgYXLtj1omNkfh
60
- FDmUQWP0GRWZFgKCp5kNX+uaQk/KULEYc5W/+vYrpFPwOQi1uruRSyRKMddw3BJa
61
- I799hskkD8UFEfgHaAhdr9aZikYjCUYX0MIYHWef4e/H/ty/DYnKoGmUmVJEp45g
62
- JLXOUAQCD1EeZhUqkZddVckCR5oZQIfaJZbXRNKhQKcg9yllvDT2xY9tAty8D+v4
63
- U/uoVcCbsXvE8BpEUYHuDYvLGutPYPLqTSGVxxTa4P/x/gEd1XlCtEoHThrv2YpF
64
- O5gME43xtBbwsEvBKWEaGl4hNLjlsTelM7uZsea58aIbs2nhUJQwcBUcugMa/Bxe
65
- KNgCiJ8M6ESa4FDV75Oe1LFZcC92Ie8zq5JTfvJJdEDqYdgAe05CH53USdRYKFRI
66
- QejzCS50kRx/wZgrokAXSSyuhXcEDoHqJ46Ufp5hnEVZCytCLRC58adPeBpcrLkN
67
- b4ZRbtyrZHDFkU/M49OxXUYBVaXztzK/EfkSXP4WHVNLlcb6U/fmlssfTaXu6ovg
68
- IOKPOq09C3id77JsXRwEb7hkkXpTp5i63bmVvCKRDKtHMUfxfnRiZkuu79fB4y8v
69
- eYEXqywYlmGZite4N3qb3qQnyGw=
70
- -----END CERTIFICATE-----
71
- CERT
72
- end
73
-
74
- it 'uses the inline certificate' do
75
- subject
76
-
77
- expect(log_content).to include('Using 1 inline CA certificates')
78
- end
79
- end
80
-
81
- def log_content
82
- io.tap(&:rewind).read
83
- end
84
- end