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
parent
b9acd85b2f
commit
1ddecb0aa2
|
|
@ -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()
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue