network auto tests: add QNetworkReply test for pipelining

Reviewed-by: Markus Goetz
Task-number: QTBUG-21369
(cherry picked from commit a32bfdef6d6b45c916f143dcf8495a2e102c3eec)

Change-Id: Iecde23c56f128008c5172675601928d83180358a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Peter Hartmann 2011-11-17 11:19:33 +01:00 committed by Qt by Nokia
parent b9acd85b2f
commit 1ddecb0aa2
1 changed files with 39 additions and 0 deletions

View File

@ -165,6 +165,7 @@ public Q_SLOTS:
void gotError();
void authenticationRequired(QNetworkReply*,QAuthenticator*);
void proxyAuthenticationRequired(const QNetworkProxy &,QAuthenticator*);
void pipeliningHelperSlot();
#ifndef QT_NO_OPENSSL
void sslErrors(QNetworkReply*,const QList<QSslError> &);
@ -384,6 +385,7 @@ private Q_SLOTS:
void authenticationCacheAfterCancel();
void authenticationWithDifferentRealm();
void synchronousAuthenticationCache();
void pipelining();
// NOTE: This test must be last!
void parentingRepliesToTheApp();
@ -6663,6 +6665,43 @@ void tst_QNetworkReply::synchronousAuthenticationCache()
}
}
void tst_QNetworkReply::pipelining()
{
QString urlString("http://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/echo.cgi?");
QList<QNetworkReplyPtr> replies;
for (int a = 0; a < 20; a++) {
QNetworkRequest request(urlString + QString::number(a));
request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, QVariant(true));
replies.append(manager.get(request));
connect(replies.at(a), SIGNAL(finished()), this, SLOT(pipeliningHelperSlot()));
}
QTestEventLoop::instance().enterLoop(20);
QVERIFY(!QTestEventLoop::instance().timeout());
}
void tst_QNetworkReply::pipeliningHelperSlot() {
static int a = 0;
// check that pipelining was used in at least one of the replies
static bool pipeliningWasUsed = false;
QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
bool pipeliningWasUsedInReply = reply->attribute(QNetworkRequest::HttpPipeliningWasUsedAttribute).toBool();
if (pipeliningWasUsedInReply)
pipeliningWasUsed = true;
// check that the contents match (the response to echo.cgi?3 should return 3 etc.)
QString urlQueryString = reply->url().queryItems().at(0).first;
QString content = reply->readAll();
QVERIFY2(urlQueryString == content, "data corruption with pipelining detected");
a++;
if (a == 20) { // all replies have finished
QTestEventLoop::instance().exitLoop();
QVERIFY2(pipeliningWasUsed, "pipelining was not used in any of the replies when trying to test pipelining");
}
}
// NOTE: This test must be last testcase in tst_qnetworkreply!
void tst_QNetworkReply::parentingRepliesToTheApp()
{