summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorPeter Hartmann <phartmann@blackberry.com>2014-03-26 09:40:52 -0400
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-07 17:57:42 +0200
commit9c2ecf89eb773b4929d39a0a4929ce2b647aaaef (patch)
tree4b0af4c481e47b7d11b1a7f89774efa4df9f518f /tests/auto
parent362c75f7c10cb6aefdc638142dd3f8e1a74329cc (diff)
network: finish all pending replies upon error
... and not only one. This was a problem e.g. when there were several requests to the same host and the host was not reachable; only one reply would get an error signal in case we suppressed other errors in "happy eyeballs" host lookup style. Task-number: QTBUG-36890 Change-Id: I1b5757498bd644b0d773cf6c43e4950620949c5c Reviewed-by: Richard J. Moore <rich@kde.org>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 11ea8aebc8..fbac7dc77c 100644
--- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -177,6 +177,7 @@ public Q_SLOTS:
void authenticationRequired(QNetworkReply*,QAuthenticator*);
void proxyAuthenticationRequired(const QNetworkProxy &,QAuthenticator*);
void pipeliningHelperSlot();
+ void emitErrorForAllRepliesSlot();
#ifndef QT_NO_SSL
void sslErrors(QNetworkReply*,const QList<QSslError> &);
@@ -449,6 +450,8 @@ private Q_SLOTS:
void ftpAuthentication_data();
void ftpAuthentication();
+ void emitErrorForAllReplies(); // QTBUG-36890
+
#ifdef QT_BUILD_INTERNAL
void backgroundRequest_data();
void backgroundRequest();
@@ -7465,6 +7468,12 @@ void tst_QNetworkReply::pipeliningHelperSlot() {
}
}
+void tst_QNetworkReply::emitErrorForAllRepliesSlot() {
+ static int a = 0;
+ if (++a == 3)
+ QTestEventLoop::instance().exitLoop();
+}
+
void tst_QNetworkReply::closeDuringDownload_data()
{
QTest::addColumn<QUrl>("url");
@@ -7513,6 +7522,37 @@ void tst_QNetworkReply::ftpAuthentication()
QCOMPARE(reply->error(), QNetworkReply::NetworkError(error));
}
+void tst_QNetworkReply::emitErrorForAllReplies() // QTBUG-36890
+{
+ // port 100 is not well-known and should be closed
+ QList<QUrl> urls = QList<QUrl>() << QUrl("http://localhost:100/request1")
+ << QUrl("http://localhost:100/request2")
+ << QUrl("http://localhost:100/request3");
+ QList<QNetworkReply *> replies;
+ QList<QSignalSpy *> errorSpies;
+ QList<QSignalSpy *> finishedSpies;
+ for (int a = 0; a < urls.count(); ++a) {
+ QNetworkRequest request(urls.at(a));
+ QNetworkReply *reply = manager.get(request);
+ replies.append(reply);
+ QSignalSpy *errorSpy = new QSignalSpy(reply, SIGNAL(error(QNetworkReply::NetworkError)));
+ errorSpies.append(errorSpy);
+ QSignalSpy *finishedSpy = new QSignalSpy(reply, SIGNAL(finished()));
+ finishedSpies.append(finishedSpy);
+ QObject::connect(reply, SIGNAL(finished()), SLOT(emitErrorForAllRepliesSlot()));
+ }
+ QTestEventLoop::instance().enterLoop(10);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ for (int a = 0; a < urls.count(); ++a) {
+ QVERIFY(replies.at(a)->isFinished());
+ QCOMPARE(errorSpies.at(a)->count(), 1);
+ errorSpies.at(a)->deleteLater();
+ QCOMPARE(finishedSpies.at(a)->count(), 1);
+ finishedSpies.at(a)->deleteLater();
+ replies.at(a)->deleteLater();
+ }
+}
+
#ifdef QT_BUILD_INTERNAL
void tst_QNetworkReply::backgroundRequest_data()
{