amqp 0.9.10 → 1.0.0.pre1
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.
- data/.travis.yml +0 -3
- data/CHANGELOG +4 -0
- data/Gemfile +1 -0
- data/README.md +72 -81
- data/amqp.gemspec +14 -5
- data/docs/08Migration.textile +0 -4
- data/docs/AMQP091ModelExplained.textile +0 -5
- data/docs/Bindings.textile +0 -4
- data/docs/Clustering.textile +0 -4
- data/docs/ConnectingToTheBroker.textile +1 -5
- data/docs/ConnectionEncryptionWithTLS.textile +0 -4
- data/docs/DocumentationGuidesIndex.textile +0 -4
- data/docs/Durability.textile +0 -4
- data/docs/ErrorHandling.textile +40 -106
- data/docs/Exchanges.textile +0 -4
- data/docs/GettingStarted.textile +6 -10
- data/docs/PatternsAndUseCases.textile +1 -4
- data/docs/Queues.textile +0 -4
- data/docs/RabbitMQVersions.textile +0 -4
- data/docs/RunningTests.textile +0 -4
- data/docs/TestingWithEventedSpec.textile +0 -4
- data/docs/Troubleshooting.textile +0 -4
- data/docs/VendorSpecificExtensions.textile +0 -4
- data/examples/error_handling/hello_world_producer.rb +1 -1
- data/examples/issues/issue_121.rb +23 -0
- data/examples/patterns/request_reply/client.rb +2 -1
- data/examples/patterns/request_reply/server.rb +1 -0
- data/examples/publishing/returned_messages.rb +1 -1
- data/lib/amqp.rb +0 -7
- data/lib/amqp/channel.rb +15 -33
- data/lib/amqp/client.rb +2 -2
- data/lib/amqp/compatibility/ruby187_patchlevel_check.rb +4 -4
- data/lib/amqp/connection.rb +0 -1
- data/lib/amqp/consumer.rb +2 -2
- data/lib/amqp/exceptions.rb +1 -10
- data/lib/amqp/exchange.rb +5 -5
- data/lib/amqp/queue.rb +23 -47
- data/lib/amqp/session.rb +4 -4
- data/lib/amqp/version.rb +1 -1
- data/spec/integration/basic_get_spec.rb +24 -80
- data/spec/integration/basic_return_spec.rb +3 -3
- data/spec/integration/channel_level_exception_with_multiple_channels_spec.rb +1 -0
- data/spec/integration/exchange_declaration_spec.rb +102 -71
- data/spec/integration/extensions/rabbitmq/publisher_confirmations_spec.rb +17 -1
- data/spec/integration/fanout_exchange_routing_spec.rb +1 -1
- data/spec/integration/immediate_messages_spec.rb +59 -0
- data/spec/integration/multiple_consumers_per_queue_spec.rb +101 -39
- data/spec/integration/queue_redeclaration_with_incompatible_attributes_spec.rb +12 -25
- data/spec/integration/regressions/concurrent_publishing_on_the_same_channel_spec.rb +1 -1
- data/spec/integration/reply_queue_communication_spec.rb +2 -1
- data/spec/integration/store_and_forward_spec.rb +9 -6
- data/spec/integration/topic_subscription_spec.rb +4 -5
- data/spec/spec_helper.rb +2 -8
- data/spec/unit/amqp/connection_spec.rb +1 -3
- metadata +112 -116
- data/examples/deprecated/default_thread_local_channel_instance.rb +0 -34
- data/examples/legacy/ack.rb +0 -70
- data/examples/legacy/callbacks.rb +0 -45
- data/examples/legacy/clock.rb +0 -74
- data/examples/legacy/hashtable.rb +0 -60
- data/examples/legacy/logger.rb +0 -92
- data/examples/legacy/multiclock.rb +0 -56
- data/examples/legacy/pingpong.rb +0 -51
- data/examples/legacy/primes-simple.rb +0 -29
- data/examples/legacy/primes.rb +0 -74
- data/examples/legacy/stocks.rb +0 -59
- data/lib/amqp/deprecated/fork.rb +0 -17
- data/lib/amqp/deprecated/logger.rb +0 -100
- data/lib/amqp/deprecated/mq.rb +0 -22
- data/lib/amqp/deprecated/rpc.rb +0 -169
- data/lib/amqp/ext/em.rb +0 -3
- data/lib/amqp/ext/emfork.rb +0 -72
- data/lib/amqp/logger.rb +0 -19
- data/lib/amqp/rpc.rb +0 -20
- data/lib/mq.rb +0 -35
- data/lib/mq/logger.rb +0 -4
- data/lib/mq/rpc.rb +0 -4
- data/spec/integration/remove_individual_binding_spec.rb +0 -51
data/lib/amqp/session.rb
CHANGED
@@ -110,7 +110,7 @@ module AMQP
|
|
110
110
|
|
111
111
|
|
112
112
|
# Properly close connection with AMQ broker, as described in
|
113
|
-
# section 2.2.4 of the {http://
|
113
|
+
# section 2.2.4 of the {http://bit.ly/hw2ELX AMQP 0.9.1 specification}.
|
114
114
|
#
|
115
115
|
# @api plugin
|
116
116
|
# @see #close_connection
|
@@ -129,19 +129,19 @@ module AMQP
|
|
129
129
|
# Server properties (product information, platform, et cetera)
|
130
130
|
#
|
131
131
|
# @return [Hash]
|
132
|
-
# @see http://
|
132
|
+
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.1.3)
|
133
133
|
attr_reader :server_properties
|
134
134
|
|
135
135
|
# Server capabilities (usually used to detect AMQP 0.9.1 extensions like basic.nack, publisher
|
136
136
|
# confirms and so on)
|
137
137
|
#
|
138
138
|
# @return [Hash]
|
139
|
-
# @see http://
|
139
|
+
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.1.3)
|
140
140
|
attr_reader :server_capabilities
|
141
141
|
|
142
142
|
# Locales server supports
|
143
143
|
#
|
144
|
-
# @see http://
|
144
|
+
# @see http://bit.ly/htCzCX AMQP 0.9.1 protocol documentation (Section 1.4.2.1.3)
|
145
145
|
attr_reader :server_locales
|
146
146
|
|
147
147
|
# @return [AMQP::Broker] Broker this connection is established with
|
data/lib/amqp/version.rb
CHANGED
@@ -61,92 +61,36 @@ describe AMQP::Queue, "#pop" do
|
|
61
61
|
|
62
62
|
context "when THERE ARE messages in the queue" do
|
63
63
|
it "yields message payload to the callback" do
|
64
|
-
|
64
|
+
number_of_received_messages = 0
|
65
|
+
expected_number_of_messages = 300
|
65
66
|
|
66
|
-
|
67
|
-
|
67
|
+
expected_number_of_messages.times do |i|
|
68
|
+
@exchange.publish(@dispatched_data + "_#{i}", :key => @queue_name)
|
68
69
|
end
|
69
70
|
|
70
|
-
|
71
|
+
@queue.status do |number_of_messages, number_of_consumers|
|
72
|
+
expected_number_of_messages.times do
|
73
|
+
@queue.pop do |headers, payload|
|
74
|
+
payload.should_not be_nil
|
75
|
+
number_of_received_messages += 1
|
76
|
+
headers.message_count.should == (expected_number_of_messages - number_of_received_messages)
|
77
|
+
|
78
|
+
if RUBY_VERSION =~ /^1.9/
|
79
|
+
payload.force_encoding("UTF-8").should =~ /#{@dispatched_data}/
|
80
|
+
else
|
81
|
+
payload.should =~ /#{@dispatched_data}/
|
82
|
+
end
|
83
|
+
end # pop
|
84
|
+
end # do
|
85
|
+
end
|
86
|
+
|
87
|
+
delayed(1.3) {
|
71
88
|
# Queue.Get doesn't qualify for subscription, hence, manual deletion is required
|
72
89
|
@queue.delete
|
73
90
|
}
|
74
|
-
done(
|
91
|
+
done(2.5) {
|
92
|
+
number_of_received_messages.should == expected_number_of_messages
|
93
|
+
}
|
75
94
|
end # it
|
76
95
|
end # context
|
77
|
-
|
78
|
-
|
79
|
-
context "with manual acknowledgements" do
|
80
|
-
default_timeout 4
|
81
|
-
|
82
|
-
let(:queue_name) { "amqpgem.integration.basic.get.acks.manual#{rand}" }
|
83
|
-
|
84
|
-
it "does not remove messages from the queue unless ack-ed" do
|
85
|
-
ch1 = AMQP::Channel.new
|
86
|
-
ch2 = AMQP::Channel.new
|
87
|
-
|
88
|
-
ch1.on_error do |ch, close_ok|
|
89
|
-
puts "Channel error: #{close_ok.reply_code} #{close_ok.reply_text}"
|
90
|
-
end
|
91
|
-
|
92
|
-
q = ch1.queue(queue_name, :exclusive => true)
|
93
|
-
x = ch1.default_exchange
|
94
|
-
|
95
|
-
q.purge
|
96
|
-
delayed(0.2) { x.publish(@dispatched_data, :routing_key => q.name) }
|
97
|
-
|
98
|
-
delayed(0.5) {
|
99
|
-
q.pop(:ack => true) do |meta, payload|
|
100
|
-
# never ack
|
101
|
-
end
|
102
|
-
|
103
|
-
ch1.close
|
104
|
-
|
105
|
-
EventMachine.add_timer(0.7) {
|
106
|
-
ch2.queue(queue_name, :exclusive => true).status do |number_of_messages, number_of_consumers|
|
107
|
-
number_of_messages.should == 1
|
108
|
-
done
|
109
|
-
end
|
110
|
-
}
|
111
|
-
}
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
context "with automatic acknowledgements" do
|
118
|
-
default_timeout 4
|
119
|
-
|
120
|
-
let(:queue_name) { "amqpgem.integration.basic.get.acks.automatic#{rand}" }
|
121
|
-
|
122
|
-
it "does remove messages from the queue after delivery" do
|
123
|
-
ch1 = AMQP::Channel.new
|
124
|
-
ch2 = AMQP::Channel.new
|
125
|
-
|
126
|
-
ch1.on_error do |ch, close_ok|
|
127
|
-
puts "Channel error: #{close_ok.reply_code} #{close_ok.reply_text}"
|
128
|
-
end
|
129
|
-
|
130
|
-
q = ch1.queue(queue_name, :exclusive => true)
|
131
|
-
x = ch1.default_exchange
|
132
|
-
|
133
|
-
q.purge
|
134
|
-
x.publish(@dispatched_data, :routing_key => q.name)
|
135
|
-
|
136
|
-
delayed(0.5) {
|
137
|
-
q.pop(:ack => false) do |meta, payload|
|
138
|
-
# never ack
|
139
|
-
end
|
140
|
-
|
141
|
-
ch1.close
|
142
|
-
|
143
|
-
EventMachine.add_timer(0.5) {
|
144
|
-
ch2.queue(queue_name, :exclusive => true).status do |number_of_messages, number_of_consumers|
|
145
|
-
number_of_messages.should == 0
|
146
|
-
done
|
147
|
-
end
|
148
|
-
}
|
149
|
-
}
|
150
|
-
end
|
151
|
-
end
|
152
96
|
end # describe
|
@@ -38,11 +38,11 @@ describe "Message published as mandatory" do
|
|
38
38
|
@exchange.on_return do |basic_return, header, body|
|
39
39
|
returned_messages << basic_return.reply_text
|
40
40
|
end
|
41
|
-
(1..10).to_a.each { |m| @exchange.publish(m, :
|
41
|
+
(1..10).to_a.each { |m| @exchange.publish(m, :immediate => true) }
|
42
42
|
|
43
43
|
done(1.0) {
|
44
|
-
returned_messages.should == Array.new(10) { "
|
44
|
+
returned_messages.should == Array.new(10) { "NO_CONSUMERS" }
|
45
45
|
}
|
46
46
|
end
|
47
47
|
end
|
48
|
-
end
|
48
|
+
end
|
@@ -127,14 +127,27 @@ describe AMQP::Channel do
|
|
127
127
|
end # context
|
128
128
|
|
129
129
|
|
130
|
+
context "when exchange name was specified as a blank string" do
|
131
|
+
it 'returns direct exchange with server-generated name' do
|
132
|
+
pending <<-EOF
|
133
|
+
This has to be fixed in RabbitMQ first
|
134
|
+
https://bugzilla.rabbitmq.com/show_bug.cgi?id=23509
|
135
|
+
EOF
|
136
|
+
@channel.direct("") do |exchange|
|
137
|
+
exchange.name.should_not be_empty
|
138
|
+
done
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end # context
|
142
|
+
|
143
|
+
|
130
144
|
context "when passive option is used" do
|
131
145
|
context "and exchange with given name already exists" do
|
132
146
|
it "silently returns" do
|
133
|
-
name
|
134
|
-
channel = AMQP::Channel.new
|
147
|
+
name = "a_new_direct_exchange declared at #{Time.now.to_i}"
|
135
148
|
|
136
|
-
original_exchange = channel.direct(name)
|
137
|
-
exchange = channel.direct(name, :passive => true)
|
149
|
+
original_exchange = @channel.direct(name)
|
150
|
+
exchange = @channel.direct(name, :passive => true)
|
138
151
|
|
139
152
|
exchange.should == original_exchange
|
140
153
|
|
@@ -144,16 +157,13 @@ describe AMQP::Channel do
|
|
144
157
|
|
145
158
|
context "and exchange with given name DOES NOT exist" do
|
146
159
|
it "raises an exception" do
|
147
|
-
|
148
|
-
channel.on_error do |ch, channel_close|
|
149
|
-
@error_code = channel_close.reply_code
|
150
|
-
end
|
160
|
+
pending "Not yet supported"
|
151
161
|
|
152
|
-
|
162
|
+
expect {
|
163
|
+
exchange = @channel.direct("direct exchange declared at #{Time.now.to_i}", :passive => true)
|
164
|
+
}.to raise_error
|
153
165
|
|
154
|
-
done
|
155
|
-
@error_code.should == 404
|
156
|
-
}
|
166
|
+
done
|
157
167
|
end # it
|
158
168
|
end # context
|
159
169
|
end # context
|
@@ -213,16 +223,27 @@ describe AMQP::Channel do
|
|
213
223
|
|
214
224
|
context "when exchange is re-declared with parameters different from original declaration" do
|
215
225
|
it "raises an exception" do
|
216
|
-
channel
|
217
|
-
channel.direct("previously.declared.durable.direct.exchange", :durable => true)
|
226
|
+
@channel.direct("previously.declared.durable.direct.exchange", :durable => true)
|
218
227
|
|
219
228
|
expect {
|
220
|
-
channel.direct("previously.declared.durable.direct.exchange", :durable => false)
|
229
|
+
@channel.direct("previously.declared.durable.direct.exchange", :durable => false)
|
221
230
|
}.to raise_error(AMQP::IncompatibleOptionsError)
|
222
231
|
|
223
232
|
done
|
224
233
|
end # it
|
225
234
|
end # context
|
235
|
+
|
236
|
+
context "when exchange is re-declared with irrelevent parameters different from original declaration" do
|
237
|
+
it "doesn't raise an exception" do
|
238
|
+
@channel.direct("previously.declared.durable.direct.exchange", :durable => true)
|
239
|
+
|
240
|
+
expect {
|
241
|
+
@channel.direct("previously.declared.durable.direct.exchange", :durable => true, :header => {:random => 'stuff' })
|
242
|
+
}.to_not raise_error(AMQP::IncompatibleOptionsError)
|
243
|
+
|
244
|
+
done
|
245
|
+
end # it
|
246
|
+
end # context
|
226
247
|
end # describe
|
227
248
|
|
228
249
|
|
@@ -266,17 +287,12 @@ describe AMQP::Channel do
|
|
266
287
|
end
|
267
288
|
|
268
289
|
context "and exchange with given name DOES NOT exist" do
|
269
|
-
it "
|
270
|
-
|
271
|
-
channel.on_error do |ch, channel_close|
|
272
|
-
@error_code = channel_close.reply_code
|
273
|
-
end
|
274
|
-
|
275
|
-
exchange = channel.fanout("fanout exchange declared at #{Time.now.to_i}", :passive => true)
|
290
|
+
it "raises an exception" do
|
291
|
+
pending "Not yet supported"
|
276
292
|
|
277
|
-
|
278
|
-
@
|
279
|
-
}
|
293
|
+
expect {
|
294
|
+
exchange = @channel.fanout("fanout exchange declared at #{Time.now.to_i}", :passive => true)
|
295
|
+
}.to raise_error
|
280
296
|
|
281
297
|
done
|
282
298
|
end # it
|
@@ -338,11 +354,10 @@ describe AMQP::Channel do
|
|
338
354
|
|
339
355
|
context "when exchange is re-declared with parameters different from original declaration" do
|
340
356
|
it "raises an exception" do
|
341
|
-
channel
|
342
|
-
channel.fanout("previously.declared.durable.topic.exchange", :durable => true)
|
357
|
+
@channel.fanout("previously.declared.durable.topic.exchange", :durable => true)
|
343
358
|
|
344
359
|
expect {
|
345
|
-
channel.fanout("previously.declared.durable.topic.exchange", :durable => false)
|
360
|
+
@channel.fanout("previously.declared.durable.topic.exchange", :durable => false)
|
346
361
|
}.to raise_error(AMQP::IncompatibleOptionsError)
|
347
362
|
|
348
363
|
done
|
@@ -362,7 +377,7 @@ describe AMQP::Channel do
|
|
362
377
|
exchange.name.should == name
|
363
378
|
|
364
379
|
done
|
365
|
-
end
|
380
|
+
end
|
366
381
|
end # context
|
367
382
|
|
368
383
|
context "when exchange name is omitted" do
|
@@ -372,7 +387,7 @@ describe AMQP::Channel do
|
|
372
387
|
exchange.name.should_not == "amq.topic2"
|
373
388
|
|
374
389
|
done
|
375
|
-
end
|
390
|
+
end
|
376
391
|
end # context
|
377
392
|
|
378
393
|
context "when passive option is used" do
|
@@ -387,23 +402,20 @@ describe AMQP::Channel do
|
|
387
402
|
|
388
403
|
done
|
389
404
|
end # it
|
390
|
-
end
|
405
|
+
end
|
391
406
|
|
392
407
|
context "and exchange with given name DOES NOT exist" do
|
393
|
-
it "
|
394
|
-
|
395
|
-
channel.on_error do |ch, channel_close|
|
396
|
-
@error_code = channel_close.reply_code
|
397
|
-
end
|
408
|
+
it "raises an exception" do
|
409
|
+
pending "Not yet supported"
|
398
410
|
|
399
|
-
|
411
|
+
expect {
|
412
|
+
exchange = @channel.topic("topic exchange declared at #{Time.now.to_i}", :passive => true)
|
413
|
+
}.to raise_error
|
400
414
|
|
401
|
-
done
|
402
|
-
@error_code.should == 404
|
403
|
-
}
|
415
|
+
done
|
404
416
|
end # it
|
405
417
|
end # context
|
406
|
-
end
|
418
|
+
end # context
|
407
419
|
|
408
420
|
|
409
421
|
context "when exchange is declared as durable" do
|
@@ -458,14 +470,16 @@ describe AMQP::Channel do
|
|
458
470
|
end # context
|
459
471
|
|
460
472
|
|
461
|
-
context "when exchange is re-declared with parameters different from
|
473
|
+
context "when exchange is re-declared with parameters different from original declaration" do
|
462
474
|
amqp_after do
|
463
475
|
done
|
464
476
|
end
|
465
477
|
|
466
478
|
it "raises an exception" do
|
467
479
|
channel = AMQP::Channel.new
|
480
|
+
|
468
481
|
channel.topic("previously.declared.durable.topic.exchange", :durable => true)
|
482
|
+
channel.should be_open
|
469
483
|
|
470
484
|
expect {
|
471
485
|
channel.topic("previously.declared.durable.topic.exchange", :durable => false)
|
@@ -484,8 +498,7 @@ describe AMQP::Channel do
|
|
484
498
|
let(:name) { "new.headers.exchange" }
|
485
499
|
|
486
500
|
it "declares a new headers exchange with that name" do
|
487
|
-
|
488
|
-
exchange = channel.headers(name)
|
501
|
+
exchange = @channel.headers(name)
|
489
502
|
|
490
503
|
exchange.name.should == name
|
491
504
|
|
@@ -499,8 +512,7 @@ describe AMQP::Channel do
|
|
499
512
|
end
|
500
513
|
|
501
514
|
it "uses amq.match" do
|
502
|
-
|
503
|
-
exchange = channel.headers
|
515
|
+
exchange = @channel.headers
|
504
516
|
exchange.name.should == "amq.match"
|
505
517
|
exchange.name.should_not == "amq.headers"
|
506
518
|
|
@@ -511,11 +523,10 @@ describe AMQP::Channel do
|
|
511
523
|
context "when passive option is used" do
|
512
524
|
context "and exchange with given name already exists" do
|
513
525
|
it "silently returns" do
|
514
|
-
name
|
515
|
-
channel = AMQP::Channel.new
|
526
|
+
name = "a_new_headers_exchange declared at #{Time.now.to_i}"
|
516
527
|
|
517
|
-
original_exchange = channel.headers(name)
|
518
|
-
exchange = channel.headers(name, :passive => true)
|
528
|
+
original_exchange = @channel.headers(name)
|
529
|
+
exchange = @channel.headers(name, :passive => true)
|
519
530
|
|
520
531
|
exchange.should == original_exchange
|
521
532
|
|
@@ -525,16 +536,13 @@ describe AMQP::Channel do
|
|
525
536
|
|
526
537
|
context "and exchange with given name DOES NOT exist" do
|
527
538
|
it "raises an exception" do
|
528
|
-
|
529
|
-
channel.on_error do |ch, channel_close|
|
530
|
-
@error_code = channel_close.reply_code
|
531
|
-
end
|
539
|
+
pending "Not yet supported"
|
532
540
|
|
533
|
-
|
541
|
+
expect {
|
542
|
+
exchange = @channel.headers("headers exchange declared at #{Time.now.to_i}", :passive => true)
|
543
|
+
}.to raise_error
|
534
544
|
|
535
|
-
done
|
536
|
-
@error_code.should == 404
|
537
|
-
}
|
545
|
+
done
|
538
546
|
end # it
|
539
547
|
end # context
|
540
548
|
end # context
|
@@ -542,8 +550,7 @@ describe AMQP::Channel do
|
|
542
550
|
|
543
551
|
context "when exchange is declared as durable" do
|
544
552
|
it "returns a new durable headers exchange" do
|
545
|
-
|
546
|
-
exchange = channel.headers("a_new_durable_headers_exchange", :durable => true)
|
553
|
+
exchange = @channel.headers("a_new_durable_headers_exchange", :durable => true)
|
547
554
|
exchange.should be_durable
|
548
555
|
exchange.should_not be_transient
|
549
556
|
|
@@ -554,8 +561,7 @@ describe AMQP::Channel do
|
|
554
561
|
|
555
562
|
context "when exchange is declared as non-durable" do
|
556
563
|
it "returns a new NON-durable headers exchange" do
|
557
|
-
|
558
|
-
exchange = channel.headers("a_new_non_durable_headers_exchange", :durable => false)
|
564
|
+
exchange = @channel.headers("a_new_non_durable_headers_exchange", :durable => false)
|
559
565
|
exchange.should_not be_durable
|
560
566
|
exchange.should be_transient
|
561
567
|
|
@@ -566,8 +572,7 @@ describe AMQP::Channel do
|
|
566
572
|
|
567
573
|
context "when exchange is declared as auto-deleted" do
|
568
574
|
it "returns a new auto-deleted headers exchange" do
|
569
|
-
|
570
|
-
exchange = channel.headers("a new auto-deleted headers exchange", :auto_delete => true)
|
575
|
+
exchange = @channel.headers("a new auto-deleted headers exchange", :auto_delete => true)
|
571
576
|
|
572
577
|
exchange.should be_auto_deleted
|
573
578
|
done
|
@@ -577,8 +582,7 @@ describe AMQP::Channel do
|
|
577
582
|
|
578
583
|
context "when exchange is declared as auto-deleted" do
|
579
584
|
it "returns a new auto-deleted headers exchange" do
|
580
|
-
|
581
|
-
exchange = channel.headers("a new non-auto-deleted headers exchange", :auto_delete => false)
|
585
|
+
exchange = @channel.headers("a new non-auto-deleted headers exchange", :auto_delete => false)
|
582
586
|
|
583
587
|
exchange.should_not be_auto_deleted
|
584
588
|
done
|
@@ -588,8 +592,7 @@ describe AMQP::Channel do
|
|
588
592
|
|
589
593
|
context "when exchange is declared without explicit :nowait parameter" do
|
590
594
|
it "is declared with :nowait by default" do
|
591
|
-
|
592
|
-
exchange = channel.headers("a new non-auto-deleted headers exchange", :auto_delete => false)
|
595
|
+
exchange = @channel.headers("a new non-auto-deleted headers exchange", :auto_delete => false)
|
593
596
|
|
594
597
|
exchange.should_not be_auto_deleted
|
595
598
|
done
|
@@ -603,15 +606,43 @@ describe AMQP::Channel do
|
|
603
606
|
end
|
604
607
|
|
605
608
|
it "raises an exception" do
|
606
|
-
channel
|
607
|
-
channel.headers("previously.declared.durable.headers.exchange", :durable => true)
|
609
|
+
@channel.headers("previously.declared.durable.headers.exchange", :durable => true)
|
608
610
|
|
609
611
|
expect {
|
610
|
-
channel.headers("previously.declared.durable.headers.exchange", :durable => false)
|
612
|
+
@channel.headers("previously.declared.durable.headers.exchange", :durable => false)
|
611
613
|
}.to raise_error(AMQP::IncompatibleOptionsError)
|
612
614
|
|
613
615
|
done
|
614
616
|
end # it
|
615
617
|
end # context
|
618
|
+
|
619
|
+
|
620
|
+
context "when exchange is re-declared with parameters different from original declaration on two separate channels" do
|
621
|
+
it "raises an exception" do
|
622
|
+
channel2 = AMQP::Channel.new
|
623
|
+
@channel.headers("previously.declared.durable.headers.exchange", :durable => true)
|
624
|
+
|
625
|
+
channel2.on_error do |ch, channel_close|
|
626
|
+
puts "reply_text: #{channel_close.reply_text}, reply_code: #{channel_close.reply_code}"
|
627
|
+
done
|
628
|
+
end
|
629
|
+
channel2.headers("previously.declared.durable.headers.exchange", :durable => false)
|
630
|
+
end # it
|
631
|
+
end # context
|
632
|
+
|
633
|
+
|
634
|
+
|
635
|
+
context "when exchange is re-declared with type different from original declaration on two separate channels" do
|
636
|
+
it "raises an exception" do
|
637
|
+
channel2 = AMQP::Channel.new
|
638
|
+
@channel.topic("previously.declared.durable.topic.exchange", :durable => true)
|
639
|
+
|
640
|
+
channel2.on_error do |ch, channel_close|
|
641
|
+
puts "reply_text: #{channel_close.reply_text}, reply_code: #{channel_close.reply_code}"
|
642
|
+
done
|
643
|
+
end
|
644
|
+
channel2.headers("previously.declared.durable.topic.exchange", :durable => true)
|
645
|
+
end # it
|
646
|
+
end # context
|
616
647
|
end # describe
|
617
648
|
end # describe AMQP
|