From 607af62b7ad0030d2771e111df8de339d2ad0ac1 Mon Sep 17 00:00:00 2001 From: Matt Broadstone Date: Thu, 5 Jun 2014 16:09:52 -0400 Subject: [PATCH] added crude autotest for autoReconnect, made connect and disconnect private slots of Client --- src/amqp_client.cpp | 30 ++++++++++------------ src/amqp_client.h | 2 ++ src/amqp_client_p.h | 4 +-- tests/auto/qamqpclient/tst_qamqpclient.cpp | 18 ++++++++++--- 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/amqp_client.cpp b/src/amqp_client.cpp index b45692a..3f38e87 100644 --- a/src/amqp_client.cpp +++ b/src/amqp_client.cpp @@ -46,7 +46,7 @@ void ClientPrivate::init(const QUrl &connectionString) if (connectionString.isValid()) { parseConnectionString(connectionString); - connect(); + _q_connect(); } } @@ -66,28 +66,24 @@ void ClientPrivate::parseConnectionString(const QUrl &connectionString) q->setVirtualHost(connectionString.path()); } -void ClientPrivate::connect() +void ClientPrivate::_q_connect() { if (socket->state() != QAbstractSocket::UnconnectedState) { qDebug() << Q_FUNC_INFO << "socket already connected, disconnecting.."; - disconnect(); + _q_disconnect(); } socket->connectToHost(host, port); } -void ClientPrivate::disconnect() +void ClientPrivate::_q_disconnect() { if (socket->state() == QAbstractSocket::UnconnectedState) { qDebug() << Q_FUNC_INFO << "already disconnected"; return; } - close(200, "client.disconnect"); - - // NOTE: this should be handled by signals, no need for dptr - // access here. - // connection_->d_func()->connected = false; + close(200, "client disconnect"); } // private slots @@ -106,6 +102,7 @@ void ClientPrivate::_q_heartbeat() void ClientPrivate::_q_socketError(QAbstractSocket::SocketError error) { + Q_Q(Client); if (timeout == 0) { timeout = 1000; } else { @@ -127,8 +124,9 @@ void ClientPrivate::_q_socketError(QAbstractSocket::SocketError error) break; } -// if (autoReconnect && connect) -// QTimer::singleShot(timeout, this, SLOT(connectTo())); + if (autoReconnect) { + QTimer::singleShot(timeout, q, SLOT(_q_connect())); + } } void ClientPrivate::_q_readyRead() @@ -438,7 +436,7 @@ Client::~Client() { Q_D(Client); if (d->connected) - d->disconnect(); + d->_q_disconnect(); } bool Client::isConnected() const @@ -607,12 +605,12 @@ void Client::connectToHost(const QString &connectionString) { Q_D(Client); if (connectionString.isEmpty()) { - d->connect(); + d->_q_connect(); return; } d->parseConnectionString(QUrl::fromUserInput(connectionString)); - d->connect(); + d->_q_connect(); } void Client::connectToHost(const QHostAddress &address, quint16 port) @@ -620,13 +618,13 @@ void Client::connectToHost(const QHostAddress &address, quint16 port) Q_D(Client); d->host = address.toString(); d->port = port; - d->connect(); + d->_q_connect(); } void Client::disconnectFromHost() { Q_D(Client); - d->disconnect(); + d->_q_disconnect(); } #include "moc_amqp_client.cpp" diff --git a/src/amqp_client.h b/src/amqp_client.h index b95b60a..179f4c2 100644 --- a/src/amqp_client.h +++ b/src/amqp_client.h @@ -78,6 +78,8 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_readyRead()) Q_PRIVATE_SLOT(d_func(), void _q_socketError(QAbstractSocket::SocketError error)) Q_PRIVATE_SLOT(d_func(), void _q_heartbeat()) + Q_PRIVATE_SLOT(d_func(), void _q_connect()) + Q_PRIVATE_SLOT(d_func(), void _q_disconnect()) friend class ChannelPrivate; diff --git a/src/amqp_client_p.h b/src/amqp_client_p.h index 5bf4ba2..0185e9a 100644 --- a/src/amqp_client_p.h +++ b/src/amqp_client_p.h @@ -36,8 +36,6 @@ public: virtual ~ClientPrivate(); void init(const QUrl &connectionString = QUrl()); - void connect(); - void disconnect(); void parseConnectionString(const QUrl &connectionString); void sendFrame(const Frame::Base &frame); @@ -46,6 +44,8 @@ public: void _q_readyRead(); void _q_socketError(QAbstractSocket::SocketError error); void _q_heartbeat(); + void _q_connect(); + void _q_disconnect(); virtual bool _q_method(const Frame::Method &frame); diff --git a/tests/auto/qamqpclient/tst_qamqpclient.cpp b/tests/auto/qamqpclient/tst_qamqpclient.cpp index 2954681..35cd0fa 100644 --- a/tests/auto/qamqpclient/tst_qamqpclient.cpp +++ b/tests/auto/qamqpclient/tst_qamqpclient.cpp @@ -1,6 +1,7 @@ #include #include "amqp_testcase.h" +#include #include "amqp_client.h" using namespace QAMQP; @@ -10,7 +11,7 @@ class tst_QAMQPClient : public TestCase private Q_SLOTS: void connect(); void connectDisconnect(); - void reconnect(); + void autoReconnect(); }; @@ -30,9 +31,20 @@ void tst_QAMQPClient::connectDisconnect() QVERIFY(waitForSignal(&client, SIGNAL(disconnected()))); } -void tst_QAMQPClient::reconnect() +void tst_QAMQPClient::autoReconnect() { - QVERIFY(true); + // TODO: this is a fairly crude way of testing this, research + // better alternatives + + Client client; + client.setAutoReconnect(true); + client.connectToHost(); + QVERIFY(waitForSignal(&client, SIGNAL(connected()))); + QProcess::execute("rabbitmqctl", QStringList() << "stop_app"); + QVERIFY(waitForSignal(&client, SIGNAL(disconnected()))); + QProcess::execute("rabbitmqctl", QStringList() << "start_app"); + QVERIFY(waitForSignal(&client, SIGNAL(connected()), 2)); + } QTEST_MAIN(tst_QAMQPClient)