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.
- checksums.yaml +4 -4
- data/README.md +26 -32
- data/lib/bunny/channel.rb +86 -10
- data/lib/bunny/consumer.rb +2 -2
- data/lib/bunny/delivery_info.rb +1 -1
- data/lib/bunny/queue.rb +33 -2
- data/lib/bunny/session.rb +1 -1
- data/lib/bunny/transport.rb +30 -1
- data/lib/bunny/version.rb +1 -1
- data/lib/bunny.rb +45 -4
- metadata +4 -144
- data/spec/config/enabled_plugins +0 -1
- data/spec/config/rabbitmq.conf +0 -13
- data/spec/higher_level_api/integration/basic_ack_spec.rb +0 -230
- data/spec/higher_level_api/integration/basic_cancel_spec.rb +0 -142
- data/spec/higher_level_api/integration/basic_consume_spec.rb +0 -357
- data/spec/higher_level_api/integration/basic_consume_with_objects_spec.rb +0 -54
- data/spec/higher_level_api/integration/basic_get_spec.rb +0 -80
- data/spec/higher_level_api/integration/basic_nack_spec.rb +0 -82
- data/spec/higher_level_api/integration/basic_publish_spec.rb +0 -74
- data/spec/higher_level_api/integration/basic_qos_spec.rb +0 -57
- data/spec/higher_level_api/integration/basic_reject_spec.rb +0 -152
- data/spec/higher_level_api/integration/basic_return_spec.rb +0 -33
- data/spec/higher_level_api/integration/channel_close_spec.rb +0 -66
- data/spec/higher_level_api/integration/channel_open_spec.rb +0 -57
- data/spec/higher_level_api/integration/connection_recovery_spec.rb +0 -483
- data/spec/higher_level_api/integration/connection_spec.rb +0 -589
- data/spec/higher_level_api/integration/connection_stop_spec.rb +0 -83
- data/spec/higher_level_api/integration/consumer_cancellation_notification_spec.rb +0 -128
- data/spec/higher_level_api/integration/dead_lettering_spec.rb +0 -75
- data/spec/higher_level_api/integration/exchange_bind_spec.rb +0 -31
- data/spec/higher_level_api/integration/exchange_declare_spec.rb +0 -237
- data/spec/higher_level_api/integration/exchange_delete_spec.rb +0 -105
- data/spec/higher_level_api/integration/exchange_unbind_spec.rb +0 -40
- data/spec/higher_level_api/integration/exclusive_queue_spec.rb +0 -28
- data/spec/higher_level_api/integration/heartbeat_spec.rb +0 -49
- data/spec/higher_level_api/integration/message_properties_access_spec.rb +0 -95
- data/spec/higher_level_api/integration/predeclared_exchanges_spec.rb +0 -24
- data/spec/higher_level_api/integration/publisher_confirms_spec.rb +0 -191
- data/spec/higher_level_api/integration/publishing_edge_cases_spec.rb +0 -87
- data/spec/higher_level_api/integration/queue_bind_spec.rb +0 -109
- data/spec/higher_level_api/integration/queue_declare_spec.rb +0 -285
- data/spec/higher_level_api/integration/queue_delete_spec.rb +0 -41
- data/spec/higher_level_api/integration/queue_purge_spec.rb +0 -30
- data/spec/higher_level_api/integration/queue_unbind_spec.rb +0 -54
- data/spec/higher_level_api/integration/read_only_consumer_spec.rb +0 -60
- data/spec/higher_level_api/integration/sender_selected_distribution_spec.rb +0 -36
- data/spec/higher_level_api/integration/tls_connection_spec.rb +0 -255
- data/spec/higher_level_api/integration/toxiproxy_spec.rb +0 -76
- data/spec/higher_level_api/integration/tx_commit_spec.rb +0 -21
- data/spec/higher_level_api/integration/tx_rollback_spec.rb +0 -21
- data/spec/higher_level_api/integration/with_channel_spec.rb +0 -25
- data/spec/issues/issue100_spec.rb +0 -42
- data/spec/issues/issue141_spec.rb +0 -43
- data/spec/issues/issue202_spec.rb +0 -15
- data/spec/issues/issue224_spec.rb +0 -40
- data/spec/issues/issue465_spec.rb +0 -32
- data/spec/issues/issue549_spec.rb +0 -30
- data/spec/issues/issue609_spec.rb +0 -84
- data/spec/issues/issue78_spec.rb +0 -72
- data/spec/issues/issue83_spec.rb +0 -30
- data/spec/issues/issue97_attachment.json +0 -1
- data/spec/issues/issue97_spec.rb +0 -175
- data/spec/lower_level_api/integration/basic_cancel_spec.rb +0 -83
- data/spec/lower_level_api/integration/basic_consume_spec.rb +0 -99
- data/spec/spec_helper.rb +0 -47
- data/spec/stress/channel_close_stress_spec.rb +0 -64
- data/spec/stress/channel_open_stress_spec.rb +0 -84
- data/spec/stress/channel_open_stress_with_single_threaded_connection_spec.rb +0 -28
- data/spec/stress/concurrent_consumers_stress_spec.rb +0 -71
- data/spec/stress/concurrent_publishers_stress_spec.rb +0 -54
- data/spec/stress/connection_open_close_spec.rb +0 -52
- data/spec/stress/merry_go_round_spec.rb +0 -105
- data/spec/toxiproxy_helper.rb +0 -28
- data/spec/unit/bunny_spec.rb +0 -15
- data/spec/unit/concurrent/atomic_fixnum_spec.rb +0 -35
- data/spec/unit/concurrent/condition_spec.rb +0 -82
- data/spec/unit/concurrent/linked_continuation_queue_spec.rb +0 -35
- data/spec/unit/concurrent/synchronized_sorted_set_spec.rb +0 -73
- data/spec/unit/exchange_recovery_spec.rb +0 -39
- data/spec/unit/version_delivery_tag_spec.rb +0 -28
@@ -1,128 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Bunny::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
|
-
context "with implicit consumer construction" do
|
15
|
-
let(:queue_name) { "basic.consume#{rand}" }
|
16
|
-
|
17
|
-
it "supports consumer cancellation notifications" do
|
18
|
-
cancelled = false
|
19
|
-
|
20
|
-
ch = connection.create_channel
|
21
|
-
t = Thread.new do
|
22
|
-
ch2 = connection.create_channel
|
23
|
-
q = ch2.queue(queue_name, auto_delete: true)
|
24
|
-
|
25
|
-
q.subscribe(on_cancellation: Proc.new { cancelled = true })
|
26
|
-
end
|
27
|
-
t.abort_on_exception = true
|
28
|
-
|
29
|
-
sleep 0.5
|
30
|
-
x = ch.default_exchange
|
31
|
-
x.publish("abc", routing_key: queue_name)
|
32
|
-
|
33
|
-
sleep 0.5
|
34
|
-
ch.queue(queue_name, auto_delete: true).delete
|
35
|
-
|
36
|
-
sleep 0.5
|
37
|
-
expect(cancelled).to eq true
|
38
|
-
|
39
|
-
ch.close
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
context "with explicit consumer construction" do
|
45
|
-
class ExampleConsumer < Bunny::Consumer
|
46
|
-
def cancelled?
|
47
|
-
@cancelled
|
48
|
-
end
|
49
|
-
|
50
|
-
def handle_cancellation(_)
|
51
|
-
@cancelled = true
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
let(:queue_name) { "basic.consume#{rand}" }
|
56
|
-
|
57
|
-
it "supports consumer cancellation notifications" do
|
58
|
-
consumer = nil
|
59
|
-
|
60
|
-
ch = connection.create_channel
|
61
|
-
t = Thread.new do
|
62
|
-
ch2 = connection.create_channel
|
63
|
-
q = ch2.queue(queue_name, auto_delete: true)
|
64
|
-
|
65
|
-
consumer = ExampleConsumer.new(ch2, q, "")
|
66
|
-
q.subscribe_with(consumer)
|
67
|
-
end
|
68
|
-
t.abort_on_exception = true
|
69
|
-
|
70
|
-
sleep 0.5
|
71
|
-
x = ch.default_exchange
|
72
|
-
x.publish("abc", routing_key: queue_name)
|
73
|
-
|
74
|
-
sleep 0.5
|
75
|
-
ch.queue(queue_name, auto_delete: true).delete
|
76
|
-
|
77
|
-
sleep 0.5
|
78
|
-
expect(consumer).to be_cancelled
|
79
|
-
|
80
|
-
ch.close
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
context "with consumer re-registration" do
|
87
|
-
class ExampleConsumerThatReregisters < Bunny::Consumer
|
88
|
-
def handle_cancellation(_)
|
89
|
-
@queue = @channel.queue("basic.consume.after_cancellation", auto_delete: true)
|
90
|
-
@channel.basic_consume_with(self)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
let(:queue_name) { "basic.consume#{rand}" }
|
95
|
-
|
96
|
-
it "works correctly" do
|
97
|
-
consumer = nil
|
98
|
-
xs = []
|
99
|
-
|
100
|
-
ch = connection.create_channel
|
101
|
-
t = Thread.new do
|
102
|
-
ch2 = connection.create_channel
|
103
|
-
q = ch2.queue(queue_name, auto_delete: true)
|
104
|
-
|
105
|
-
consumer = ExampleConsumerThatReregisters.new(ch2, q, "")
|
106
|
-
consumer.on_delivery do |_, _, payload|
|
107
|
-
xs << payload
|
108
|
-
end
|
109
|
-
q.subscribe_with(consumer)
|
110
|
-
end
|
111
|
-
t.abort_on_exception = true
|
112
|
-
|
113
|
-
sleep 0.5
|
114
|
-
x = ch.default_exchange
|
115
|
-
x.publish("abc", routing_key: queue_name)
|
116
|
-
|
117
|
-
sleep 0.5
|
118
|
-
ch.queue(queue_name, auto_delete: true).delete
|
119
|
-
|
120
|
-
x.publish("abc", routing_key: queue_name)
|
121
|
-
sleep 0.5
|
122
|
-
q = ch.queue("basic.consume.after_cancellation", auto_delete: true)
|
123
|
-
expect(xs).to eq ["abc"]
|
124
|
-
|
125
|
-
ch.close
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe "A message" 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 considered to be dead-lettered when it is rejected without requeueing" do
|
15
|
-
ch = connection.create_channel
|
16
|
-
x = ch.fanout("amq.fanout")
|
17
|
-
dlx = ch.fanout("bunny.tests.dlx.exchange")
|
18
|
-
q = ch.queue("", exclusive: true, arguments: {"x-dead-letter-exchange" => dlx.name}).bind(x)
|
19
|
-
# dead letter queue
|
20
|
-
dlq = ch.queue("", exclusive: true).bind(dlx)
|
21
|
-
|
22
|
-
x.publish("")
|
23
|
-
sleep 0.2
|
24
|
-
|
25
|
-
delivery_info, _, _ = q.pop(manual_ack: true)
|
26
|
-
expect(dlq.message_count).to be_zero
|
27
|
-
ch.nack(delivery_info.delivery_tag)
|
28
|
-
|
29
|
-
sleep 0.2
|
30
|
-
expect(q.message_count).to be_zero
|
31
|
-
|
32
|
-
delivery, properties, body = dlq.pop
|
33
|
-
ds = properties.headers["x-death"]
|
34
|
-
expect(ds).not_to be_empty
|
35
|
-
expect(ds.first["reason"]).to eq("rejected")
|
36
|
-
|
37
|
-
dlx.delete
|
38
|
-
end
|
39
|
-
|
40
|
-
it "is considered to be dead-lettered when it expires" do
|
41
|
-
ch = connection.create_channel
|
42
|
-
x = ch.fanout("amq.fanout")
|
43
|
-
dlx = ch.fanout("bunny.tests.dlx.exchange")
|
44
|
-
q = ch.queue("", exclusive: true, arguments: {"x-dead-letter-exchange" => dlx.name, "x-message-ttl" => 100}).bind(x)
|
45
|
-
# dead letter queue
|
46
|
-
dlq = ch.queue("", exclusive: true).bind(dlx)
|
47
|
-
|
48
|
-
x.publish("")
|
49
|
-
sleep 0.2
|
50
|
-
|
51
|
-
expect(q.message_count).to be_zero
|
52
|
-
expect(dlq.message_count).to eq 1
|
53
|
-
|
54
|
-
dlx.delete
|
55
|
-
end
|
56
|
-
|
57
|
-
it "carries the x-death header" do
|
58
|
-
ch = connection.create_channel
|
59
|
-
x = ch.fanout("amq.fanout")
|
60
|
-
dlx = ch.fanout("bunny.tests.dlx.exchange")
|
61
|
-
q = ch.queue("", exclusive: true, arguments: {"x-dead-letter-exchange" => dlx.name, "x-message-ttl" => 100}).bind(x)
|
62
|
-
# dead letter queue
|
63
|
-
dlq = ch.queue("", exclusive: true).bind(dlx)
|
64
|
-
|
65
|
-
x.publish("")
|
66
|
-
sleep 0.2
|
67
|
-
|
68
|
-
delivery, properties, body = dlq.pop
|
69
|
-
ds = properties.headers["x-death"]
|
70
|
-
expect(ds).not_to be_empty
|
71
|
-
expect(ds.first["reason"]).to eq("expired")
|
72
|
-
|
73
|
-
dlx.delete
|
74
|
-
end
|
75
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Bunny::Exchange 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 "binds two existing exchanges" do
|
15
|
-
ch = connection.create_channel
|
16
|
-
|
17
|
-
source = ch.fanout("bunny.exchanges.source", auto_delete: true)
|
18
|
-
destination = ch.fanout("bunny.exchanges.destination", auto_delete: true)
|
19
|
-
|
20
|
-
queue = ch.queue("", exclusive: true)
|
21
|
-
queue.bind(destination)
|
22
|
-
|
23
|
-
destination.bind(source)
|
24
|
-
source.publish("")
|
25
|
-
sleep 0.5
|
26
|
-
|
27
|
-
expect(queue.message_count).to be > 0
|
28
|
-
|
29
|
-
ch.close
|
30
|
-
end
|
31
|
-
end
|
@@ -1,237 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Bunny::Exchange 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
|
12
|
-
end
|
13
|
-
|
14
|
-
context "of default type" do
|
15
|
-
it "is declared with an empty name" do
|
16
|
-
ch = connection.create_channel
|
17
|
-
|
18
|
-
x = Bunny::Exchange.default(ch)
|
19
|
-
|
20
|
-
expect(x.name).to eq ''
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "of type fanout" do
|
25
|
-
context "with a non-predefined name" do
|
26
|
-
it "is declared" do
|
27
|
-
ch = connection.create_channel
|
28
|
-
|
29
|
-
name = "bunny.tests.exchanges.fanout#{rand}"
|
30
|
-
x = ch.fanout(name)
|
31
|
-
expect(x.name).to eq name
|
32
|
-
|
33
|
-
x.delete
|
34
|
-
ch.close
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
context "with a predefined name" do
|
39
|
-
it "is NOT declared" do
|
40
|
-
ch = connection.create_channel
|
41
|
-
|
42
|
-
name = "amq.fanout"
|
43
|
-
x = ch.fanout(name)
|
44
|
-
expect(x.name).to eq name
|
45
|
-
|
46
|
-
ch.close
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "with a name prefixed with 'amq.'" do
|
51
|
-
it "raises an exception" do
|
52
|
-
ch = connection.create_channel
|
53
|
-
|
54
|
-
expect {
|
55
|
-
ch.fanout("amq.test")
|
56
|
-
}.to raise_error(Bunny::AccessRefused)
|
57
|
-
|
58
|
-
expect(ch).to be_closed
|
59
|
-
expect {
|
60
|
-
ch.fanout("amq.test")
|
61
|
-
}.to raise_error(Bunny::ChannelAlreadyClosed)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context "with the durable property" do
|
66
|
-
it "is declared as durable" do
|
67
|
-
ch = connection.create_channel
|
68
|
-
|
69
|
-
name = "bunny.tests.exchanges.durable"
|
70
|
-
x = ch.fanout(name, durable: true)
|
71
|
-
expect(x.name).to eq name
|
72
|
-
expect(x).to be_durable
|
73
|
-
expect(x).not_to be_auto_delete
|
74
|
-
|
75
|
-
x.delete
|
76
|
-
ch.close
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
|
81
|
-
context "with the auto-delete property" do
|
82
|
-
it "is declared as auto-delete" do
|
83
|
-
ch = connection.create_channel
|
84
|
-
|
85
|
-
name = "bunny.tests.exchanges.auto-delete"
|
86
|
-
x = ch.fanout(name, auto_delete: true)
|
87
|
-
expect(x.name).to eq name
|
88
|
-
expect(x).not_to be_durable
|
89
|
-
expect(x).to be_auto_delete
|
90
|
-
|
91
|
-
ch.exchange(name, type: :fanout, auto_delete: true)
|
92
|
-
|
93
|
-
x.delete
|
94
|
-
ch.close
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
|
99
|
-
context "when declared with a different set of attributes" do
|
100
|
-
it "raises an exception" do
|
101
|
-
ch1 = connection.create_channel
|
102
|
-
ch2 = connection.create_channel
|
103
|
-
|
104
|
-
x = ch1.fanout("bunny.tests.exchanges.fanout", auto_delete: true, durable: false)
|
105
|
-
expect {
|
106
|
-
# force re-declaration
|
107
|
-
ch2.exchange_declare("bunny.tests.exchanges.fanout", :direct, auto_delete: false, durable: true)
|
108
|
-
}.to raise_error(Bunny::PreconditionFailed)
|
109
|
-
|
110
|
-
expect(ch2).to be_closed
|
111
|
-
expect {
|
112
|
-
ch2.fanout("bunny.tests.exchanges.fanout", auto_delete: true, durable: false)
|
113
|
-
}.to raise_error(Bunny::ChannelAlreadyClosed)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
context "of type direct" do
|
119
|
-
context "with a non-predefined name" do
|
120
|
-
it "is declared" do
|
121
|
-
ch = connection.create_channel
|
122
|
-
|
123
|
-
name = "bunny.tests.exchanges.direct"
|
124
|
-
x = ch.direct(name)
|
125
|
-
expect(x.name).to eq name
|
126
|
-
|
127
|
-
ch.exchange(name, type: :direct)
|
128
|
-
|
129
|
-
x.delete
|
130
|
-
ch.close
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
context "with a predefined name" do
|
135
|
-
it "is NOT declared" do
|
136
|
-
ch = connection.create_channel
|
137
|
-
|
138
|
-
name = "amq.direct"
|
139
|
-
x = ch.direct(name)
|
140
|
-
expect(x.name).to eq name
|
141
|
-
|
142
|
-
ch.close
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
context "of type topic" do
|
148
|
-
context "with a non-predefined name" do
|
149
|
-
it "is declared" do
|
150
|
-
ch = connection.create_channel
|
151
|
-
|
152
|
-
name = "bunny.tests.exchanges.topic"
|
153
|
-
x = ch.topic(name)
|
154
|
-
expect(x.name).to eq name
|
155
|
-
|
156
|
-
ch.exchange(name, type: :topic)
|
157
|
-
|
158
|
-
x.delete
|
159
|
-
ch.close
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context "with a predefined name" do
|
164
|
-
it "is NOT declared" do
|
165
|
-
ch = connection.create_channel
|
166
|
-
|
167
|
-
name = "amq.topic"
|
168
|
-
x = ch.topic(name)
|
169
|
-
expect(x.name).to eq name
|
170
|
-
|
171
|
-
ch.close
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
context "of type headers" do
|
177
|
-
context "with a non-predefined name" do
|
178
|
-
it "is declared" do
|
179
|
-
ch = connection.create_channel
|
180
|
-
|
181
|
-
name = "bunny.tests.exchanges.headers"
|
182
|
-
x = ch.headers(name)
|
183
|
-
expect(x.name).to eq name
|
184
|
-
|
185
|
-
x.delete
|
186
|
-
ch.close
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
context "with a predefined name (amq.match)" do
|
191
|
-
it "is NOT declared" do
|
192
|
-
ch = connection.create_channel
|
193
|
-
|
194
|
-
name = "amq.match"
|
195
|
-
x = ch.headers(name)
|
196
|
-
expect(x.name).to eq name
|
197
|
-
|
198
|
-
ch.close
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
context "with a predefined name (amq.headers)" do
|
203
|
-
it "is NOT declared" do
|
204
|
-
ch = connection.create_channel
|
205
|
-
|
206
|
-
name = "amq.headers"
|
207
|
-
x = ch.headers(name)
|
208
|
-
expect(x.name).to eq name
|
209
|
-
|
210
|
-
ch.close
|
211
|
-
end
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
|
-
|
216
|
-
context "that is internal" do
|
217
|
-
it "can be declared" do
|
218
|
-
ch = connection.create_channel
|
219
|
-
x = ch.fanout("bunny.tests.exchanges.internal", internal: true)
|
220
|
-
expect(x).to be_internal
|
221
|
-
x.delete
|
222
|
-
|
223
|
-
ch.close
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
context "not declared as internal" do
|
228
|
-
it "is not internal" do
|
229
|
-
ch = connection.create_channel
|
230
|
-
x = ch.fanout("bunny.tests.exchanges.non-internal")
|
231
|
-
expect(x).not_to be_internal
|
232
|
-
x.delete
|
233
|
-
|
234
|
-
ch.close
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
@@ -1,105 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Bunny::Exchange, "#delete" 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
|
-
|
15
|
-
context "with a name of an existing exchange" do
|
16
|
-
it "deletes that exchange" do
|
17
|
-
ch = connection.create_channel
|
18
|
-
x = ch.fanout("bunny.tests.exchanges.fanout#{rand}")
|
19
|
-
|
20
|
-
x.delete
|
21
|
-
# no exception as of RabbitMQ 3.2. MK.
|
22
|
-
x.delete
|
23
|
-
|
24
|
-
expect(ch.exchanges.size).to eq 0
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
|
29
|
-
context "with a name of a non-existent exchange" do
|
30
|
-
it "DOES NOT rais an exception" do
|
31
|
-
ch = connection.create_channel
|
32
|
-
|
33
|
-
# no exception as of RabbitMQ 3.2. MK.
|
34
|
-
ch.exchange_delete("sdkhflsdjflskdjflsd#{rand}")
|
35
|
-
ch.exchange_delete("sdkhflsdjflskdjflsd#{rand}")
|
36
|
-
ch.exchange_delete("sdkhflsdjflskdjflsd#{rand}")
|
37
|
-
ch.exchange_delete("sdkhflsdjflskdjflsd#{rand}")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "with a name of 'amq.direct'" do
|
42
|
-
it "does not delete the exchange" do
|
43
|
-
ch = connection.create_channel
|
44
|
-
x = ch.direct('amq.direct')
|
45
|
-
|
46
|
-
expect(x.delete).to eq nil
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "with a name of 'amq.fanout'" do
|
51
|
-
it "does not delete the exchange" do
|
52
|
-
ch = connection.create_channel
|
53
|
-
x = ch.fanout('amq.fanout')
|
54
|
-
|
55
|
-
expect(x.delete).to eq nil
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
context "with a name of 'amq.topic'" do
|
60
|
-
it "does not delete the exchange" do
|
61
|
-
ch = connection.create_channel
|
62
|
-
x = ch.topic('amq.topic')
|
63
|
-
|
64
|
-
expect(x.delete).to eq nil
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
context "with a name of 'amq.headers'" do
|
69
|
-
it "does not delete the exchange" do
|
70
|
-
ch = connection.create_channel
|
71
|
-
x = ch.headers('amq.headers')
|
72
|
-
|
73
|
-
expect(x.delete).to eq nil
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context "with a name of 'amq.match'" do
|
78
|
-
it "does not delete the exchange" do
|
79
|
-
ch = connection.create_channel
|
80
|
-
x = ch.headers('amq.match')
|
81
|
-
|
82
|
-
expect(x.delete).to eq nil
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
|
87
|
-
describe "#exchange_exists?" do
|
88
|
-
context "when a exchange exists" do
|
89
|
-
it "returns true" do
|
90
|
-
ch = connection.create_channel
|
91
|
-
|
92
|
-
expect(connection.exchange_exists?("amq.fanout")).to eq true
|
93
|
-
expect(connection.exchange_exists?("amq.direct")).to eq true
|
94
|
-
expect(connection.exchange_exists?("amq.topic")).to eq true
|
95
|
-
expect(connection.exchange_exists?("amq.match")).to eq true
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
context "when a exchange DOES NOT exist" do
|
100
|
-
it "returns false" do
|
101
|
-
expect(connection.exchange_exists?("suf89u9a4jo3ndnakls##{Time.now.to_i}")).to eq false
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Bunny::Exchange 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 "unbinds two existing exchanges" do
|
15
|
-
ch = connection.create_channel
|
16
|
-
|
17
|
-
source = ch.fanout("bunny.exchanges.source#{rand}")
|
18
|
-
destination = ch.fanout("bunny.exchanges.destination#{rand}")
|
19
|
-
|
20
|
-
queue = ch.queue("", exclusive: true)
|
21
|
-
queue.bind(destination)
|
22
|
-
|
23
|
-
destination.bind(source)
|
24
|
-
source.publish("")
|
25
|
-
sleep 0.5
|
26
|
-
|
27
|
-
expect(queue.message_count).to eq 1
|
28
|
-
queue.pop(manual_ack: true)
|
29
|
-
|
30
|
-
destination.unbind(source)
|
31
|
-
source.publish("")
|
32
|
-
sleep 0.5
|
33
|
-
|
34
|
-
expect(queue.message_count).to eq 0
|
35
|
-
|
36
|
-
source.delete
|
37
|
-
destination.delete
|
38
|
-
ch.close
|
39
|
-
end
|
40
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Bunny::Queue 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 closed when the connection it was declared on is closed" do
|
15
|
-
ch1 = connection.create_channel
|
16
|
-
ch2 = connection.create_channel
|
17
|
-
q = ch1.queue("", exclusive: true)
|
18
|
-
|
19
|
-
ch1.queue_declare(q.name, passive: true)
|
20
|
-
ch2.queue_declare(q.name, passive: true)
|
21
|
-
|
22
|
-
ch1.close
|
23
|
-
ch2.queue_declare(q.name, passive: true)
|
24
|
-
|
25
|
-
ch2.queue_delete(q.name)
|
26
|
-
ch2.close
|
27
|
-
end
|
28
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe "Client-defined heartbeat interval" do
|
4
|
-
context "with value > 0" do
|
5
|
-
let(:connection) do
|
6
|
-
c = Bunny.new(username: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed", heartbeat_timeout: 4)
|
7
|
-
c.start
|
8
|
-
c
|
9
|
-
end
|
10
|
-
|
11
|
-
it "can be enabled explicitly" do
|
12
|
-
sleep 5.0
|
13
|
-
|
14
|
-
connection.close
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
# issue 267
|
19
|
-
context "with value = 0" do
|
20
|
-
let(:connection) do
|
21
|
-
c = Bunny.new(username: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed",
|
22
|
-
heartbeat_timeout: 0, automatically_recover: false)
|
23
|
-
c.start
|
24
|
-
c
|
25
|
-
end
|
26
|
-
|
27
|
-
it "disables heartbeats" do
|
28
|
-
sleep 1.0
|
29
|
-
|
30
|
-
connection.close
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
describe "Server-defined heartbeat interval" do
|
37
|
-
let(:connection) do
|
38
|
-
c = Bunny.new(username: "bunny_gem", password: "bunny_password", vhost: "bunny_testbed", heartbeat_timeout: :server)
|
39
|
-
c.start
|
40
|
-
c
|
41
|
-
end
|
42
|
-
|
43
|
-
it "can be enabled explicitly" do
|
44
|
-
puts "Sleeping for 5 seconds with heartbeat interval of 4"
|
45
|
-
sleep 5.0
|
46
|
-
|
47
|
-
connection.close
|
48
|
-
end
|
49
|
-
end
|