bunny 2.14.4 → 2.15.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.
- checksums.yaml +4 -4
- data/.travis.yml +6 -5
- data/ChangeLog.md +7 -26
- data/Gemfile +2 -2
- data/README.md +2 -2
- data/bunny.gemspec +4 -4
- data/lib/bunny/queue.rb +0 -3
- data/lib/bunny/session.rb +10 -0
- data/lib/bunny/version.rb +1 -1
- data/repl +1 -1
- data/spec/higher_level_api/integration/basic_cancel_spec.rb +4 -4
- data/spec/higher_level_api/integration/basic_consume_spec.rb +3 -3
- data/spec/higher_level_api/integration/tls_connection_spec.rb +201 -189
- data/spec/issues/issue202_spec.rb +1 -1
- data/spec/issues/issue78_spec.rb +2 -2
- data/spec/unit/exchange_recovery_spec.rb +2 -2
- metadata +13 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6abcaa979facd973a801a4433d3a6985e15e89aa84cc0078cc464af3be6c4542
|
4
|
+
data.tar.gz: d8bc430b598d1a267fe075028e9536efeeb008c72d9387daaaa30c79391d54d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 384472c28da9fabdf01a9e1c403c9009bf000cd8a3256cbffab531f7e5582425d15320255a966b89c5075f1fb1bc029deef21e1d5fd776de2d4f9714e8f1553f
|
7
|
+
data.tar.gz: 2ccbfbde0c9f0a2ff0202cb1160d569cbbdc94095e79d021d59a9e7949fd1579189fddcb61849125d4cfefce7ad0a733943f7d3a54097e7fb2ed83117f15ec1f
|
data/.travis.yml
CHANGED
@@ -11,9 +11,10 @@ before_script:
|
|
11
11
|
script: "bundle exec rake integration_without_recovery"
|
12
12
|
rvm:
|
13
13
|
- ruby-head
|
14
|
-
- "2.
|
15
|
-
- "2.
|
16
|
-
- "2.
|
14
|
+
- "2.7.1"
|
15
|
+
- "2.6.6"
|
16
|
+
- "2.5.8"
|
17
|
+
- "2.4.10"
|
17
18
|
- "2.3.8"
|
18
19
|
notifications:
|
19
20
|
email: michael@rabbitmq.com
|
@@ -22,8 +23,8 @@ services:
|
|
22
23
|
branches:
|
23
24
|
only:
|
24
25
|
- master
|
25
|
-
- 2.
|
26
|
-
- 2.
|
26
|
+
- 2.14.x-stable
|
27
|
+
- 2.13.x-stable
|
27
28
|
env:
|
28
29
|
- CI=true
|
29
30
|
matrix:
|
data/ChangeLog.md
CHANGED
@@ -1,9 +1,4 @@
|
|
1
|
-
## Changes between Bunny 2.14.
|
2
|
-
|
3
|
-
No changes.
|
4
|
-
|
5
|
-
|
6
|
-
## Changes between Bunny 2.14.3 and 2.14.4 (Feb 11th, 2020)
|
1
|
+
## Changes between Bunny 2.14.0 and 2.15.0 (Apr 8th, 2020)
|
7
2
|
|
8
3
|
### More Defensive Thread Join Operations
|
9
4
|
|
@@ -21,20 +16,16 @@ GitHub issue: [#589](https://github.com/ruby-amqp/bunny/issues/589)
|
|
21
16
|
|
22
17
|
Contributed by @fuegas.
|
23
18
|
|
19
|
+
### Dependency Updates
|
24
20
|
|
25
|
-
|
26
|
-
|
27
|
-
### OpenSSL Exceptions Trigger Recovery
|
28
|
-
|
29
|
-
OpenSSL exceptions on a fully established connection will now kick off
|
30
|
-
connection recovery.
|
31
|
-
|
32
|
-
GitHub issue: [#583](https://github.com/ruby-amqp/bunny/issues/583)
|
21
|
+
`amq-protocol` dependency has been bumped to `2.3.1` to support `connection.update-secret`
|
22
|
+
protocol extension.
|
33
23
|
|
34
|
-
|
24
|
+
### Gem Installation Fixed on Windows
|
35
25
|
|
26
|
+
`bin/ci`, a directory with symlinks, is no longer included into the gem.
|
36
27
|
|
37
|
-
|
28
|
+
Contributed by Jack Xiaosong Xu.
|
38
29
|
|
39
30
|
### Lazy Peer Certificate Chain Information Logging
|
40
31
|
|
@@ -47,16 +38,6 @@ GitHub issue: [#578](https://github.com/ruby-amqp/bunny/pull/578)
|
|
47
38
|
Contributed by Garrett Thornburg.
|
48
39
|
|
49
40
|
|
50
|
-
## Changes between Bunny 2.14.0 and 2.14.1 (Feb 26th, 2019)
|
51
|
-
|
52
|
-
### Gem Installation Fixed on Windows
|
53
|
-
|
54
|
-
`bin/ci`, a directory with symlinks, is no longer included into the gem.
|
55
|
-
|
56
|
-
Contributed by Jack Xiaosong Xu.
|
57
|
-
|
58
|
-
GitHub issue: [#573](https://github.com/ruby-amqp/bunny/pull/574)
|
59
|
-
|
60
41
|
## Changes between Bunny 2.13.0 and 2.14.0 (Feb 20th, 2019)
|
61
42
|
|
62
43
|
### Improved Peer Verification Failure Logging
|
data/Gemfile
CHANGED
@@ -33,8 +33,8 @@ group :development do
|
|
33
33
|
end
|
34
34
|
|
35
35
|
group :test do
|
36
|
-
gem "rspec", "~> 3.
|
37
|
-
gem "rabbitmq_http_api_client", "~> 1.
|
36
|
+
gem "rspec", "~> 3.9.0"
|
37
|
+
gem "rabbitmq_http_api_client", "~> 1.13.0", require: "rabbitmq/http/client"
|
38
38
|
gem "toxiproxy", "~> 1.0.3"
|
39
39
|
end
|
40
40
|
|
data/README.md
CHANGED
@@ -71,10 +71,10 @@ a stable public API.
|
|
71
71
|
Change logs per release series:
|
72
72
|
|
73
73
|
* [master](https://github.com/ruby-amqp/bunny/blob/master/ChangeLog.md)
|
74
|
+
* [2.14.x](https://github.com/ruby-amqp/bunny/blob/2.13.x-stable/ChangeLog.md)
|
74
75
|
* [2.13.x](https://github.com/ruby-amqp/bunny/blob/2.13.x-stable/ChangeLog.md)
|
75
76
|
* [2.12.x](https://github.com/ruby-amqp/bunny/blob/2.12.x-stable/ChangeLog.md)
|
76
77
|
* [2.11.x](https://github.com/ruby-amqp/bunny/blob/2.11.x-stable/ChangeLog.md)
|
77
|
-
* [2.10.x](https://github.com/ruby-amqp/bunny/blob/2.10.x-stable/ChangeLog.md)
|
78
78
|
|
79
79
|
|
80
80
|
|
@@ -97,7 +97,7 @@ gem install bunny
|
|
97
97
|
To use Bunny in a project managed with Bundler:
|
98
98
|
|
99
99
|
``` ruby
|
100
|
-
gem "bunny", ">= 2.
|
100
|
+
gem "bunny", ">= 2.14.1"
|
101
101
|
```
|
102
102
|
|
103
103
|
|
data/bunny.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.name = "bunny"
|
9
9
|
s.version = Bunny::VERSION.dup
|
10
10
|
s.homepage = "http://rubybunny.info"
|
11
|
-
s.summary = "
|
12
|
-
s.description = "Easy to use, feature complete Ruby client for RabbitMQ"
|
11
|
+
s.summary = "Popular easy to use Ruby client for RabbitMQ"
|
12
|
+
s.description = "Easy to use, feature complete Ruby client for RabbitMQ 3.3 and later versions."
|
13
13
|
s.license = "MIT"
|
14
14
|
s.required_ruby_version = Gem::Requirement.new(">= 2.2")
|
15
15
|
|
@@ -21,10 +21,10 @@ Gem::Specification.new do |s|
|
|
21
21
|
"Michael S. Klishin",
|
22
22
|
"Stefan Kaes"]
|
23
23
|
|
24
|
-
s.email = ["
|
24
|
+
s.email = ["michael.s.klishin@gmail.com"]
|
25
25
|
|
26
26
|
# Dependencies
|
27
|
-
s.add_runtime_dependency 'amq-protocol', '~> 2.3', '>= 2.3.
|
27
|
+
s.add_runtime_dependency 'amq-protocol', '~> 2.3', '>= 2.3.1'
|
28
28
|
|
29
29
|
# Files.
|
30
30
|
s.extra_rdoc_files = ["README.md"]
|
data/lib/bunny/queue.rb
CHANGED
@@ -158,9 +158,6 @@ module Bunny
|
|
158
158
|
# @option opts [Boolean] :ack (false) [DEPRECATED] Use :manual_ack instead
|
159
159
|
# @option opts [Boolean] :manual_ack (false) Will this consumer use manual acknowledgements?
|
160
160
|
# @option opts [Boolean] :exclusive (false) Should this consumer be exclusive for this queue?
|
161
|
-
# @option opts [Boolean] :block (false) Should the call block the calling thread? This option can be useful for keeping the main thread of
|
162
|
-
# a script alive. It is incompatible with automatic connection recovery
|
163
|
-
# and is not generally recommended.
|
164
161
|
# @option opts [#call] :on_cancellation Block to execute when this consumer is cancelled remotely (e.g. via the RabbitMQ Management plugin)
|
165
162
|
# @option opts [String] :consumer_tag Unique consumer identifier. It is usually recommended to let Bunny generate it for you.
|
166
163
|
# @option opts [Hash] :arguments ({}) Additional (optional) arguments, typically used by RabbitMQ extensions
|
data/lib/bunny/session.rb
CHANGED
@@ -342,6 +342,14 @@ module Bunny
|
|
342
342
|
self
|
343
343
|
end
|
344
344
|
|
345
|
+
def update_secret(value, reason)
|
346
|
+
@transport.send_frame(AMQ::Protocol::Connection::UpdateSecret.encode(value, reason))
|
347
|
+
@last_update_secret_ok = wait_on_continuations
|
348
|
+
raise_if_continuation_resulted_in_a_connection_error!
|
349
|
+
|
350
|
+
@last_update_secret_ok
|
351
|
+
end
|
352
|
+
|
345
353
|
# Socket operation write timeout used by this connection
|
346
354
|
# @return [Integer]
|
347
355
|
# @private
|
@@ -632,6 +640,8 @@ module Bunny
|
|
632
640
|
when AMQ::Protocol::Connection::Unblocked then
|
633
641
|
@blocked = false
|
634
642
|
@unblock_callback.call(method) if @unblock_callback
|
643
|
+
when AMQ::Protocol::Connection::UpdateSecretOk then
|
644
|
+
@continuations.push(method)
|
635
645
|
when AMQ::Protocol::Channel::Close then
|
636
646
|
begin
|
637
647
|
ch = synchronised_find_channel(ch_number)
|
data/lib/bunny/version.rb
CHANGED
data/repl
CHANGED
@@ -20,7 +20,7 @@ describe Bunny::Consumer, "#cancel" do
|
|
20
20
|
t = Thread.new do
|
21
21
|
ch = connection.create_channel
|
22
22
|
q = ch.queue(queue_name, auto_delete: true, durable: false)
|
23
|
-
consumer = q.subscribe
|
23
|
+
consumer = q.subscribe do |_, _, payload|
|
24
24
|
delivered_data << payload
|
25
25
|
end
|
26
26
|
|
@@ -58,7 +58,7 @@ describe Bunny::Consumer, "#cancel" do
|
|
58
58
|
delivered_data << payload
|
59
59
|
end
|
60
60
|
|
61
|
-
q.subscribe_with(consumer
|
61
|
+
q.subscribe_with(consumer)
|
62
62
|
end
|
63
63
|
t.abort_on_exception = true
|
64
64
|
sleep 1.0
|
@@ -91,7 +91,7 @@ describe Bunny::Consumer, "#cancel" do
|
|
91
91
|
delivered_data << payload
|
92
92
|
end
|
93
93
|
|
94
|
-
q.subscribe_with(consumer
|
94
|
+
q.subscribe_with(consumer)
|
95
95
|
end
|
96
96
|
t.abort_on_exception = true
|
97
97
|
sleep 1.0
|
@@ -122,7 +122,7 @@ describe Bunny::Consumer, "#cancel" do
|
|
122
122
|
delivered_data << payload
|
123
123
|
end
|
124
124
|
|
125
|
-
q.subscribe_with(consumer
|
125
|
+
q.subscribe_with(consumer)
|
126
126
|
end
|
127
127
|
t.abort_on_exception = true
|
128
128
|
sleep 1.0
|
@@ -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
|
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
|
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
|
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
|
@@ -3,248 +3,260 @@ require "spec_helper"
|
|
3
3
|
|
4
4
|
require "socket"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
puts "Will use certificates from #{CERTIFICATE_DIR}"
|
9
|
-
|
10
|
-
shared_examples_for "successful TLS connection" do
|
11
|
-
it "succeeds" do
|
12
|
-
expect(subject).to be_tls
|
13
|
-
ch = subject.create_channel
|
14
|
-
ch.confirm_select
|
15
|
-
|
16
|
-
q = ch.queue("", exclusive: true)
|
17
|
-
x = ch.default_exchange
|
18
|
-
|
19
|
-
x.publish("xyzzy", routing_key: q.name).
|
20
|
-
publish("xyzzy", routing_key: q.name).
|
21
|
-
publish("xyzzy", routing_key: q.name).
|
22
|
-
publish("xyzzy", routing_key: q.name)
|
23
|
-
|
24
|
-
x.wait_for_confirms
|
25
|
-
expect(q.message_count).to eq 4
|
26
|
-
|
27
|
-
i = 0
|
28
|
-
q.subscribe do |delivery_info, _, payload|
|
29
|
-
i += 1
|
30
|
-
end
|
31
|
-
sleep 1.0
|
32
|
-
expect(i).to eq 4
|
33
|
-
expect(q.message_count).to eq 0
|
34
|
-
|
35
|
-
ch.close
|
36
|
-
end
|
37
|
-
end
|
6
|
+
CERTIFICATE_DIR = ENV.fetch("BUNNY_CERTIFICATE_DIR", "./spec/tls")
|
7
|
+
puts "Will use certificates from #{CERTIFICATE_DIR}"
|
38
8
|
|
39
|
-
|
40
|
-
|
41
|
-
|
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)
|
42
22
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
vhost: "bunny_testbed",
|
50
|
-
tls: true,
|
51
|
-
verify_peer: verify_peer,
|
52
|
-
tls_cert: "#{CERTIFICATE_DIR}/client_certificate.pem",
|
53
|
-
tls_key: "#{CERTIFICATE_DIR}/client_key.pem",
|
54
|
-
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"])
|
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
|
55
29
|
end
|
30
|
+
sleep 1.0
|
31
|
+
expect(i).to eq 4
|
32
|
+
expect(q.message_count).to eq 0
|
56
33
|
|
57
|
-
|
58
|
-
|
34
|
+
ch.close
|
35
|
+
end
|
36
|
+
end
|
59
37
|
|
60
|
-
|
61
|
-
|
62
|
-
|
38
|
+
def local_hostname
|
39
|
+
ENV.fetch("BUNNY_RABBITMQ_HOSTNAME", "localhost")
|
40
|
+
end
|
63
41
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
expect(subject.transport.socket.hostname).to_not be_empty
|
68
|
-
end
|
42
|
+
def no_tls12_supported?
|
43
|
+
not tls12_supported?
|
44
|
+
end
|
69
45
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
46
|
+
def tls12_supported?
|
47
|
+
begin
|
48
|
+
ctx = OpenSSL::SSL::SSLContext.new
|
49
|
+
ctx.min_version = ctx.max_version = OpenSSL::SSL::TLS1_2_VERSION
|
50
|
+
true
|
51
|
+
rescue
|
52
|
+
false
|
53
|
+
end
|
54
|
+
end
|
74
55
|
|
75
|
-
|
76
|
-
|
56
|
+
context "initialized with tls: true", skip: ENV["CI"] do
|
57
|
+
let(:subject) do
|
58
|
+
Bunny.new(
|
59
|
+
hostname: local_hostname(),
|
60
|
+
user: "bunny_gem",
|
61
|
+
password: "bunny_password",
|
62
|
+
vhost: "bunny_testbed",
|
63
|
+
tls: true,
|
64
|
+
verify_peer: verify_peer,
|
65
|
+
tls_cert: "#{CERTIFICATE_DIR}/client_certificate.pem",
|
66
|
+
tls_key: "#{CERTIFICATE_DIR}/client_key.pem",
|
67
|
+
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"])
|
68
|
+
end
|
69
|
+
|
70
|
+
context "peer verification is off" do
|
71
|
+
let(:verify_peer) { false }
|
77
72
|
|
78
|
-
|
79
|
-
|
80
|
-
end
|
73
|
+
it "uses TLS port" do
|
74
|
+
expect(subject.port).to eq AMQ::Protocol::TLS_PORT
|
81
75
|
end
|
82
|
-
end
|
83
76
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
username: "bunny_gem",
|
89
|
-
password: "bunny_password",
|
90
|
-
vhost: "bunny_testbed",
|
91
|
-
tls: true,
|
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
|
77
|
+
it "sends the SNI details" do
|
78
|
+
# https://github.com/ruby-amqp/bunny/issues/440
|
79
|
+
subject.start
|
80
|
+
expect(subject.transport.socket.hostname).to_not be_empty
|
98
81
|
end
|
99
82
|
|
100
83
|
after :each do
|
101
84
|
subject.close
|
102
85
|
end
|
103
|
-
|
104
|
-
include_examples "successful TLS connection"
|
105
86
|
end
|
106
87
|
|
88
|
+
context "peer verification is on" do
|
89
|
+
let(:verify_peer) { true }
|
107
90
|
|
108
|
-
|
109
|
-
|
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_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
|
117
|
-
verify_peer: false)
|
118
|
-
c.start
|
119
|
-
c
|
91
|
+
it "uses TLS port" do
|
92
|
+
expect(subject.port).to eq AMQ::Protocol::TLS_PORT
|
120
93
|
end
|
94
|
+
end
|
95
|
+
end
|
121
96
|
|
122
|
-
|
123
|
-
|
124
|
-
|
97
|
+
describe "TLS connection to RabbitMQ with client certificates", skip: ENV["CI"] do
|
98
|
+
let(:subject) do
|
99
|
+
c = Bunny.new(
|
100
|
+
hostname: local_hostname(),
|
101
|
+
username: "bunny_gem",
|
102
|
+
password: "bunny_password",
|
103
|
+
vhost: "bunny_testbed",
|
104
|
+
tls: true,
|
105
|
+
tls_cert: "#{CERTIFICATE_DIR}/client_certificate.pem",
|
106
|
+
tls_key: "#{CERTIFICATE_DIR}/client_key.pem",
|
107
|
+
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
|
108
|
+
verify_peer: false)
|
109
|
+
c.start
|
110
|
+
c
|
111
|
+
end
|
125
112
|
|
126
|
-
|
113
|
+
after :each do
|
114
|
+
subject.close
|
127
115
|
end
|
128
116
|
|
117
|
+
include_examples "successful TLS connection"
|
118
|
+
end
|
129
119
|
|
130
|
-
describe "TLS connection to RabbitMQ with a connection string" do
|
131
|
-
let(:subject) do
|
132
|
-
c = Bunny.new("amqps://bunny_gem:bunny_password@#{local_hostname()}/bunny_testbed",
|
133
|
-
tls_cert: "#{CERTIFICATE_DIR}/client_certificate.pem",
|
134
|
-
tls_key: "#{CERTIFICATE_DIR}/client_key.pem",
|
135
|
-
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
|
136
|
-
verify_peer: false)
|
137
|
-
c.start
|
138
|
-
c
|
139
|
-
end
|
140
120
|
|
141
|
-
|
142
|
-
|
143
|
-
|
121
|
+
describe "TLS connection to RabbitMQ without client certificates", skip: ENV["CI"] do
|
122
|
+
let(:subject) do
|
123
|
+
c = Bunny.new(
|
124
|
+
hostname: local_hostname(),
|
125
|
+
username: "bunny_gem",
|
126
|
+
password: "bunny_password",
|
127
|
+
vhost: "bunny_testbed",
|
128
|
+
tls: true,
|
129
|
+
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
|
130
|
+
verify_peer: false)
|
131
|
+
c.start
|
132
|
+
c
|
133
|
+
end
|
144
134
|
|
145
|
-
|
135
|
+
after :each do
|
136
|
+
subject.close
|
137
|
+
end
|
146
138
|
|
147
|
-
|
148
|
-
|
149
|
-
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")
|
150
|
-
end
|
139
|
+
include_examples "successful TLS connection"
|
140
|
+
end
|
151
141
|
|
152
|
-
it "parses extra connection parameters" do
|
153
|
-
session.start
|
154
142
|
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
143
|
+
describe "TLS connection to RabbitMQ with a connection string", skip: ENV["CI"] do
|
144
|
+
let(:subject) do
|
145
|
+
c = Bunny.new("amqps://bunny_gem:bunny_password@#{local_hostname()}/bunny_testbed",
|
146
|
+
tls_cert: "#{CERTIFICATE_DIR}/client_certificate.pem",
|
147
|
+
tls_key: "#{CERTIFICATE_DIR}/client_key.pem",
|
148
|
+
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
|
149
|
+
verify_peer: false)
|
150
|
+
c.start
|
151
|
+
c
|
162
152
|
end
|
163
153
|
|
154
|
+
after :each do
|
155
|
+
subject.close
|
156
|
+
end
|
164
157
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
c.start
|
171
|
-
c
|
158
|
+
include_examples "successful TLS connection"
|
159
|
+
|
160
|
+
context "when URI contains query parameters" do
|
161
|
+
subject(:session) do
|
162
|
+
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")
|
172
163
|
end
|
173
164
|
|
174
|
-
|
175
|
-
|
165
|
+
it "parses extra connection parameters" do
|
166
|
+
session.start
|
167
|
+
|
168
|
+
expect(session.uses_tls?).to eq(true)
|
169
|
+
expect(session.transport.verify_peer).to eq(false)
|
170
|
+
expect(session.transport.tls_ca_certificates).to eq(["#{CERTIFICATE_DIR}/ca_certificate.pem"])
|
171
|
+
expect(session.transport.tls_certificate_path).to eq("#{CERTIFICATE_DIR}/client_certificate.pem")
|
172
|
+
expect(session.transport.tls_key_path).to eq("#{CERTIFICATE_DIR}/client_key.pem")
|
176
173
|
end
|
174
|
+
end
|
175
|
+
end
|
177
176
|
|
178
|
-
context "peer verification is off" do
|
179
|
-
let(:verify_peer) { false }
|
180
177
|
|
181
|
-
|
178
|
+
describe "TLS connection to RabbitMQ with a connection string and w/o client certificate and key", skip: ENV["CI"] do
|
179
|
+
let(:subject) do
|
180
|
+
c = Bunny.new("amqps://bunny_gem:bunny_password@#{local_hostname()}/bunny_testbed",
|
181
|
+
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
|
182
|
+
verify_peer: verify_peer)
|
183
|
+
c.start
|
184
|
+
c
|
185
|
+
end
|
182
186
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
end
|
187
|
-
end
|
187
|
+
after :each do
|
188
|
+
subject.close
|
189
|
+
end
|
188
190
|
|
189
|
-
|
190
|
-
|
191
|
+
context "peer verification is off" do
|
192
|
+
let(:verify_peer) { false }
|
191
193
|
|
192
|
-
|
194
|
+
include_examples "successful TLS connection"
|
193
195
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
end
|
196
|
+
it "sends the SNI details" do
|
197
|
+
# https://github.com/ruby-amqp/bunny/issues/440
|
198
|
+
expect(subject.transport.socket.hostname).to_not be_empty
|
198
199
|
end
|
199
200
|
end
|
200
201
|
|
202
|
+
context "peer verification is on" do
|
203
|
+
let(:verify_peer) { true }
|
201
204
|
|
202
|
-
|
203
|
-
let(:subject) do
|
204
|
-
c = Bunny.new(
|
205
|
-
hostname: local_hostname(),
|
206
|
-
username: "bunny_gem",
|
207
|
-
password: "bunny_password",
|
208
|
-
vhost: "bunny_testbed",
|
209
|
-
tls: true,
|
210
|
-
tls_cert: File.read("#{CERTIFICATE_DIR}/client_certificate.pem"),
|
211
|
-
tls_key: File.read("#{CERTIFICATE_DIR}/client_key.pem"),
|
212
|
-
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
|
213
|
-
verify_peer: false)
|
214
|
-
c.start
|
215
|
-
c
|
216
|
-
end
|
205
|
+
include_examples "successful TLS connection"
|
217
206
|
|
218
|
-
|
219
|
-
|
207
|
+
it "sends the SNI details" do
|
208
|
+
# https://github.com/ruby-amqp/bunny/issues/440
|
209
|
+
expect(subject.transport.socket.hostname).to_not be_empty
|
220
210
|
end
|
211
|
+
end
|
212
|
+
end
|
221
213
|
|
222
|
-
|
214
|
+
|
215
|
+
describe "TLS connection to RabbitMQ with client certificates provided inline", skip: ENV["CI"] do
|
216
|
+
let(:subject) do
|
217
|
+
c = Bunny.new(
|
218
|
+
hostname: local_hostname(),
|
219
|
+
username: "bunny_gem",
|
220
|
+
password: "bunny_password",
|
221
|
+
vhost: "bunny_testbed",
|
222
|
+
tls: true,
|
223
|
+
tls_cert: File.read("#{CERTIFICATE_DIR}/client_certificate.pem"),
|
224
|
+
tls_key: File.read("#{CERTIFICATE_DIR}/client_key.pem"),
|
225
|
+
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
|
226
|
+
verify_peer: false)
|
227
|
+
c.start
|
228
|
+
c
|
223
229
|
end
|
224
230
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
hostname: local_hostname(),
|
229
|
-
username: "bunny_gem",
|
230
|
-
password: "bunny_password",
|
231
|
-
vhost: "bunny_testbed",
|
232
|
-
tls: true,
|
233
|
-
tls_protocol: :TLSv1_1,
|
234
|
-
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
|
235
|
-
verify_peer: false)
|
236
|
-
c.start
|
237
|
-
c
|
238
|
-
end
|
231
|
+
after :each do
|
232
|
+
subject.close
|
233
|
+
end
|
239
234
|
|
240
|
-
|
241
|
-
|
242
|
-
end
|
235
|
+
include_examples "successful TLS connection"
|
236
|
+
end
|
243
237
|
|
244
|
-
|
238
|
+
describe "TLS connection to RabbitMQ with tls_version TLSv1.2 specified", skip: ENV["CI"] do
|
239
|
+
let(:subject) do
|
240
|
+
c = Bunny.new(
|
241
|
+
hostname: local_hostname(),
|
242
|
+
username: "bunny_gem",
|
243
|
+
password: "bunny_password",
|
244
|
+
vhost: "bunny_testbed",
|
245
|
+
tls: true,
|
246
|
+
tls_protocol: :TLSv1_2,
|
247
|
+
tls_ca_certificates: ["#{CERTIFICATE_DIR}/ca_certificate.pem"],
|
248
|
+
verify_peer: false)
|
249
|
+
c.start
|
250
|
+
c
|
251
|
+
end
|
245
252
|
|
246
|
-
|
247
|
-
|
248
|
-
|
253
|
+
after :each do
|
254
|
+
subject.close
|
255
|
+
end
|
256
|
+
|
257
|
+
include_examples "successful TLS connection"
|
258
|
+
|
259
|
+
it "connects using TLSv1.2", skip: no_tls12_supported? do
|
260
|
+
expect(subject.transport.socket.ssl_version).to eq "TLSv1.2"
|
249
261
|
end
|
250
262
|
end
|
@@ -4,7 +4,7 @@ describe Bunny::Session do
|
|
4
4
|
context "with unreachable host" do
|
5
5
|
it "raises Bunny::TCPConnectionFailed" do
|
6
6
|
begin
|
7
|
-
conn = Bunny.new(:hostname => "
|
7
|
+
conn = Bunny.new(:hostname => "127.0.0.254", :port => 1433)
|
8
8
|
conn.start
|
9
9
|
|
10
10
|
fail "expected 192.192.192.192 to be unreachable"
|
data/spec/issues/issue78_spec.rb
CHANGED
@@ -24,7 +24,7 @@ unless ENV["CI"]
|
|
24
24
|
ch2 = @connection1.create_channel
|
25
25
|
|
26
26
|
q = ch1.queue("", exclusive: true)
|
27
|
-
q.subscribe(manual_ack: false
|
27
|
+
q.subscribe(manual_ack: false) do |delivery_info, properties, payload|
|
28
28
|
delivered_data << payload
|
29
29
|
end
|
30
30
|
sleep 0.5
|
@@ -57,7 +57,7 @@ unless ENV["CI"]
|
|
57
57
|
sleep 0.7
|
58
58
|
expect(q.message_count).to eq 3
|
59
59
|
|
60
|
-
q.subscribe(manual_ack: false
|
60
|
+
q.subscribe(manual_ack: false) do |delivery_info, properties, payload|
|
61
61
|
delivered_data << payload
|
62
62
|
end
|
63
63
|
sleep 0.7
|
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.
|
4
|
+
version: 2.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Duncan
|
@@ -12,31 +12,32 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2020-
|
15
|
+
date: 2020-04-08 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: amq-protocol
|
19
19
|
requirement: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 2.3.0
|
24
21
|
- - "~>"
|
25
22
|
- !ruby/object:Gem::Version
|
26
23
|
version: '2.3'
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.3.1
|
27
27
|
type: :runtime
|
28
28
|
prerelease: false
|
29
29
|
version_requirements: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 2.3.0
|
34
31
|
- - "~>"
|
35
32
|
- !ruby/object:Gem::Version
|
36
33
|
version: '2.3'
|
37
|
-
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 2.3.1
|
37
|
+
description: Easy to use, feature complete Ruby client for RabbitMQ 3.3 and later
|
38
|
+
versions.
|
38
39
|
email:
|
39
|
-
-
|
40
|
+
- michael.s.klishin@gmail.com
|
40
41
|
executables: []
|
41
42
|
extensions: []
|
42
43
|
extra_rdoc_files:
|
@@ -240,10 +241,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
240
241
|
- !ruby/object:Gem::Version
|
241
242
|
version: '0'
|
242
243
|
requirements: []
|
243
|
-
rubygems_version: 3.
|
244
|
+
rubygems_version: 3.1.2
|
244
245
|
signing_key:
|
245
246
|
specification_version: 4
|
246
|
-
summary:
|
247
|
+
summary: Popular easy to use Ruby client for RabbitMQ
|
247
248
|
test_files:
|
248
249
|
- spec/config/enabled_plugins
|
249
250
|
- spec/config/rabbitmq.conf
|