2014-06-07 00:10:51 +08:00
|
|
|
#include <QScopedPointer>
|
|
|
|
|
|
2014-06-04 22:24:45 +08:00
|
|
|
#include <QtTest/QtTest>
|
|
|
|
|
#include "amqp_testcase.h"
|
|
|
|
|
|
|
|
|
|
#include "amqp_client.h"
|
|
|
|
|
#include "amqp_queue.h"
|
|
|
|
|
#include "amqp_exchange.h"
|
|
|
|
|
|
|
|
|
|
using namespace QAMQP;
|
|
|
|
|
class tst_QAMQPQueue : public TestCase
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
private Q_SLOTS:
|
2014-06-07 00:10:51 +08:00
|
|
|
void init();
|
|
|
|
|
void cleanup();
|
|
|
|
|
|
2014-06-04 22:24:45 +08:00
|
|
|
void defaultExchange();
|
|
|
|
|
|
2014-06-07 00:10:51 +08:00
|
|
|
void remove();
|
|
|
|
|
void removeIfUnused();
|
|
|
|
|
|
|
|
|
|
private: // disabled
|
|
|
|
|
void removeIfEmpty();
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
QScopedPointer<Client> client;
|
|
|
|
|
|
2014-06-04 22:24:45 +08:00
|
|
|
};
|
|
|
|
|
|
2014-06-07 00:10:51 +08:00
|
|
|
void tst_QAMQPQueue::init()
|
|
|
|
|
{
|
|
|
|
|
client.reset(new Client);
|
|
|
|
|
client->connectToHost();
|
|
|
|
|
QVERIFY(waitForSignal(client.data(), SIGNAL(connected())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_QAMQPQueue::cleanup()
|
2014-06-04 22:24:45 +08:00
|
|
|
{
|
2014-06-07 00:10:51 +08:00
|
|
|
client->disconnectFromHost();
|
|
|
|
|
QVERIFY(waitForSignal(client.data(), SIGNAL(disconnected())));
|
|
|
|
|
}
|
2014-06-04 22:24:45 +08:00
|
|
|
|
2014-06-07 00:10:51 +08:00
|
|
|
void tst_QAMQPQueue::defaultExchange()
|
|
|
|
|
{
|
|
|
|
|
Queue *queue = client->createQueue("test-default-exchange");
|
2014-06-04 22:24:45 +08:00
|
|
|
queue->declare();
|
|
|
|
|
QVERIFY(waitForSignal(queue, SIGNAL(declared())));
|
|
|
|
|
queue->consume();
|
|
|
|
|
|
2014-06-07 00:10:51 +08:00
|
|
|
Exchange *defaultExchange = client->createExchange();
|
2014-06-04 22:24:45 +08:00
|
|
|
defaultExchange->publish("test-default-exchange", "first message");
|
2014-06-06 03:40:17 +08:00
|
|
|
QVERIFY(waitForSignal(queue, SIGNAL(messageReceived())));
|
2014-06-06 03:34:08 +08:00
|
|
|
Message message = queue->getMessage();
|
|
|
|
|
QCOMPARE(message.payload(), QByteArray("first message"));
|
2014-06-07 00:10:51 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_QAMQPQueue::remove()
|
|
|
|
|
{
|
|
|
|
|
Queue *queue = client->createQueue("test-remove");
|
|
|
|
|
queue->declare();
|
|
|
|
|
QVERIFY(waitForSignal(queue, SIGNAL(declared())));
|
|
|
|
|
queue->remove(Queue::roIfEmpty|Queue::roIfUnused);
|
|
|
|
|
QVERIFY(waitForSignal(queue, SIGNAL(removed())));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_QAMQPQueue::removeIfUnused()
|
|
|
|
|
{
|
|
|
|
|
Queue *queue = client->createQueue("test-remove-if-unused");
|
|
|
|
|
queue->declare();
|
|
|
|
|
QVERIFY(waitForSignal(queue, SIGNAL(declared())));
|
|
|
|
|
queue->consume();
|
|
|
|
|
|
|
|
|
|
queue->remove(Queue::roIfUnused);
|
|
|
|
|
QVERIFY(waitForSignal(queue, SIGNAL(error(ChannelError))));
|
|
|
|
|
QCOMPARE(queue->error(), Channel::PreconditionFailed);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void tst_QAMQPQueue::removeIfEmpty()
|
|
|
|
|
{
|
|
|
|
|
// NOTE: this will work once I refactor messages to easily
|
|
|
|
|
// add propertis for e.g. persistence
|
|
|
|
|
|
|
|
|
|
Queue *queue = client->createQueue();
|
|
|
|
|
queue->declare("test-remove-if-empty", Queue::Durable);
|
|
|
|
|
QVERIFY(waitForSignal(queue, SIGNAL(declared())));
|
|
|
|
|
queue->consume();
|
|
|
|
|
|
|
|
|
|
Exchange *defaultExchange = client->createExchange();
|
|
|
|
|
defaultExchange->publish("test-remove-if-empty", "first message");
|
|
|
|
|
QVERIFY(waitForSignal(queue, SIGNAL(messageReceived())));
|
2014-06-04 22:24:45 +08:00
|
|
|
|
2014-06-07 00:10:51 +08:00
|
|
|
queue->remove(Queue::roIfEmpty);
|
|
|
|
|
QVERIFY(waitForSignal(queue, SIGNAL(error(ChannelError))));
|
|
|
|
|
QCOMPARE(queue->error(), Channel::PreconditionFailed);
|
2014-06-04 22:24:45 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QTEST_MAIN(tst_QAMQPQueue)
|
|
|
|
|
#include "tst_qamqpqueue.moc"
|