From 18f0a45964e62bf3db7b657847902a356fd31f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Thu, 19 Oct 2017 12:22:16 +0200 Subject: Fix redirecting all the other methods for HTTP 307 and 308 c4cf90b1f739c47383672de3d66b1d9d5427f5db made POST requests be redirected properly, but this wasn't enough and should have included every method/verb. Change-Id: I37b12dc9fdffcbf2aadbd2360d4fc2584c024939 Reviewed-by: Edward Welbourne Reviewed-by: Timur Pocheptsov --- .../access/qnetworkreply/tst_qnetworkreply.cpp | 83 ++++++++++++++++++---- 1 file changed, 69 insertions(+), 14 deletions(-) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index d22850ba4e..93afca3d48 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -491,10 +491,12 @@ private Q_SLOTS: void ioHttpRedirect_data(); void ioHttpRedirect(); void ioHttpRedirectFromLocalToRemote(); - void ioHttpRedirectPost_data(); - void ioHttpRedirectPost(); + void ioHttpRedirectPostPut_data(); + void ioHttpRedirectPostPut(); void ioHttpRedirectMultipartPost_data(); void ioHttpRedirectMultipartPost(); + void ioHttpRedirectDelete(); + void ioHttpRedirectCustom(); #ifndef QT_NO_SSL void putWithServerClosingConnectionImmediately(); #endif @@ -546,7 +548,7 @@ static void setupSslServer(QSslSocket* serverSocket) } #endif -// Does not work for PUT! Limited support for POST. +// Limited support for POST and PUT. class MiniHttpServer: public QTcpServer { Q_OBJECT @@ -678,7 +680,7 @@ public slots: if (doubleEndlPos != -1) { const int endOfHeader = doubleEndlPos + 4; - hasContent = receivedData.startsWith("POST"); + hasContent = receivedData.startsWith("POST") || receivedData.startsWith("PUT"); if (hasContent && contentLength == 0) parseContentLength(); contentRead = receivedData.length() - endOfHeader; @@ -8546,37 +8548,46 @@ void tst_QNetworkReply::ioHttpRedirectFromLocalToRemote() QCOMPARE(reply->readAll(), reference.readAll()); } -void tst_QNetworkReply::ioHttpRedirectPost_data() +void tst_QNetworkReply::ioHttpRedirectPostPut_data() { + QTest::addColumn("usePost"); QTest::addColumn("status"); QTest::addColumn("data"); QTest::addColumn("contentType"); QByteArray data; data = "hello world"; - QTest::addRow("307") << "307 Temporary Redirect" << data << "text/plain"; + QTest::addRow("post-307") << true << "307 Temporary Redirect" << data << "text/plain"; + QTest::addRow("put-307") << false << "307 Temporary Redirect" << data << "text/plain"; QString permanentRedirect = "308 Permanent Redirect"; - QTest::addRow("308") << permanentRedirect << data << "text/plain"; + QTest::addRow("post-308") << true << permanentRedirect << data << "text/plain"; + QTest::addRow("put-308") << false << permanentRedirect << data << "text/plain"; // Some data from ::putToFile_data data = ""; - QTest::newRow("empty") << permanentRedirect << data << "application/octet-stream"; + QTest::newRow("post-empty") << true << permanentRedirect << data << "application/octet-stream"; + QTest::newRow("put-empty") << false << permanentRedirect << data << "application/octet-stream"; data = QByteArray("abcd\0\1\2\abcd",12); - QTest::newRow("with-nul") << permanentRedirect << data << "application/octet-stream"; + QTest::newRow("post-with-nul") << true << permanentRedirect << data << "application/octet-stream"; + QTest::newRow("put-with-nul") << false << permanentRedirect << data << "application/octet-stream"; data = QByteArray(4097, '\4'); - QTest::newRow("4k+1") << permanentRedirect << data << "application/octet-stream"; + QTest::newRow("post-4k+1") << true << permanentRedirect << data << "application/octet-stream"; + QTest::newRow("put-4k+1") << false << permanentRedirect << data << "application/octet-stream"; data = QByteArray(128*1024+1, '\177'); - QTest::newRow("128k+1") << permanentRedirect << data << "application/octet-stream"; + QTest::newRow("post-128k+1") << true << permanentRedirect << data << "application/octet-stream"; + QTest::newRow("put-128k+1") << false << permanentRedirect << data << "application/octet-stream"; data = QByteArray(2*1024*1024+1, '\177'); - QTest::newRow("2MB+1") << permanentRedirect << data << "application/octet-stream"; + QTest::newRow("post-2MB+1") << true << permanentRedirect << data << "application/octet-stream"; + QTest::newRow("put-2MB+1") << false << permanentRedirect << data << "application/octet-stream"; } -void tst_QNetworkReply::ioHttpRedirectPost() +void tst_QNetworkReply::ioHttpRedirectPostPut() { + QFETCH(bool, usePost); QFETCH(QString, status); QFETCH(QByteArray, data); QFETCH(QString, contentType); @@ -8595,7 +8606,7 @@ void tst_QNetworkReply::ioHttpRedirectPost() auto oldRedirectPolicy = manager.redirectPolicy(); manager.setRedirectPolicy(QNetworkRequest::RedirectPolicy::NoLessSafeRedirectPolicy); - QNetworkReplyPtr reply(manager.post(request, data)); + QNetworkReplyPtr reply(usePost ? manager.post(request, data) : manager.put(request, data)); // Restore previous policy: manager.setRedirectPolicy(oldRedirectPolicy); @@ -8664,6 +8675,50 @@ void tst_QNetworkReply::ioHttpRedirectMultipartPost() QCOMPARE(replyData, expectedReplyData); } +void tst_QNetworkReply::ioHttpRedirectDelete() +{ + MiniHttpServer target(httpEmpty200Response, false); + QUrl targetUrl("http://localhost/"); + targetUrl.setPort(target.serverPort()); + + QString redirectReply = tempRedirectReplyStr().arg(targetUrl.toString()); + MiniHttpServer redirectServer(redirectReply.toLatin1()); + QUrl url("http://localhost/"); + url.setPort(redirectServer.serverPort()); + QNetworkRequest request(url); + auto oldRedirectPolicy = manager.redirectPolicy(); + manager.setRedirectPolicy(QNetworkRequest::RedirectPolicy::NoLessSafeRedirectPolicy); + + QNetworkReplyPtr reply(manager.deleteResource(request)); + // Restore previous policy: + manager.setRedirectPolicy(oldRedirectPolicy); + + QCOMPARE(waitForFinish(reply), int(Success)); + QVERIFY2(target.receivedData.startsWith("DELETE"), "Target server called with the wrong method"); +} + +void tst_QNetworkReply::ioHttpRedirectCustom() +{ + MiniHttpServer target(httpEmpty200Response, false); + QUrl targetUrl("http://localhost/"); + targetUrl.setPort(target.serverPort()); + + QString redirectReply = tempRedirectReplyStr().arg(targetUrl.toString()); + MiniHttpServer redirectServer(redirectReply.toLatin1()); + QUrl url("http://localhost/"); + url.setPort(redirectServer.serverPort()); + QNetworkRequest request(url); + auto oldRedirectPolicy = manager.redirectPolicy(); + manager.setRedirectPolicy(QNetworkRequest::RedirectPolicy::NoLessSafeRedirectPolicy); + + QNetworkReplyPtr reply(manager.sendCustomRequest(request, QByteArrayLiteral("CUSTOM"))); + // Restore previous policy: + manager.setRedirectPolicy(oldRedirectPolicy); + + QCOMPARE(waitForFinish(reply), int(Success)); + QVERIFY2(target.receivedData.startsWith("CUSTOM"), "Target server called with the wrong method"); +} + #ifndef QT_NO_SSL class PutWithServerClosingConnectionImmediatelyHandler: public QObject -- cgit v1.2.3 From 38a0909d4ed39b49e0463bd780d20a82ea672d35 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 20 Oct 2017 12:42:29 +0200 Subject: tst_qnetworkreply: Replace insignificant_test with blacklisting Neither the exit crash of QTBUG-21102 nor the Windows failure of QTBUG-24226 appear to be reproduceable. Add verbose error reporting to getErrors() and blacklist getErrors:ftp-host which has been found to fail with timeouts on Linux and ioHttpRedirectMultipartPost. Task-number: QTBUG-21102 Task-number: QTBUG-24226 Task-number: QTBUG-62860 Change-Id: I6b29f6184e83de8ffebf6ff0d80606512dca6419 Reviewed-by: Timur Pocheptsov --- tests/auto/network/access/qnetworkreply/BLACKLIST | 20 ++++++++++++++++++++ .../auto/network/access/qnetworkreply/test/test.pro | 3 --- .../access/qnetworkreply/tst_qnetworkreply.cpp | 13 ++++++++++++- 3 files changed, 32 insertions(+), 4 deletions(-) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST index 1d56c78bbc..f2ccefb9d6 100644 --- a/tests/auto/network/access/qnetworkreply/BLACKLIST +++ b/tests/auto/network/access/qnetworkreply/BLACKLIST @@ -1,5 +1,7 @@ # See qtbase/src/testlib/qtestblacklist.cpp for format osx +[authenticationCacheAfterCancel] +windows [ioGetFromBuiltinHttp:http+limited] ubuntu-14.04 [ioGetFromBuiltinHttp:https+limited] @@ -8,3 +10,21 @@ ubuntu-14.04 * [backgroundRequestInterruption:ftp, bg, nobg] * +[getErrors:ftp-host] +linux +[getFromHttpIntoBuffer] +windows +[getFromHttpIntoBuffer2] +windows +[headFromHttp] +windows +[ioGetFromHttpWithSocksProxy] +windows +[ioPostToHttpFromSocket] +windows +[ioHttpRedirectMultipartPost] +linux +[putWithServerClosingConnectionImmediately] +windows +[qtbug28035browserDoesNotLoadQtProjectOrgCorrectly] +windows diff --git a/tests/auto/network/access/qnetworkreply/test/test.pro b/tests/auto/network/access/qnetworkreply/test/test.pro index 0dcf5a250c..1f45ac0c49 100644 --- a/tests/auto/network/access/qnetworkreply/test/test.pro +++ b/tests/auto/network/access/qnetworkreply/test/test.pro @@ -13,7 +13,4 @@ RESOURCES += ../qnetworkreply.qrc TESTDATA += ../empty ../rfc3252.txt ../resource ../bigfile ../*.jpg ../certs \ ../index.html ../smb-file.txt -qtConfig(xcb): CONFIG+=insignificant_test # unstable, QTBUG-21102 -win32:CONFIG += insignificant_test # QTBUG-24226 - !winrt: TEST_HELPER_INSTALLS = ../echo/echo diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 93afca3d48..099ea8ff39 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -1994,6 +1994,16 @@ void tst_QNetworkReply::getErrors_data() << int(QNetworkReply::AuthenticationRequiredError) << 401 << false; } +static QByteArray msgGetErrors(int waitResult, const QNetworkReplyPtr &reply) +{ + QByteArray result ="waitResult=" + QByteArray::number(waitResult); + if (reply->isFinished()) + result += ", finished"; + if (reply->error() != QNetworkReply::NoError) + result += ", error: " + QByteArray::number(int(reply->error())); + return result; +} + void tst_QNetworkReply::getErrors() { QFETCH(QString, url); @@ -2023,7 +2033,8 @@ void tst_QNetworkReply::getErrors() QCOMPARE(reply->error(), QNetworkReply::NoError); // now run the request: - QVERIFY(waitForFinish(reply) != Timeout); + const int waitResult = waitForFinish(reply); + QVERIFY2(waitResult != Timeout, msgGetErrors(waitResult, reply)); QFETCH(int, error); QEXPECT_FAIL("ftp-is-dir", "QFtp cannot provide enough detail", Abort); -- cgit v1.2.3 From b409cfa094c327cae0303c6fff39ae5dbb49ad80 Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Mon, 30 Oct 2017 11:18:44 +0100 Subject: tst_QNetworkReply::ioHttpRedirectPolicy - blacklist for b2qt 64bit This test fails often and seems to be flaky. Task-number: QTBUG-62583 Change-Id: Id3af283c89e392634a7af6e11bd05775a4295798 Reviewed-by: Gatis Paeglis --- tests/auto/network/access/qnetworkreply/BLACKLIST | 2 ++ 1 file changed, 2 insertions(+) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST index f2ccefb9d6..5edae13e34 100644 --- a/tests/auto/network/access/qnetworkreply/BLACKLIST +++ b/tests/auto/network/access/qnetworkreply/BLACKLIST @@ -24,6 +24,8 @@ windows windows [ioHttpRedirectMultipartPost] linux +[ioHttpRedirectPolicy] +b2qt 64bit [putWithServerClosingConnectionImmediately] windows [qtbug28035browserDoesNotLoadQtProjectOrgCorrectly] -- cgit v1.2.3 From 84396a3f938453b81e6ecc73bd54ff6b08960e8f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 3 Nov 2017 13:55:50 +0100 Subject: tst_QNetworkReply: Blacklist ioHttpRedirectPostPut for Linux Change-Id: I7db143bbd2e178e944f4cfc6c184850238f3bc8c Reviewed-by: Timur Pocheptsov --- tests/auto/network/access/qnetworkreply/BLACKLIST | 2 ++ 1 file changed, 2 insertions(+) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST index 5edae13e34..091ec28bea 100644 --- a/tests/auto/network/access/qnetworkreply/BLACKLIST +++ b/tests/auto/network/access/qnetworkreply/BLACKLIST @@ -26,6 +26,8 @@ windows linux [ioHttpRedirectPolicy] b2qt 64bit +[ioHttpRedirectPostPut] +linux [putWithServerClosingConnectionImmediately] windows [qtbug28035browserDoesNotLoadQtProjectOrgCorrectly] -- cgit v1.2.3 From b5b1e1036ff59b584719b8af7b3be8223a662233 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tony=20Saraj=C3=A4rvi?= Date: Sun, 5 Nov 2017 14:08:56 +0200 Subject: Extend blacklisting in qnetworkreply While removing insignificant flag in commit 38a0909d4ed39b49e0463bd780d20a82ea672d35 and blacklisting autotests that still failed, qtbase builds didn't verify VS2017. That broke qt5 builds which do build VS2017. Task-number: QTBUG-64264 Change-Id: I5fdfa5dac6192f449a05146a9a422e428a710c84 Reviewed-by: Liang Qi --- tests/auto/network/access/qnetworkreply/BLACKLIST | 2 ++ 1 file changed, 2 insertions(+) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST index 091ec28bea..4785c5b650 100644 --- a/tests/auto/network/access/qnetworkreply/BLACKLIST +++ b/tests/auto/network/access/qnetworkreply/BLACKLIST @@ -32,3 +32,5 @@ linux windows [qtbug28035browserDoesNotLoadQtProjectOrgCorrectly] windows +[getFromUnreachableIp] +windows msvc-2017 -- cgit v1.2.3 From c8fa698e9928783ee7257134e72c3c5927fe5698 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 6 Nov 2017 13:45:23 +0100 Subject: tst_QNetworkReply: Blacklist ioHttpRedirectPolicy for Linux Task-number: QTBUG-62583 Change-Id: I9723a465f1d36aec823ce3459fd03b9492a3b778 Reviewed-by: Timur Pocheptsov --- tests/auto/network/access/qnetworkreply/BLACKLIST | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST index 4785c5b650..9ae424943d 100644 --- a/tests/auto/network/access/qnetworkreply/BLACKLIST +++ b/tests/auto/network/access/qnetworkreply/BLACKLIST @@ -25,7 +25,7 @@ windows [ioHttpRedirectMultipartPost] linux [ioHttpRedirectPolicy] -b2qt 64bit +b2qt linux 64bit [ioHttpRedirectPostPut] linux [putWithServerClosingConnectionImmediately] -- cgit v1.2.3 From fad8f340333f1c9ec7b6cebe521d53f4b1da4f8d Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 7 Nov 2017 09:47:56 +0100 Subject: Extend blacklisting in qnetworkreply - Blacklist ioHttpRedirectPostPut for Windows - Amend 84396a3f938453b81e6ecc73bd54ff6b08960e8f: Keys need to be on subsequent lines Task-number: QTBUG-62583 Change-Id: I6360ec7bd87de65a3294a0d22148f13579fcd292 Reviewed-by: Timur Pocheptsov --- tests/auto/network/access/qnetworkreply/BLACKLIST | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST index 9ae424943d..acea0a5aad 100644 --- a/tests/auto/network/access/qnetworkreply/BLACKLIST +++ b/tests/auto/network/access/qnetworkreply/BLACKLIST @@ -25,9 +25,11 @@ windows [ioHttpRedirectMultipartPost] linux [ioHttpRedirectPolicy] -b2qt linux 64bit +b2qt 64bit +linux [ioHttpRedirectPostPut] linux +windows [putWithServerClosingConnectionImmediately] windows [qtbug28035browserDoesNotLoadQtProjectOrgCorrectly] -- cgit v1.2.3 From 19b0ce5daa31e2ffebfcf2701143742302f1deb4 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 13 Apr 2017 21:13:52 -0700 Subject: Change almost all other uses of qrand() to QRandomGenerator The vast majority is actually switched to QRandomGenerator::bounded(), which gives a mostly uniform distribution over the [0, bound) range. There are very few floating point cases left, as many of those that did use floating point did not need to, after all. (I did leave some that were too ugly for me to understand) This commit also found a couple of calls to rand() instead of qrand(). This commit does not include changes to SSL code that continues to use qrand() (job for someone else): src/network/ssl/qsslkey_qt.cpp src/network/ssl/qsslsocket_mac.cpp tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp Change-Id: Icd0e0d4b27cb4e5eb892fffd14b5285d43f4afbf Reviewed-by: Lars Knoll --- tests/auto/network/access/hpack/tst_hpack.cpp | 12 ++++++------ tests/auto/network/access/http2/tst_http2.cpp | 2 +- tests/auto/network/access/qftp/tst_qftp.cpp | 3 +-- .../access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp | 14 +++++++------- .../network/access/qnetworkreply/tst_qnetworkreply.cpp | 10 +++++----- 5 files changed, 20 insertions(+), 21 deletions(-) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/hpack/tst_hpack.cpp b/tests/auto/network/access/hpack/tst_hpack.cpp index bd337c9f5f..810745a065 100644 --- a/tests/auto/network/access/hpack/tst_hpack.cpp +++ b/tests/auto/network/access/hpack/tst_hpack.cpp @@ -273,13 +273,13 @@ void tst_Hpack::bitstreamCompression() std::vector buffer; BitOStream out(buffer); for (unsigned i = 0; i < nValues; ++i) { - const bool isString = std::rand() % 1000 > 500; + const bool isString = QRandomGenerator::global()->bounded(1000) > 500; isA.push_back(isString); if (!isString) { - integers.push_back(std::rand() % 1000); + integers.push_back(QRandomGenerator::global()->bounded(1000u)); out.write(integers.back()); } else { - const auto start = std::rand() % (bytes.length() / 2); + const auto start = QRandomGenerator::global()->bounded(uint(bytes.length()) / 2); auto end = start * 2; if (!end) end = bytes.length() / 2; @@ -287,7 +287,7 @@ void tst_Hpack::bitstreamCompression() const auto &s = strings.back(); totalStringBytes += s.size(); QByteArray data(s.c_str(), int(s.size())); - const bool compressed(std::rand() % 1000 > 500); + const bool compressed(QRandomGenerator::global()->bounded(1000) > 500); out.write(data, compressed); } } @@ -442,8 +442,8 @@ void tst_Hpack::lookupTableDynamic() // Strings are repeating way too often, I want to // have at least some items really evicted and not found, // therefore these weird dances with start/len. - const quint32 start = std::rand() % (dataSize - 10); - quint32 len = std::rand() % (dataSize - start); + const quint32 start = QRandomGenerator::global()->bounded(dataSize - 10); + quint32 len = QRandomGenerator::global()->bounded(dataSize - start); if (!len) len = 1; diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp index 7b453ca635..51e1849512 100644 --- a/tests/auto/network/access/http2/tst_http2.cpp +++ b/tests/auto/network/access/http2/tst_http2.cpp @@ -224,7 +224,7 @@ void tst_Http2::multipleRequests() }; for (int i = 0; i < nRequests; ++i) - sendRequest(i, priorities[std::rand() % 3]); + sendRequest(i, priorities[QRandomGenerator::global()->bounded(3)]); runEventLoop(); diff --git a/tests/auto/network/access/qftp/tst_qftp.cpp b/tests/auto/network/access/qftp/tst_qftp.cpp index fba0508f04..4bc43f068c 100644 --- a/tests/auto/network/access/qftp/tst_qftp.cpp +++ b/tests/auto/network/access/qftp/tst_qftp.cpp @@ -276,8 +276,7 @@ void tst_QFtp::init() inFileDirExistsFunction = false; - srand(time(0)); - uniqueExtension = QString::number((quintptr)this) + QString::number(rand()) + uniqueExtension = QString::number((quintptr)this) + QString::number(QRandomGenerator::global()->generate()) + QString::number((qulonglong)time(0)); } diff --git a/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp index e996347a9a..856033fb63 100644 --- a/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp +++ b/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include @@ -693,25 +694,25 @@ public: if (write) { QNetworkCacheMetaData m; - if (qrand() % 2 == 0) + if (QRandomGenerator::global()->bounded(2) == 0) m = metaData; else m = metaData2; - if (qrand() % 20 == 1) { + if (QRandomGenerator::global()->bounded(20) == 1) { //qDebug() << "write update"; cache.updateMetaData(m); continue; } QIODevice *device = cache.prepare(m); - if (qrand() % 20 == 1) { + if (QRandomGenerator::global()->bounded(20) == 1) { //qDebug() << "write remove"; cache.remove(url); continue; } QVERIFY(device); - if (qrand() % 2 == 0) + if (QRandomGenerator::global()->bounded(2) == 0) device->write(longString); else device->write(longString2); @@ -740,9 +741,9 @@ public: delete d; } } - if (qrand() % 5 == 1) + if (QRandomGenerator::global()->bounded(5) == 1) cache.remove(url); - if (qrand() % 5 == 1) + if (QRandomGenerator::global()->bounded(5) == 1) cache.clear(); sleep(0); } @@ -791,7 +792,6 @@ void tst_QNetworkDiskCache::sync() return; QTime midnight(0, 0, 0); - qsrand(midnight.secsTo(QTime::currentTime())); Runner reader(tempDir.path()); reader.dt = QDateTime::currentDateTime(); reader.write = false; diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 93afca3d48..b6b5f5ae70 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -120,12 +121,11 @@ class tst_QNetworkReply: public QObject static QString createUniqueExtension() { if (!seedCreated) { - qsrand(QTime(0,0,0).msecsTo(QTime::currentTime()) + QCoreApplication::applicationPid()); seedCreated = true; // not thread-safe, but who cares } return QString::number(QTime(0, 0, 0).msecsTo(QTime::currentTime())) + QLatin1Char('-') + QString::number(QCoreApplication::applicationPid()) - + QLatin1Char('-') + QString::number(qrand()); + + QLatin1Char('-') + QString::number(QRandomGenerator::global()->generate()); } static QString tempRedirectReplyStr() { @@ -4852,7 +4852,7 @@ void tst_QNetworkReply::ioPostToHttpsUploadProgress() // server send the data much faster than expected. // So better provide random data that cannot be compressed. for (int i = 0; i < wantedSize; ++i) - sourceFile += (char)qrand(); + sourceFile += (char)QRandomGenerator::global()->generate(); // emulate a minimal https server SslServer server; @@ -4932,7 +4932,7 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp() // server send the data much faster than expected. // So better provide random data that cannot be compressed. for (int i = 0; i < wantedSize; ++i) - testData += (char)qrand(); + testData += (char)QRandomGenerator::global()->generate(); QByteArray httpResponse = QByteArray("HTTP/1.0 200 OK\r\nContent-Length: "); httpResponse += QByteArray::number(testData.size()); @@ -8748,7 +8748,7 @@ public slots: m_receivedData += data; if (!m_parsedHeaders && m_receivedData.contains("\r\n\r\n")) { m_parsedHeaders = true; - QTimer::singleShot(qrand()%60, this, SLOT(closeDelayed())); // simulate random network latency + QTimer::singleShot(QRandomGenerator::global()->bounded(60), this, SLOT(closeDelayed())); // simulate random network latency // This server simulates a web server connection closing, e.g. because of Apaches MaxKeepAliveRequests or KeepAliveTimeout // In this case QNAM needs to re-send the upload data but it had a bug which then corrupts the upload // This test catches that. -- cgit v1.2.3 From 39355daa40438eef386ce55f02e7ba9ff824993f Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Tue, 7 Nov 2017 11:51:57 +0100 Subject: tst_QNetworkReply::getFromUnreachableIp - fix a failing test This patch works around Windows X86 on QEMU antics. It appears on this platform the test behaves in some unpredictable manner: - WSAConnect with 255.255.255.255 does not always immediately fail with some error, so socket engine waits for a connection timeout (30 s.), but the test itself - only waits for 5 seconds and then tests that a request has finished with error, which is not true (we are still connecting). To make it work - whenever we have bearermanager feature enabled, set a connection timeout to something reasonable, not 30 s. Since we try to connect to each address twice, make timeout 1.5 s (so it's 3 s. in total and still is < 5 s.). Task-number: QTBUG-64264 Change-Id: I1d40c140667fca8402ec9344e66d313b6df54256 Reviewed-by: Timur Pocheptsov --- .../access/qnetworkreply/tst_qnetworkreply.cpp | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 099ea8ff39..b86750a900 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -6766,6 +6766,48 @@ void tst_QNetworkReply::getFromUnreachableIp() { QNetworkAccessManager manager; +#ifdef Q_OS_WIN32 + // This test assumes that attempt to connect to 255.255.255.255 fails more + // or less fast/immediately. This is not what we observe on Windows x86: + // WSAConnect on non-blocking socket returns SOCKET_ERROR, WSAGetLastError + // returns WSAEWOULDBLOCK (expected) and getsockopt most of the time returns + // NOERROR; so socket engine starts a timer (30 s.) and waits for a timeout/ + // error/success. Unfortunately, the test itself is waiting only for 5 s. + // So we have to adjust the connection timeout or skip the test completely + // if the 'bearermanagement' feature is not available. +#if QT_CONFIG(bearermanagement) + class ConfigurationGuard + { + public: + explicit ConfigurationGuard(QNetworkAccessManager *m) + : manager(m) + { + Q_ASSERT(m); + auto conf = manager->configuration(); + previousTimeout = conf.connectTimeout(); + conf.setConnectTimeout(1500); + manager->setConfiguration(conf); + } + ~ConfigurationGuard() + { + Q_ASSERT(manager); + auto conf = manager->configuration(); + conf.setConnectTimeout(previousTimeout); + manager->setConfiguration(conf); + } + private: + QNetworkAccessManager *manager = nullptr; + int previousTimeout = 0; + + Q_DISABLE_COPY(ConfigurationGuard) + }; + + const ConfigurationGuard restorer(&manager); +#else // bearermanagement + QSKIP("This test is non-deterministic on Windows x86"); +#endif // !bearermanagement +#endif // Q_OS_WIN32 + QNetworkRequest request(QUrl("http://255.255.255.255/42/23/narf/narf/narf")); QNetworkReplyPtr reply(manager.get(request)); -- cgit v1.2.3 From 66bace390ba4c0d20f006f02dbcba45e30d08590 Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Wed, 8 Nov 2017 16:18:31 +0100 Subject: tst_qnetworkreply::getFromUnreachableIp - fix win64 also MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Looking at the failures in grafana it appears this test is also failing on Windows 64. The same fix applies then, and we use Q_OS_WIN now. Change-Id: Iafcfd6d1e747f3c816878cad072fbfae3aee19ca Reviewed-by: MÃ¥rten Nordheim Reviewed-by: Edward Welbourne --- tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index b86750a900..3a752c0748 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -6766,9 +6766,9 @@ void tst_QNetworkReply::getFromUnreachableIp() { QNetworkAccessManager manager; -#ifdef Q_OS_WIN32 +#ifdef Q_OS_WIN // This test assumes that attempt to connect to 255.255.255.255 fails more - // or less fast/immediately. This is not what we observe on Windows x86: + // or less fast/immediately. This is not what we observe on Windows: // WSAConnect on non-blocking socket returns SOCKET_ERROR, WSAGetLastError // returns WSAEWOULDBLOCK (expected) and getsockopt most of the time returns // NOERROR; so socket engine starts a timer (30 s.) and waits for a timeout/ @@ -6806,7 +6806,7 @@ void tst_QNetworkReply::getFromUnreachableIp() #else // bearermanagement QSKIP("This test is non-deterministic on Windows x86"); #endif // !bearermanagement -#endif // Q_OS_WIN32 +#endif // Q_OS_WIN QNetworkRequest request(QUrl("http://255.255.255.255/42/23/narf/narf/narf")); QNetworkReplyPtr reply(manager.get(request)); -- cgit v1.2.3 From f6c9f0312888317c0cd6a85cd3f238bb4e0295c5 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 13 Nov 2017 15:48:07 +0100 Subject: tst_QNetworkReply: Blacklist putToFtp for Windows Task-number: QTBUG-62860 Change-Id: I9cea1414ae3761284f5ac9fab9d0db03c239b65f Reviewed-by: Timur Pocheptsov --- tests/auto/network/access/qnetworkreply/BLACKLIST | 2 ++ 1 file changed, 2 insertions(+) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST index acea0a5aad..57f33d5863 100644 --- a/tests/auto/network/access/qnetworkreply/BLACKLIST +++ b/tests/auto/network/access/qnetworkreply/BLACKLIST @@ -30,6 +30,8 @@ linux [ioHttpRedirectPostPut] linux windows +[putToFtp] +windows ci [putWithServerClosingConnectionImmediately] windows [qtbug28035browserDoesNotLoadQtProjectOrgCorrectly] -- cgit v1.2.3