added crude autotest for autoReconnect, made connect and disconnect private slots of Client

This commit is contained in:
Matt Broadstone 2014-06-05 16:09:52 -04:00
parent d9d52e489a
commit 607af62b7a
4 changed files with 33 additions and 21 deletions

View File

@ -46,7 +46,7 @@ void ClientPrivate::init(const QUrl &connectionString)
if (connectionString.isValid()) { if (connectionString.isValid()) {
parseConnectionString(connectionString); parseConnectionString(connectionString);
connect(); _q_connect();
} }
} }
@ -66,28 +66,24 @@ void ClientPrivate::parseConnectionString(const QUrl &connectionString)
q->setVirtualHost(connectionString.path()); q->setVirtualHost(connectionString.path());
} }
void ClientPrivate::connect() void ClientPrivate::_q_connect()
{ {
if (socket->state() != QAbstractSocket::UnconnectedState) { if (socket->state() != QAbstractSocket::UnconnectedState) {
qDebug() << Q_FUNC_INFO << "socket already connected, disconnecting.."; qDebug() << Q_FUNC_INFO << "socket already connected, disconnecting..";
disconnect(); _q_disconnect();
} }
socket->connectToHost(host, port); socket->connectToHost(host, port);
} }
void ClientPrivate::disconnect() void ClientPrivate::_q_disconnect()
{ {
if (socket->state() == QAbstractSocket::UnconnectedState) { if (socket->state() == QAbstractSocket::UnconnectedState) {
qDebug() << Q_FUNC_INFO << "already disconnected"; qDebug() << Q_FUNC_INFO << "already disconnected";
return; return;
} }
close(200, "client.disconnect"); close(200, "client disconnect");
// NOTE: this should be handled by signals, no need for dptr
// access here.
// connection_->d_func()->connected = false;
} }
// private slots // private slots
@ -106,6 +102,7 @@ void ClientPrivate::_q_heartbeat()
void ClientPrivate::_q_socketError(QAbstractSocket::SocketError error) void ClientPrivate::_q_socketError(QAbstractSocket::SocketError error)
{ {
Q_Q(Client);
if (timeout == 0) { if (timeout == 0) {
timeout = 1000; timeout = 1000;
} else { } else {
@ -127,8 +124,9 @@ void ClientPrivate::_q_socketError(QAbstractSocket::SocketError error)
break; break;
} }
// if (autoReconnect && connect) if (autoReconnect) {
// QTimer::singleShot(timeout, this, SLOT(connectTo())); QTimer::singleShot(timeout, q, SLOT(_q_connect()));
}
} }
void ClientPrivate::_q_readyRead() void ClientPrivate::_q_readyRead()
@ -438,7 +436,7 @@ Client::~Client()
{ {
Q_D(Client); Q_D(Client);
if (d->connected) if (d->connected)
d->disconnect(); d->_q_disconnect();
} }
bool Client::isConnected() const bool Client::isConnected() const
@ -607,12 +605,12 @@ void Client::connectToHost(const QString &connectionString)
{ {
Q_D(Client); Q_D(Client);
if (connectionString.isEmpty()) { if (connectionString.isEmpty()) {
d->connect(); d->_q_connect();
return; return;
} }
d->parseConnectionString(QUrl::fromUserInput(connectionString)); d->parseConnectionString(QUrl::fromUserInput(connectionString));
d->connect(); d->_q_connect();
} }
void Client::connectToHost(const QHostAddress &address, quint16 port) void Client::connectToHost(const QHostAddress &address, quint16 port)
@ -620,13 +618,13 @@ void Client::connectToHost(const QHostAddress &address, quint16 port)
Q_D(Client); Q_D(Client);
d->host = address.toString(); d->host = address.toString();
d->port = port; d->port = port;
d->connect(); d->_q_connect();
} }
void Client::disconnectFromHost() void Client::disconnectFromHost()
{ {
Q_D(Client); Q_D(Client);
d->disconnect(); d->_q_disconnect();
} }
#include "moc_amqp_client.cpp" #include "moc_amqp_client.cpp"

View File

@ -78,6 +78,8 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_readyRead()) 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_socketError(QAbstractSocket::SocketError error))
Q_PRIVATE_SLOT(d_func(), void _q_heartbeat()) 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; friend class ChannelPrivate;

View File

@ -36,8 +36,6 @@ public:
virtual ~ClientPrivate(); virtual ~ClientPrivate();
void init(const QUrl &connectionString = QUrl()); void init(const QUrl &connectionString = QUrl());
void connect();
void disconnect();
void parseConnectionString(const QUrl &connectionString); void parseConnectionString(const QUrl &connectionString);
void sendFrame(const Frame::Base &frame); void sendFrame(const Frame::Base &frame);
@ -46,6 +44,8 @@ public:
void _q_readyRead(); void _q_readyRead();
void _q_socketError(QAbstractSocket::SocketError error); void _q_socketError(QAbstractSocket::SocketError error);
void _q_heartbeat(); void _q_heartbeat();
void _q_connect();
void _q_disconnect();
virtual bool _q_method(const Frame::Method &frame); virtual bool _q_method(const Frame::Method &frame);

View File

@ -1,6 +1,7 @@
#include <QtTest/QtTest> #include <QtTest/QtTest>
#include "amqp_testcase.h" #include "amqp_testcase.h"
#include <QProcess>
#include "amqp_client.h" #include "amqp_client.h"
using namespace QAMQP; using namespace QAMQP;
@ -10,7 +11,7 @@ class tst_QAMQPClient : public TestCase
private Q_SLOTS: private Q_SLOTS:
void connect(); void connect();
void connectDisconnect(); void connectDisconnect();
void reconnect(); void autoReconnect();
}; };
@ -30,9 +31,20 @@ void tst_QAMQPClient::connectDisconnect()
QVERIFY(waitForSignal(&client, SIGNAL(disconnected()))); 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) QTEST_MAIN(tst_QAMQPClient)