summaryrefslogtreecommitdiffstats
path: root/tests/auto/network/access
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/network/access')
-rw-r--r--tests/auto/network/access/access.pro1
-rw-r--r--tests/auto/network/access/qabstractnetworkcache/qabstractnetworkcache.pro1
-rw-r--r--tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp10
-rw-r--r--tests/auto/network/access/qftp/qftp.pro4
-rw-r--r--tests/auto/network/access/qftp/tst_qftp.cpp220
-rw-r--r--tests/auto/network/access/qhttpnetworkconnection/qhttpnetworkconnection.pro1
-rw-r--r--tests/auto/network/access/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp2
-rw-r--r--tests/auto/network/access/qhttpnetworkreply/qhttpnetworkreply.pro1
-rw-r--r--tests/auto/network/access/qnetworkaccessmanager/qnetworkaccessmanager.pro1
-rw-r--r--tests/auto/network/access/qnetworkcachemetadata/qnetworkcachemetadata.pro1
-rw-r--r--tests/auto/network/access/qnetworkcookie/qnetworkcookie.pro1
-rw-r--r--tests/auto/network/access/qnetworkcookiejar/qnetworkcookiejar.pro1
-rw-r--r--tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp11
-rw-r--r--tests/auto/network/access/qnetworkdiskcache/qnetworkdiskcache.pro1
-rw-r--r--tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp5
-rw-r--r--tests/auto/network/access/qnetworkreply/echo/echo.pro1
-rw-r--r--tests/auto/network/access/qnetworkreply/test/test.pro1
-rw-r--r--tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp193
-rw-r--r--tests/auto/network/access/qnetworkrequest/qnetworkrequest.pro1
-rw-r--r--tests/auto/network/access/spdy/spdy.pro7
-rw-r--r--tests/auto/network/access/spdy/tst_spdy.cpp704
21 files changed, 993 insertions, 175 deletions
diff --git a/tests/auto/network/access/access.pro b/tests/auto/network/access/access.pro
index 3139f19f7b..bc76190e30 100644
--- a/tests/auto/network/access/access.pro
+++ b/tests/auto/network/access/access.pro
@@ -7,6 +7,7 @@ SUBDIRS=\
qnetworkrequest \
qhttpnetworkconnection \
qnetworkreply \
+ spdy \
qnetworkcachemetadata \
qftp \
qhttpnetworkreply \
diff --git a/tests/auto/network/access/qabstractnetworkcache/qabstractnetworkcache.pro b/tests/auto/network/access/qabstractnetworkcache/qabstractnetworkcache.pro
index 2b5ffab088..4772af9af9 100644
--- a/tests/auto/network/access/qabstractnetworkcache/qabstractnetworkcache.pro
+++ b/tests/auto/network/access/qabstractnetworkcache/qabstractnetworkcache.pro
@@ -6,4 +6,3 @@ SOURCES += tst_qabstractnetworkcache.cpp
TESTDATA += tests/*
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp b/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp
index 53b367c872..da86a2d14d 100644
--- a/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp
+++ b/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp
@@ -50,6 +50,8 @@
#include <QtNetwork/qnetworksession.h>
#endif
+#include <algorithm>
+
#define TESTFILE QString("http://%1/qtest/cgi-bin/").arg(QtNetworkSettings::serverName())
class tst_QAbstractNetworkCache : public QObject
@@ -334,8 +336,8 @@ void tst_QAbstractNetworkCache::runTest()
if (fetchFromCache) {
QList<QByteArray> rawHeaderList = reply->rawHeaderList();
QList<QByteArray> rawHeaderList2 = reply2->rawHeaderList();
- qSort(rawHeaderList);
- qSort(rawHeaderList2);
+ std::sort(rawHeaderList.begin(), rawHeaderList.end());
+ std::sort(rawHeaderList2.begin(), rawHeaderList2.end());
}
QCOMPARE(diskCache->gotData, fetchFromCache);
}
@@ -388,8 +390,8 @@ void tst_QAbstractNetworkCache::checkSynchronous()
if (fetchFromCache) {
QList<QByteArray> rawHeaderList = reply->rawHeaderList();
QList<QByteArray> rawHeaderList2 = reply2->rawHeaderList();
- qSort(rawHeaderList);
- qSort(rawHeaderList2);
+ std::sort(rawHeaderList.begin(), rawHeaderList.end());
+ std::sort(rawHeaderList2.begin(), rawHeaderList2.end());
}
QCOMPARE(diskCache->gotData, fetchFromCache);
}
diff --git a/tests/auto/network/access/qftp/qftp.pro b/tests/auto/network/access/qftp/qftp.pro
index 917cd10837..44161f4e1e 100644
--- a/tests/auto/network/access/qftp/qftp.pro
+++ b/tests/auto/network/access/qftp/qftp.pro
@@ -9,10 +9,6 @@ wince*: {
addFiles.files = rfc3252.txt
addFiles.path = .
DEPLOYMENT += addFiles
- DEFINES += SRCDIR=\\\"\\\"
-} else {
- DEFINES += SRCDIR=\\\"$$PWD/\\\"
}
CONFIG+=insignificant_test # QTBUG-15111: uses live qt-test-server, inherently unstable
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qftp/tst_qftp.cpp b/tests/auto/network/access/qftp/tst_qftp.cpp
index 71af9690be..5c6f48c59b 100644
--- a/tests/auto/network/access/qftp/tst_qftp.cpp
+++ b/tests/auto/network/access/qftp/tst_qftp.cpp
@@ -57,6 +57,14 @@
#include "../../../network-settings.h"
+template <class T1, class T2>
+static QByteArray msgComparison(T1 lhs, const char *op, T2 rhs)
+{
+ QString result;
+ QTextStream(&result) << lhs << ' ' << op << ' ' << rhs;
+ return result.toLatin1();
+}
+
class tst_QFtp : public QObject
{
Q_OBJECT
@@ -174,6 +182,7 @@ private:
bool inFileDirExistsFunction;
QString uniqueExtension;
+ QString rfc3252File;
};
//#define DUMP_SIGNALS
@@ -197,14 +206,18 @@ void tst_QFtp::initTestCase_data()
QTest::addColumn<bool>("setSession");
QTest::newRow("WithoutProxy") << false << 0 << false;
+#ifndef QT_NO_SOCKS5
QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy) << false;
+#endif
//### doesn't work well yet.
//QTest::newRow("WithHttpProxy") << true << int(QNetworkProxy::HttpProxy);
#ifndef QT_NO_BEARERMANAGEMENT
QTest::newRow("WithoutProxyWithSession") << false << 0 << true;
+#ifndef QT_NO_SOCKS5
QTest::newRow("WithSocks5ProxyAndSession") << true << int(QNetworkProxy::Socks5Proxy) << true;
#endif
+#endif
}
void tst_QFtp::initTestCase()
@@ -216,6 +229,8 @@ void tst_QFtp::initTestCase()
networkSessionImplicit->open();
QVERIFY(networkSessionImplicit->waitForOpened(60000)); //there may be user prompt on 1st connect
#endif
+ rfc3252File = QFINDTESTDATA("rfc3252.txt");
+ QVERIFY(!rfc3252File.isEmpty());
}
void tst_QFtp::cleanupTestCase()
@@ -232,11 +247,16 @@ void tst_QFtp::init()
QFETCH_GLOBAL(int, proxyType);
QFETCH_GLOBAL(bool, setSession);
if (setProxy) {
+#ifndef QT_NO_NETWORKPROXY
if (proxyType == QNetworkProxy::Socks5Proxy) {
QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::serverName(), 1080));
} else if (proxyType == QNetworkProxy::HttpProxy) {
QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::HttpProxy, QtNetworkSettings::serverName(), 3128));
}
+#else // !QT_NO_NETWORKPROXY
+ Q_UNUSED(proxyType);
+ QSKIP("No proxy support");
+#endif // QT_NO_NETWORKPROXY
}
#ifndef QT_NO_BEARERMANAGEMENT
if (setSession) {
@@ -293,7 +313,11 @@ void tst_QFtp::cleanup()
}
QFETCH_GLOBAL(bool, setProxy);
if (setProxy) {
+#ifndef QT_NO_NETWORKPROXY
QNetworkProxy::setApplicationProxy(QNetworkProxy::DefaultProxy);
+#else
+ QSKIP("No proxy support");
+#endif
}
delete ftp;
@@ -314,6 +338,16 @@ void tst_QFtp::connectToHost_data()
QTest::newRow( "error02" ) << QString("foo.bar") << (uint)21 << (int)QFtp::Unconnected;
}
+static QByteArray msgTimedOut(const QString &host, quint16 port = 0)
+{
+ QByteArray result = "Network operation timed out on " + host.toLatin1();
+ if (port) {
+ result += ':';
+ result += QByteArray::number(port);
+ }
+ return result;
+}
+
void tst_QFtp::connectToHost()
{
QFETCH( QString, host );
@@ -326,7 +360,7 @@ void tst_QFtp::connectToHost()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
QTEST( connectToHost_state, "state" );
@@ -334,9 +368,9 @@ void tst_QFtp::connectToHost()
QVERIFY( it != resultMap.end() );
QFETCH( int, state );
if ( state == QFtp::Connected ) {
- QVERIFY( it.value().success == 1 );
+ QCOMPARE( it.value().success, 1 );
} else {
- QVERIFY( it.value().success == 0 );
+ QCOMPARE( it.value().success , 0 );
}
}
@@ -369,10 +403,10 @@ void tst_QFtp::connectToUnresponsiveHost()
#endif
QVERIFY2(! QTestEventLoop::instance().timeout(), "Network timeout longer than expected (should have been 60 seconds)");
- QVERIFY( ftp->state() == QFtp::Unconnected);
+ QCOMPARE( ftp->state(), QFtp::Unconnected);
ResMapIt it = resultMap.find( QFtp::ConnectToHost );
QVERIFY( it != resultMap.end() );
- QVERIFY( it.value().success == 0 );
+ QCOMPARE( it.value().success, 0 );
delete ftp;
ftp = 0;
@@ -410,16 +444,17 @@ void tst_QFtp::login()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
ResMapIt it = resultMap.find( QFtp::Login );
QVERIFY( it != resultMap.end() );
QTEST( it.value().success, "success" );
+ const QFtp::State loginState = static_cast<QFtp::State>(login_state);
if ( it.value().success ) {
- QVERIFY( login_state == QFtp::LoggedIn );
+ QCOMPARE( loginState, QFtp::LoggedIn );
} else {
- QVERIFY( login_state != QFtp::LoggedIn );
+ QVERIFY2( loginState != QFtp::LoggedIn, msgComparison(loginState, "!=", QFtp::LoggedIn));
}
}
@@ -457,13 +492,13 @@ void tst_QFtp::close()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
QCOMPARE( close_state, (int)QFtp::Unconnected );
ResMapIt it = resultMap.find( QFtp::Close );
QVERIFY( it != resultMap.end() );
- QVERIFY( it.value().success == 1 );
+ QCOMPARE( it.value().success, 1 );
}
void tst_QFtp::list_data()
@@ -525,7 +560,7 @@ void tst_QFtp::list()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
ResMapIt it = resultMap.find( QFtp::List );
QVERIFY( it != resultMap.end() );
@@ -586,7 +621,7 @@ void tst_QFtp::cd()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() ) {
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
}
ResMapIt it = resultMap.find( QFtp::Cd );
@@ -611,8 +646,8 @@ void tst_QFtp::get_data()
QTest::addColumn<bool>("useIODevice");
// ### move this into external testdata
- QFile file( SRCDIR "rfc3252.txt" );
- QVERIFY( file.open( QIODevice::ReadOnly ) );
+ QFile file(rfc3252File);
+ QVERIFY2( file.open( QIODevice::ReadOnly ), qPrintable(file.errorString()) );
QByteArray rfc3252 = file.readAll();
// test the two get() overloads in one routine
@@ -662,7 +697,7 @@ void tst_QFtp::get()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
ResMapIt it = resultMap.find( QFtp::Get );
QVERIFY( it != resultMap.end() );
@@ -672,17 +707,17 @@ void tst_QFtp::get()
} else {
QTEST( newData_ba, "res" );
}
- QVERIFY( bytesTotal != bytesTotal_init );
+ QVERIFY2( bytesTotal != bytesTotal_init, msgComparison(bytesTotal, "!=", bytesTotal_init) );
if ( bytesTotal != -1 ) {
- QVERIFY( bytesDone == bytesTotal );
+ QCOMPARE( bytesDone, bytesTotal );
}
if ( useIODevice ) {
if ( bytesDone != bytesDone_init ) {
- QVERIFY( (int)buf_ba.size() == bytesDone );
+ QCOMPARE( qlonglong(buf_ba.size()), bytesDone );
}
} else {
if ( bytesDone != bytesDone_init ) {
- QVERIFY( (int)newData_ba.size() == bytesDone );
+ QCOMPARE( qlonglong(newData_ba.size()), bytesDone );
}
}
}
@@ -699,8 +734,8 @@ void tst_QFtp::put_data()
QTest::addColumn<int>("success");
// ### move this into external testdata
- QFile file( SRCDIR "rfc3252.txt" );
- QVERIFY( file.open( QIODevice::ReadOnly ) );
+ QFile file(rfc3252File);
+ QVERIFY2( file.open( QIODevice::ReadOnly ), qPrintable(file.errorString()) );
QByteArray rfc3252 = file.readAll();
QByteArray bigData( 10*1024*1024, 0 );
@@ -749,14 +784,14 @@ void tst_QFtp::put()
QFETCH( QByteArray, fileData );
QFETCH( bool, useIODevice );
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN) && !defined(QT_NO_NETWORKPROXY)
QFETCH_GLOBAL(bool, setProxy);
if (setProxy) {
QFETCH_GLOBAL(int, proxyType);
if (proxyType == QNetworkProxy::Socks5Proxy)
QSKIP("With socks5 the put() test takes too long time on Windows.");
}
-#endif
+#endif // OS_WIN && !QT_NO_NETWORKPROXY
const int timestep = 50;
@@ -788,7 +823,7 @@ void tst_QFtp::put()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
it = resultMap.find( QFtp::Put );
QVERIFY( it != resultMap.end() );
@@ -797,8 +832,8 @@ void tst_QFtp::put()
QVERIFY( !fileExists( host, port, user, password, file ) );
return; // the following tests are only meaningful if the file could be put
}
- QVERIFY( bytesTotal == (int)fileData.size() );
- QVERIFY( bytesDone == bytesTotal );
+ QCOMPARE( bytesTotal, qlonglong(fileData.size()) );
+ QCOMPARE( bytesDone, bytesTotal );
QVERIFY( fileExists( host, port, user, password, file ) );
@@ -821,9 +856,9 @@ void tst_QFtp::put()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
- QVERIFY( done_success == 1 );
+ QCOMPARE( done_success, 1 );
QTEST( buf.buffer(), "fileData" );
//////////////////////////////////////////////////////////////////
@@ -839,7 +874,7 @@ void tst_QFtp::put()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
it = resultMap.find( QFtp::Remove );
QVERIFY( it != resultMap.end() );
@@ -903,7 +938,7 @@ void tst_QFtp::mkdir()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
ResMapIt it = resultMap.find( QFtp::Mkdir );
QVERIFY( it != resultMap.end() );
@@ -928,7 +963,7 @@ void tst_QFtp::mkdir()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
it = resultMap.find( QFtp::Mkdir );
QVERIFY( it != resultMap.end() );
@@ -948,7 +983,7 @@ void tst_QFtp::mkdir()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
it = resultMap.find( QFtp::Rmdir );
QVERIFY( it != resultMap.end() );
@@ -1061,11 +1096,11 @@ void tst_QFtp::renameInit( const QString &host, const QString &user, const QStri
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host) );
ResMapIt it = resultMap.find( QFtp::Put );
QVERIFY( it != resultMap.end() );
- QVERIFY( it.value().success == 1 );
+ QCOMPARE( it.value().success, 1 );
QVERIFY( fileExists( host, 21, user, password, createFile ) );
}
@@ -1086,11 +1121,11 @@ void tst_QFtp::renameCleanup( const QString &host, const QString &user, const QS
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host) );
ResMapIt it = resultMap.find( QFtp::Remove );
QVERIFY( it != resultMap.end() );
- QVERIFY( it.value().success == 1 );
+ QCOMPARE( it.value().success, 1 );
QVERIFY( !fileExists( host, 21, user, password, fileToDelete ) );
}
@@ -1131,7 +1166,7 @@ void tst_QFtp::rename()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host) );
ResMapIt it = resultMap.find( QFtp::Rename );
QVERIFY( it != resultMap.end() );
@@ -1287,25 +1322,27 @@ void tst_QFtp::commandSequence()
QFETCH( QList<FtpCommand>, cmds );
ftp = newFtp();
+ QString host;
+ quint16 port = 0;
QList<FtpCommand>::iterator it;
for ( it = cmds.begin(); it != cmds.end(); ++it ) {
switch ( (*it).cmd ) {
case QFtp::ConnectToHost:
{
- QVERIFY( (*it).args.count() == 2 );
- uint port;
+ QCOMPARE( (*it).args.count(), 2 );
bool portOk;
- port = (*it).args[1].toUInt( &portOk );
+ port = (*it).args[1].toUShort( &portOk );
QVERIFY( portOk );
- ids << ftp->connectToHost( (*it).args[0], port );
+ host = (*it).args[0];
+ ids << ftp->connectToHost( host, port );
}
break;
case QFtp::Login:
- QVERIFY( (*it).args.count() == 2 );
+ QCOMPARE( (*it).args.count(), 2 );
ids << ftp->login( (*it).args[0], (*it).args[1] );
break;
case QFtp::Close:
- QVERIFY( (*it).args.count() == 0 );
+ QCOMPARE( (*it).args.count(), 0 );
ids << ftp->close();
break;
default:
@@ -1318,7 +1355,7 @@ void tst_QFtp::commandSequence()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host) );
QTEST( commandSequence_success, "success" );
}
@@ -1345,6 +1382,7 @@ void tst_QFtp::abort_data()
void tst_QFtp::abort()
{
+ QSKIP("This test takes too long.");
// In case you wonder where the abort() actually happens, look into
// tst_QFtp::dataTransferProgress
//
@@ -1376,7 +1414,7 @@ void tst_QFtp::abort()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
ResMapIt it = resultMap.find( cmd );
QVERIFY( it != resultMap.end() );
@@ -1386,18 +1424,18 @@ void tst_QFtp::abort()
// the operation was aborted. So we have to use some heuristics.
if ( host == QtNetworkSettings::serverName() ) {
if ( cmd == QFtp::Get ) {
- QVERIFY(bytesDone <= bytesTotal);
+ QVERIFY2(bytesDone <= bytesTotal, msgComparison(bytesDone, "<=", bytesTotal));
} else {
// put commands should always be aborted, since we use really
// big data
- QVERIFY( bytesDone != bytesTotal );
+ QVERIFY2( bytesDone != bytesTotal, msgComparison(bytesDone, "!=", bytesTotal) );
}
} else {
// this could be tested by verifying that no more progress signals are emitted
- QVERIFY(bytesDone <= bytesTotal);
+ QVERIFY2(bytesDone <= bytesTotal, msgComparison(bytesDone, "<=", bytesTotal));
}
} else {
- QVERIFY( bytesDone != bytesTotal );
+ QVERIFY2( bytesDone != bytesTotal, msgComparison(bytesDone, "!=", bytesTotal) );
}
if ( cmd == QFtp::Put ) {
@@ -1414,11 +1452,11 @@ void tst_QFtp::abort()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
it = resultMap.find( QFtp::Remove );
QVERIFY( it != resultMap.end() );
- QVERIFY( it.value().success == 1 );
+ QCOMPARE( it.value().success, 1 );
}
}
@@ -1453,7 +1491,7 @@ void tst_QFtp::bytesAvailable()
QTestEventLoop::instance().enterLoop( 40 );
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host) );
ResMapIt it = resultMap.find( QFtp::Get );
QVERIFY( it != resultMap.end() );
@@ -1469,7 +1507,7 @@ void tst_QFtp::bytesAvailable()
QCOMPARE(bytesAvailable_done, bytesAvailDone);
ftp->readAll();
- QVERIFY( ftp->bytesAvailable() == 0 );
+ QCOMPARE( ftp->bytesAvailable(), 0 );
delete ftp;
ftp = 0;
}
@@ -1487,7 +1525,7 @@ void tst_QFtp::activeMode()
connect(&ftp, SIGNAL(done(bool)), SLOT(activeModeDone(bool)));
QTestEventLoop::instance().enterLoop(900);
QFile::remove("tst_QFtp_activeMode_inittab");
- QVERIFY(done_success == 1);
+ QCOMPARE(done_success, 1);
}
@@ -1546,7 +1584,7 @@ void tst_QFtp::proxy()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() ) {
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(host, port) );
}
ResMapIt it = resultMap.find( QFtp::Cd );
@@ -1581,7 +1619,7 @@ void tst_QFtp::binaryAscii()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(QtNetworkSettings::serverName()) );
ResMapIt it = resultMap.find(QFtp::Put);
QVERIFY(it != resultMap.end());
@@ -1603,7 +1641,7 @@ void tst_QFtp::binaryAscii()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(QtNetworkSettings::serverName()) );
ResMapIt it2 = resultMap.find(QFtp::Get);
QVERIFY(it2 != resultMap.end());
@@ -1611,7 +1649,7 @@ void tst_QFtp::binaryAscii()
// most modern ftp servers leave the file as it is by default
// (and do not remove the windows line ending), the -1 below could be
// deleted in the future
- QVERIFY(getData.size() == putData.size()-1);
+ QCOMPARE(getData.size(), putData.size() - 1);
//////////////////////////////////////////////////////////////////
// cleanup (i.e. remove the file) -- this also tests the remove command
init();
@@ -1626,7 +1664,7 @@ void tst_QFtp::binaryAscii()
delete ftp;
ftp = 0;
if ( QTestEventLoop::instance().timeout() )
- QFAIL( "Network operation timed out" );
+ QFAIL( msgTimedOut(QtNetworkSettings::serverName()) );
it = resultMap.find( QFtp::Remove );
QVERIFY( it != resultMap.end() );
@@ -1653,11 +1691,11 @@ void tst_QFtp::commandStarted( int id )
qDebug( "%d:commandStarted( %d )", ftp->currentId(), id );
#endif
// make sure that the commandStarted and commandFinished are nested correctly
- QVERIFY( current_id == 0 );
+ QCOMPARE( current_id, 0 );
current_id = id;
QVERIFY( !ids.isEmpty() );
- QVERIFY( ids.first() == id );
+ QCOMPARE( ids.first(), id );
if ( ids.count() > 1 ) {
QVERIFY( ftp->hasPendingCommands() );
} else {
@@ -1665,10 +1703,10 @@ void tst_QFtp::commandStarted( int id )
}
QVERIFY( ftp->currentId() == id );
- QVERIFY( cur_state == ftp->state() );
+ QCOMPARE( cur_state, int(ftp->state()) );
CURRENTCOMMAND_TEST;
- QVERIFY( ftp->error() == QFtp::NoError );
+ QCOMPARE( ftp->error(), QFtp::NoError );
}
void tst_QFtp::commandFinished( int id, bool error )
@@ -1683,32 +1721,32 @@ void tst_QFtp::commandFinished( int id, bool error )
bytesAvailable_finished = ftp->bytesAvailable();
// make sure that the commandStarted and commandFinished are nested correctly
- QVERIFY( current_id == id );
+ QCOMPARE( current_id, id );
current_id = 0;
QVERIFY( !ids.isEmpty() );
- QVERIFY( ids.first() == id );
+ QCOMPARE( ids.first(), id );
if ( !error && ids.count() > 1) {
QVERIFY( ftp->hasPendingCommands() );
} else {
QVERIFY( !ftp->hasPendingCommands() );
}
if ( error ) {
- QVERIFY( ftp->error() != QFtp::NoError );
+ QVERIFY2( ftp->error() != QFtp::NoError, msgComparison(ftp->error(), "!=", QFtp::NoError) );
ids.clear();
} else {
- QVERIFY( ftp->error() == QFtp::NoError );
+ QCOMPARE( ftp->error(), QFtp::NoError );
ids.pop_front();
}
- QVERIFY( ftp->currentId() == id );
- QVERIFY( cur_state == ftp->state() );
+ QCOMPARE( ftp->currentId(), id );
+ QCOMPARE( cur_state, int(ftp->state()) );
CURRENTCOMMAND_TEST;
if ( QTest::currentTestFunction() != QLatin1String("commandSequence") ) {
ResMapIt it = resultMap.find( ftp->currentCommand() );
QVERIFY( it != resultMap.end() );
- QVERIFY( it.value().success == -1 );
+ QCOMPARE( it.value().success, -1 );
if ( error )
it.value().success = 0;
else
@@ -1723,25 +1761,25 @@ void tst_QFtp::done( bool error )
#endif
bytesAvailable_done = ftp->bytesAvailable();
- QVERIFY( ftp->currentId() == 0 );
+ QCOMPARE( ftp->currentId(), 0 );
QVERIFY( current_id == 0 );
QVERIFY( ids.isEmpty() );
QVERIFY( cur_state == ftp->state() );
QVERIFY( !ftp->hasPendingCommands() );
if ( QTest::currentTestFunction() == QLatin1String("commandSequence") ) {
- QVERIFY( commandSequence_success == -1 );
+ QCOMPARE( commandSequence_success, -1 );
if ( error )
commandSequence_success = 0;
else
commandSequence_success = 1;
}
- QVERIFY( done_success == -1 );
+ QCOMPARE( done_success, -1 );
if ( error ) {
- QVERIFY( ftp->error() != QFtp::NoError );
+ QVERIFY2( ftp->error() != QFtp::NoError, msgComparison(ftp->error(), "!=", QFtp::NoError) );
done_success = 0;
} else {
- QVERIFY( ftp->error() == QFtp::NoError );
+ QCOMPARE( ftp->error(), QFtp::NoError );
done_success = 1;
}
QTestEventLoop::instance().exitLoop();
@@ -1755,13 +1793,13 @@ void tst_QFtp::stateChanged( int state )
QCOMPARE( ftp->currentId(), current_id );
CURRENTCOMMAND_TEST;
- QVERIFY( state != cur_state );
+ QVERIFY2( state != cur_state, msgComparison(state, "!=", cur_state) );
QCOMPARE( state, (int)ftp->state() );
if ( state != QFtp::Unconnected ) {
// make sure that the states are always emitted in the right order (for
// this, we assume an ordering on the enum values, which they have at
// the moment)
- QVERIFY( cur_state < state );
+ QVERIFY2( cur_state < state, msgComparison(cur_state, "<", state) );
// make sure that state changes are only emitted in response to certain
// commands
@@ -1805,10 +1843,10 @@ void tst_QFtp::stateChanged( int state )
ResMapIt it = resultMap.find( QFtp::Close );
if ( it!=resultMap.end() && ftp->currentId()==it.value().id ) {
if ( state == QFtp::Closing ) {
- QVERIFY( close_state == -1 );
+ QCOMPARE( close_state, -1 );
close_state = state;
} else if ( state == QFtp::Unconnected ) {
- QVERIFY( close_state == QFtp::Closing );
+ QCOMPARE(close_state, int(QFtp::Closing) );
close_state = state;
}
}
@@ -1816,7 +1854,7 @@ void tst_QFtp::stateChanged( int state )
ResMapIt it = resultMap.find( QFtp::Login );
if ( it!=resultMap.end() && ftp->currentId()==it.value().id ) {
if ( state == QFtp::LoggedIn ) {
- QVERIFY( login_state == -1 );
+ QCOMPARE( login_state, -1 );
login_state = state;
}
}
@@ -1834,13 +1872,13 @@ void tst_QFtp::listInfo( const QUrlInfo &i )
} else {
QVERIFY( !ftp->hasPendingCommands() );
}
- QVERIFY( cur_state == ftp->state() );
+ QCOMPARE( cur_state, int(ftp->state()) );
CURRENTCOMMAND_TEST;
if ( QTest::currentTestFunction()==QLatin1String("list") || QTest::currentTestFunction()==QLatin1String("cd") || QTest::currentTestFunction()==QLatin1String("proxy") || inFileDirExistsFunction ) {
ResMapIt it = resultMap.find( QFtp::List );
QVERIFY( it != resultMap.end() );
- QVERIFY( ftp->currentId() == it.value().id );
+ QCOMPARE( ftp->currentId(), it.value().id );
listInfo_i << i;
}
}
@@ -1863,14 +1901,14 @@ void tst_QFtp::readyRead()
int oldSize = newData_ba.size();
qlonglong bytesAvail = ftp->bytesAvailable();
QByteArray ba = ftp->readAll();
- QVERIFY( ba.size() == (int) bytesAvail );
+ QCOMPARE( ba.size(), (int) bytesAvail );
newData_ba.resize( oldSize + ba.size() );
memcpy( newData_ba.data()+oldSize, ba.data(), ba.size() );
if ( bytesTotal != -1 ) {
- QVERIFY( (int)newData_ba.size() <= bytesTotal );
+ QVERIFY2( (int)newData_ba.size() <= bytesTotal, msgComparison(newData_ba.size(), "<=", bytesTotal) );
}
- QVERIFY( (int)newData_ba.size() == bytesDone );
+ QCOMPARE( qlonglong(newData_ba.size()), bytesDone );
}
}
@@ -1885,20 +1923,20 @@ void tst_QFtp::dataTransferProgress( qint64 done, qint64 total )
} else {
QVERIFY( !ftp->hasPendingCommands() );
}
- QVERIFY( cur_state == ftp->state() );
+ QCOMPARE( cur_state, int(ftp->state()) );
CURRENTCOMMAND_TEST;
if ( bytesTotal == bytesTotal_init ) {
bytesTotal = total;
} else {
- QVERIFY( bytesTotal == total );
+ QCOMPARE( bytesTotal, total );
}
- QVERIFY( bytesTotal != bytesTotal_init );
- QVERIFY( bytesDone <= done );
+ QVERIFY2( bytesTotal != bytesTotal_init, msgComparison(bytesTotal, "!=", bytesTotal_init) );
+ QVERIFY2( bytesDone <= done, msgComparison(bytesDone, "<=", done) );
bytesDone = done;
if ( bytesTotal != -1 ) {
- QVERIFY( bytesDone <= bytesTotal );
+ QVERIFY2( bytesDone <= bytesTotal, msgComparison(bytesDone, "<=", bytesTotal) );
}
if ( QTest::currentTestFunction() == QLatin1String("abort") ) {
@@ -2031,7 +2069,7 @@ bool tst_QFtp::dirExists( const QString &host, quint16 port, const QString &user
ftp = 0;
if ( QTestEventLoop::instance().timeout() ) {
// ### make this test work
- // QFAIL( "Network operation timed out" );
+ // QFAIL( msgTimedOut(host, port) );
qWarning("tst_QFtp::dirExists: Network operation timed out");
return false;
}
diff --git a/tests/auto/network/access/qhttpnetworkconnection/qhttpnetworkconnection.pro b/tests/auto/network/access/qhttpnetworkconnection/qhttpnetworkconnection.pro
index 5f5966e90d..fa19fa7ac9 100644
--- a/tests/auto/network/access/qhttpnetworkconnection/qhttpnetworkconnection.pro
+++ b/tests/auto/network/access/qhttpnetworkconnection/qhttpnetworkconnection.pro
@@ -5,4 +5,3 @@ SOURCES += tst_qhttpnetworkconnection.cpp
requires(contains(QT_CONFIG,private_tests))
QT = core-private network-private testlib
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp b/tests/auto/network/access/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp
index 8e0090e486..b793df674b 100644
--- a/tests/auto/network/access/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp
+++ b/tests/auto/network/access/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp
@@ -303,7 +303,7 @@ void tst_QHttpNetworkConnection::put_data()
QTest::newRow("success-internal") << "http://" << QtNetworkSettings::serverName() << "/dav/file1.txt" << ushort(80) << false << "Hello World\nEnd of file\n"<<true;
QTest::newRow("fail-internal") << "http://" << QtNetworkSettings::serverName() << "/dav2/file1.txt" << ushort(80) << false << "Hello World\nEnd of file\n"<<false;
- QTest::newRow("fail-host") << "http://" << "fluke-nosuchhost.troll.no" << "/dav2/file1.txt" << ushort(80) << false << "Hello World\nEnd of file\n"<<false;
+ QTest::newRow("fail-host") << "http://" << "invalid.test.qt-project.org" << "/dav2/file1.txt" << ushort(80) << false << "Hello World\nEnd of file\n"<<false;
}
void tst_QHttpNetworkConnection::put()
diff --git a/tests/auto/network/access/qhttpnetworkreply/qhttpnetworkreply.pro b/tests/auto/network/access/qhttpnetworkreply/qhttpnetworkreply.pro
index 2eb0944e44..f5dbc7f010 100644
--- a/tests/auto/network/access/qhttpnetworkreply/qhttpnetworkreply.pro
+++ b/tests/auto/network/access/qhttpnetworkreply/qhttpnetworkreply.pro
@@ -5,4 +5,3 @@ SOURCES += tst_qhttpnetworkreply.cpp
requires(contains(QT_CONFIG,private_tests))
QT = core-private network-private testlib
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qnetworkaccessmanager/qnetworkaccessmanager.pro b/tests/auto/network/access/qnetworkaccessmanager/qnetworkaccessmanager.pro
index e6354d0479..8b3de90f54 100644
--- a/tests/auto/network/access/qnetworkaccessmanager/qnetworkaccessmanager.pro
+++ b/tests/auto/network/access/qnetworkaccessmanager/qnetworkaccessmanager.pro
@@ -3,4 +3,3 @@ CONFIG += parallel_test
TARGET = tst_qnetworkaccessmanager
SOURCES += tst_qnetworkaccessmanager.cpp
QT = core network testlib
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qnetworkcachemetadata/qnetworkcachemetadata.pro b/tests/auto/network/access/qnetworkcachemetadata/qnetworkcachemetadata.pro
index 7342252963..d308c286fb 100644
--- a/tests/auto/network/access/qnetworkcachemetadata/qnetworkcachemetadata.pro
+++ b/tests/auto/network/access/qnetworkcachemetadata/qnetworkcachemetadata.pro
@@ -3,4 +3,3 @@ CONFIG += parallel_test
TARGET = tst_qnetworkcachemetadata
QT = core network testlib
SOURCES += tst_qnetworkcachemetadata.cpp
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qnetworkcookie/qnetworkcookie.pro b/tests/auto/network/access/qnetworkcookie/qnetworkcookie.pro
index edbc972011..ba3ece8576 100644
--- a/tests/auto/network/access/qnetworkcookie/qnetworkcookie.pro
+++ b/tests/auto/network/access/qnetworkcookie/qnetworkcookie.pro
@@ -4,4 +4,3 @@ TARGET = tst_qnetworkcookie
SOURCES += tst_qnetworkcookie.cpp
QT = core network testlib
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qnetworkcookiejar/qnetworkcookiejar.pro b/tests/auto/network/access/qnetworkcookiejar/qnetworkcookiejar.pro
index 2fc1485a50..bb39f83af6 100644
--- a/tests/auto/network/access/qnetworkcookiejar/qnetworkcookiejar.pro
+++ b/tests/auto/network/access/qnetworkcookiejar/qnetworkcookiejar.pro
@@ -4,4 +4,3 @@ TARGET = tst_qnetworkcookiejar
SOURCES += tst_qnetworkcookiejar.cpp
QT = core core-private network network-private testlib
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
index 4ee4b67ec0..bcfe9f090f 100644
--- a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
+++ b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
@@ -211,6 +211,17 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data()
result += cookie;
QTest::newRow("effective-tld2-accepted") << preset << cookie << "http://www.gobiernoelectronico.ar" << result << true;
+ result.clear();
+ preset.clear();
+ cookie.setDomain("127.0.0.1");
+ result += cookie;
+ QTest::newRow("IPv4-address-as-domain") << preset << cookie << "http://127.0.0.1/" << result << true;
+
+ result.clear();
+ preset.clear();
+ cookie.setDomain("fe80::250:56ff:fec0:1");
+ result += cookie;
+ QTest::newRow("IPv6-address-as-domain") << preset << cookie << "http://[fe80::250:56ff:fec0:1]/" << result << true;
// setting the defaults:
finalCookie = cookie;
diff --git a/tests/auto/network/access/qnetworkdiskcache/qnetworkdiskcache.pro b/tests/auto/network/access/qnetworkdiskcache/qnetworkdiskcache.pro
index 57f9c0534a..7e26abbe08 100644
--- a/tests/auto/network/access/qnetworkdiskcache/qnetworkdiskcache.pro
+++ b/tests/auto/network/access/qnetworkdiskcache/qnetworkdiskcache.pro
@@ -3,4 +3,3 @@ CONFIG += parallel_test
TARGET = tst_qnetworkdiskcache
QT = core network testlib
SOURCES += tst_qnetworkdiskcache.cpp
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp
index 54b560cc1b..44edcc66c0 100644
--- a/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp
+++ b/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp
@@ -43,6 +43,9 @@
#include <QtTest/QtTest>
#include <QtNetwork/QtNetwork>
#include <qnetworkdiskcache.h>
+
+#include <algorithm>
+
#define EXAMPLE_URL "http://user:pass@www.example.com/#foo"
//cached objects are organized into these many subdirs
#define NUM_SUBDIRECTORIES 16
@@ -464,7 +467,7 @@ void tst_QNetworkDiskCache::expire()
cacheList.append(metaData.url().toString());
}
}
- qSort(cacheList);
+ std::sort(cacheList.begin(), cacheList.end());
for (int i = 0; i < cacheList.count(); ++i) {
QString fileName = cacheList[i];
QCOMPARE(fileName, QString("http://www.foo.com/%1").arg(i + 6));
diff --git a/tests/auto/network/access/qnetworkreply/echo/echo.pro b/tests/auto/network/access/qnetworkreply/echo/echo.pro
index d634c677c6..1f05fd9a54 100644
--- a/tests/auto/network/access/qnetworkreply/echo/echo.pro
+++ b/tests/auto/network/access/qnetworkreply/echo/echo.pro
@@ -2,4 +2,3 @@ SOURCES += main.cpp
QT = core
CONFIG -= app_bundle debug_and_release_target
CONFIG += console
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qnetworkreply/test/test.pro b/tests/auto/network/access/qnetworkreply/test/test.pro
index cc58843eef..b683f620df 100644
--- a/tests/auto/network/access/qnetworkreply/test/test.pro
+++ b/tests/auto/network/access/qnetworkreply/test/test.pro
@@ -14,4 +14,3 @@ contains(QT_CONFIG,xcb): CONFIG+=insignificant_test # unstable, QTBUG-21102
win32:CONFIG += insignificant_test # QTBUG-24226
TEST_HELPER_INSTALLS = ../echo/echo
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 291b368e47..11ea8aebc8 100644
--- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -97,7 +97,9 @@ Q_DECLARE_METATYPE(QSharedPointer<char>)
#include "../../../network-settings.h"
Q_DECLARE_METATYPE(QAuthenticator*)
+#ifndef QT_NO_NETWORKPROXY
Q_DECLARE_METATYPE(QNetworkProxyQuery)
+#endif
typedef QSharedPointer<QNetworkReply> QNetworkReplyPtr;
@@ -106,6 +108,7 @@ class tst_QNetworkReply: public QObject
{
Q_OBJECT
+#ifndef QT_NO_NETWORKPROXY
struct ProxyData {
ProxyData(const QNetworkProxy &p, const QByteArray &t, bool auth)
: tag(t), proxy(p), requiresAuthentication(auth)
@@ -114,6 +117,7 @@ class tst_QNetworkReply: public QObject
QNetworkProxy proxy;
bool requiresAuthentication;
};
+#endif // !QT_NO_NETWORKPROXY
static bool seedCreated;
static QString createUniqueExtension() {
@@ -134,7 +138,9 @@ class tst_QNetworkReply: public QObject
QString wronlyFileName;
#endif
QString uniqueExtension;
+#ifndef QT_NO_NETWORKPROXY
QList<ProxyData> proxies;
+#endif
QNetworkAccessManager manager;
MyCookieJar *cookieJar;
#ifndef QT_NO_SSL
@@ -203,8 +209,10 @@ private Q_SLOTS:
void getFromHttp();
void getErrors_data();
void getErrors();
+#ifndef QT_NO_NETWORKPROXY
void headFromHttp_data();
void headFromHttp();
+#endif // !QT_NO_NETWORKPROXY
void putToFile_data();
void putToFile();
void putToFtp_data();
@@ -261,9 +269,11 @@ private Q_SLOTS:
void ioGetFromHttpWithAuth_data();
void ioGetFromHttpWithAuth();
void ioGetFromHttpWithAuthSynchronous();
+#ifndef QT_NO_NETWORKPROXY
void ioGetFromHttpWithProxyAuth();
void ioGetFromHttpWithProxyAuthSynchronous();
void ioGetFromHttpWithSocksProxy();
+#endif // !QT_NO_NETWORKPROXY
#ifndef QT_NO_SSL
void ioGetFromHttpsWithSslErrors();
void ioGetFromHttpsWithIgnoreSslErrors();
@@ -278,8 +288,10 @@ private Q_SLOTS:
void ioGetFromHttpWithCache_data();
void ioGetFromHttpWithCache();
+#ifndef QT_NO_NETWORKPROXY
void ioGetWithManyProxies_data();
void ioGetWithManyProxies();
+#endif // !QT_NO_NETWORKPROXY
void ioPutToFileFromFile_data();
void ioPutToFileFromFile();
@@ -297,10 +309,12 @@ private Q_SLOTS:
void ioPutToHttpFromFile();
void ioPostToHttpFromFile_data();
void ioPostToHttpFromFile();
+#ifndef QT_NO_NETWORKPROXY
void ioPostToHttpFromSocket_data();
void ioPostToHttpFromSocket();
void ioPostToHttpFromSocketSynchronous();
void ioPostToHttpFromSocketSynchronous_data();
+#endif // !QT_NO_NETWORKPROXY
void ioPostToHttpFromMiddleOfFileToEnd();
void ioPostToHttpFromMiddleOfFileFiveBytes();
void ioPostToHttpFromMiddleOfQBufferFiveBytes();
@@ -339,11 +353,13 @@ private Q_SLOTS:
void nestedEventLoops();
+#ifndef QT_NO_NETWORKPROXY
void httpProxyCommands_data();
void httpProxyCommands();
void httpProxyCommandsSynchronous_data();
void httpProxyCommandsSynchronous();
void proxyChange();
+#endif // !QT_NO_NETWORKPROXY
void authorizationError_data();
void authorizationError();
@@ -419,9 +435,11 @@ private Q_SLOTS:
void dontInsertPartialContentIntoTheCache();
void httpUserAgent();
+#ifndef QT_NO_NETWORKPROXY
void authenticationCacheAfterCancel_data();
void authenticationCacheAfterCancel();
void authenticationWithDifferentRealm();
+#endif // !QT_NO_NETWORKPROXY
void synchronousAuthenticationCache();
void pipelining();
@@ -512,7 +530,7 @@ class MiniHttpServer: public QTcpServer
{
Q_OBJECT
public:
- QTcpSocket *client; // always the last one that was received
+ QPointer<QTcpSocket> client; // always the last one that was received
QByteArray dataToTransmit;
QByteArray receivedData;
QSemaphore ready;
@@ -523,13 +541,15 @@ public:
int totalConnections;
MiniHttpServer(const QByteArray &data, bool ssl = false, QThread *thread = 0, bool useipv6 = false)
- : client(0), dataToTransmit(data), doClose(true), doSsl(ssl), ipv6(useipv6),
+ : dataToTransmit(data), doClose(true), doSsl(ssl), ipv6(useipv6),
multiple(false), totalConnections(0)
{
if (useipv6) {
- listen(QHostAddress::AnyIPv6);
+ if (!listen(QHostAddress::AnyIPv6))
+ qWarning() << "listen() IPv6 failed" << errorString();
} else {
- listen(QHostAddress::AnyIPv4);
+ if (!listen(QHostAddress::AnyIPv4))
+ qWarning() << "listen() IPv4 failed" << errorString();
}
if (thread) {
connect(thread, SIGNAL(started()), this, SLOT(threadStartedSlot()));
@@ -573,6 +593,7 @@ protected:
}
virtual void reply() {
+ Q_ASSERT(!client.isNull());
// we need to emulate the bytesWrittenSlot call if the data is empty.
if (dataToTransmit.size() == 0)
QMetaObject::invokeMethod(this, "bytesWrittenSlot", Qt::QueuedConnection);
@@ -582,10 +603,11 @@ protected:
private:
void connectSocketSignals()
{
+ Q_ASSERT(!client.isNull());
//qDebug() << "connectSocketSignals" << client;
- connect(client, SIGNAL(readyRead()), this, SLOT(readyReadSlot()));
- connect(client, SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWrittenSlot()));
- connect(client, SIGNAL(error(QAbstractSocket::SocketError)),
+ connect(client.data(), SIGNAL(readyRead()), this, SLOT(readyReadSlot()));
+ connect(client.data(), SIGNAL(bytesWritten(qint64)), this, SLOT(bytesWrittenSlot()));
+ connect(client.data(), SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(slotError(QAbstractSocket::SocketError)));
}
@@ -593,17 +615,20 @@ private slots:
#ifndef QT_NO_SSL
void slotSslErrors(const QList<QSslError>& errors)
{
+ Q_ASSERT(!client.isNull());
qDebug() << "slotSslErrors" << client->errorString() << errors;
}
#endif
void slotError(QAbstractSocket::SocketError err)
{
+ Q_ASSERT(!client.isNull());
qDebug() << "slotError" << err << client->errorString();
}
public slots:
void readyReadSlot()
{
+ Q_ASSERT(!client.isNull());
receivedData += client->readAll();
int doubleEndlPos = receivedData.indexOf("\r\n\r\n");
@@ -617,9 +642,11 @@ public slots:
}
void bytesWrittenSlot() {
+ Q_ASSERT(!client.isNull());
+ // Disconnect and delete in next cycle (else Windows clients will fail with RemoteHostClosedError).
if (doClose && client->bytesToWrite() == 0) {
- client->disconnectFromHost();
disconnect(client, 0, this, 0);
+ client->deleteLater();
}
}
@@ -638,6 +665,7 @@ public:
{ QNetworkCookieJar::setAllCookies(cookieList); }
};
+#ifndef QT_NO_NETWORKPROXY
class MyProxyFactory: public QNetworkProxyFactory
{
public:
@@ -660,6 +688,7 @@ public:
return toReturn;
}
};
+#endif // !QT_NO_NETWORKPROXY
class MyMemoryCache: public QAbstractNetworkCache
{
@@ -1154,7 +1183,9 @@ tst_QNetworkReply::tst_QNetworkReply()
{
qRegisterMetaType<QNetworkReply *>(); // for QSignalSpy
qRegisterMetaType<QAuthenticator *>();
+#ifndef QT_NO_NETWORKPROXY
qRegisterMetaType<QNetworkProxy>();
+#endif
#ifndef QT_NO_SSL
qRegisterMetaType<QList<QSslError> >();
#endif
@@ -1165,6 +1196,7 @@ tst_QNetworkReply::tst_QNetworkReply()
cookieJar = new MyCookieJar;
manager.setCookieJar(cookieJar);
+#ifndef QT_NO_NETWORKPROXY
QHostInfo hostInfo = QHostInfo::fromName(QtNetworkSettings::serverName());
proxies << ProxyData(QNetworkProxy::NoProxy, "", false);
@@ -1178,10 +1210,13 @@ tst_QNetworkReply::tst_QNetworkReply()
<< ProxyData(QNetworkProxy(QNetworkProxy::Socks5Proxy, proxyserver, 1080), "+socks", false)
<< ProxyData(QNetworkProxy(QNetworkProxy::Socks5Proxy, proxyserver, 1081), "+socksauth", true);
} else {
+#endif // !QT_NO_NETWORKPROXY
printf("==================================================================\n");
printf("Proxy could not be looked up. No proxy will be used while testing!\n");
printf("==================================================================\n");
+#ifndef QT_NO_NETWORKPROXY
}
+#endif // !QT_NO_NETWORKPROXY
}
tst_QNetworkReply::~tst_QNetworkReply()
@@ -1344,6 +1379,22 @@ QString tst_QNetworkReply::runCustomRequest(const QNetworkRequest &request,
return QString();
}
+static QByteArray msgWaitForFinished(QNetworkReplyPtr &reply)
+{
+ QString result;
+ QDebug debug(&result);
+ debug << reply->url();
+ if (reply->isFinished()) {
+ if (reply->error() == QNetworkReply::NoError)
+ debug << "finished.";
+ else
+ debug << "failed: #" << reply->error() << reply->errorString();
+ } else {
+ debug << "timed out.";
+ }
+ return result.toLocal8Bit();
+}
+
int tst_QNetworkReply::waitForFinish(QNetworkReplyPtr &reply)
{
int count = 0;
@@ -1438,7 +1489,9 @@ void tst_QNetworkReply::cleanup()
// clear the internal cache
manager.clearAccessCache();
+#ifndef QT_NO_NETWORKPROXY
manager.setProxy(QNetworkProxy());
+#endif
manager.setCache(0);
// clear cookies
@@ -1732,6 +1785,7 @@ void tst_QNetworkReply::getFromHttp()
QCOMPARE(reply->readAll(), reference.readAll());
}
+#ifndef QT_NO_NETWORKPROXY
void tst_QNetworkReply::headFromHttp_data()
{
QTest::addColumn<qint64>("referenceSize");
@@ -1790,6 +1844,7 @@ void tst_QNetworkReply::headFromHttp()
if (reply->header(QNetworkRequest::ContentTypeHeader).isValid())
QCOMPARE(reply->header(QNetworkRequest::ContentTypeHeader).toString(), contentType);
}
+#endif // !QT_NO_NETWORKPROXY
void tst_QNetworkReply::getErrors_data()
{
@@ -1805,7 +1860,7 @@ void tst_QNetworkReply::getErrors_data()
<< int(QNetworkReply::ProtocolUnknownError) << 0 << true;
// file: errors
- QTest::newRow("file-host") << "file://this-host-doesnt-exist.troll.no/foo.txt"
+ QTest::newRow("file-host") << "file://invalid.test.qt-project.org/foo.txt"
#if !defined Q_OS_WIN
<< int(QNetworkReply::ProtocolInvalidOperationError) << 0 << true;
#else
@@ -1826,7 +1881,7 @@ void tst_QNetworkReply::getErrors_data()
<< int(QNetworkReply::ContentAccessDenied) << 0 << true;
// ftp: errors
- QTest::newRow("ftp-host") << "ftp://this-host-doesnt-exist.troll.no/foo.txt"
+ QTest::newRow("ftp-host") << "ftp://invalid.test.qt-project.org/foo.txt"
<< int(QNetworkReply::HostNotFoundError) << 0 << true;
QTest::newRow("ftp-no-path") << "ftp://" + QtNetworkSettings::serverName()
<< int(QNetworkReply::ContentOperationNotPermittedError) << 0 << true;
@@ -1840,7 +1895,7 @@ void tst_QNetworkReply::getErrors_data()
<< int(QNetworkReply::ContentNotFoundError) << 0 << true;
// http: errors
- QTest::newRow("http-host") << "http://this-host-will-never-exist.troll.no/"
+ QTest::newRow("http-host") << "http://invalid.test.qt-project.org/"
<< int(QNetworkReply::HostNotFoundError) << 0 << true;
QTest::newRow("http-exist") << "http://" + QtNetworkSettings::serverName() + "/this-file-doesnt-exist.txt"
<< int(QNetworkReply::ContentNotFoundError) << 404 << false;
@@ -2802,7 +2857,7 @@ void tst_QNetworkReply::connectToIPv6Address()
QNetworkRequest request(url);
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QByteArray content = reply->readAll();
//qDebug() << server.receivedData;
QByteArray hostinfo = "\r\nHost: " + hostfield + ":" + QByteArray::number(server.serverPort()) + "\r\n";
@@ -2826,9 +2881,9 @@ void tst_QNetworkReply::sendCustomRequestToHttp_data()
QTest::newRow("trace") << QUrl("http://" + QtNetworkSettings::serverName()) <<
QByteArray("TRACE") << (QBuffer *) 0 << 200 << QNetworkReply::NoError << QByteArray();
QTest::newRow("connect") << QUrl("http://" + QtNetworkSettings::serverName()) <<
- QByteArray("CONNECT") << (QBuffer *) 0 << 400 << QNetworkReply::UnknownContentError << QByteArray(); // 400 = Bad Request
+ QByteArray("CONNECT") << (QBuffer *) 0 << 400 << QNetworkReply::ProtocolInvalidOperationError << QByteArray(); // 400 = Bad Request
QTest::newRow("nonsense") << QUrl("http://" + QtNetworkSettings::serverName()) <<
- QByteArray("NONSENSE") << (QBuffer *) 0 << 501 << QNetworkReply::ProtocolUnknownError << QByteArray(); // 501 = Method Not Implemented
+ QByteArray("NONSENSE") << (QBuffer *) 0 << 501 << QNetworkReply::OperationNotImplementedError << QByteArray(); // 501 = Method Not Implemented
QByteArray ba("test");
QBuffer *buffer = new QBuffer;
@@ -2983,7 +3038,7 @@ void tst_QNetworkReply::ioGetFromFtp()
QNetworkReplyPtr reply(manager.get(request));
DataReader reader(reply);
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -3038,7 +3093,7 @@ void tst_QNetworkReply::ioGetFromHttp()
QNetworkReplyPtr reply(manager.get(request));
DataReader reader(reply);
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -3092,7 +3147,7 @@ void tst_QNetworkReply::ioGetFromHttpWithReuseSequential()
QNetworkReplyPtr reply(manager.get(request));
DataReader reader(reply);
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -3110,7 +3165,7 @@ void tst_QNetworkReply::ioGetFromHttpWithReuseSequential()
QNetworkReplyPtr reply(manager.get(request));
DataReader reader(reply);
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -3189,7 +3244,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth()
connect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
manager.disconnect(SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
this, SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
@@ -3270,6 +3325,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuthSynchronous()
QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 401);
}
+#ifndef QT_NO_NETWORKPROXY
void tst_QNetworkReply::ioGetFromHttpWithProxyAuth()
{
// This test sends three requests
@@ -3321,7 +3377,7 @@ void tst_QNetworkReply::ioGetFromHttpWithProxyAuth()
connect(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
manager.disconnect(SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
@@ -3394,7 +3450,7 @@ void tst_QNetworkReply::ioGetFromHttpWithSocksProxy()
connect(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
manager.disconnect(SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
@@ -3432,6 +3488,7 @@ void tst_QNetworkReply::ioGetFromHttpWithSocksProxy()
QCOMPARE(authspy.count(), 0);
}
}
+#endif // !QT_NO_NETWORKPROXY
#ifndef QT_NO_SSL
void tst_QNetworkReply::ioGetFromHttpsWithSslErrors()
@@ -3448,7 +3505,7 @@ void tst_QNetworkReply::ioGetFromHttpsWithSslErrors()
SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
connect(reply, SIGNAL(metaDataChanged()), SLOT(storeSslConfiguration()));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
manager.disconnect(SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
this, SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
@@ -3479,7 +3536,7 @@ void tst_QNetworkReply::ioGetFromHttpsWithIgnoreSslErrors()
QSignalSpy sslspy(&manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)));
connect(reply, SIGNAL(metaDataChanged()), SLOT(storeSslConfiguration()));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reader.data, reference.readAll());
@@ -3592,7 +3649,7 @@ void tst_QNetworkReply::ioGetFromHttpStatus100()
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -3615,7 +3672,7 @@ void tst_QNetworkReply::ioGetFromHttpNoHeaders()
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -3793,6 +3850,7 @@ void tst_QNetworkReply::ioGetFromHttpWithCache()
QCOMPARE(reply->readAll().constData(), qPrintable(body));
}
+#ifndef QT_NO_NETWORKPROXY
void tst_QNetworkReply::ioGetWithManyProxies_data()
{
QTest::addColumn<QList<QNetworkProxy> >("proxyList");
@@ -4054,6 +4112,7 @@ void tst_QNetworkReply::ioGetWithManyProxies()
QCOMPARE(authspy.count(), 0);
}
}
+#endif // !QT_NO_NETWORKPROXY
void tst_QNetworkReply::ioPutToFileFromFile_data()
{
@@ -4077,7 +4136,7 @@ void tst_QNetworkReply::ioPutToFileFromFile()
QNetworkRequest request(url);
QNetworkReplyPtr reply(manager.put(request, &sourceFile));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -4112,7 +4171,7 @@ void tst_QNetworkReply::ioPutToFileFromSocket()
QNetworkReplyPtr reply(manager.put(QNetworkRequest(url), socketpair.endPoints[1]));
socketpair.endPoints[0]->close();
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->error(), QNetworkReply::NoError);
QCOMPARE(reply->url(), url);
@@ -4160,7 +4219,7 @@ void tst_QNetworkReply::ioPutToFileFromLocalSocket()
if (!data.isEmpty())
QEXPECT_FAIL("", "QTBUG-18385", Abort);
#endif
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->error(), QNetworkReply::NoError);
QCOMPARE(reply->url(), url);
@@ -4208,7 +4267,7 @@ void tst_QNetworkReply::ioPutToFileFromProcess()
QNetworkReplyPtr reply(manager.put(QNetworkRequest(url), &process));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -4242,7 +4301,7 @@ void tst_QNetworkReply::ioPutToFtpFromFile()
QNetworkRequest request(url);
QNetworkReplyPtr reply(manager.put(request, &sourceFile));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -4291,7 +4350,7 @@ void tst_QNetworkReply::ioPutToHttpFromFile()
QNetworkRequest request(url);
QNetworkReplyPtr reply(manager.put(request, &sourceFile));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -4306,7 +4365,7 @@ void tst_QNetworkReply::ioPutToHttpFromFile()
// correctly
reply.reset(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -4332,7 +4391,7 @@ void tst_QNetworkReply::ioPostToHttpFromFile()
QNetworkReplyPtr reply(manager.post(request, &sourceFile));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), url);
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -4346,6 +4405,7 @@ void tst_QNetworkReply::ioPostToHttpFromFile()
QCOMPARE(reply->readAll().trimmed(), md5sum(sourceFile.readAll()).toHex());
}
+#ifndef QT_NO_NETWORKPROXY
void tst_QNetworkReply::ioPostToHttpFromSocket_data()
{
QTest::addColumn<QByteArray>("data");
@@ -4418,7 +4478,7 @@ void tst_QNetworkReply::ioPostToHttpFromSocket()
QSignalSpy authenticationRequiredSpy(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)));
QSignalSpy proxyAuthenticationRequiredSpy(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
disconnect(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
@@ -4496,6 +4556,7 @@ void tst_QNetworkReply::ioPostToHttpFromSocketSynchronous()
QCOMPARE(reply->readAll().trimmed(), md5sum(data).toHex());
}
+#endif // !QT_NO_NETWORKPROXY
// this tests checks if rewinding the POST-data to some place in the middle
// worked.
@@ -4514,7 +4575,7 @@ void tst_QNetworkReply::ioPostToHttpFromMiddleOfFileToEnd()
connect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
disconnect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
this, SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
@@ -4543,7 +4604,7 @@ void tst_QNetworkReply::ioPostToHttpFromMiddleOfFileFiveBytes()
connect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
disconnect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
this, SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
@@ -4571,7 +4632,7 @@ void tst_QNetworkReply::ioPostToHttpFromMiddleOfQBufferFiveBytes()
connect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
disconnect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
this, SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
@@ -4711,7 +4772,7 @@ void tst_QNetworkReply::ioPostToHttpsUploadProgress()
incomingSocket->write("Content-Length: 0\r\n");
incomingSocket->write("\r\n");
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
incomingSocket->close();
server.close();
@@ -4770,7 +4831,7 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp()
QTime loopTime;
loopTime.start();
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
const int elapsedTime = loopTime.elapsed();
server.wait();
@@ -4925,7 +4986,7 @@ void tst_QNetworkReply::lastModifiedHeaderForFile()
QNetworkRequest request(url);
QNetworkReplyPtr reply(manager.head(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QDateTime header = reply->header(QNetworkRequest::LastModifiedHeader).toDateTime();
QCOMPARE(header, fileInfo.lastModified());
@@ -4939,7 +5000,7 @@ void tst_QNetworkReply::lastModifiedHeaderForHttp()
QNetworkRequest request(url);
QNetworkReplyPtr reply(manager.head(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QDateTime header = reply->header(QNetworkRequest::LastModifiedHeader).toDateTime();
QDateTime realDate = QDateTime::fromString("2007-05-22T12:04:57", Qt::ISODate);
@@ -4953,7 +5014,7 @@ void tst_QNetworkReply::httpCanReadLine()
QNetworkRequest request(QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/rfc3252.txt"));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -4999,7 +5060,7 @@ void tst_QNetworkReply::rateControl()
QTime loopTime;
loopTime.start();
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
int elapsedTime = loopTime.elapsed();
@@ -5124,7 +5185,7 @@ void tst_QNetworkReply::uploadProgress()
QTcpSocket *receiver = server.nextPendingConnection();
if (finished.count() == 0) {
// it's not finished yet, so wait for it to be
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
}
delete receiver;
@@ -5410,6 +5471,7 @@ void tst_QNetworkReply::nestedEventLoops()
QCOMPARE(errorspy.count(), 0);
}
+#ifndef QT_NO_NETWORKPROXY
void tst_QNetworkReply::httpProxyCommands_data()
{
QTest::addColumn<QUrl>("url");
@@ -5485,6 +5547,7 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous_data()
{
httpProxyCommands_data();
}
+#endif // !QT_NO_NETWORKPROXY
struct QThreadCleanup
{
@@ -5506,6 +5569,7 @@ struct QDeleteLaterCleanup
}
};
+#ifndef QT_NO_NETWORKPROXY
void tst_QNetworkReply::httpProxyCommandsSynchronous()
{
QFETCH(QUrl, url);
@@ -5586,6 +5650,7 @@ void tst_QNetworkReply::proxyChange()
QVERIFY(int(reply3->error()) > 0);
}
+#endif // !QT_NO_NETWORKPROXY
void tst_QNetworkReply::authorizationError_data()
{
@@ -6365,7 +6430,7 @@ void tst_QNetworkReply::getFromHttpIntoBufferCanReadLine()
request.setAttribute(QNetworkRequest::MaximumDownloadBufferSizeAttribute, 1024*1024*128); // 128 MB is max allowed
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->error(), QNetworkReply::NoError);
QVERIFY(reply->canReadLine());
@@ -6389,7 +6454,7 @@ void tst_QNetworkReply::ioGetFromHttpWithoutContentLength()
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->url(), request.url());
QVERIFY(reply->isFinished());
@@ -6437,7 +6502,7 @@ void tst_QNetworkReply::qtbug12908compressedHttpReply()
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QCOMPARE(reply->error(), QNetworkReply::NoError);
QCOMPARE(reply->size(), qint64(16384));
@@ -6502,6 +6567,7 @@ void tst_QNetworkReply::qtbug4121unknownAuthentication()
QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
}
+#ifndef QT_NO_NETWORKPROXY
void tst_QNetworkReply::authenticationCacheAfterCancel_data()
{
QTest::addColumn<QNetworkProxy>("proxy");
@@ -6715,6 +6781,7 @@ void tst_QNetworkReply::authenticationWithDifferentRealm()
QVERIFY(!QTestEventLoop::instance().timeout());
QCOMPARE(reply->error(), QNetworkReply::NoError);
}
+#endif // !QT_NO_NETWORKPROXY
class QtBug13431Helper : public QObject {
Q_OBJECT
@@ -6777,7 +6844,7 @@ void tst_QNetworkReply::httpWithNoCredentialUsage()
{
QNetworkRequest request(QUrl("http://httptest:httptest@" + QtNetworkSettings::serverName() + "/qtest/protected/cgi-bin/md5sum.cgi"));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
// credentials in URL, so don't expect authentication signal
QCOMPARE(authSpy.count(), 0);
QCOMPARE(finishedSpy.count(), 1);
@@ -6788,7 +6855,7 @@ void tst_QNetworkReply::httpWithNoCredentialUsage()
{
QNetworkRequest request(QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/protected/cgi-bin/md5sum.cgi"));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
// credentials in cache, so don't expect authentication signal
QCOMPARE(authSpy.count(), 0);
QCOMPARE(finishedSpy.count(), 1);
@@ -6825,7 +6892,7 @@ void tst_QNetworkReply::qtbug15311doubleContentLength()
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -6844,7 +6911,7 @@ void tst_QNetworkReply::qtbug18232gzipContentLengthZero()
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -6865,7 +6932,7 @@ void tst_QNetworkReply::qtbug22660gzipNoContentLengthEmptyContent()
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -6934,7 +7001,7 @@ void tst_QNetworkReply::qtbug27161httpHeaderMayBeDamaged(){
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -6984,7 +7051,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -6993,7 +7060,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
server.setDataToTransmit(getReply);
reply.reset(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -7004,7 +7071,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
request.setRawHeader("Content-Type", "text/plain");
reply.reset(manager.post(request, postData));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -7015,7 +7082,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
server.setDataToTransmit(getReply);
reply.reset(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -7025,7 +7092,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
server.setDataToTransmit(getReply);
reply.reset(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -7035,7 +7102,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
server.setDataToTransmit(putReply);
reply.reset(manager.put(request, postData));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -7044,7 +7111,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
server.setDataToTransmit(getReply);
reply.reset(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -7054,7 +7121,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
server.setDataToTransmit(getReply);
reply.reset(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
@@ -7263,7 +7330,7 @@ void tst_QNetworkReply::dontInsertPartialContentIntoTheCache()
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(server.totalConnections > 0);
QCOMPARE(reply->readAll().constData(), "load");
@@ -7280,7 +7347,7 @@ void tst_QNetworkReply::httpUserAgent()
request.setHeader(QNetworkRequest::UserAgentHeader, "abcDEFghi");
QNetworkReplyPtr reply(manager.get(request));
- QVERIFY(waitForFinish(reply) == Success);
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
diff --git a/tests/auto/network/access/qnetworkrequest/qnetworkrequest.pro b/tests/auto/network/access/qnetworkrequest/qnetworkrequest.pro
index bbcb9226aa..0470d96b8c 100644
--- a/tests/auto/network/access/qnetworkrequest/qnetworkrequest.pro
+++ b/tests/auto/network/access/qnetworkrequest/qnetworkrequest.pro
@@ -4,4 +4,3 @@ TARGET = tst_qnetworkrequest
SOURCES += tst_qnetworkrequest.cpp
QT = core network testlib
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/spdy/spdy.pro b/tests/auto/network/access/spdy/spdy.pro
new file mode 100644
index 0000000000..6bfc6d84e0
--- /dev/null
+++ b/tests/auto/network/access/spdy/spdy.pro
@@ -0,0 +1,7 @@
+CONFIG += testcase
+CONFIG += parallel_test
+TARGET = tst_spdy
+SOURCES += tst_spdy.cpp
+
+QT = core core-private network network-private testlib
+DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/network/access/spdy/tst_spdy.cpp b/tests/auto/network/access/spdy/tst_spdy.cpp
new file mode 100644
index 0000000000..3f69549bbd
--- /dev/null
+++ b/tests/auto/network/access/spdy/tst_spdy.cpp
@@ -0,0 +1,704 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtTest/QtTest>
+#include <QtNetwork/QNetworkAccessManager>
+#include <QtNetwork/QNetworkReply>
+#include <QtNetwork/QHttpPart>
+#include <QtNetwork/QHttpMultiPart>
+#include <QtNetwork/QNetworkProxy>
+#include <QtNetwork/QAuthenticator>
+#if defined(QT_BUILD_INTERNAL) && !defined(QT_NO_OPENSSL)
+#include <QtNetwork/private/qsslsocket_openssl_p.h>
+#endif // QT_BUILD_INTERNAL && !QT_NO_OPENSSL
+
+#include "../../../network-settings.h"
+
+Q_DECLARE_METATYPE(QAuthenticator*)
+
+class tst_Spdy: public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_Spdy();
+ ~tst_Spdy();
+
+private Q_SLOTS:
+ void initTestCase();
+ void settingsAndNegotiation_data();
+ void settingsAndNegotiation();
+#ifndef QT_NO_NETWORKPROXY
+ void download_data();
+ void download();
+#endif // !QT_NO_NETWORKPROXY
+ void headerFields();
+#ifndef QT_NO_NETWORKPROXY
+ void upload_data();
+ void upload();
+ void errors_data();
+ void errors();
+#endif // !QT_NO_NETWORKPROXY
+ void multipleRequests_data();
+ void multipleRequests();
+
+private:
+ QNetworkAccessManager m_manager;
+ int m_multipleRequestsCount;
+ int m_multipleRepliesFinishedCount;
+
+protected Q_SLOTS:
+ void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *authenticator);
+ void multipleRequestsFinishedSlot();
+};
+
+tst_Spdy::tst_Spdy()
+{
+#if defined(QT_BUILD_INTERNAL) && !defined(QT_NO_SSL) && OPENSSL_VERSION_NUMBER >= 0x1000100fL && !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
+ qRegisterMetaType<QNetworkReply *>(); // for QSignalSpy
+ qRegisterMetaType<QAuthenticator *>();
+
+ connect(&m_manager, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)),
+ this, SLOT(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)));
+#else
+ QSKIP("Qt built withouth OpenSSL, or the OpenSSL version is too old");
+#endif // defined(QT_BUILD_INTERNAL) && !defined(QT_NO_SSL) ...
+}
+
+tst_Spdy::~tst_Spdy()
+{
+}
+
+void tst_Spdy::initTestCase()
+{
+ QVERIFY(QtNetworkSettings::verifyTestNetworkSettings());
+}
+
+void tst_Spdy::settingsAndNegotiation_data()
+{
+ QTest::addColumn<QUrl>("url");
+ QTest::addColumn<bool>("setAttribute");
+ QTest::addColumn<bool>("enabled");
+ QTest::addColumn<QByteArray>("expectedProtocol");
+ QTest::addColumn<QByteArray>("expectedContent");
+
+ QTest::newRow("default-settings") << QUrl("https://" + QtNetworkSettings::serverName()
+ + "/qtest/cgi-bin/echo.cgi?1")
+ << false << false << QByteArray()
+ << QByteArray("1");
+
+ QTest::newRow("http-url") << QUrl("http://" + QtNetworkSettings::serverName()
+ + "/qtest/cgi-bin/echo.cgi?1")
+ << true << true << QByteArray()
+ << QByteArray("1");
+
+ QTest::newRow("spdy-disabled") << QUrl("https://" + QtNetworkSettings::serverName()
+ + "/qtest/cgi-bin/echo.cgi?1")
+ << true << false << QByteArray()
+ << QByteArray("1");
+
+#ifndef QT_NO_OPENSSL
+ QTest::newRow("spdy-enabled") << QUrl("https://" + QtNetworkSettings::serverName()
+ + "/qtest/cgi-bin/echo.cgi?1")
+ << true << true << QByteArray(QSslConfiguration::NextProtocolSpdy3_0)
+ << QByteArray("1");
+#endif // QT_NO_OPENSSL
+}
+
+void tst_Spdy::settingsAndNegotiation()
+{
+ QFETCH(QUrl, url);
+ QFETCH(bool, setAttribute);
+ QFETCH(bool, enabled);
+
+ QNetworkRequest request(url);
+
+ if (setAttribute) {
+ request.setAttribute(QNetworkRequest::SpdyAllowedAttribute, QVariant(enabled));
+ }
+
+ QNetworkReply *reply = m_manager.get(request);
+ reply->ignoreSslErrors();
+ QSignalSpy metaDataChangedSpy(reply, SIGNAL(metaDataChanged()));
+ QSignalSpy readyReadSpy(reply, SIGNAL(readyRead()));
+ QSignalSpy finishedSpy(reply, SIGNAL(finished()));
+
+ QObject::connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ QSignalSpy finishedManagerSpy(&m_manager, SIGNAL(finished(QNetworkReply*)));
+
+ QTestEventLoop::instance().enterLoop(15);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+
+ QFETCH(QByteArray, expectedProtocol);
+
+#ifndef QT_NO_OPENSSL
+ bool expectedSpdyUsed = (expectedProtocol == QSslConfiguration::NextProtocolSpdy3_0)
+ ? true : false;
+ QCOMPARE(reply->attribute(QNetworkRequest::SpdyWasUsedAttribute).toBool(), expectedSpdyUsed);
+#endif // QT_NO_OPENSSL
+
+ QCOMPARE(metaDataChangedSpy.count(), 1);
+ QCOMPARE(finishedSpy.count(), 1);
+
+ int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+ QCOMPARE(statusCode, 200);
+
+ QByteArray content = reply->readAll();
+
+ QFETCH(QByteArray, expectedContent);
+ QCOMPARE(expectedContent, content);
+
+#ifndef QT_NO_OPENSSL
+ QSslConfiguration::NextProtocolNegotiationStatus expectedStatus =
+ (expectedProtocol.isEmpty())
+ ? QSslConfiguration::NextProtocolNegotiationNone
+ : QSslConfiguration::NextProtocolNegotiationNegotiated;
+ QCOMPARE(reply->sslConfiguration().nextProtocolNegotiationStatus(),
+ expectedStatus);
+
+ QCOMPARE(reply->sslConfiguration().nextNegotiatedProtocol(), expectedProtocol);
+#endif // QT_NO_OPENSSL
+}
+
+void tst_Spdy::proxyAuthenticationRequired(const QNetworkProxy &/*proxy*/,
+ QAuthenticator *authenticator)
+{
+ authenticator->setUser("qsockstest");
+ authenticator->setPassword("password");
+}
+
+#ifndef QT_NO_NETWORKPROXY
+void tst_Spdy::download_data()
+{
+ QTest::addColumn<QUrl>("url");
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QNetworkProxy>("proxy");
+
+ QTest::newRow("mediumfile") << QUrl("https://" + QtNetworkSettings::serverName()
+ + "/qtest/rfc3252.txt")
+ << QFINDTESTDATA("../qnetworkreply/rfc3252.txt")
+ << QNetworkProxy();
+
+ QHostInfo hostInfo = QHostInfo::fromName(QtNetworkSettings::serverName());
+ QString proxyserver = hostInfo.addresses().first().toString();
+
+ QTest::newRow("mediumfile-http-proxy") << QUrl("https://" + QtNetworkSettings::serverName()
+ + "/qtest/rfc3252.txt")
+ << QFINDTESTDATA("../qnetworkreply/rfc3252.txt")
+ << QNetworkProxy(QNetworkProxy::HttpProxy, proxyserver, 3128);
+
+ QTest::newRow("mediumfile-http-proxy-auth") << QUrl("https://" + QtNetworkSettings::serverName()
+ + "/qtest/rfc3252.txt")
+ << QFINDTESTDATA("../qnetworkreply/rfc3252.txt")
+ << QNetworkProxy(QNetworkProxy::HttpProxy,
+ proxyserver, 3129);
+
+ QTest::newRow("mediumfile-socks-proxy") << QUrl("https://" + QtNetworkSettings::serverName()
+ + "/qtest/rfc3252.txt")
+ << QFINDTESTDATA("../qnetworkreply/rfc3252.txt")
+ << QNetworkProxy(QNetworkProxy::Socks5Proxy, proxyserver, 1080);
+
+ QTest::newRow("mediumfile-socks-proxy-auth") << QUrl("https://" + QtNetworkSettings::serverName()
+ + "/qtest/rfc3252.txt")
+ << QFINDTESTDATA("../qnetworkreply/rfc3252.txt")
+ << QNetworkProxy(QNetworkProxy::Socks5Proxy,
+ proxyserver, 1081);
+
+ QTest::newRow("bigfile") << QUrl("https://" + QtNetworkSettings::serverName()
+ + "/qtest/bigfile")
+ << QFINDTESTDATA("../qnetworkreply/bigfile")
+ << QNetworkProxy();
+}
+
+void tst_Spdy::download()
+{
+ QFETCH(QUrl, url);
+ QFETCH(QString, fileName);
+ QFETCH(QNetworkProxy, proxy);
+
+ QNetworkRequest request(url);
+ request.setAttribute(QNetworkRequest::SpdyAllowedAttribute, true);
+
+ if (proxy.type() != QNetworkProxy::DefaultProxy) {
+ m_manager.setProxy(proxy);
+ }
+ QNetworkReply *reply = m_manager.get(request);
+ reply->ignoreSslErrors();
+ QSignalSpy metaDataChangedSpy(reply, SIGNAL(metaDataChanged()));
+ QSignalSpy downloadProgressSpy(reply, SIGNAL(downloadProgress(qint64, qint64)));
+ QSignalSpy readyReadSpy(reply, SIGNAL(readyRead()));
+ QSignalSpy finishedSpy(reply, SIGNAL(finished()));
+
+ QObject::connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ QSignalSpy finishedManagerSpy(&m_manager, SIGNAL(finished(QNetworkReply*)));
+ QSignalSpy proxyAuthRequiredSpy(&m_manager, SIGNAL(
+ proxyAuthenticationRequired(const QNetworkProxy &,
+ QAuthenticator *)));
+
+ QTestEventLoop::instance().enterLoop(15);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+
+ QCOMPARE(finishedManagerSpy.count(), 1);
+ QCOMPARE(metaDataChangedSpy.count(), 1);
+ QCOMPARE(finishedSpy.count(), 1);
+ QVERIFY(downloadProgressSpy.count() > 0);
+ QVERIFY(readyReadSpy.count() > 0);
+
+ QVERIFY(proxyAuthRequiredSpy.count() <= 1);
+
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->attribute(QNetworkRequest::SpdyWasUsedAttribute).toBool(), true);
+ QCOMPARE(reply->attribute(QNetworkRequest::ConnectionEncryptedAttribute).toBool(), true);
+ QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
+
+ QFile file(fileName);
+ QVERIFY(file.open(QIODevice::ReadOnly));
+
+ qint64 contentLength = reply->header(QNetworkRequest::ContentLengthHeader).toLongLong();
+ qint64 expectedContentLength = file.bytesAvailable();
+ QCOMPARE(contentLength, expectedContentLength);
+
+ QByteArray expectedContent = file.readAll();
+ QByteArray content = reply->readAll();
+ QCOMPARE(content, expectedContent);
+
+ reply->deleteLater();
+ m_manager.setProxy(QNetworkProxy()); // reset
+}
+#endif // !QT_NO_NETWORKPROXY
+
+void tst_Spdy::headerFields()
+{
+ QUrl url(QUrl("https://" + QtNetworkSettings::serverName()));
+ QNetworkRequest request(url);
+ request.setAttribute(QNetworkRequest::SpdyAllowedAttribute, true);
+
+ QNetworkReply *reply = m_manager.get(request);
+ reply->ignoreSslErrors();
+
+ QObject::connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+
+ QTestEventLoop::instance().enterLoop(15);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+
+ QCOMPARE(reply->rawHeader("Content-Type"), QByteArray("text/html"));
+ QVERIFY(reply->rawHeader("Content-Length").toInt() > 0);
+ QVERIFY(reply->rawHeader("server").contains("Apache"));
+
+ QCOMPARE(reply->header(QNetworkRequest::ContentTypeHeader).toByteArray(), QByteArray("text/html"));
+ QVERIFY(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong() > 0);
+ QVERIFY(reply->header(QNetworkRequest::LastModifiedHeader).toDateTime().isValid());
+ QVERIFY(reply->header(QNetworkRequest::ServerHeader).toByteArray().contains("Apache"));
+}
+
+static inline QByteArray md5sum(const QByteArray &data)
+{
+ return QCryptographicHash::hash(data, QCryptographicHash::Md5).toHex().append('\n');
+}
+
+#ifndef QT_NO_NETWORKPROXY
+void tst_Spdy::upload_data()
+{
+ QTest::addColumn<QUrl>("url");
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QByteArray>("uploadMethod");
+ QTest::addColumn<QObject *>("uploadObject");
+ QTest::addColumn<QByteArray>("md5sum");
+ QTest::addColumn<QNetworkProxy>("proxy");
+
+
+ // 1. test uploading of byte arrays
+
+ QUrl md5Url("https://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/md5sum.cgi");
+
+ QByteArray data;
+ data = "";
+ QObject *dummyObject = 0;
+ QTest::newRow("empty") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data) << QNetworkProxy();
+
+ data = "This is a normal message.";
+ QTest::newRow("generic") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data) << QNetworkProxy();
+
+ data = "This is a message to show that Qt rocks!\r\n\n";
+ QTest::newRow("small") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data) << QNetworkProxy();
+
+ data = QByteArray("abcd\0\1\2\abcd",12);
+ QTest::newRow("with-nul") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data) << QNetworkProxy();
+
+ data = QByteArray(4097, '\4');
+ QTest::newRow("4k+1") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data)<< QNetworkProxy();
+
+ QHostInfo hostInfo = QHostInfo::fromName(QtNetworkSettings::serverName());
+ QString proxyserver = hostInfo.addresses().first().toString();
+
+ QTest::newRow("4k+1-with-http-proxy") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data)
+ << QNetworkProxy(QNetworkProxy::HttpProxy, proxyserver, 3128);
+
+ QTest::newRow("4k+1-with-http-proxy-auth") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data)
+ << QNetworkProxy(QNetworkProxy::HttpProxy,
+ proxyserver, 3129);
+
+ QTest::newRow("4k+1-with-socks-proxy") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data)
+ << QNetworkProxy(QNetworkProxy::Socks5Proxy, proxyserver, 1080);
+
+ QTest::newRow("4k+1-with-socks-proxy-auth") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data)
+ << QNetworkProxy(QNetworkProxy::Socks5Proxy,
+ proxyserver, 1081);
+
+ data = QByteArray(128*1024+1, '\177');
+ QTest::newRow("128k+1") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data) << QNetworkProxy();
+
+ data = QByteArray(128*1024+1, '\177');
+ QTest::newRow("128k+1-put") << md5Url << data << QByteArray("PUT") << dummyObject
+ << md5sum(data) << QNetworkProxy();
+
+ data = QByteArray(2*1024*1024+1, '\177');
+ QTest::newRow("2MB+1") << md5Url << data << QByteArray("POST") << dummyObject
+ << md5sum(data) << QNetworkProxy();
+
+
+ // 2. test uploading of files
+
+ QFile *file = new QFile(QFINDTESTDATA("../qnetworkreply/rfc3252.txt"));
+ file->open(QIODevice::ReadOnly);
+ QTest::newRow("file-26K") << md5Url << QByteArray() << QByteArray("POST")
+ << static_cast<QObject *>(file)
+ << QByteArray("b3e32ac459b99d3f59318f3ac31e4bee\n") << QNetworkProxy();
+
+ QFile *file2 = new QFile(QFINDTESTDATA("../qnetworkreply/image1.jpg"));
+ file2->open(QIODevice::ReadOnly);
+ QTest::newRow("file-1MB") << md5Url << QByteArray() << QByteArray("POST")
+ << static_cast<QObject *>(file2)
+ << QByteArray("87ef3bb319b004ba9e5e9c9fa713776e\n") << QNetworkProxy();
+
+
+ // 3. test uploading of multipart
+
+ QUrl multiPartUrl("https://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/multipart.cgi");
+
+ QHttpPart imagePart31;
+ imagePart31.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
+ imagePart31.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"testImage1\""));
+ imagePart31.setRawHeader("Content-Location", "http://my.test.location.tld");
+ imagePart31.setRawHeader("Content-ID", "my@id.tld");
+ QFile *file31 = new QFile(QFINDTESTDATA("../qnetworkreply/image1.jpg"));
+ file31->open(QIODevice::ReadOnly);
+ imagePart31.setBodyDevice(file31);
+ QHttpMultiPart *imageMultiPart3 = new QHttpMultiPart(QHttpMultiPart::FormDataType);
+ imageMultiPart3->append(imagePart31);
+ file31->setParent(imageMultiPart3);
+ QHttpPart imagePart32;
+ imagePart32.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
+ imagePart32.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"testImage2\""));
+ QFile *file32 = new QFile(QFINDTESTDATA("../qnetworkreply/image2.jpg"));
+ file32->open(QIODevice::ReadOnly);
+ imagePart32.setBodyDevice(file31); // check that resetting works
+ imagePart32.setBodyDevice(file32);
+ imageMultiPart3->append(imagePart32);
+ file32->setParent(imageMultiPart3);
+ QHttpPart imagePart33;
+ imagePart33.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
+ imagePart33.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"testImage3\""));
+ QFile *file33 = new QFile(QFINDTESTDATA("../qnetworkreply/image3.jpg"));
+ file33->open(QIODevice::ReadOnly);
+ imagePart33.setBodyDevice(file33);
+ imageMultiPart3->append(imagePart33);
+ file33->setParent(imageMultiPart3);
+ QByteArray expectedData = "content type: multipart/form-data; boundary=\""
+ + imageMultiPart3->boundary();
+ expectedData.append("\"\nkey: testImage1, value: 87ef3bb319b004ba9e5e9c9fa713776e\n"
+ "key: testImage2, value: 483761b893f7fb1bd2414344cd1f3dfb\n"
+ "key: testImage3, value: ab0eb6fd4fcf8b4436254870b4513033\n");
+
+ QTest::newRow("multipart-3images") << multiPartUrl << QByteArray() << QByteArray("POST")
+ << static_cast<QObject *>(imageMultiPart3) << expectedData
+ << QNetworkProxy();
+}
+
+void tst_Spdy::upload()
+{
+ QFETCH(QUrl, url);
+ QNetworkRequest request(url);
+ request.setAttribute(QNetworkRequest::SpdyAllowedAttribute, true);
+
+ QFETCH(QByteArray, data);
+ QFETCH(QByteArray, uploadMethod);
+ QFETCH(QObject *, uploadObject);
+ QFETCH(QNetworkProxy, proxy);
+
+ if (proxy.type() != QNetworkProxy::DefaultProxy) {
+ m_manager.setProxy(proxy);
+ }
+
+ QNetworkReply *reply;
+ QHttpMultiPart *multiPart = 0;
+
+ if (uploadObject) {
+ // upload via device
+ if (QIODevice *device = qobject_cast<QIODevice *>(uploadObject)) {
+ reply = m_manager.post(request, device);
+ } else if ((multiPart = qobject_cast<QHttpMultiPart *>(uploadObject))) {
+ reply = m_manager.post(request, multiPart);
+ } else {
+ QFAIL("got unknown upload device");
+ }
+ } else {
+ // upload via byte array
+ if (uploadMethod == "PUT") {
+ reply = m_manager.put(request, data);
+ } else {
+ reply = m_manager.post(request, data);
+ }
+ }
+
+ reply->ignoreSslErrors();
+ QSignalSpy metaDataChangedSpy(reply, SIGNAL(metaDataChanged()));
+ QSignalSpy uploadProgressSpy(reply, SIGNAL(uploadProgress(qint64, qint64)));
+ QSignalSpy readyReadSpy(reply, SIGNAL(readyRead()));
+ QSignalSpy finishedSpy(reply, SIGNAL(finished()));
+
+ QObject::connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ QSignalSpy finishedManagerSpy(&m_manager, SIGNAL(finished(QNetworkReply*)));
+
+ QTestEventLoop::instance().enterLoop(20);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+
+ QCOMPARE(finishedManagerSpy.count(), 1);
+ QCOMPARE(metaDataChangedSpy.count(), 1);
+ QCOMPARE(finishedSpy.count(), 1);
+ QVERIFY(uploadProgressSpy.count() > 0);
+ QVERIFY(readyReadSpy.count() > 0);
+
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->attribute(QNetworkRequest::SpdyWasUsedAttribute).toBool(), true);
+ QCOMPARE(reply->attribute(QNetworkRequest::ConnectionEncryptedAttribute).toBool(), true);
+ QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
+
+ qint64 contentLength = reply->header(QNetworkRequest::ContentLengthHeader).toLongLong();
+ if (!multiPart) // script to test multiparts does not return a content length
+ QCOMPARE(contentLength, 33); // 33 bytes for md5 sums (including new line)
+
+ QFETCH(QByteArray, md5sum);
+ QByteArray content = reply->readAll();
+ QCOMPARE(content, md5sum);
+
+ reply->deleteLater();
+ if (uploadObject)
+ uploadObject->deleteLater();
+
+ m_manager.setProxy(QNetworkProxy()); // reset
+}
+
+void tst_Spdy::errors_data()
+{
+ QTest::addColumn<QUrl>("url");
+ QTest::addColumn<QNetworkProxy>("proxy");
+ QTest::addColumn<bool>("ignoreSslErrors");
+ QTest::addColumn<int>("expectedReplyError");
+
+ QTest::newRow("http-404") << QUrl("https://" + QtNetworkSettings::serverName() + "/non-existent-url")
+ << QNetworkProxy() << true << int(QNetworkReply::ContentNotFoundError);
+
+ QTest::newRow("ssl-errors") << QUrl("https://" + QtNetworkSettings::serverName())
+ << QNetworkProxy() << false << int(QNetworkReply::SslHandshakeFailedError);
+
+ QTest::newRow("host-not-found") << QUrl("https://this-host-does-not.exist")
+ << QNetworkProxy()
+ << true << int(QNetworkReply::HostNotFoundError);
+
+ QTest::newRow("proxy-not-found") << QUrl("https://" + QtNetworkSettings::serverName())
+ << QNetworkProxy(QNetworkProxy::HttpProxy,
+ "https://this-host-does-not.exist", 3128)
+ << true << int(QNetworkReply::HostNotFoundError);
+
+ QHostInfo hostInfo = QHostInfo::fromName(QtNetworkSettings::serverName());
+ QString proxyserver = hostInfo.addresses().first().toString();
+
+ QTest::newRow("proxy-unavailable") << QUrl("https://" + QtNetworkSettings::serverName())
+ << QNetworkProxy(QNetworkProxy::HttpProxy, proxyserver, 10)
+ << true << int(QNetworkReply::UnknownNetworkError);
+
+ QTest::newRow("no-proxy-credentials") << QUrl("https://" + QtNetworkSettings::serverName())
+ << QNetworkProxy(QNetworkProxy::HttpProxy, proxyserver, 3129)
+ << true << int(QNetworkReply::ProxyAuthenticationRequiredError);
+}
+
+void tst_Spdy::errors()
+{
+ QFETCH(QUrl, url);
+ QFETCH(QNetworkProxy, proxy);
+ QFETCH(bool, ignoreSslErrors);
+ QFETCH(int, expectedReplyError);
+
+ QNetworkRequest request(url);
+ request.setAttribute(QNetworkRequest::SpdyAllowedAttribute, true);
+
+ disconnect(&m_manager, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)),
+ 0, 0);
+ if (proxy.type() != QNetworkProxy::DefaultProxy) {
+ m_manager.setProxy(proxy);
+ }
+ QNetworkReply *reply = m_manager.get(request);
+ if (ignoreSslErrors)
+ reply->ignoreSslErrors();
+ QSignalSpy finishedSpy(reply, SIGNAL(finished()));
+ QSignalSpy errorSpy(reply, SIGNAL(error(QNetworkReply::NetworkError)));
+
+ QObject::connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+
+ QTestEventLoop::instance().enterLoop(15);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+
+ QCOMPARE(finishedSpy.count(), 1);
+ QCOMPARE(errorSpy.count(), 1);
+
+ QCOMPARE(reply->error(), static_cast<QNetworkReply::NetworkError>(expectedReplyError));
+
+ m_manager.setProxy(QNetworkProxy()); // reset
+ m_manager.clearAccessCache(); // e.g. to get an SSL error we need a new connection
+ connect(&m_manager, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)),
+ this, SLOT(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)),
+ Qt::UniqueConnection); // reset
+}
+#endif // !QT_NO_NETWORKPROXY
+
+void tst_Spdy::multipleRequests_data()
+{
+ QTest::addColumn<QList<QUrl> >("urls");
+
+ QString baseUrl = "https://" + QtNetworkSettings::serverName() + "/qtest/cgi-bin/echo.cgi?";
+ QList<QUrl> urls;
+ for (int a = 1; a <= 50; ++a)
+ urls.append(QUrl(baseUrl + QLatin1String(QByteArray::number(a))));
+
+ QTest::newRow("one-request") << urls.mid(0, 1);
+ QTest::newRow("two-requests") << urls.mid(0, 2);
+ QTest::newRow("ten-requests") << urls.mid(0, 10);
+ QTest::newRow("twenty-requests") << urls.mid(0, 20);
+ QTest::newRow("fifty-requests") << urls;
+}
+
+void tst_Spdy::multipleRequestsFinishedSlot()
+{
+ m_multipleRepliesFinishedCount++;
+ if (m_multipleRepliesFinishedCount == m_multipleRequestsCount)
+ QTestEventLoop::instance().exitLoop();
+}
+
+void tst_Spdy::multipleRequests()
+{
+ QFETCH(QList<QUrl>, urls);
+ m_multipleRequestsCount = urls.count();
+ m_multipleRepliesFinishedCount = 0;
+
+ QList<QNetworkReply *> replies;
+ QList<QSignalSpy *> metaDataChangedSpies;
+ QList<QSignalSpy *> readyReadSpies;
+ QList<QSignalSpy *> finishedSpies;
+
+ foreach (const QUrl &url, urls) {
+ QNetworkRequest request(url);
+ request.setAttribute(QNetworkRequest::SpdyAllowedAttribute, true);
+ QNetworkReply *reply = m_manager.get(request);
+ replies.append(reply);
+ reply->ignoreSslErrors();
+ QObject::connect(reply, SIGNAL(finished()), this, SLOT(multipleRequestsFinishedSlot()));
+ QSignalSpy *metaDataChangedSpy = new QSignalSpy(reply, SIGNAL(metaDataChanged()));
+ metaDataChangedSpies << metaDataChangedSpy;
+ QSignalSpy *readyReadSpy = new QSignalSpy(reply, SIGNAL(readyRead()));
+ readyReadSpies << readyReadSpy;
+ QSignalSpy *finishedSpy = new QSignalSpy(reply, SIGNAL(finished()));
+ finishedSpies << finishedSpy;
+ }
+
+ QSignalSpy finishedManagerSpy(&m_manager, SIGNAL(finished(QNetworkReply*)));
+
+ QTestEventLoop::instance().enterLoop(15);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+
+ QCOMPARE(finishedManagerSpy.count(), m_multipleRequestsCount);
+
+ for (int a = 0; a < replies.count(); ++a) {
+
+#ifndef QT_NO_OPENSSL
+ QCOMPARE(replies.at(a)->sslConfiguration().nextProtocolNegotiationStatus(),
+ QSslConfiguration::NextProtocolNegotiationNegotiated);
+ QCOMPARE(replies.at(a)->sslConfiguration().nextNegotiatedProtocol(),
+ QByteArray(QSslConfiguration::NextProtocolSpdy3_0));
+#endif // QT_NO_OPENSSL
+
+ QCOMPARE(replies.at(a)->error(), QNetworkReply::NoError);
+ QCOMPARE(replies.at(a)->attribute(QNetworkRequest::SpdyWasUsedAttribute).toBool(), true);
+ QCOMPARE(replies.at(a)->attribute(QNetworkRequest::ConnectionEncryptedAttribute).toBool(), true);
+ QCOMPARE(replies.at(a)->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
+
+ // using the echo script, a request to "echo.cgi?1" will return a body of "1"
+ QByteArray expectedContent = replies.at(a)->url().query().toUtf8();
+ QByteArray content = replies.at(a)->readAll();
+ QCOMPARE(expectedContent, content);
+
+ QCOMPARE(metaDataChangedSpies.at(a)->count(), 1);
+ metaDataChangedSpies.at(a)->deleteLater();
+
+ QCOMPARE(finishedSpies.at(a)->count(), 1);
+ finishedSpies.at(a)->deleteLater();
+
+ QVERIFY(readyReadSpies.at(a)->count() > 0);
+ readyReadSpies.at(a)->deleteLater();
+
+ replies.at(a)->deleteLater();
+ }
+}
+
+QTEST_MAIN(tst_Spdy)
+
+#include "tst_spdy.moc"