From 3e4837ad04346b51501a64e8eaa7bf4210fe402f Mon Sep 17 00:00:00 2001 From: John Zhang Date: Thu, 2 Jun 2016 12:16:51 +1000 Subject: [PATCH 1/3] This fix the issue "QAbstractSocket::connectToHost() called when already looking up or connecting/connected to xxxx". When network down and up again, the connection lost and can not be reconnected. --- src/qamqpclient.cpp | 1 + tests/auto/qamqpclient/tst_qamqpclient.cpp | 32 ++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/qamqpclient.cpp b/src/qamqpclient.cpp index e460e05..c37ee4d 100644 --- a/src/qamqpclient.cpp +++ b/src/qamqpclient.cpp @@ -138,6 +138,7 @@ void QAmqpClientPrivate::_q_connect() if (socket->state() != QAbstractSocket::UnconnectedState) { qAmqpDebug() << Q_FUNC_INFO << "socket already connected, disconnecting.."; _q_disconnect(); + socket->abort(); } qAmqpDebug() << "connecting to host: " << host << ", port: " << port; diff --git a/tests/auto/qamqpclient/tst_qamqpclient.cpp b/tests/auto/qamqpclient/tst_qamqpclient.cpp index 548491e..b797990 100644 --- a/tests/auto/qamqpclient/tst_qamqpclient.cpp +++ b/tests/auto/qamqpclient/tst_qamqpclient.cpp @@ -24,6 +24,7 @@ private Q_SLOTS: void validateUri(); void issue38(); void issue38_take2(); + void networkDownThenUp(); public Q_SLOTS: // temporarily disabled void autoReconnect(); @@ -305,6 +306,37 @@ void tst_QAMQPClient::issue38_take2() QVERIFY(waitForSignal(&client,SIGNAL(disconnected()))); } +void tst_QAMQPClient::networkDownThenUp() +{ + QAmqpClient client; + client.setHost("localhost"); // this should be changed to your server OTHER THAN localhost, as we test the network connection down and up + client.setPort(5672); + client.setVirtualHost("/"); + client.setUsername("guest"); + client.setPassword("gutest"); + client.setAutoReconnect(false); + client.connectToHost(); + QVERIFY(waitForSignal(&client, SIGNAL(connected()))); + qDebug() << "Connection connected"; + + while (true) { + client.disconnectFromHost(); + if (waitForSignal(&client,SIGNAL(disconnected()))) { + qDebug() << "Connection disconnected"; + } else { + qDebug() << "Disconnect timeout"; + } + + client.connectToHost(); + if (waitForSignal(&client, SIGNAL(connected()))) { + qDebug() << "Connection connected"; + } else { + qDebug() << "Connection timeout"; + } + + QTest::qSleep(30000); + } +} QTEST_MAIN(tst_QAMQPClient) #include "tst_qamqpclient.moc" From 6f8f5e7584de058360183aa16e280284e02e41d0 Mon Sep 17 00:00:00 2001 From: John Zhang Date: Thu, 2 Jun 2016 12:29:46 +1000 Subject: [PATCH 2/3] A fix for the test time , it will run in 5 minutes. --- tests/auto/qamqpclient/tst_qamqpclient.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/auto/qamqpclient/tst_qamqpclient.cpp b/tests/auto/qamqpclient/tst_qamqpclient.cpp index b797990..dc58a98 100644 --- a/tests/auto/qamqpclient/tst_qamqpclient.cpp +++ b/tests/auto/qamqpclient/tst_qamqpclient.cpp @@ -319,7 +319,9 @@ void tst_QAMQPClient::networkDownThenUp() QVERIFY(waitForSignal(&client, SIGNAL(connected()))); qDebug() << "Connection connected"; - while (true) { + int i = 10; // during the 5 minutes test, please disable the ethernet connection and enabled it mannualy. + + while (i > 0) { client.disconnectFromHost(); if (waitForSignal(&client,SIGNAL(disconnected()))) { qDebug() << "Connection disconnected"; @@ -335,6 +337,8 @@ void tst_QAMQPClient::networkDownThenUp() } QTest::qSleep(30000); + + i--; } } From 31d7e924d8dd54a9cb200a5b4a209317602224c4 Mon Sep 17 00:00:00 2001 From: John Zhang Date: Thu, 2 Jun 2016 12:59:42 +1000 Subject: [PATCH 3/3] Fix the typo of the user name --- tests/auto/qamqpclient/tst_qamqpclient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qamqpclient/tst_qamqpclient.cpp b/tests/auto/qamqpclient/tst_qamqpclient.cpp index dc58a98..87ac002 100644 --- a/tests/auto/qamqpclient/tst_qamqpclient.cpp +++ b/tests/auto/qamqpclient/tst_qamqpclient.cpp @@ -313,7 +313,7 @@ void tst_QAMQPClient::networkDownThenUp() client.setPort(5672); client.setVirtualHost("/"); client.setUsername("guest"); - client.setPassword("gutest"); + client.setPassword("guest"); client.setAutoReconnect(false); client.connectToHost(); QVERIFY(waitForSignal(&client, SIGNAL(connected())));