summaryrefslogtreecommitdiff
path: root/qpid/cpp/management/ruby/spec/broker_spec.rb
diff options
context:
space:
mode:
authorJustin Ross <jross@apache.org>2016-04-21 12:31:34 +0000
committerJustin Ross <jross@apache.org>2016-04-21 12:31:34 +0000
commit71149592670f7592886751a9a866459bef0f12cc (patch)
treee4d1fd948055e36d1560112a318e77a210506d06 /qpid/cpp/management/ruby/spec/broker_spec.rb
parenta835fb2724824dcd8a470fb51424cedeb6b38f62 (diff)
downloadqpid-python-71149592670f7592886751a9a866459bef0f12cc.tar.gz
QPID-7207: Create independent cpp and python subtrees, with content from tools and extras
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1740289 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/management/ruby/spec/broker_spec.rb')
-rw-r--r--qpid/cpp/management/ruby/spec/broker_spec.rb373
1 files changed, 373 insertions, 0 deletions
diff --git a/qpid/cpp/management/ruby/spec/broker_spec.rb b/qpid/cpp/management/ruby/spec/broker_spec.rb
new file mode 100644
index 0000000000..6d6e1106a4
--- /dev/null
+++ b/qpid/cpp/management/ruby/spec/broker_spec.rb
@@ -0,0 +1,373 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+require 'spec_helper'
+
+describe Qpid::Management::Broker do
+ before(:each) do
+ @broker_port = `qpidd --no-data-dir --auth=no --no-module-dir --daemon --port 0`.chop
+ @connection = Qpid::Messaging::Connection.new(url:"localhost:#{@broker_port}")
+ @connection.open()
+ @agent = Qpid::Management::BrokerAgent.new(@connection)
+ @broker = @agent.broker
+ end
+
+ after(:each) do
+ @agent.close()
+ @connection.close()
+ `qpidd --quit --port #{@broker_port}`
+ end
+
+ def setup_queue_route
+ @other_port = `qpidd --no-data-dir --auth=no --no-module-dir --daemon --port 0`.chop
+ @broker.add_link('link1', 'localhost', @other_port)
+ @broker.add_queue('queue')
+ @broker.add_queue_route('qr1',
+ link: 'link1',
+ queue: 'queue',
+ exchange: 'amq.direct',
+ sync: 2)
+ end
+
+ %w(connection session subscription exchange queue binding link bridge).each do |type|
+ describe "##{type}s" do
+ before(:each) do
+ setup_queue_route if %w(link bridge).include?(type)
+ end
+
+ after(:each) do
+ if %w(link bridge).include?(type)
+ `qpidd --quit --port #{@other_port}`
+ end
+ end
+
+ let(:collection) { @broker.send("#{type}s") }
+
+ it "returns at least 1 #{type}" do
+ if type == 'subscription'
+ session = @connection.create_session
+ receiver = session.create_receiver("amq.direct/temp")
+ end
+ collection.count.should be > 0
+ end
+ end
+
+ describe "##{type}" do
+ before(:each) do
+ setup_queue_route if %w(link bridge).include?(type)
+ end
+
+ after(:each) do
+ if %w(link bridge).include?(type)
+ `qpidd --quit --port #{@other_port}`
+ end
+ end
+
+ let(:object) { @broker.send("#{type}s")[0] }
+
+ it "returns a #{type} by oid" do
+ if type == 'subscription'
+ session = @connection.create_session
+ receiver = session.create_receiver("amq.direct/temp")
+ end
+ @broker.send(type, object.short_id).id.should == object.id
+ end
+ end
+ end
+
+ describe '#add_exchange' do
+ %w(fanout direct topic headers).each do |type|
+ context "when adding a #{type} exchange" do
+ let(:exchange_name) { "#{type}1" }
+ before(:each) do
+ @before_creation = Time.now
+ @broker.add_exchange(type, exchange_name, {'qpid.replicate' => 'none'})
+ end
+
+ subject { @broker.exchange(exchange_name) }
+ its(:short_id) { should == exchange_name }
+ its(:type) { should == type }
+ its(:created_at) { should be > @before_creation }
+ it 'has the correct arguments' do
+ subject.arguments.should == {'qpid.replicate' => 'none'}
+ end
+ end
+ end
+ end
+
+ describe "#delete_exchange" do
+ before(:each) do
+ @before_creation = Time.now
+ @broker.add_exchange('fanout', 'fanout_to_delete')
+ end
+
+ let(:exchange) { @broker.exchange('fanout_to_delete') }
+
+ context "with a valid exchange name" do
+ it "deletes the exchange" do
+ @broker.delete_exchange(exchange.short_id)
+ expect { exchange.refresh! }.to raise_error
+ end
+ end
+
+ context "with an invalid exchange name" do
+ it "raises a not-found exception" do
+ expect { @broker.delete_exchange("badname") }.to raise_error(/not-found.*badname/)
+ end
+ end
+ end
+
+ describe "#add_queue" do
+ before(:each) do
+ @before_creation = Time.now
+ @queue_name = 'myqueue'
+ @broker.add_queue(@queue_name, {'qpid.replicate' => 'none'})
+ end
+
+ subject { @broker.queue(@queue_name) }
+ its(:short_id) { should == @queue_name }
+ its(:created_at) { should be > @before_creation }
+ it 'has the correct arguments' do
+ subject.arguments.should == {'qpid.replicate' => 'none'}
+ end
+ end
+
+ describe "#delete_queue" do
+ before(:each) do
+ @before_creation = Time.now
+ @broker.add_queue('queue_to_delete')
+ end
+
+ let(:queue) { @broker.queue('queue_to_delete') }
+
+ context "with a valid queue name" do
+ it "deletes the queue" do
+ @broker.delete_queue(queue.short_id)
+ expect { queue.refresh! }.to raise_error
+ end
+ end
+
+ context "with an invalid name" do
+ it "raises a not-found exception" do
+ expect { @broker.delete_queue("badname") }.to raise_error(/not-found.*badname/)
+ end
+ end
+ end
+
+ describe "#add_binding" do
+ before(:each) do
+ @broker.add_queue('queue')
+ end
+
+ it "creates a binding for a fanout exchange" do
+ @broker.add_exchange('fanout', 'fanout')
+ @broker.add_binding('fanout', 'queue')
+ expect { @broker.binding('org.apache.qpid.broker:exchange:fanout,org.apache.qpid.broker:queue:queue,') }.to_not raise_error
+ end
+
+ it "creates a binding for a direct exchange" do
+ @broker.add_exchange('direct', 'direct')
+ @broker.add_binding('direct', 'queue', 'mykey')
+ expect { @broker.binding('org.apache.qpid.broker:exchange:direct,org.apache.qpid.broker:queue:queue,mykey') }.to_not raise_error
+ end
+
+ it "creates a binding for a topic exchange" do
+ @broker.add_exchange('topic', 'topic')
+ @broker.add_binding('topic', 'queue', 'us.#')
+ expect { @broker.binding('org.apache.qpid.broker:exchange:topic,org.apache.qpid.broker:queue:queue,us.#') }.to_not raise_error
+ end
+ end
+
+ describe "#delete_binding" do
+ it "deletes an existing binding" do
+ @broker.add_queue('queue')
+ @broker.add_exchange('fanout', 'fanout')
+ @broker.add_binding('fanout', 'queue')
+ expect { @broker.delete_binding('fanout', 'queue') }.to_not raise_error
+ end
+ end
+
+ describe "#add_link" do
+ before(:each) do
+ @other_port = `/usr/sbin/qpidd --no-data-dir --auth=no --no-module-dir --daemon --port 0`.chop
+ end
+
+ after(:each) do
+ `/usr/sbin/qpidd -q --port #{@other_port}`
+ end
+
+ it "adds a link" do
+ @broker.add_link('link1', 'localhost', @other_port)
+ @broker.links.count.should == 1
+ end
+ end
+
+ describe "#delete_link" do
+ before(:each) do
+ @other_port = `/usr/sbin/qpidd --no-data-dir --auth=no --no-module-dir --daemon --port 0`.chop
+ @broker.add_link('link1', 'localhost', @other_port)
+ end
+
+ after(:each) do
+ `/usr/sbin/qpidd -q --port #{@other_port}`
+ end
+
+ it "deletes a link" do
+ @broker.delete_link('link1')
+ @broker.links.count.should == 0
+ end
+ end
+
+ describe "#add_queue_route" do
+ context "with missing options" do
+ [:link, :queue, :exchange, :sync].each do |opt|
+ opts = {link: 'l', queue: 'q', exchange: 'e', sync:2}
+ opts.delete(opt)
+ it "raises an error when :#{opt} is missing" do
+ expect { @broker.add_queue_route('name', opts) }.to raise_error(/Option :#{opt} is required/)
+ end
+ end
+ end
+
+ context "with all required options" do
+ before(:each) do
+ @other_port = `/usr/sbin/qpidd --no-data-dir --auth=no --no-module-dir --daemon --port 0`.chop
+ @broker.add_link('link1', 'localhost', @other_port)
+ @broker.add_queue('queue')
+ @broker.add_queue_route('qr1',
+ link: 'link1',
+ queue: 'queue',
+ exchange: 'amq.direct',
+ sync: 2)
+ end
+
+ after(:each) do
+ `/usr/sbin/qpidd -q --port #{@other_port}`
+ end
+
+ it "adds a queue route" do
+ @broker.bridges.count.should == 1
+ end
+
+ subject { @broker.bridges[0] }
+ its(:dest) { should == 'amq.direct' }
+ its(:durable) { should == false }
+ its(:dynamic) { should == false }
+ its(:excludes) { should == "" }
+ its(:key) { should == "" }
+ its(:name) { should == "qr1" }
+ its(:src) { should == "queue" }
+ its(:srcIsLocal) { should == false }
+ its(:srcIsQueue) { should == true }
+ its(:sync) { should == 2 }
+ its(:tag) { should == "" }
+ end
+ end
+
+ describe "#add_exchange_route" do
+ context "with missing options" do
+ [:link, :exchange, :key, :sync].each do |opt|
+ opts = {link: 'l', exchange: 'e', key:'rk', sync:2}
+ opts.delete(opt)
+ it "raises an error when :#{opt} is missing" do
+ expect { @broker.add_exchange_route('name', opts) }.to raise_error(/Option :#{opt} is required/)
+ end
+ end
+ end
+
+ context "with all required options" do
+ before(:each) do
+ @other_port = `/usr/sbin/qpidd --no-data-dir --auth=no --no-module-dir --daemon --port 0`.chop
+ @broker.add_link('link1', 'localhost', @other_port)
+ @broker.add_queue('queue')
+ @broker.add_exchange_route('er1',
+ link: 'link1',
+ exchange: 'amq.direct',
+ key: 'foo',
+ sync: 2)
+ end
+
+ after(:each) do
+ `/usr/sbin/qpidd -q --port #{@other_port}`
+ end
+
+ it "adds an exchange route" do
+ @broker.bridges.count.should == 1
+ end
+
+ subject { @broker.bridges[0] }
+ its(:dest) { should == 'amq.direct' }
+ its(:durable) { should == false }
+ its(:dynamic) { should == false }
+ its(:excludes) { should == "" }
+ its(:key) { should == "foo" }
+ its(:name) { should == "er1" }
+ its(:src) { should == "amq.direct" }
+ its(:srcIsLocal) { should == false }
+ its(:srcIsQueue) { should == false }
+ its(:sync) { should == 2 }
+ its(:tag) { should == "" }
+ end
+ end
+
+ describe "#add_dynamic_route" do
+ context "with missing options" do
+ [:link, :exchange, :sync].each do |opt|
+ opts = {link: 'l', exchange: 'e', sync:2}
+ opts.delete(opt)
+ it "raises an error when :#{opt} is missing" do
+ expect { @broker.add_dynamic_route('name', opts) }.to raise_error(/Option :#{opt} is required/)
+ end
+ end
+ end
+
+ context "with all required options" do
+ before(:each) do
+ @other_port = `/usr/sbin/qpidd --no-data-dir --auth=no --no-module-dir --daemon --port 0`.chop
+ @broker.add_link('link1', 'localhost', @other_port)
+ @broker.add_queue('queue')
+ @broker.add_dynamic_route('dr1',
+ link: 'link1',
+ exchange: 'amq.direct',
+ sync: 2)
+ end
+
+ after(:each) do
+ `/usr/sbin/qpidd -q --port #{@other_port}`
+ end
+
+ it "adds an exchange route" do
+ @broker.bridges.count.should == 1
+ end
+
+ subject { @broker.bridges[0] }
+ its(:dest) { should == 'amq.direct' }
+ its(:durable) { should == false }
+ its(:dynamic) { should == true }
+ its(:excludes) { should == "" }
+ its(:key) { should == "" }
+ its(:name) { should == "dr1" }
+ its(:src) { should == "amq.direct" }
+ its(:srcIsLocal) { should == false }
+ its(:srcIsQueue) { should == false }
+ its(:sync) { should == 2 }
+ its(:tag) { should == "" }
+ end
+ end
+end