1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
# encoding: utf-8
require 'spec_helper'
describe AMQP do
#
# Environment
#
include EventedSpec::AMQPSpec
default_timeout 5
amqp_before do
@channel = AMQP::Channel.new
end
after(:all) do
AMQP.cleanup_state
done
end
#
# Examples
#
describe "#queue" do
context "when queue name is specified" do
let(:name) { "a queue declared at #{Time.now.to_i}" }
it "declares a new queue with that name" do
queue = @channel.queue(name)
queue.name.should == name
done
end
it "caches that queue" do
queue = @channel.queue(name)
@channel.queue(name).object_id.should == queue.object_id
done
end
end # context
context "when queue name is passed on as an empty string" do
context "and :nowait isn't used" do
it "uses server-assigned queue name" do
@channel.queue("") do |queue, *args|
queue.name.should_not be_empty
queue.should be_anonymous
queue.delete
done
end
end
end
context "and :nowait is used" do
it "raises ArgumentError" do
expect { AMQP::Queue.new(@channel, "", :nowait => true) }.to raise_error(ArgumentError, /makes no sense/)
expect { @channel.queue("", :nowait => true) }.to raise_error(ArgumentError, /makes no sense/)
done
end
end # context
end
context "when queue name is nil" do
it "raises ArgumentError" do
expect { AMQP::Queue.new(@channel, nil) }.to raise_error(ArgumentError, /queue name must not be nil/)
expect { @channel.queue(nil) }.to raise_error(ArgumentError, /queue name must not be nil/)
done
end
end # context
context "when queue is redeclared with different attributes" do
let(:name) { "amqp-gem.nondurable.queue" }
let(:options) {
{ :durable => false, :passive => false }
}
let(:different_options) {
{ :durable => true, :passive => false}
}
amqp_before do
@queue = @channel.queue(name, options)
delayed(0.25) { @queue.delete }
end
context "on the same channel" do
it "should raise ruby exception" do
expect {
@channel.queue(name, different_options)
}.to raise_error(AMQP::IncompatibleOptionsError)
@queue.delete
done
end
end
end
context "when passive option is used" do
context "and queue with given name already exists" do
it "silently returns" do
name = "a_new_queue declared at #{Time.now.to_i}"
original_queue = @channel.queue(name)
queue = @channel.queue(name, :passive => true)
queue.should == original_queue
done
end # it
end
context "and queue with given name DOES NOT exist" do
it "raises an exception" do
pending "Not yet supported"
expect {
exchange = @channel.queue("queue declared at #{Time.now.to_i}", :passive => true)
}.to raise_error
done
end # it
end # context
end # context
context "when queue is re-declared with parameters different from original declaration" do
it "raises an exception" do
@channel.queue("previously.declared.durable.queue", :durable => true)
expect {
@channel.queue("previously.declared.durable.queue", :durable => false)
}.to raise_error(AMQP::IncompatibleOptionsError)
done
end # it
end # context
end # describe
end # describe AMQP
|