#include #include "signalspy.h" #include "amqp_testcase.h" #include "amqp_client.h" #include "amqp_exchange.h" #include "amqp_queue.h" using namespace QAMQP; class tst_QAMQPExchange : public TestCase { Q_OBJECT private Q_SLOTS: void init(); void cleanup(); void standardTypes_data(); void standardTypes(); void invalidDeclaration_data(); void invalidDeclaration(); void removeIfUnused(); private: QScopedPointer client; }; void tst_QAMQPExchange::init() { client.reset(new Client); client->connectToHost(); QVERIFY(waitForSignal(client.data(), SIGNAL(connected()))); } void tst_QAMQPExchange::cleanup() { if (client->isConnected()) { client->disconnectFromHost(); QVERIFY(waitForSignal(client.data(), SIGNAL(disconnected()))); } } void tst_QAMQPExchange::standardTypes_data() { QTest::addColumn("type"); QTest::newRow("direct") << Exchange::Direct; QTest::newRow("fanout") << Exchange::FanOut; QTest::newRow("topic") << Exchange::Topic; QTest::newRow("headers") << Exchange::Headers; } void tst_QAMQPExchange::standardTypes() { QFETCH(Exchange::ExchangeType, type); Exchange *exchange = client->createExchange("test"); exchange->declare(type); QVERIFY(waitForSignal(exchange, SIGNAL(declared()))); exchange->remove(Exchange::roForce); QVERIFY(waitForSignal(exchange, SIGNAL(removed()))); } void tst_QAMQPExchange::invalidDeclaration_data() { QTest::addColumn("exchangeName"); QTest::addColumn("type"); QTest::addColumn("error"); QTest::newRow("amq.direct") << "amq.direct" << Exchange::Direct << QAMQP::PreconditionFailedError; QTest::newRow("amq.fanout") << "amq.fanout" << Exchange::FanOut << QAMQP::PreconditionFailedError; QTest::newRow("amq.headers") << "amq.headers" << Exchange::Headers << QAMQP::PreconditionFailedError; QTest::newRow("amq.match") << "amq.match" << Exchange::Headers << QAMQP::PreconditionFailedError; QTest::newRow("amq.topic") << "amq.topic" << Exchange::Topic << QAMQP::PreconditionFailedError; QTest::newRow("amq.reserved") << "amq.reserved" << Exchange::Direct << QAMQP::AccessRefusedError; } void tst_QAMQPExchange::invalidDeclaration() { QFETCH(QString, exchangeName); QFETCH(Exchange::ExchangeType, type); QFETCH(QAMQP::Error, error); Exchange *exchange = client->createExchange(exchangeName); exchange->declare(type); QVERIFY(waitForSignal(exchange, SIGNAL(error(QAMQP::Error)))); QCOMPARE(exchange->error(), error); } void tst_QAMQPExchange::removeIfUnused() { Exchange *exchange = client->createExchange("test-if-unused-exchange"); exchange->declare(Exchange::Direct, Exchange::AutoDelete); QVERIFY(waitForSignal(exchange, SIGNAL(declared()))); Queue *queue = client->createQueue("test-if-unused-queue"); queue->declare(); QVERIFY(waitForSignal(queue, SIGNAL(declared()))); queue->bind("test-if-unused-exchange", "testRoutingKey"); QVERIFY(waitForSignal(queue, SIGNAL(bound()))); exchange->remove(Exchange::roIfUnused); QVERIFY(waitForSignal(exchange, SIGNAL(error(QAMQP::Error)))); QCOMPARE(exchange->error(), QAMQP::PreconditionFailedError); QVERIFY(!exchange->errorString().isEmpty()); // cleanup queue->remove(Queue::roForce); QVERIFY(waitForSignal(queue, SIGNAL(removed()))); } QTEST_MAIN(tst_QAMQPExchange) #include "tst_qamqpexchange.moc"