diff options
Diffstat (limited to 'tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp')
-rw-r--r-- | tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp | 328 |
1 files changed, 38 insertions, 290 deletions
diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 6450d2a5d2..915926e488 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -66,12 +66,6 @@ #include <QtNetwork/private/qsslconfiguration_p.h> #endif #endif -#ifndef QT_NO_BEARERMANAGEMENT -#include <QtNetwork/qnetworkconfigmanager.h> -#include <QtNetwork/qnetworkconfiguration.h> -#include <QtNetwork/qnetworksession.h> -#include <QtNetwork/private/qnetworksession_p.h> -#endif #ifdef QT_BUILD_INTERNAL #include <QtNetwork/private/qnetworkreplyimpl_p.h> // implicitly included by qnetworkaccessmanager_p.h currently, but don't rely on that being true forever #include <QtNetwork/private/qnetworkaccessmanager_p.h> @@ -161,11 +155,6 @@ class tst_QNetworkReply: public QObject QList<QSslError> storedExpectedSslErrors; static const QString certsFilePath; #endif -#ifndef QT_NO_BEARERMANAGEMENT - QNetworkConfigurationManager *netConfMan; - QNetworkConfiguration networkConfiguration; - QScopedPointer<QNetworkSession> networkSession; -#endif using QObject::connect; static bool connect(const QNetworkReplyPtr &ptr, const char *signal, const QObject *receiver, const char *slot, Qt::ConnectionType ct = Qt::AutoConnection) @@ -219,9 +208,11 @@ private Q_SLOTS: void getFromFile(); void getFromFileSpecial_data(); void getFromFileSpecial(); +#if QT_CONFIG(ftp) void getFromFtp_data(); void getFromFtp(); void getFromFtpAfterError(); // QTBUG-40797 +#endif void getFromHttp_data(); void getFromHttp(); void getErrors_data(); @@ -232,9 +223,11 @@ private Q_SLOTS: #endif // !QT_NO_NETWORKPROXY void putToFile_data(); void putToFile(); +#if QT_CONFIG(ftp) void putToFtp_data(); void putToFtp(); void putToFtpWithInvalidCredentials(); // QTBUG-40622 +#endif void putToHttp_data(); void putToHttp(); void putToHttpSynchronous_data(); @@ -275,9 +268,11 @@ private Q_SLOTS: void ioGetFromFileSpecial(); void ioGetFromFile_data(); void ioGetFromFile(); +#if QT_CONFIG(ftp) void ioGetFromFtp_data(); void ioGetFromFtp(); void ioGetFromFtpWithReuse(); +#endif void ioGetFromHttp(); void ioGetFromBuiltinHttp_data(); @@ -319,8 +314,10 @@ private Q_SLOTS: void ioPutToFileFromLocalSocket(); void ioPutToFileFromProcess_data(); void ioPutToFileFromProcess(); +#if QT_CONFIG(ftp) void ioPutToFtpFromFile_data(); void ioPutToFtpFromFile(); +#endif void ioPutToHttpFromFile_data(); void ioPutToHttpFromFile(); void ioPostToHttpFromFile_data(); @@ -466,20 +463,13 @@ private Q_SLOTS: void closeDuringDownload_data(); void closeDuringDownload(); +#if QT_CONFIG(ftp) void ftpAuthentication_data(); void ftpAuthentication(); +#endif void emitErrorForAllReplies(); // QTBUG-36890 -#ifdef QT_BUILD_INTERNAL - void backgroundRequest_data(); - void backgroundRequest(); - void backgroundRequestInterruption_data(); - void backgroundRequestInterruption(); - void backgroundRequestConnectInBackground_data(); - void backgroundRequestConnectInBackground(); -#endif - void putWithRateLimiting(); void ioHttpSingleRedirect(); @@ -1566,15 +1556,6 @@ void tst_QNetworkReply::initTestCase() #ifndef QT_NO_SSL QSslConfiguration::defaultConfiguration().caCertificates(); //preload certificates #endif -#ifndef QT_NO_BEARERMANAGEMENT - netConfMan = new QNetworkConfigurationManager(this); - networkConfiguration = netConfMan->defaultConfiguration(); - networkSession.reset(new QNetworkSession(networkConfiguration)); - if (!networkSession->isOpen()) { - networkSession->open(); - QVERIFY(networkSession->waitForOpened(30000)); - } -#endif echoProcessDir = QFINDTESTDATA("echo"); QVERIFY2(!echoProcessDir.isEmpty(), qPrintable( @@ -1589,11 +1570,6 @@ void tst_QNetworkReply::cleanupTestCase() if (!wronlyFileName.isNull()) QFile::remove(wronlyFileName); #endif -#ifndef QT_NO_BEARERMANAGEMENT - if (networkSession && networkSession->isOpen()) { - networkSession->close(); - } -#endif } void tst_QNetworkReply::cleanupTestData() @@ -1852,6 +1828,7 @@ void tst_QNetworkReply::getFromFileSpecial() QCOMPARE(reply->readAll(), resource.readAll()); } +#if QT_CONFIG(ftp) void tst_QNetworkReply::getFromFtp_data() { QTest::addColumn<QString>("referenceName"); @@ -1904,6 +1881,7 @@ void tst_QNetworkReply::getFromFtpAfterError() QCOMPARE(validReply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), reference.size()); QCOMPARE(validReply->readAll(), reference.readAll()); } +#endif void tst_QNetworkReply::getFromHttp_data() { @@ -1914,10 +1892,6 @@ void tst_QNetworkReply::getFromHttp_data() << testDataDir + "/rfc3252.txt" << "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"; - QTest::newRow("success-external") - << testDataDir + "/rfc3252.txt" - << "http://www.ietf.org/rfc/rfc3252.txt"; - QTest::newRow("bigfile-internal") << testDataDir + "/bigfile" << "http://" + QtNetworkSettings::httpServerName() + "/qtest/bigfile"; @@ -2077,6 +2051,7 @@ void tst_QNetworkReply::getErrors_data() QTest::newRow("file-permissions") << "file:" + filePermissionFileName << int(QNetworkReply::ContentAccessDenied) << 0 << true; +#if QT_CONFIG(ftp) // ftp: errors QTest::newRow("ftp-host") << "ftp://invalid.test.qt-project.org/foo.txt" << int(QNetworkReply::HostNotFoundError) << 0 << true; @@ -2090,6 +2065,7 @@ void tst_QNetworkReply::getErrors_data() << int(QNetworkReply::ContentAccessDenied) << 0 << true; QTest::newRow("ftp-exist") << "ftp://" + QtNetworkSettings::ftpServerName() + "/pub/this-file-doesnt-exist.txt" << int(QNetworkReply::ContentNotFoundError) << 0 << true; +#endif // http: errors QTest::newRow("http-host") << "http://invalid.test.qt-project.org/" @@ -2143,9 +2119,11 @@ void tst_QNetworkReply::getErrors() QVERIFY2(waitResult != Timeout, msgGetErrors(waitResult, reply)); QFETCH(int, error); +#if QT_CONFIG(ftp) QEXPECT_FAIL("ftp-is-dir", "QFtp cannot provide enough detail", Abort); // the line below is not necessary QEXPECT_FAIL("ftp-dir-not-readable", "QFtp cannot provide enough detail", Abort); +#endif QCOMPARE(reply->error(), QNetworkReply::NetworkError(error)); QTEST(reply->readAll().isEmpty(), "dataIsEmpty"); @@ -2215,6 +2193,7 @@ void tst_QNetworkReply::putToFile() QCOMPARE(contents, data); } +#if QT_CONFIG(ftp) void tst_QNetworkReply::putToFtp_data() { putToFile_data(); @@ -2287,6 +2266,7 @@ void tst_QNetworkReply::putToFtpWithInvalidCredentials() r->close(); } } +#endif void tst_QNetworkReply::putToHttp_data() { @@ -3287,6 +3267,7 @@ void tst_QNetworkReply::ioGetFromFile() QCOMPARE(reader.data, data); } +#if QT_CONFIG(ftp) void tst_QNetworkReply::ioGetFromFtp_data() { QTest::addColumn<QString>("fileName"); @@ -3353,6 +3334,7 @@ void tst_QNetworkReply::ioGetFromFtpWithReuse() QCOMPARE(reader1.data, referenceData); QCOMPARE(reader2.data, referenceData); } +#endif void tst_QNetworkReply::ioGetFromHttp() { @@ -4209,6 +4191,7 @@ void tst_QNetworkReply::ioGetWithManyProxies_data() << "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt" << QNetworkReply::NoError; +#if QT_CONFIG(ftp) // FTP request with FTP caching proxy proxyList.clear(); proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121); @@ -4227,6 +4210,7 @@ void tst_QNetworkReply::ioGetWithManyProxies_data() << proxyList << proxyList.at(0) << "ftp://" + QtNetworkSettings::ftpServerName() + "/qtest/rfc3252.txt" << QNetworkReply::NoError; +#endif #ifndef QT_NO_SSL // HTTPS with HTTP transparent proxy @@ -4256,6 +4240,7 @@ void tst_QNetworkReply::ioGetWithManyProxies_data() << "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt" << QNetworkReply::ProxyNotFoundError; +#if QT_CONFIG(ftp) // FTP request with HTTP caching proxy proxyList.clear(); proxyList << QNetworkProxy(QNetworkProxy::HttpCachingProxy, QtNetworkSettings::httpProxyServerName(), 3129); @@ -4272,6 +4257,7 @@ void tst_QNetworkReply::ioGetWithManyProxies_data() << proxyList << QNetworkProxy() << "ftp://" + QtNetworkSettings::ftpServerName() + "/qtest/rfc3252.txt" << QNetworkReply::ProxyNotFoundError; +#endif #ifndef QT_NO_SSL // HTTPS with HTTP caching proxy @@ -4339,6 +4325,7 @@ void tst_QNetworkReply::ioGetWithManyProxies_data() << "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt" << QNetworkReply::NoError; +#if QT_CONFIG(ftp) // FTP request with HTTP Caching + FTP proxyList.clear(); proxyList << QNetworkProxy(QNetworkProxy::HttpCachingProxy, QtNetworkSettings::httpProxyServerName(), 3129) @@ -4347,6 +4334,7 @@ void tst_QNetworkReply::ioGetWithManyProxies_data() << proxyList << proxyList.at(1) // second proxy should be used << "ftp://" + QtNetworkSettings::ftpServerName() + "/qtest/rfc3252.txt" << QNetworkReply::NoError; +#endif #ifndef QT_NO_SSL // HTTPS request with HTTP Caching + HTTP transparent @@ -4407,7 +4395,9 @@ void tst_QNetworkReply::ioGetWithManyProxies() #endif QFETCH(QNetworkReply::NetworkError, expectedError); +#if QT_CONFIG(ftp) QEXPECT_FAIL("ftp-on-socks", "QFtp is too limited and won't accept non-FTP proxies", Abort); +#endif QCOMPARE(reply->error(), expectedError); // Verify that the factory was called properly @@ -4423,8 +4413,10 @@ void tst_QNetworkReply::ioGetWithManyProxies() if (proxyUsed.type() == QNetworkProxy::NoProxy) { QCOMPARE(authspy.count(), 0); } else { +#if QT_CONFIG(ftp) if (QByteArray(QTest::currentDataTag()).startsWith("ftp-")) return; // No authentication with current FTP or with FTP proxies +#endif QCOMPARE(authspy.count(), 1); QCOMPARE(qvariant_cast<QNetworkProxy>(authspy.at(0).at(0)), proxyUsed); } @@ -4605,6 +4597,7 @@ void tst_QNetworkReply::ioPutToFileFromProcess() #endif // QT_CONFIG(process) } +#if QT_CONFIG(ftp) void tst_QNetworkReply::ioPutToFtpFromFile_data() { ioPutToFileFromFile_data(); @@ -4653,6 +4646,7 @@ void tst_QNetworkReply::ioPutToFtpFromFile() QTestEventLoop::instance().enterLoop(10); QObject::disconnect(r, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); } +#endif void tst_QNetworkReply::ioPutToHttpFromFile_data() { @@ -5903,11 +5897,6 @@ void tst_QNetworkReply::httpProxyCommands() QNetworkRequest request(url); request.setRawHeader("User-Agent", "QNetworkReplyAutoTest/1.0"); QNetworkReplyPtr reply(manager.get(request)); - //clearing the proxy here causes the test to fail. - //the proxy isn't used until after the bearer has been started - //which is correct in general, because system proxy isn't known until that time. - //removing this line is safe, as the proxy is also reset by the cleanup() function - //manager.setProxy(QNetworkProxy()); // wait for the finished signal QVERIFY(waitForFinish(reply) != Timeout); @@ -7000,38 +6989,7 @@ void tst_QNetworkReply::getFromUnreachableIp() // 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_WIN QNetworkRequest request(QUrl("http://255.255.255.255/42/23/narf/narf/narf")); @@ -8028,7 +7986,9 @@ void tst_QNetworkReply::closeDuringDownload_data() { QTest::addColumn<QUrl>("url"); QTest::newRow("http") << QUrl("http://" + QtNetworkSettings::httpServerName() + "/bigfile"); +#if QT_CONFIG(ftp) QTest::newRow("ftp") << QUrl("ftp://" + QtNetworkSettings::ftpServerName() + "/qtest/bigfile"); +#endif } void tst_QNetworkReply::closeDuringDownload() @@ -8046,6 +8006,7 @@ void tst_QNetworkReply::closeDuringDownload() QVERIFY(destroySpy.wait()); } +#if QT_CONFIG(ftp) void tst_QNetworkReply::ftpAuthentication_data() { QTest::addColumn<QString>("referenceName"); @@ -8072,6 +8033,7 @@ void tst_QNetworkReply::ftpAuthentication() QCOMPARE(reply->url(), request.url()); QCOMPARE(reply->error(), QNetworkReply::NetworkError(error)); } +#endif void tst_QNetworkReply::emitErrorForAllReplies() // QTBUG-36890 { @@ -8104,222 +8066,6 @@ void tst_QNetworkReply::emitErrorForAllReplies() // QTBUG-36890 } } -#ifdef QT_BUILD_INTERNAL -void tst_QNetworkReply::backgroundRequest_data() -{ -#ifndef QT_NO_BEARERMANAGEMENT - QTest::addColumn<QUrl>("url"); - QTest::addColumn<bool>("background"); - QTest::addColumn<int>("policy"); - QTest::addColumn<QNetworkReply::NetworkError>("error"); - - QUrl httpurl("http://" + QtNetworkSettings::httpServerName()); - QUrl httpsurl("https://" + QtNetworkSettings::httpServerName()); - QUrl ftpurl("ftp://" + QtNetworkSettings::ftpServerName() + "/qtest/rfc3252.txt"); - - QTest::newRow("http, fg, normal") << httpurl << false << (int)QNetworkSession::NoPolicy << QNetworkReply::NoError; - QTest::newRow("http, bg, normal") << httpurl << true << (int)QNetworkSession::NoPolicy << QNetworkReply::NoError; - QTest::newRow("http, fg, nobg") << httpurl << false << (int)QNetworkSession::NoBackgroundTrafficPolicy << QNetworkReply::NoError; - QTest::newRow("http, bg, nobg") << httpurl << true << (int)QNetworkSession::NoBackgroundTrafficPolicy << QNetworkReply::BackgroundRequestNotAllowedError; - -#ifndef QT_NO_SSL - QTest::newRow("https, fg, normal") << httpsurl << false << (int)QNetworkSession::NoPolicy << QNetworkReply::NoError; - QTest::newRow("https, bg, normal") << httpsurl << true << (int)QNetworkSession::NoPolicy << QNetworkReply::NoError; - QTest::newRow("https, fg, nobg") << httpsurl << false << (int)QNetworkSession::NoBackgroundTrafficPolicy << QNetworkReply::NoError; - QTest::newRow("https, bg, nobg") << httpsurl << true << (int)QNetworkSession::NoBackgroundTrafficPolicy << QNetworkReply::BackgroundRequestNotAllowedError; -#endif - - QTest::newRow("ftp, fg, normal") << ftpurl << false << (int)QNetworkSession::NoPolicy << QNetworkReply::NoError; - QTest::newRow("ftp, bg, normal") << ftpurl << true << (int)QNetworkSession::NoPolicy << QNetworkReply::NoError; - QTest::newRow("ftp, fg, nobg") << ftpurl << false << (int)QNetworkSession::NoBackgroundTrafficPolicy << QNetworkReply::NoError; - QTest::newRow("ftp, bg, nobg") << ftpurl << true << (int)QNetworkSession::NoBackgroundTrafficPolicy << QNetworkReply::BackgroundRequestNotAllowedError; -#endif // !QT_NO_BEARERMANAGEMENT -} -#endif - -//test purpose: background requests can't be started when not allowed -#ifdef QT_BUILD_INTERNAL -void tst_QNetworkReply::backgroundRequest() -{ -#ifndef QT_NO_BEARERMANAGEMENT - QFETCH(QUrl, url); - QFETCH(bool, background); - QFETCH(int, policy); - QFETCH(QNetworkReply::NetworkError, error); - - QNetworkRequest request(url); - - if (background) - request.setAttribute(QNetworkRequest::BackgroundRequestAttribute, QVariant::fromValue(true)); - - //this preconstructs the session so we can change policies in advance - manager.setConfiguration(networkConfiguration); - -#ifndef QT_NO_SSL - connect(&manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), - SLOT(sslErrors(QNetworkReply*,QList<QSslError>))); -#endif - - const QWeakPointer<const QNetworkSession> sessionWeakPtr = QNetworkAccessManagerPrivate::getNetworkSession(&manager); - QVERIFY(!sessionWeakPtr.isNull()); - auto session = const_cast<QNetworkSession *>(sessionWeakPtr.toStrongRef().data()); - QNetworkSession::UsagePolicies original = session->usagePolicies(); - QNetworkSessionPrivate::setUsagePolicies(*session, QNetworkSession::UsagePolicies(policy)); - - QNetworkReplyPtr reply(manager.get(request)); - - QVERIFY(waitForFinish(reply) != Timeout); - if (session) - QNetworkSessionPrivate::setUsagePolicies(*session, original); - - QVERIFY(reply->isFinished()); - QCOMPARE(reply->error(), error); -#endif -} -#endif - -#ifdef QT_BUILD_INTERNAL -void tst_QNetworkReply::backgroundRequestInterruption_data() -{ - QTest::addColumn<QUrl>("url"); - QTest::addColumn<bool>("background"); - QTest::addColumn<QNetworkReply::NetworkError>("error"); - - QUrl httpurl("http://" + QtNetworkSettings::httpServerName() + "/qtest/mediumfile"); - QUrl httpsurl("https://" + QtNetworkSettings::httpServerName() + "/qtest/mediumfile"); - QUrl ftpurl("ftp://" + QtNetworkSettings::ftpServerName() + "/qtest/bigfile"); - - QTest::newRow("http, fg, nobg") << httpurl << false << QNetworkReply::NoError; - QTest::newRow("http, bg, nobg") << httpurl << true << QNetworkReply::BackgroundRequestNotAllowedError; - -#ifndef QT_NO_SSL - QTest::newRow("https, fg, nobg") << httpsurl << false << QNetworkReply::NoError; - QTest::newRow("https, bg, nobg") << httpsurl << true << QNetworkReply::BackgroundRequestNotAllowedError; -#endif - - QTest::newRow("ftp, fg, nobg") << ftpurl << false << QNetworkReply::NoError; - QTest::newRow("ftp, bg, nobg") << ftpurl << true << QNetworkReply::BackgroundRequestNotAllowedError; - -} -#endif - -//test purpose: background requests in progress are aborted when policy changes to disallow them -#ifdef QT_BUILD_INTERNAL -void tst_QNetworkReply::backgroundRequestInterruption() -{ -#ifndef QT_NO_BEARERMANAGEMENT - if (QNetworkStatusMonitor::isEnabled() && QByteArray(QTest::currentDataTag()).startsWith("http")) - QSKIP("This test (currently) doesn't make any sense when QNetworkStatusMonitor is enabled"); - - QFETCH(QUrl, url); - QFETCH(bool, background); - QFETCH(QNetworkReply::NetworkError, error); - - QNetworkRequest request(url); - - if (background) - request.setAttribute(QNetworkRequest::BackgroundRequestAttribute, QVariant::fromValue(true)); - - //this preconstructs the session so we can change policies in advance - manager.setConfiguration(networkConfiguration); - -#ifndef QT_NO_SSL - connect(&manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), - SLOT(sslErrors(QNetworkReply*,QList<QSslError>))); -#endif - - const QWeakPointer<const QNetworkSession> sessionWeakPtr = QNetworkAccessManagerPrivate::getNetworkSession(&manager); - QVERIFY(!sessionWeakPtr.isNull()); - auto session = const_cast<QNetworkSession *>(sessionWeakPtr.toStrongRef().data()); - QNetworkSession::UsagePolicies original = session->usagePolicies(); - QNetworkSessionPrivate::setUsagePolicies(*session, QNetworkSession::NoPolicy); - - request.setAttribute(QNetworkRequest::MaximumDownloadBufferSizeAttribute, 8192); - QNetworkReplyPtr reply(manager.get(request)); - reply->setReadBufferSize(1024); - - QSignalSpy spy(reply.data(), SIGNAL(readyRead())); - QTRY_VERIFY(spy.count() > 0); - - QNetworkSessionPrivate::setUsagePolicies(*session, QNetworkSession::NoBackgroundTrafficPolicy); - - // After we have changed the policy we can download at full speed. - reply->setReadBufferSize(0); - - QVERIFY(waitForFinish(reply) != Timeout); - if (session) - QNetworkSessionPrivate::setUsagePolicies(*session, original); - - QVERIFY(reply->isFinished()); - QCOMPARE(reply->error(), error); -#endif -} -#endif - -#ifdef QT_BUILD_INTERNAL -void tst_QNetworkReply::backgroundRequestConnectInBackground_data() -{ - QTest::addColumn<QUrl>("url"); - QTest::addColumn<bool>("background"); - - QUrl httpurl("http://" + QtNetworkSettings::httpServerName()); - QUrl ftpurl("ftp://" + QtNetworkSettings::ftpServerName() + "/qtest/rfc3252.txt"); - - QTest::newRow("http, fg") << httpurl << false; - QTest::newRow("http, bg") << httpurl << true; - - QTest::newRow("ftp, fg") << ftpurl << false; - QTest::newRow("ftp, bg") << ftpurl << true; -} -#endif - -//test purpose: check that backgroundness is propagated to the network session -#ifdef QT_BUILD_INTERNAL -void tst_QNetworkReply::backgroundRequestConnectInBackground() -{ -#ifndef QT_NO_BEARERMANAGEMENT - QFETCH(QUrl, url); - QFETCH(bool, background); - - QNetworkRequest request(url); - - if (background) - request.setAttribute(QNetworkRequest::BackgroundRequestAttribute, QVariant::fromValue(true)); - - QWeakPointer<const QNetworkSession> session = QNetworkAccessManagerPrivate::getNetworkSession(&manager); - //force QNAM to reopen the session. - if (session && session.toStrongRef().data()->isOpen()) { - const_cast<QNetworkSession *>(session.toStrongRef().data())->close(); - QCoreApplication::processEvents(); //let signals propagate inside QNAM - } - - //this preconstructs the session so we can change policies in advance - manager.setConfiguration(networkConfiguration); - - session = QNetworkAccessManagerPrivate::getNetworkSession(&manager); - QVERIFY(session); - QNetworkSession::UsagePolicies original = session.toStrongRef().data()->usagePolicies(); - QNetworkSessionPrivate::setUsagePolicies(*const_cast<QNetworkSession *>(session.toStrongRef().data()), QNetworkSession::NoPolicy); - - QNetworkReplyPtr reply(manager.get(request)); - - QVERIFY(waitForFinish(reply) != Timeout); - session = QNetworkAccessManagerPrivate::getNetworkSession(&manager); - if (session) { - QVariant cib = session.toStrongRef().data()->sessionProperty(QStringLiteral("ConnectInBackground")); - if (!cib.isValid()) - QSKIP("inconclusive - ConnectInBackground session property not supported by the bearer plugin"); - QCOMPARE(cib.toBool(), background); - QNetworkSessionPrivate::setUsagePolicies(*const_cast<QNetworkSession *>(session.toStrongRef().data()), original); - } else { - QSKIP("inconclusive - network session has been destroyed"); - } - - QVERIFY(reply->isFinished()); -#endif -} -#endif - class RateLimitedUploadDevice : public QIODevice { Q_OBJECT @@ -9195,7 +8941,9 @@ void tst_QNetworkReply::autoDeleteRepliesAttribute_data() QTest::newRow("http") << QUrl("http://QInvalidDomain.qt/test"); QTest::newRow("https") << QUrl("https://QInvalidDomain.qt/test"); +#if QT_CONFIG(ftp) QTest::newRow("ftp") << QUrl("ftp://QInvalidDomain.qt/test"); +#endif QTest::newRow("file") << QUrl("file:///thisfolderdoesn'texist/probably.txt"); #ifdef Q_OS_WIN // Only supported on windows. |