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
@@ -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