diff options
Diffstat (limited to 'tests/auto/network')
107 files changed, 1710 insertions, 3450 deletions
diff --git a/tests/auto/network/CMakeLists.txt b/tests/auto/network/CMakeLists.txt new file mode 100644 index 0000000000..0e2415daac --- /dev/null +++ b/tests/auto/network/CMakeLists.txt @@ -0,0 +1,20 @@ +# Generated from network.pro. +# special case begin +# SSL library include path is not propagated with private tests which results in +# test not being able to find the ssl header when they are not in the standard +# include paths +if (QT_FEATURE_private_tests) + if (QT_FEATURE_openssl AND QT_FEATURE_openssl_linked AND QT_FEATURE_ssl) + include_directories($<TARGET_PROPERTY:OpenSSL::SSL,INTERFACE_INCLUDE_DIRECTORIES>) + endif() + + if (QT_FEATURE_openssl AND QT_FEATURE_ssl AND NOT QT_FEATURE_openssl_linked) + include_directories($<TARGET_PROPERTY:${INSTALL_CMAKE_NAMESPACE}::SSL_nolink,INTERFACE_INCLUDE_DIRECTORIES>) + endif() +endif() +# special case end + +add_subdirectory(access) +add_subdirectory(kernel) +add_subdirectory(ssl) +add_subdirectory(socket) diff --git a/tests/auto/network/access/CMakeLists.txt b/tests/auto/network/access/CMakeLists.txt new file mode 100644 index 0000000000..432c19ec81 --- /dev/null +++ b/tests/auto/network/access/CMakeLists.txt @@ -0,0 +1,22 @@ +# Generated from access.pro. + +add_subdirectory(qnetworkdiskcache) +add_subdirectory(qnetworkcookiejar) +add_subdirectory(qnetworkaccessmanager) +add_subdirectory(qnetworkcookie) +add_subdirectory(qnetworkrequest) +add_subdirectory(qnetworkreply) +add_subdirectory(qnetworkcachemetadata) +add_subdirectory(qabstractnetworkcache) + + +if(QT_FEATURE_private_tests) + add_subdirectory(qhttpnetworkconnection) + add_subdirectory(qhttpnetworkreply) + add_subdirectory(hpack) + add_subdirectory(http2) + add_subdirectory(hsts) +endif() +if(QT_FEATURE_ftp AND QT_FEATURE_private_tests) + add_subdirectory(qftp) +endif() diff --git a/tests/auto/network/access/access.pro b/tests/auto/network/access/access.pro index b140b5e9f2..b451a2ccc6 100644 --- a/tests/auto/network/access/access.pro +++ b/tests/auto/network/access/access.pro @@ -1,4 +1,6 @@ TEMPLATE=subdirs +QT_FOR_CONFIG += network + SUBDIRS=\ qnetworkdiskcache \ qnetworkcookiejar \ @@ -7,9 +9,7 @@ SUBDIRS=\ qnetworkrequest \ qhttpnetworkconnection \ qnetworkreply \ - spdy \ qnetworkcachemetadata \ - qftp \ qhttpnetworkreply \ qabstractnetworkcache \ hpack \ @@ -19,7 +19,8 @@ SUBDIRS=\ !qtConfig(private_tests): SUBDIRS -= \ qhttpnetworkconnection \ qhttpnetworkreply \ - qftp \ hpack \ http2 \ hsts + +qtConfig(ftp): qtConfig(private_tests): SUBDIRS += qftp diff --git a/tests/auto/network/access/hpack/CMakeLists.txt b/tests/auto/network/access/hpack/CMakeLists.txt new file mode 100644 index 0000000000..e1c5c1a469 --- /dev/null +++ b/tests/auto/network/access/hpack/CMakeLists.txt @@ -0,0 +1,17 @@ +# Generated from hpack.pro. + +##################################################################### +## tst_hpack Test: +##################################################################### + +add_qt_test(tst_hpack + SOURCES + tst_hpack.cpp + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::Network + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:hpack.pro:<TRUE>: +# TEMPLATE = "app" diff --git a/tests/auto/network/access/hsts/CMakeLists.txt b/tests/auto/network/access/hsts/CMakeLists.txt new file mode 100644 index 0000000000..804ebedf61 --- /dev/null +++ b/tests/auto/network/access/hsts/CMakeLists.txt @@ -0,0 +1,17 @@ +# Generated from hsts.pro. + +##################################################################### +## tst_qhsts Test: +##################################################################### + +add_qt_test(tst_qhsts + SOURCES + tst_qhsts.cpp + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::Network + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:hsts.pro:<TRUE>: +# TEMPLATE = "app" diff --git a/tests/auto/network/access/http2/CMakeLists.txt b/tests/auto/network/access/http2/CMakeLists.txt new file mode 100644 index 0000000000..51c7c18eac --- /dev/null +++ b/tests/auto/network/access/http2/CMakeLists.txt @@ -0,0 +1,20 @@ +# Generated from http2.pro. + +##################################################################### +## tst_http2 Test: +##################################################################### + +add_qt_test(tst_http2 + SOURCES + ../../../../shared/emulationdetector.h + http2srv.cpp http2srv.h + tst_http2.cpp + DEFINES + SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/\\\" + INCLUDE_DIRECTORIES + ../../../../shared + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::Network + Qt::NetworkPrivate +) diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp index 6702f25b16..a92c948ade 100644 --- a/tests/auto/network/access/http2/tst_http2.cpp +++ b/tests/auto/network/access/http2/tst_http2.cpp @@ -937,13 +937,6 @@ void tst_Http2::replyFinished() QVERIFY(http2Used.isValid()); QVERIFY(http2Used.toBool()); - const QVariant spdyUsed(reply->attribute(QNetworkRequest::SpdyWasUsedAttribute)); - if (!spdyUsed.isValid() || spdyUsed.toBool()) - stopEventLoop(); - - QVERIFY(spdyUsed.isValid()); - QVERIFY(!spdyUsed.toBool()); - const QVariant code(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute)); if (!code.isValid() || !code.canConvert<int>() || code.value<int>() != 200) stopEventLoop(); diff --git a/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt b/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt new file mode 100644 index 0000000000..07128e40bb --- /dev/null +++ b/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt @@ -0,0 +1,22 @@ +# Generated from qabstractnetworkcache.pro. + +##################################################################### +## tst_qabstractnetworkcache Test: +##################################################################### + +# Collect test data +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + tests/*) +list(APPEND test_data ${test_data_glob}) + +add_qt_test(tst_qabstractnetworkcache + SOURCES + tst_qabstractnetworkcache.cpp + PUBLIC_LIBRARIES + Qt::Network + TESTDATA ${test_data} +) + +#### Keys ignored in scope 1:.:.:qabstractnetworkcache.pro:<TRUE>: +# QT_TEST_SERVER_LIST = "apache2" diff --git a/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp b/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp index 182e3e9547..b6be01d900 100644 --- a/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp +++ b/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp @@ -31,12 +31,6 @@ #include <QtNetwork/QtNetwork> #include "../../../network-settings.h" -#ifndef QT_NO_BEARERMANAGEMENT -#include <QtNetwork/qnetworkconfigmanager.h> -#include <QtNetwork/qnetworkconfiguration.h> -#include <QtNetwork/qnetworksession.h> -#endif - #include <algorithm> #define TESTFILE QLatin1String("http://") + QtNetworkSettings::httpServerName() + QLatin1String("/qtest/cgi-bin/") @@ -77,11 +71,6 @@ private: void runTest(); void checkSynchronous(); -#ifndef QT_NO_BEARERMANAGEMENT - QNetworkConfigurationManager *netConfMan; - QNetworkConfiguration networkConfiguration; - QScopedPointer<QNetworkSession> networkSession; -#endif }; class NetworkDiskCache : public QNetworkDiskCache @@ -133,16 +122,6 @@ void tst_QAbstractNetworkCache::initTestCase() if (!QtNetworkSettings::verifyTestNetworkSettings()) QSKIP("No network test server available"); #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 } diff --git a/tests/auto/network/access/qftp/CMakeLists.txt b/tests/auto/network/access/qftp/CMakeLists.txt new file mode 100644 index 0000000000..877c3a229b --- /dev/null +++ b/tests/auto/network/access/qftp/CMakeLists.txt @@ -0,0 +1,25 @@ +# Generated from qftp.pro. + +if(NOT QT_FEATURE_ftp) + return() +endif() +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qftp Test: +##################################################################### + +add_qt_test(tst_qftp + SOURCES + tst_qftp.cpp + PUBLIC_LIBRARIES + Qt::Network + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:qftp.pro:<TRUE>: +# QT_FOR_CONFIG = "network" +# QT_TEST_SERVER_LIST = "vsftpd" "ftp-proxy" "squid" "danted" +# _REQUIREMENTS = "qtConfig(ftp)" "qtConfig(private_tests)" diff --git a/tests/auto/network/access/qftp/qftp.pro b/tests/auto/network/access/qftp/qftp.pro index c78020c5f8..ad610316df 100644 --- a/tests/auto/network/access/qftp/qftp.pro +++ b/tests/auto/network/access/qftp/qftp.pro @@ -1,7 +1,9 @@ CONFIG += testcase TARGET = tst_qftp SOURCES += tst_qftp.cpp +QT_FOR_CONFIG += network +requires(qtConfig(ftp)) requires(qtConfig(private_tests)) QT = core network network-private testlib diff --git a/tests/auto/network/access/qftp/tst_qftp.cpp b/tests/auto/network/access/qftp/tst_qftp.cpp index 60acb70af4..886a589324 100644 --- a/tests/auto/network/access/qftp/tst_qftp.cpp +++ b/tests/auto/network/access/qftp/tst_qftp.cpp @@ -37,10 +37,6 @@ #include <time.h> #include <stdlib.h> #include <QNetworkProxy> -#include <QNetworkConfiguration> -#include <qnetworkconfigmanager.h> -#include <QNetworkSession> -#include <QtNetwork/private/qnetworksession_p.h> #include <QTcpServer> #include <QHostInfo> #include <QElapsedTimer> @@ -66,7 +62,6 @@ public: private slots: void initTestCase_data(); void initTestCase(); - void cleanupTestCase(); void init(); void cleanup(); void connectToHost_data(); @@ -138,10 +133,6 @@ private: void renameCleanup( const QString &host, const QString &user, const QString &password, const QString &fileToDelete ); QFtp *ftp; -#ifndef QT_NO_BEARERMANAGEMENT - QSharedPointer<QNetworkSession> networkSessionExplicit; - QSharedPointer<QNetworkSession> networkSessionImplicit; -#endif QList<int> ids; // helper to make sure that all expected signals are emitted int current_id; @@ -190,21 +181,13 @@ void tst_QFtp::initTestCase_data() { QTest::addColumn<bool>("setProxy"); QTest::addColumn<int>("proxyType"); - QTest::addColumn<bool>("setSession"); - QTest::newRow("WithoutProxy") << false << 0 << false; + QTest::newRow("WithoutProxy") << false << 0; #if QT_CONFIG(socks5) - QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy) << false; + QTest::newRow("WithSocks5Proxy") << true << int(QNetworkProxy::Socks5Proxy); #endif //### doesn't work well yet. //QTest::newRow("WithHttpProxy") << true << int(QNetworkProxy::HttpProxy); - -#ifndef QT_NO_BEARERMANAGEMENT - QTest::newRow("WithoutProxyWithSession") << false << 0 << true; -#if QT_CONFIG(socks5) - QTest::newRow("WithSocks5ProxyAndSession") << true << int(QNetworkProxy::Socks5Proxy) << true; -#endif -#endif } void tst_QFtp::initTestCase() @@ -218,29 +201,14 @@ void tst_QFtp::initTestCase() if (!QtNetworkSettings::verifyTestNetworkSettings()) QSKIP("No network test server available"); #endif -#ifndef QT_NO_BEARERMANAGEMENT - QNetworkConfigurationManager manager; - networkSessionImplicit = QSharedPointer<QNetworkSession>::create(manager.defaultConfiguration()); - 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() -{ -#ifndef QT_NO_BEARERMANAGEMENT - networkSessionExplicit.clear(); - networkSessionImplicit.clear(); -#endif -} - void tst_QFtp::init() { QFETCH_GLOBAL(bool, setProxy); QFETCH_GLOBAL(int, proxyType); - QFETCH_GLOBAL(bool, setSession); if (setProxy) { #ifndef QT_NO_NETWORKPROXY if (proxyType == QNetworkProxy::Socks5Proxy) { @@ -253,19 +221,6 @@ void tst_QFtp::init() QSKIP("No proxy support"); #endif // QT_NO_NETWORKPROXY } -#ifndef QT_NO_BEARERMANAGEMENT - if (setSession) { - networkSessionExplicit = networkSessionImplicit; - if (!networkSessionExplicit->isOpen()) { - networkSessionExplicit->open(); - QVERIFY(networkSessionExplicit->waitForOpened(30000)); - } - } else { - networkSessionExplicit.clear(); - } -#else - Q_UNUSED(setSession); -#endif delete ftp; ftp = 0; @@ -314,9 +269,6 @@ void tst_QFtp::cleanup() delete ftp; ftp = 0; -#ifndef QT_NO_BEARERMANAGEMENT - networkSessionExplicit.clear(); -#endif } void tst_QFtp::connectToHost_data() @@ -1947,11 +1899,6 @@ void tst_QFtp::dataTransferProgress( qint64 done, qint64 total ) QFtp *tst_QFtp::newFtp() { QFtp *nFtp = new QFtp( this ); -#ifndef QT_NO_BEARERMANAGEMENT - if (networkSessionExplicit) { - nFtp->setProperty("_q_networksession", QVariant::fromValue(networkSessionExplicit)); - } -#endif connect( nFtp, SIGNAL(commandStarted(int)), SLOT(commandStarted(int)) ); connect( nFtp, SIGNAL(commandFinished(int,bool)), diff --git a/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt b/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt new file mode 100644 index 0000000000..6ab8876c82 --- /dev/null +++ b/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt @@ -0,0 +1,21 @@ +# Generated from qhttpnetworkconnection.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qhttpnetworkconnection Test: +##################################################################### + +add_qt_test(tst_qhttpnetworkconnection + SOURCES + tst_qhttpnetworkconnection.cpp + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:qhttpnetworkconnection.pro:<TRUE>: +# QT_TEST_SERVER_LIST = "apache2" +# _REQUIREMENTS = "qtConfig(private_tests)" diff --git a/tests/auto/network/access/qhttpnetworkreply/CMakeLists.txt b/tests/auto/network/access/qhttpnetworkreply/CMakeLists.txt new file mode 100644 index 0000000000..8c68a18da6 --- /dev/null +++ b/tests/auto/network/access/qhttpnetworkreply/CMakeLists.txt @@ -0,0 +1,20 @@ +# Generated from qhttpnetworkreply.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qhttpnetworkreply Test: +##################################################################### + +add_qt_test(tst_qhttpnetworkreply + SOURCES + tst_qhttpnetworkreply.cpp + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:qhttpnetworkreply.pro:<TRUE>: +# _REQUIREMENTS = "qtConfig(private_tests)" diff --git a/tests/auto/network/access/qnetworkaccessmanager/CMakeLists.txt b/tests/auto/network/access/qnetworkaccessmanager/CMakeLists.txt new file mode 100644 index 0000000000..4b58c449c6 --- /dev/null +++ b/tests/auto/network/access/qnetworkaccessmanager/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qnetworkaccessmanager.pro. + +##################################################################### +## tst_qnetworkaccessmanager Test: +##################################################################### + +add_qt_test(tst_qnetworkaccessmanager + SOURCES + tst_qnetworkaccessmanager.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp b/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp index b5ded86d58..78919e8af6 100644 --- a/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp +++ b/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp @@ -30,16 +30,9 @@ #include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkReply> -#ifndef QT_NO_BEARERMANAGEMENT -#include <QtNetwork/QNetworkConfigurationManager> -#endif #include <QtCore/QDebug> -#ifndef QT_NO_BEARERMANAGEMENT -Q_DECLARE_METATYPE(QNetworkAccessManager::NetworkAccessibility) -#endif - class tst_QNetworkAccessManager : public QObject { Q_OBJECT @@ -48,7 +41,6 @@ public: tst_QNetworkAccessManager(); private slots: - void networkAccessible(); void alwaysCacheRequest(); }; @@ -56,77 +48,6 @@ tst_QNetworkAccessManager::tst_QNetworkAccessManager() { } -void tst_QNetworkAccessManager::networkAccessible() -{ -#ifndef QT_NO_BEARERMANAGEMENT // ### Qt6: Remove section - QNetworkAccessManager manager; - - qRegisterMetaType<QNetworkAccessManager::NetworkAccessibility>("QNetworkAccessManager::NetworkAccessibility"); - - QSignalSpy spy(&manager, - SIGNAL(networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility))); - - // if there is no session, we cannot know in which state we are in - QNetworkAccessManager::NetworkAccessibility initialAccessibility = - manager.networkAccessible(); - - if (initialAccessibility == QNetworkAccessManager::UnknownAccessibility) - QSKIP("Unknown accessibility", SkipAll); - - QCOMPARE(manager.networkAccessible(), initialAccessibility); - - manager.setNetworkAccessible(QNetworkAccessManager::NotAccessible); - - int expectedCount = (initialAccessibility == QNetworkAccessManager::Accessible) ? 1 : 0; - QCOMPARE(spy.count(), expectedCount); - if (expectedCount > 0) - QCOMPARE(spy.takeFirst().at(0).value<QNetworkAccessManager::NetworkAccessibility>(), - QNetworkAccessManager::NotAccessible); - QCOMPARE(manager.networkAccessible(), QNetworkAccessManager::NotAccessible); - - // When network is not accessible, all requests fail - QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("http://www.example.org"))); - QSignalSpy finishedSpy(reply, &QNetworkReply::finished); - QSignalSpy errorSpy(reply, &QNetworkReply::errorOccurred); - QVERIFY(finishedSpy.wait()); - QCOMPARE(reply->isFinished(), true); - QCOMPARE(reply->errorString(), QStringLiteral("Network access is disabled.")); - QCOMPARE(errorSpy.count(), 1); - - manager.setNetworkAccessible(QNetworkAccessManager::Accessible); - - QCOMPARE(spy.count(), expectedCount); - if (expectedCount > 0) - QCOMPARE(spy.takeFirst().at(0).value<QNetworkAccessManager::NetworkAccessibility>(), - initialAccessibility); - QCOMPARE(manager.networkAccessible(), initialAccessibility); - - QNetworkConfigurationManager configManager; - QNetworkConfiguration defaultConfig = configManager.defaultConfiguration(); - if (defaultConfig.isValid()) { - manager.setConfiguration(defaultConfig); - - QCOMPARE(spy.count(), 0); - - if (defaultConfig.state().testFlag(QNetworkConfiguration::Active)) - QCOMPARE(manager.networkAccessible(), QNetworkAccessManager::Accessible); - else - QCOMPARE(manager.networkAccessible(), QNetworkAccessManager::NotAccessible); - - manager.setNetworkAccessible(QNetworkAccessManager::NotAccessible); - - if (defaultConfig.state().testFlag(QNetworkConfiguration::Active)) { - QCOMPARE(spy.count(), 1); - QCOMPARE(QNetworkAccessManager::NetworkAccessibility(spy.takeFirst().at(0).toInt()), - QNetworkAccessManager::NotAccessible); - } else { - QCOMPARE(spy.count(), 0); - } - } - QCOMPARE(manager.networkAccessible(), QNetworkAccessManager::NotAccessible); -#endif -} - void tst_QNetworkAccessManager::alwaysCacheRequest() { QNetworkAccessManager manager; diff --git a/tests/auto/network/access/qnetworkcachemetadata/CMakeLists.txt b/tests/auto/network/access/qnetworkcachemetadata/CMakeLists.txt new file mode 100644 index 0000000000..08e80d8e0d --- /dev/null +++ b/tests/auto/network/access/qnetworkcachemetadata/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qnetworkcachemetadata.pro. + +##################################################################### +## tst_qnetworkcachemetadata Test: +##################################################################### + +add_qt_test(tst_qnetworkcachemetadata + SOURCES + tst_qnetworkcachemetadata.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/access/qnetworkcookie/CMakeLists.txt b/tests/auto/network/access/qnetworkcookie/CMakeLists.txt new file mode 100644 index 0000000000..ab90a61bb3 --- /dev/null +++ b/tests/auto/network/access/qnetworkcookie/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qnetworkcookie.pro. + +##################################################################### +## tst_qnetworkcookie Test: +##################################################################### + +add_qt_test(tst_qnetworkcookie + SOURCES + tst_qnetworkcookie.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/access/qnetworkcookiejar/CMakeLists.txt b/tests/auto/network/access/qnetworkcookiejar/CMakeLists.txt new file mode 100644 index 0000000000..929388a10a --- /dev/null +++ b/tests/auto/network/access/qnetworkcookiejar/CMakeLists.txt @@ -0,0 +1,18 @@ +# Generated from qnetworkcookiejar.pro. + +##################################################################### +## tst_qnetworkcookiejar Test: +##################################################################### + +# Collect test data +list(APPEND test_data "parser.json") + +add_qt_test(tst_qnetworkcookiejar + SOURCES + tst_qnetworkcookiejar.cpp + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::Network + Qt::NetworkPrivate + TESTDATA ${test_data} +) diff --git a/tests/auto/network/access/qnetworkdiskcache/CMakeLists.txt b/tests/auto/network/access/qnetworkdiskcache/CMakeLists.txt new file mode 100644 index 0000000000..b206686139 --- /dev/null +++ b/tests/auto/network/access/qnetworkdiskcache/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qnetworkdiskcache.pro. + +##################################################################### +## tst_qnetworkdiskcache Test: +##################################################################### + +add_qt_test(tst_qnetworkdiskcache + SOURCES + tst_qnetworkdiskcache.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST index 801ac65d71..a2c6224ce0 100644 --- a/tests/auto/network/access/qnetworkreply/BLACKLIST +++ b/tests/auto/network/access/qnetworkreply/BLACKLIST @@ -15,8 +15,6 @@ linux # QTBUG-71953 [getFromHttp] * !android !winrt -[getFromHttp:success-external] -* [getFromHttpIntoBuffer] osx [getFromHttpIntoBuffer2] diff --git a/tests/auto/network/access/qnetworkreply/CMakeLists.txt b/tests/auto/network/access/qnetworkreply/CMakeLists.txt new file mode 100644 index 0000000000..f7efa8f7f3 --- /dev/null +++ b/tests/auto/network/access/qnetworkreply/CMakeLists.txt @@ -0,0 +1,7 @@ +# Generated from qnetworkreply.pro. + +add_subdirectory(test) + +if(NOT WINRT) + add_subdirectory(echo) +endif() diff --git a/tests/auto/network/access/qnetworkreply/echo/.prev_CMakeLists.txt b/tests/auto/network/access/qnetworkreply/echo/.prev_CMakeLists.txt new file mode 100644 index 0000000000..e43272d7e8 --- /dev/null +++ b/tests/auto/network/access/qnetworkreply/echo/.prev_CMakeLists.txt @@ -0,0 +1,10 @@ +# Generated from echo.pro. + +##################################################################### +## echo Binary: +##################################################################### + +add_qt_executable(echo + SOURCES + main.cpp +) diff --git a/tests/auto/network/access/qnetworkreply/echo/CMakeLists.txt b/tests/auto/network/access/qnetworkreply/echo/CMakeLists.txt new file mode 100644 index 0000000000..f260b97b8d --- /dev/null +++ b/tests/auto/network/access/qnetworkreply/echo/CMakeLists.txt @@ -0,0 +1,11 @@ +# Generated from echo.pro. + +##################################################################### +## echo Binary: +##################################################################### + +add_qt_executable(echo + OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case + SOURCES + main.cpp +) diff --git a/tests/auto/network/access/qnetworkreply/test/.prev_CMakeLists.txt b/tests/auto/network/access/qnetworkreply/test/.prev_CMakeLists.txt new file mode 100644 index 0000000000..48759572de --- /dev/null +++ b/tests/auto/network/access/qnetworkreply/test/.prev_CMakeLists.txt @@ -0,0 +1,59 @@ +# Generated from test.pro. + +##################################################################### +## tst_qnetworkreply Test: +##################################################################### + +# Collect test data +list(APPEND test_data "../empty") +list(APPEND test_data "../rfc3252.txt") +list(APPEND test_data "../resource") +list(APPEND test_data "../bigfile") +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + ../*.jpg) +list(APPEND test_data ${test_data_glob}) +list(APPEND test_data "../certs") +list(APPEND test_data "../index.html") +list(APPEND test_data "../smb-file.txt") + +add_qt_test(tst_qnetworkreply + SOURCES + ../../../../../shared/emulationdetector.h + ../tst_qnetworkreply.cpp + INCLUDE_DIRECTORIES + ../../../../../shared + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate + TESTDATA ${test_data} +) + +# Resources: +set_source_files_properties("../resource" + PROPERTIES QT_RESOURCE_ALIAS "resource" +) +set(qnetworkreply_resource_files + "resource" +) + +add_qt_resource(tst_qnetworkreply "qnetworkreply" + PREFIX + "/" + BASE + ".." + FILES + ${qnetworkreply_resource_files} +) + + +#### Keys ignored in scope 1:.:.:test.pro:<TRUE>: +# QT_FOR_CONFIG = "gui-private" +# QT_TEST_SERVER_LIST = "vsftpd" "apache2" "ftp-proxy" "danted" "squid" +# testcase.timeout = "600" + +## Scopes: +##################################################################### + +#### Keys ignored in scope 2:.:.:test.pro:NOT ANDROID AND NOT WINRT: +# TEST_HELPER_INSTALLS = "../echo/echo" diff --git a/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt b/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt new file mode 100644 index 0000000000..ef017edf58 --- /dev/null +++ b/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt @@ -0,0 +1,60 @@ +# Generated from test.pro. + +##################################################################### +## tst_qnetworkreply Test: +##################################################################### + +# Collect test data +list(APPEND test_data "../empty") +list(APPEND test_data "../rfc3252.txt") +list(APPEND test_data "../resource") +list(APPEND test_data "../bigfile") +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + ../*.jpg) +list(APPEND test_data ${test_data_glob}) +list(APPEND test_data "../certs") +list(APPEND test_data "../index.html") +list(APPEND test_data "../smb-file.txt") + +add_qt_test(tst_qnetworkreply + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case + SOURCES + ../../../../../shared/emulationdetector.h + ../tst_qnetworkreply.cpp + INCLUDE_DIRECTORIES + ../../../../../shared + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate + TESTDATA ${test_data} +) + +# Resources: +set_source_files_properties("../resource" + PROPERTIES QT_RESOURCE_ALIAS "resource" +) +set(qnetworkreply_resource_files + "resource" +) + +add_qt_resource(tst_qnetworkreply "qnetworkreply" + PREFIX + "/" + BASE + ".." + FILES + ${qnetworkreply_resource_files} +) + + +#### Keys ignored in scope 1:.:.:test.pro:<TRUE>: +# QT_FOR_CONFIG = "gui-private" +# QT_TEST_SERVER_LIST = "vsftpd" "apache2" "ftp-proxy" "danted" "squid" +# testcase.timeout = "600" + +## Scopes: +##################################################################### + +#### Keys ignored in scope 2:.:.:test.pro:NOT ANDROID AND NOT WINRT: +# TEST_HELPER_INSTALLS = "../echo/echo" diff --git a/tests/auto/network/access/qnetworkreply/test/test.pro b/tests/auto/network/access/qnetworkreply/test/test.pro index 4cc1f6431e..d3385c1929 100644 --- a/tests/auto/network/access/qnetworkreply/test/test.pro +++ b/tests/auto/network/access/qnetworkreply/test/test.pro @@ -4,7 +4,7 @@ CONFIG -= debug_and_release_target INCLUDEPATH += ../../../../../shared/ HEADERS += ../../../../../shared/emulationdetector.h SOURCES += ../tst_qnetworkreply.cpp -TARGET = ../tst_qnetworkreply +TARGET = tst_qnetworkreply QT = core-private network-private testlib QT_FOR_CONFIG += gui-private 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. diff --git a/tests/auto/network/access/qnetworkrequest/CMakeLists.txt b/tests/auto/network/access/qnetworkrequest/CMakeLists.txt new file mode 100644 index 0000000000..f089c5a43e --- /dev/null +++ b/tests/auto/network/access/qnetworkrequest/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qnetworkrequest.pro. + +##################################################################### +## tst_qnetworkrequest Test: +##################################################################### + +add_qt_test(tst_qnetworkrequest + SOURCES + tst_qnetworkrequest.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/access/spdy/BLACKLIST b/tests/auto/network/access/spdy/BLACKLIST deleted file mode 100644 index 5cf79327be..0000000000 --- a/tests/auto/network/access/spdy/BLACKLIST +++ /dev/null @@ -1,7 +0,0 @@ -[download] -opensuse-leap -[upload] -opensuse-leap -ubuntu-18.04 -b2qt - diff --git a/tests/auto/network/access/spdy/spdy.pro b/tests/auto/network/access/spdy/spdy.pro deleted file mode 100644 index cdbe60a19b..0000000000 --- a/tests/auto/network/access/spdy/spdy.pro +++ /dev/null @@ -1,7 +0,0 @@ -CONFIG += testcase -TARGET = tst_spdy -SOURCES += tst_spdy.cpp - -QT = core core-private network network-private testlib - -win32:CONFIG += insignificant_test # QTBUG-47128 diff --git a/tests/auto/network/access/spdy/tst_spdy.cpp b/tests/auto/network/access/spdy/tst_spdy.cpp deleted file mode 100644 index 1b0b3aec6b..0000000000 --- a/tests/auto/network/access/spdy/tst_spdy.cpp +++ /dev/null @@ -1,694 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 BlackBerry Limited. All rights reserved. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.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; - const QString m_rfc3252FilePath; - -protected Q_SLOTS: - void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *authenticator); - void multipleRequestsFinishedSlot(); -}; - -tst_Spdy::tst_Spdy() - : m_rfc3252FilePath(QFINDTESTDATA("../qnetworkreply/rfc3252.txt")) -{ -#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(!m_rfc3252FilePath.isEmpty()); - if (!QtNetworkSettings::verifyTestNetworkSettings()) - QSKIP("No network test server available"); -} - -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); - 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") - << m_rfc3252FilePath - << 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") - << m_rfc3252FilePath - << QNetworkProxy(QNetworkProxy::HttpProxy, proxyserver, 3128); - - QTest::newRow("mediumfile-http-proxy-auth") << QUrl("https://" + QtNetworkSettings::serverName() - + "/qtest/rfc3252.txt") - << m_rfc3252FilePath - << QNetworkProxy(QNetworkProxy::HttpProxy, - proxyserver, 3129); - - QTest::newRow("mediumfile-socks-proxy") << QUrl("https://" + QtNetworkSettings::serverName() - + "/qtest/rfc3252.txt") - << m_rfc3252FilePath - << QNetworkProxy(QNetworkProxy::Socks5Proxy, proxyserver, 1080); - - QTest::newRow("mediumfile-socks-proxy-auth") << QUrl("https://" + QtNetworkSettings::serverName() - + "/qtest/rfc3252.txt") - << m_rfc3252FilePath - << 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(m_rfc3252FilePath); - 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(errorOccurred(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" diff --git a/tests/auto/network/bearer/bearer.pro b/tests/auto/network/bearer/bearer.pro deleted file mode 100644 index 6ce922eaf8..0000000000 --- a/tests/auto/network/bearer/bearer.pro +++ /dev/null @@ -1,7 +0,0 @@ -TEMPLATE=subdirs -SUBDIRS=\ - qnetworkconfiguration \ - qnetworkconfigurationmanager \ - qnetworkconfigurationmanagerqappless \ - qnetworksession \ - diff --git a/tests/auto/network/bearer/qbearertestcommon.h b/tests/auto/network/bearer/qbearertestcommon.h deleted file mode 100644 index 923f093402..0000000000 --- a/tests/auto/network/bearer/qbearertestcommon.h +++ /dev/null @@ -1,49 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QBEARERTESTCOMMON_H -#define QBEARERTESTCOMMON_H - -#include <QtTest/qtestcase.h> - -enum { TestTimeOut = 90000 }; - -// Wait for __expr to happen, while still allowing events to be processed. -#define QTRY_NOOP(__expr) \ - do { \ - const int __step = 50; \ - const int __timeout = 15000; \ - if (!(__expr)) { \ - QTest::qWait(0); \ - } \ - for (int __i = 0; __i < __timeout && !(__expr); __i+=__step) { \ - QTest::qWait(__step); \ - } \ - } while(0) - -#endif diff --git a/tests/auto/network/bearer/qnetworkconfiguration/qnetworkconfiguration.pro b/tests/auto/network/bearer/qnetworkconfiguration/qnetworkconfiguration.pro deleted file mode 100644 index cde82a4fb2..0000000000 --- a/tests/auto/network/bearer/qnetworkconfiguration/qnetworkconfiguration.pro +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG += testcase -TARGET = tst_qnetworkconfiguration -SOURCES += tst_qnetworkconfiguration.cpp -HEADERS += ../qbearertestcommon.h - -QT = core network testlib diff --git a/tests/auto/network/bearer/qnetworkconfiguration/tst_qnetworkconfiguration.cpp b/tests/auto/network/bearer/qnetworkconfiguration/tst_qnetworkconfiguration.cpp deleted file mode 100644 index 9c49e0c173..0000000000 --- a/tests/auto/network/bearer/qnetworkconfiguration/tst_qnetworkconfiguration.cpp +++ /dev/null @@ -1,203 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> -#include "../qbearertestcommon.h" - -#ifndef QT_NO_BEARERMANAGEMENT -#include <QtNetwork/qnetworkconfiguration.h> -#include <QtNetwork/qnetworkconfigmanager.h> -#endif - -/* - Although this unit test doesn't use QNetworkAccessManager - this include is used to ensure that bearer continues to compile against - Qt 4.7+ which has a QNetworkConfiguration enabled QNetworkAccessManager -*/ -#include <QNetworkAccessManager> - -QT_USE_NAMESPACE - -class tst_QNetworkConfiguration : public QObject -{ - Q_OBJECT - -private slots: -#ifndef QT_NO_BEARERMANAGEMENT - void invalidPoint(); - void comparison(); - void children(); - void isRoamingAvailable(); - void connectTimeout(); -#endif -}; - -#ifndef QT_NO_BEARERMANAGEMENT -void tst_QNetworkConfiguration::invalidPoint() -{ - QNetworkConfiguration pt; - - QVERIFY(pt.name().isEmpty()); - QVERIFY(!pt.isValid()); - QCOMPARE(pt.type(), QNetworkConfiguration::Invalid); - QVERIFY(!(pt.state() & QNetworkConfiguration::Defined)); - QVERIFY(!(pt.state() & QNetworkConfiguration::Discovered)); - QVERIFY(!(pt.state() & QNetworkConfiguration::Active)); - QVERIFY(!pt.isRoamingAvailable()); - - QNetworkConfiguration pt2(pt); - QVERIFY(pt2.name().isEmpty()); - QVERIFY(!pt2.isValid()); - QCOMPARE(pt2.type(), QNetworkConfiguration::Invalid); - QVERIFY(!(pt2.state() & QNetworkConfiguration::Defined)); - QVERIFY(!(pt2.state() & QNetworkConfiguration::Discovered)); - QVERIFY(!(pt2.state() & QNetworkConfiguration::Active)); - QVERIFY(!pt2.isRoamingAvailable()); - -} - -void tst_QNetworkConfiguration::comparison() -{ - //test copy constructor and assignment operator - //compare invalid connection points - QNetworkConfiguration pt1; - QVERIFY(!pt1.isValid()); - QCOMPARE(pt1.type(), QNetworkConfiguration::Invalid); - - QNetworkConfiguration pt2(pt1); - QVERIFY(pt1==pt2); - QVERIFY(!(pt1!=pt2)); - QCOMPARE(pt1.name(), pt2.name()); - QCOMPARE(pt1.isValid(), pt2.isValid()); - QCOMPARE(pt1.type(), pt2.type()); - QCOMPARE(pt1.state(), pt2.state()); - QCOMPARE(pt1.purpose(), pt2.purpose()); - - - QNetworkConfiguration pt3; - pt3 = pt1; - QVERIFY(pt1==pt3); - QVERIFY(!(pt1!=pt3)); - QCOMPARE(pt1.name(), pt3.name()); - QCOMPARE(pt1.isValid(), pt3.isValid()); - QCOMPARE(pt1.type(), pt3.type()); - QCOMPARE(pt1.state(), pt3.state()); - QCOMPARE(pt1.purpose(), pt3.purpose()); - - //test case must run on machine that has valid connection points - QNetworkConfigurationManager manager; - QList<QNetworkConfiguration> preScanConfigs = manager.allConfigurations(); - - QSignalSpy spy(&manager, SIGNAL(updateCompleted())); - manager.updateConfigurations(); //initiate scans - QTRY_VERIFY_WITH_TIMEOUT(spy.count() >= 1, TestTimeOut); //wait for scan to complete - - QList<QNetworkConfiguration> configs = manager.allConfigurations(QNetworkConfiguration::Discovered); - QVERIFY(configs.count()); - QNetworkConfiguration defaultConfig = manager.defaultConfiguration(); - QVERIFY(defaultConfig.isValid()); - QVERIFY(defaultConfig.type() != QNetworkConfiguration::Invalid); - QVERIFY(!defaultConfig.name().isEmpty()); - - pt3 = defaultConfig; - QVERIFY(defaultConfig==pt3); - QVERIFY(!(defaultConfig!=pt3)); - QCOMPARE(defaultConfig.name(), pt3.name()); - QCOMPARE(defaultConfig.isValid(), pt3.isValid()); - QCOMPARE(defaultConfig.type(), pt3.type()); - QCOMPARE(defaultConfig.state(), pt3.state()); - QCOMPARE(defaultConfig.purpose(), pt3.purpose()); -} - -void tst_QNetworkConfiguration::children() -{ - QNetworkConfigurationManager manager; - QList<QNetworkConfiguration> configs = manager.allConfigurations(); - - foreach(QNetworkConfiguration c, configs) - { - if ( c.type() == QNetworkConfiguration::ServiceNetwork ) { - qDebug() << "found service network" << c.name() << c.children().count(); - QVERIFY(c.isValid()); - QList<QNetworkConfiguration> members = c.children(); - foreach(QNetworkConfiguration child, members) { - QVERIFY(child.isValid()); - QVERIFY(configs.contains(child)); - qDebug() << "\t" << child.name(); - } - } - } -} - -void tst_QNetworkConfiguration::isRoamingAvailable() -{ - QNetworkConfigurationManager manager; - QList<QNetworkConfiguration> configs = manager.allConfigurations(); - - //force update to get maximum list - QSignalSpy spy(&manager, SIGNAL(updateCompleted())); - manager.updateConfigurations(); //initiate scans - QTRY_VERIFY_WITH_TIMEOUT(spy.count() >= 1, TestTimeOut); //wait for scan to complete - - foreach(QNetworkConfiguration c, configs) - { - QVERIFY(QNetworkConfiguration::UserChoice != c.type()); - QVERIFY(QNetworkConfiguration::Invalid != c.type()); - if ( c.type() == QNetworkConfiguration::ServiceNetwork ) { - //cannot test flag as some SNAPs may not support roaming anyway - //QVERIFY(c.roamingavailable()) - if ( c.children().count() <= 1 ) - QVERIFY(!c.isRoamingAvailable()); - foreach(QNetworkConfiguration child, c.children()) { - QCOMPARE(QNetworkConfiguration::InternetAccessPoint, child.type()); - QCOMPARE(child.children().count(), 0); - } - } else { - QVERIFY(!c.isRoamingAvailable()); - } - } -} - -void tst_QNetworkConfiguration::connectTimeout() -{ - QNetworkConfigurationManager manager; - QList<QNetworkConfiguration> configs = manager.allConfigurations(); - - foreach (QNetworkConfiguration networkConfiguration, configs) { - QCOMPARE(networkConfiguration.connectTimeout(), 30000); - - bool result = networkConfiguration.setConnectTimeout(100); - QVERIFY(result); - - QCOMPARE(networkConfiguration.connectTimeout(), 100); - } -} -#endif - -QTEST_MAIN(tst_QNetworkConfiguration) -#include "tst_qnetworkconfiguration.moc" diff --git a/tests/auto/network/bearer/qnetworkconfigurationmanager/qnetworkconfigurationmanager.pro b/tests/auto/network/bearer/qnetworkconfigurationmanager/qnetworkconfigurationmanager.pro deleted file mode 100644 index 52cee1f64d..0000000000 --- a/tests/auto/network/bearer/qnetworkconfigurationmanager/qnetworkconfigurationmanager.pro +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG += testcase -TARGET = tst_qnetworkconfigurationmanager -SOURCES += tst_qnetworkconfigurationmanager.cpp -HEADERS += ../qbearertestcommon.h - -QT = core network testlib diff --git a/tests/auto/network/bearer/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp b/tests/auto/network/bearer/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp deleted file mode 100644 index b251a65420..0000000000 --- a/tests/auto/network/bearer/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp +++ /dev/null @@ -1,243 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> -#include "../qbearertestcommon.h" - -#ifndef QT_NO_BEARERMANAGEMENT -#include <QtNetwork/qnetworkconfiguration.h> -#include <QtNetwork/qnetworkconfigmanager.h> -#endif - -QT_USE_NAMESPACE -class tst_QNetworkConfigurationManager : public QObject -{ - Q_OBJECT - -private slots: -#ifndef QT_NO_BEARERMANAGEMENT - void usedInThread(); // this test must be first, or it will falsely pass - void allConfigurations(); - void defaultConfiguration(); - void configurationFromIdentifier(); -#endif -}; - -#ifndef QT_NO_BEARERMANAGEMENT -void printConfigurationDetails(const QNetworkConfiguration& p) -{ - qDebug() << p.name() <<": isvalid->" <<p.isValid() << " type->"<< p.type() << - " roaming->" << p.isRoamingAvailable() << "identifier->" << p.identifier() << - " purpose->" << p.purpose() << " state->" << p.state(); -} - -void tst_QNetworkConfigurationManager::allConfigurations() -{ - QNetworkConfigurationManager manager; - QList<QNetworkConfiguration> preScanConfigs = manager.allConfigurations(); - - foreach(QNetworkConfiguration c, preScanConfigs) - { - QVERIFY2(c.type()!=QNetworkConfiguration::UserChoice, "allConfiguration must not return UserChoice configs"); - } - - QSignalSpy spy(&manager, SIGNAL(updateCompleted())); - manager.updateConfigurations(); //initiate scans - QTRY_VERIFY_WITH_TIMEOUT(spy.count() >= 1, TestTimeOut); //wait for scan to complete - - QList<QNetworkConfiguration> configs = manager.allConfigurations(); - - int all = configs.count(); - qDebug() << "All configurations:" << all; - QVERIFY(all); - foreach(QNetworkConfiguration p, configs) { - QVERIFY(p.isValid()); - printConfigurationDetails(p); - QVERIFY(p.type() != QNetworkConfiguration::Invalid); - QVERIFY(p.type() != QNetworkConfiguration::UserChoice); - } - - configs = manager.allConfigurations(QNetworkConfiguration::Undefined); - int undefined = configs.count(); - QVERIFY(undefined <= all); - qDebug() << "Undefined configurations:" << undefined; - foreach( const QNetworkConfiguration p, configs) { - printConfigurationDetails(p); - QVERIFY(p.state() & QNetworkConfiguration::Undefined); - QVERIFY(!(p.state() & QNetworkConfiguration::Defined)); - } - - //get defined configs only (same as all) - configs = manager.allConfigurations(QNetworkConfiguration::Defined); - int defined = configs.count(); - qDebug() << "Defined configurations:" << defined; - QVERIFY(defined <= all); - foreach( const QNetworkConfiguration p, configs) { - printConfigurationDetails(p); - QVERIFY(p.state() & QNetworkConfiguration::Defined); - QVERIFY(!(p.state() & QNetworkConfiguration::Undefined)); - } - - //get discovered configurations only - configs = manager.allConfigurations(QNetworkConfiguration::Discovered); - int discovered = configs.count(); - //QVERIFY(discovered); - qDebug() << "Discovered configurations:" << discovered; - foreach(const QNetworkConfiguration p, configs) { - printConfigurationDetails(p); - QVERIFY(p.isValid()); - QVERIFY(!(p.state() & QNetworkConfiguration::Undefined)); - QVERIFY(p.state() & QNetworkConfiguration::Defined); - QVERIFY(p.state() & QNetworkConfiguration::Discovered); - } - - //getactive configurations only - configs = manager.allConfigurations(QNetworkConfiguration::Active); - int active = configs.count(); - if (active) - QVERIFY(manager.isOnline()); - else - QVERIFY(!manager.isOnline()); - - //QVERIFY(active); - qDebug() << "Active configurations:" << active; - foreach(const QNetworkConfiguration p, configs) { - printConfigurationDetails(p); - QVERIFY(p.isValid()); - QVERIFY(!(p.state() & QNetworkConfiguration::Undefined)); - QVERIFY(p.state() & QNetworkConfiguration::Active); - QVERIFY(p.state() & QNetworkConfiguration::Discovered); - QVERIFY(p.state() & QNetworkConfiguration::Defined); - } - - QVERIFY(all >= discovered); - QVERIFY(discovered >= active); -} - - -void tst_QNetworkConfigurationManager::defaultConfiguration() -{ - QNetworkConfigurationManager manager; - QSignalSpy spy(&manager, SIGNAL(updateCompleted())); - manager.updateConfigurations(); //initiate scans - QTRY_VERIFY_WITH_TIMEOUT(spy.count() >= 1, TestTimeOut); //wait for scan to complete - - QList<QNetworkConfiguration> configs = manager.allConfigurations(); - QNetworkConfiguration defaultConfig = manager.defaultConfiguration(); - - bool confirm = configs.contains(defaultConfig); - - if (defaultConfig.type() != QNetworkConfiguration::UserChoice) { - QVERIFY(confirm || !defaultConfig.isValid()); - QVERIFY(!(confirm && !defaultConfig.isValid())); - } else { - QVERIFY(!confirm); // user choice config is not part of allConfigurations() - QVERIFY(defaultConfig.isValid()); - QCOMPARE(defaultConfig.name(), QString("UserChoice")); - QCOMPARE(defaultConfig.children().count(), 0); - QVERIFY(!defaultConfig.isRoamingAvailable()); - QCOMPARE(defaultConfig.state(), QNetworkConfiguration::Discovered); - QNetworkConfiguration copy = manager.configurationFromIdentifier(defaultConfig.identifier()); - QCOMPARE(copy, defaultConfig); - } -} - -void tst_QNetworkConfigurationManager::configurationFromIdentifier() -{ - QNetworkConfigurationManager manager; - QSet<QString> allIdentifier; - - //force an update to get maximum number of configs - QSignalSpy spy(&manager, SIGNAL(updateCompleted())); - manager.updateConfigurations(); //initiate scans - QTRY_VERIFY_WITH_TIMEOUT(spy.count() >= 1, TestTimeOut); //wait for scan to complete - - QList<QNetworkConfiguration> configs = manager.allConfigurations(); - - foreach(QNetworkConfiguration c, configs) { - QVERIFY(!allIdentifier.contains(c.identifier())); - allIdentifier.insert(c.identifier()); - - QNetworkConfiguration direct = manager.configurationFromIdentifier(c.identifier()); - QVERIFY(direct.isValid()); - QCOMPARE(direct, c); - } - - //assume that there is no item with identifier 'FooBar' - QVERIFY(!allIdentifier.contains("FooBar")); - QNetworkConfiguration invalid = manager.configurationFromIdentifier("FooBar"); - QVERIFY(!invalid.isValid()); -} - -class QNCMTestThread : public QThread -{ -protected: - virtual void run() - { - QNetworkConfigurationManager manager; - preScanConfigs = manager.allConfigurations(); - QSignalSpy spy(&manager, SIGNAL(updateCompleted())); - manager.updateConfigurations(); //initiate scans - QTRY_VERIFY_WITH_TIMEOUT(spy.count() >= 1, TestTimeOut); //wait for scan to complete - configs = manager.allConfigurations(); - } -public: - QList<QNetworkConfiguration> configs; - QList<QNetworkConfiguration> preScanConfigs; -}; - -// regression test for QTBUG-18795 -void tst_QNetworkConfigurationManager::usedInThread() -{ -#if defined Q_OS_MAC && !defined (QT_NO_COREWLAN) - QSKIP("QTBUG-19070 Mac CoreWlan plugin is broken"); -#else - QNCMTestThread thread; - connect(&thread, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); - thread.start(); - QTestEventLoop::instance().enterLoop(100); //QTRY_VERIFY_WITH_TIMEOUT could take ~90 seconds to time out in the thread - QVERIFY(!QTestEventLoop::instance().timeout()); - qDebug() << "prescan:" << thread.preScanConfigs.count(); - qDebug() << "postscan:" << thread.configs.count(); - - QNetworkConfigurationManager manager; - QList<QNetworkConfiguration> preScanConfigs = manager.allConfigurations(); - QSignalSpy spy(&manager, SIGNAL(updateCompleted())); - manager.updateConfigurations(); //initiate scans - QTRY_VERIFY_WITH_TIMEOUT(spy.count() >= 1, TestTimeOut); //wait for scan to complete - QList<QNetworkConfiguration> configs = manager.allConfigurations(); - QCOMPARE(thread.configs, configs); - //Don't compare pre scan configs, because these may be cached and therefore give different results - //which makes the test unstable. The post scan results should have all configurations every time - //QCOMPARE(thread.preScanConfigs, preScanConfigs); -#endif -} -#endif - -QTEST_MAIN(tst_QNetworkConfigurationManager) -#include "tst_qnetworkconfigurationmanager.moc" diff --git a/tests/auto/network/bearer/qnetworkconfigurationmanagerqappless/qnetworkconfigurationmanagerqappless.pro b/tests/auto/network/bearer/qnetworkconfigurationmanagerqappless/qnetworkconfigurationmanagerqappless.pro deleted file mode 100644 index ad080910d7..0000000000 --- a/tests/auto/network/bearer/qnetworkconfigurationmanagerqappless/qnetworkconfigurationmanagerqappless.pro +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG += testcase -TARGET = tst_qnetworkconfigurationmanagerqappless -SOURCES += tst_qnetworkconfigurationmanagerqappless.cpp -HEADERS += ../qbearertestcommon.h - -QT = core network testlib diff --git a/tests/auto/network/bearer/qnetworkconfigurationmanagerqappless/tst_qnetworkconfigurationmanagerqappless.cpp b/tests/auto/network/bearer/qnetworkconfigurationmanagerqappless/tst_qnetworkconfigurationmanagerqappless.cpp deleted file mode 100644 index fdeaa9d3b2..0000000000 --- a/tests/auto/network/bearer/qnetworkconfigurationmanagerqappless/tst_qnetworkconfigurationmanagerqappless.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> -#include <QtNetwork/qnetworkaccessmanager.h> - -QT_USE_NAMESPACE - -class tst_QNetworkConfigurationManager : public QObject -{ - Q_OBJECT - -private slots: - void staticsInitialization(); -}; - -void tst_QNetworkConfigurationManager::staticsInitialization() -{ - // This code should not crash. The test was introduced as - // a fix for QTBUG-36897 - for (int i = 0; i < 2; i++) - { - int argc = 1; - const char *testName = "tst_qnetworkconfigurationmanagerqappless"; - char **argv = const_cast<char **>(&testName); - QCoreApplication app(argc, argv); - QNetworkAccessManager qnam; - Q_UNUSED(app); - Q_UNUSED(qnam); - } - QVERIFY(true); -} - -QTEST_APPLESS_MAIN(tst_QNetworkConfigurationManager) -#include "tst_qnetworkconfigurationmanagerqappless.moc" diff --git a/tests/auto/network/bearer/qnetworksession/lackey/lackey.pro b/tests/auto/network/bearer/qnetworksession/lackey/lackey.pro deleted file mode 100644 index dd83d905e6..0000000000 --- a/tests/auto/network/bearer/qnetworksession/lackey/lackey.pro +++ /dev/null @@ -1,8 +0,0 @@ -SOURCES += main.cpp -TARGET = lackey - -QT = core network - -DESTDIR = ./ - -CONFIG += cmdline diff --git a/tests/auto/network/bearer/qnetworksession/lackey/main.cpp b/tests/auto/network/bearer/qnetworksession/lackey/main.cpp deleted file mode 100644 index 5fad06c2cf..0000000000 --- a/tests/auto/network/bearer/qnetworksession/lackey/main.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QCoreApplication> -#include <QStringList> -#include <QLocalSocket> - -#ifndef QT_NO_BEARERMANAGEMENT -#include <QtNetwork/qnetworkconfiguration.h> -#include <QtNetwork/qnetworkconfigmanager.h> -#include <QtNetwork/qnetworksession.h> -#endif - -#include <QEventLoop> -#include <QTimer> -#include <QDebug> - -QT_USE_NAMESPACE - - -#define NO_DISCOVERED_CONFIGURATIONS_ERROR 1 -#define SESSION_OPEN_ERROR 2 - - -int main(int argc, char** argv) -{ - QCoreApplication app(argc, argv); - -#ifndef QT_NO_BEARERMANAGEMENT - // Update configurations so that everything is up to date for this process too. - // Event loop is used to wait for awhile. - QNetworkConfigurationManager manager; - manager.updateConfigurations(); - QEventLoop iIgnoreEventLoop; - QTimer::singleShot(3000, &iIgnoreEventLoop, SLOT(quit())); - iIgnoreEventLoop.exec(); - - QList<QNetworkConfiguration> discovered = - manager.allConfigurations(QNetworkConfiguration::Discovered); - - foreach(QNetworkConfiguration config, discovered) { - qDebug() << "Lackey: Name of the config enumerated: " << config.name(); - qDebug() << "Lackey: State of the config enumerated: " << config.state(); - } - - if (discovered.isEmpty()) { - qDebug("Lackey: no discovered configurations, returning empty error."); - return NO_DISCOVERED_CONFIGURATIONS_ERROR; - } - - // Cannot read/write to processes on WinCE. - // Easiest alternative is to use sockets for IPC. - QLocalSocket oopSocket; - - oopSocket.connectToServer("tst_qnetworksession"); - oopSocket.waitForConnected(-1); - - qDebug() << "Lackey started"; - - QNetworkSession *session = 0; - do { - if (session) { - delete session; - session = 0; - } - - qDebug() << "Discovered configurations:" << discovered.count(); - - if (discovered.isEmpty()) { - qDebug() << "No more discovered configurations"; - break; - } - - qDebug() << "Taking first configuration"; - - QNetworkConfiguration config = discovered.takeFirst(); - - if ((config.state() & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - qDebug() << config.name() << "is active, therefore skipping it (looking for configs in 'discovered' state)."; - continue; - } - - qDebug() << "Creating session for" << config.name() << config.identifier(); - - session = new QNetworkSession(config); - - QString output = QString("Starting session for %1\n").arg(config.identifier()); - oopSocket.write(output.toLatin1()); - oopSocket.waitForBytesWritten(); - session->open(); - session->waitForOpened(); - } while (!(session && session->isOpen())); - - qDebug() << "lackey: loop done"; - - if (!session) { - qDebug() << "Could not start session"; - - oopSocket.disconnectFromServer(); - oopSocket.waitForDisconnected(-1); - - return SESSION_OPEN_ERROR; - } - - QByteArray output = "Started session for " - + session->configuration().identifier().toLatin1() + '\n'; - oopSocket.write(output); - oopSocket.waitForBytesWritten(); - - oopSocket.waitForReadyRead(); - oopSocket.readLine(); - - session->stop(); - - delete session; - - oopSocket.disconnectFromServer(); - oopSocket.waitForDisconnected(-1); -#endif - - return 0; -} diff --git a/tests/auto/network/bearer/qnetworksession/qnetworksession.pro b/tests/auto/network/bearer/qnetworksession/qnetworksession.pro deleted file mode 100644 index cd480fb73b..0000000000 --- a/tests/auto/network/bearer/qnetworksession/qnetworksession.pro +++ /dev/null @@ -1,4 +0,0 @@ -TEMPLATE = subdirs -!winrt:SUBDIRS = lackey -test.depends = $$SUBDIRS -SUBDIRS += test diff --git a/tests/auto/network/bearer/qnetworksession/test/test.pro b/tests/auto/network/bearer/qnetworksession/test/test.pro deleted file mode 100644 index bfc1ec7727..0000000000 --- a/tests/auto/network/bearer/qnetworksession/test/test.pro +++ /dev/null @@ -1,18 +0,0 @@ -CONFIG += testcase -SOURCES += tst_qnetworksession.cpp -HEADERS += ../../qbearertestcommon.h - -QT = core network testlib network-private - -TARGET = tst_qnetworksession -CONFIG(debug_and_release) { - CONFIG(debug, debug|release) { - DESTDIR = ../debug - } else { - DESTDIR = ../release - } -} else { - DESTDIR = .. -} - -!android:!winrt: TEST_HELPER_INSTALLS = ../lackey/lackey diff --git a/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp b/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp deleted file mode 100644 index a13adc8ebf..0000000000 --- a/tests/auto/network/bearer/qnetworksession/test/tst_qnetworksession.cpp +++ /dev/null @@ -1,1299 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> -#include <QLocalServer> -#include <QLocalSocket> -#include <QTimer> -#include "../../qbearertestcommon.h" - -#ifndef QT_NO_BEARERMANAGEMENT -#include <QtNetwork/qnetworkconfigmanager.h> -#include <QtNetwork/qnetworksession.h> -#include <private/qnetworksession_p.h> -#endif - -QT_USE_NAMESPACE - -// Can be used to configure tests that require manual attention (such as roaming) -//#define QNETWORKSESSION_MANUAL_TESTS 1 - -#ifndef QT_NO_BEARERMANAGEMENT -Q_DECLARE_METATYPE(QNetworkConfiguration::Type) -#endif - -class tst_QNetworkSession : public QObject -{ - Q_OBJECT - -#ifndef QT_NO_BEARERMANAGEMENT -public slots: - void initTestCase(); - void cleanupTestCase(); - -private slots: - void robustnessBombing(); - - void sessionClosing_data(); - void sessionClosing(); - - void outOfProcessSession(); - void invalidSession(); - - void repeatedOpenClose_data(); - void repeatedOpenClose(); - - void sessionProperties_data(); - void sessionProperties(); - - void userChoiceSession_data(); - void userChoiceSession(); - - void sessionOpenCloseStop_data(); - void sessionOpenCloseStop(); - - void sessionAutoClose_data(); - void sessionAutoClose(); - - void usagePolicies(); - -private: - QNetworkConfigurationManager manager; - int inProcessSessionManagementCount; - QString lackeyDir; -#endif -}; - -#ifndef QT_NO_BEARERMANAGEMENT -// Helper functions -bool openSession(QNetworkSession *session); -bool closeSession(QNetworkSession *session, bool lastSessionOnConfiguration = true); -void updateConfigurations(); -void printConfigurations(); -QNetworkConfiguration suitableConfiguration(QString bearerType, QNetworkConfiguration::Type configType); - -void tst_QNetworkSession::initTestCase() -{ - qRegisterMetaType<QNetworkConfiguration>("QNetworkConfiguration"); - qRegisterMetaType<QNetworkConfiguration::Type>("QNetworkConfiguration::Type"); - - inProcessSessionManagementCount = -1; - - QSignalSpy spy(&manager, SIGNAL(updateCompleted())); - manager.updateConfigurations(); - QTRY_VERIFY_WITH_TIMEOUT(spy.count() >= 1, TestTimeOut); - - lackeyDir = QFINDTESTDATA("lackey"); - QVERIFY2(!lackeyDir.isEmpty(), qPrintable( - QString::fromLatin1("Couldn't find lackey dir starting from %1.").arg(QDir::currentPath()))); -} - -void tst_QNetworkSession::cleanupTestCase() -{ - if (!(manager.capabilities() & QNetworkConfigurationManager::SystemSessionSupport) && - (manager.capabilities() & QNetworkConfigurationManager::CanStartAndStopInterfaces) && - inProcessSessionManagementCount == 0) { - qWarning("No usable configurations found to complete all possible tests in " - "inProcessSessionManagement()"); - } -} - -// Robustness test for calling interfaces in nonsense order / with nonsense parameters -void tst_QNetworkSession::robustnessBombing() -{ - QNetworkConfigurationManager mgr; - QNetworkSession testSession(mgr.defaultConfiguration()); - // Should not reset even session is not opened - testSession.migrate(); - testSession.accept(); - testSession.ignore(); - testSession.reject(); -} - -void tst_QNetworkSession::sessionClosing_data() { - QTest::addColumn<QString>("bearerType"); - QTest::addColumn<QNetworkConfiguration::Type>("configurationType"); - - QTest::newRow("WLAN_IAP") << "WLAN" << QNetworkConfiguration::InternetAccessPoint; - QTest::newRow("Cellular_IAP") << "cellular" << QNetworkConfiguration::InternetAccessPoint; - QTest::newRow("SNAP") << "bearer_type_not_relevant_with_SNAPs" << QNetworkConfiguration::ServiceNetwork; -} - -// Testcase for closing the session at unexpected times -void tst_QNetworkSession::sessionClosing() -{ - QFETCH(QString, bearerType); - QFETCH(QNetworkConfiguration::Type, configurationType); - - // Update configurations so that WLANs are discovered too. - updateConfigurations(); - - // First check that opening once succeeds and determine if test is doable - QNetworkConfiguration config = suitableConfiguration(bearerType, configurationType); - if (!config.isValid()) - QSKIP("No suitable configurations, skipping this round of repeated open-close test."); - qDebug() << "Using following configuration to bomb with close(): " << config.name(); - QNetworkSession session(config); - if (!openSession(&session) || !closeSession(&session)) - QSKIP("Unable to open/close session, skipping this round of close() bombing."); - - qDebug() << "Closing without issuing open()"; - session.close(); - - for (int i = 0; i < 25; i++) { - qDebug() << "Opening and then waiting: " << i * 100 << " ms before closing."; - session.open(); - QTest::qWait(i*100); - session.close(); - // Sooner or later session must end in Disconnected state, - // no matter what the phase was. - QTRY_VERIFY_WITH_TIMEOUT(session.state() == QNetworkSession::Disconnected, TestTimeOut); - QTest::qWait(200); // Give platform a breathe, otherwise we'll be catching other errors - } -} - -void tst_QNetworkSession::invalidSession() -{ - // 1. Verify that session created with invalid configuration remains in invalid state - QNetworkSession session(QNetworkConfiguration(), 0); - QVERIFY(!session.isOpen()); - QCOMPARE(session.state(), QNetworkSession::Invalid); - QCOMPARE(session.error(), QNetworkSession::InvalidConfigurationError); - - // 2. Verify that opening session with invalid configuration both 1) emits invalidconfigurationerror and 2) sets session's state as invalid. - QSignalSpy errorSpy(&session, SIGNAL(error(QNetworkSession::SessionError))); - session.open(); - session.waitForOpened(1000); // Should bail out right away - QCOMPARE(errorSpy.count(), 1); - QNetworkSession::SessionError error = - qvariant_cast<QNetworkSession::SessionError> (errorSpy.first().at(0)); - QCOMPARE(error, QNetworkSession::InvalidConfigurationError); - QCOMPARE(session.error(), QNetworkSession::InvalidConfigurationError); - QCOMPARE(session.state(), QNetworkSession::Invalid); - -#ifdef QNETWORKSESSION_MANUAL_TESTS - - QNetworkConfiguration invalidatedConfig = suitableConfiguration("WLAN",QNetworkConfiguration::InternetAccessPoint); - if (invalidatedConfig.isValid()) { - // 3. Verify that invalidating a session after its successfully configured works - QNetworkSession invalidatedSession(invalidatedConfig); - qDebug() << "Delete the WLAN IAP from phone now (waiting 60 seconds): " << invalidatedConfig.name(); - QTest::qWait(60000); - QVERIFY(!invalidatedConfig.isValid()); - QCOMPARE(invalidatedSession.state(), QNetworkSession::Invalid); - qDebug() << "Add the WLAN IAP back (waiting 60 seconds): " << invalidatedConfig.name(); - QTest::qWait(60000); - } - - QNetworkConfiguration definedConfig = suitableConfiguration("WLAN",QNetworkConfiguration::InternetAccessPoint); - if (definedConfig.isValid()) { - // 4. Verify that opening a session with defined configuration emits error and enters notavailable-state - // TODO these timer waits should be changed to waiting appropriate signals, now these wait excessively - qDebug() << "Shutdown WLAN IAP (waiting 60 seconds): " << definedConfig.name(); - QTest::qWait(60000); - // Shutting down WLAN should bring back to defined -state. - QVERIFY((definedConfig.state() & QNetworkConfiguration::Defined) == QNetworkConfiguration::Defined); - QNetworkSession definedSession(definedConfig); - QSignalSpy errorSpy(&definedSession, SIGNAL(error(QNetworkSession::SessionError))); - QNetworkSession::SessionError sessionError; - updateConfigurations(); - - definedSession.open(); - updateConfigurations(); - - QVERIFY(definedConfig.isValid()); // Session remains valid - QVERIFY(definedSession.state() == QNetworkSession::NotAvailable); // State is not available because WLAN is not in coverage - QVERIFY(!errorSpy.isEmpty()); // Session tells with error about invalidated configuration - sessionError = qvariant_cast<QNetworkSession::SessionError> (errorSpy.first().at(0)); - QCOMPARE(sessionError, QNetworkSession::InvalidConfigurationError); - qDebug() << "Turn the WLAN IAP back on (waiting 60 seconds): " << definedConfig.name(); - QTest::qWait(60000); - updateConfigurations(); - QCOMPARE(definedConfig.state(), QNetworkConfiguration::Discovered); - } -#endif -} - -void tst_QNetworkSession::sessionProperties_data() -{ - QTest::addColumn<QNetworkConfiguration>("configuration"); - - QTest::newRow("invalid configuration") << QNetworkConfiguration(); - - foreach (const QNetworkConfiguration &config, manager.allConfigurations()) { - const QString name = config.name().isEmpty() ? QString("<Hidden>") : config.name(); - QTest::newRow(name.toLocal8Bit().constData()) << config; - } -} - -void tst_QNetworkSession::sessionProperties() -{ - QFETCH(QNetworkConfiguration, configuration); - QNetworkSession session(configuration); - QCOMPARE(session.configuration(), configuration); - QStringList validBearerNames = QStringList() << QLatin1String("Unknown") - << QLatin1String("Ethernet") - << QLatin1String("WLAN") - << QLatin1String("2G") - << QLatin1String("CDMA2000") - << QLatin1String("WCDMA") - << QLatin1String("HSPA") - << QLatin1String("Bluetooth") - << QLatin1String("WiMAX") - << QLatin1String("BearerEVDO") - << QLatin1String("BearerLTE") - << QLatin1String("Bearer3G") - << QLatin1String("Bearer4G"); - - if (!configuration.isValid()) { - QVERIFY(configuration.bearerTypeName().isEmpty()); - } else { - switch (configuration.type()) - { - case QNetworkConfiguration::ServiceNetwork: - case QNetworkConfiguration::UserChoice: - default: - QVERIFY(configuration.bearerTypeName().isEmpty()); - break; - case QNetworkConfiguration::InternetAccessPoint: - QVERIFY(validBearerNames.contains(configuration.bearerTypeName())); - break; - } - } - - // QNetworkSession::interface() should return an invalid interface unless - // session is in the connected state. -#ifndef QT_NO_NETWORKINTERFACE - QCOMPARE(session.state() == QNetworkSession::Connected, session.interface().isValid()); -#endif - - if (!configuration.isValid()) { - QVERIFY(configuration.state() == QNetworkConfiguration::Undefined && - session.state() == QNetworkSession::Invalid); - } else { - switch (configuration.state()) { - case QNetworkConfiguration::Undefined: - QCOMPARE(session.state(), QNetworkSession::NotAvailable); - break; - case QNetworkConfiguration::Defined: - QCOMPARE(session.state(), QNetworkSession::NotAvailable); - break; - case QNetworkConfiguration::Discovered: - QVERIFY(session.state() == QNetworkSession::Connecting || - session.state() == QNetworkSession::Disconnected); - break; - case QNetworkConfiguration::Active: - QVERIFY(session.state() == QNetworkSession::Connected || - session.state() == QNetworkSession::Closing || - session.state() == QNetworkSession::Roaming); - break; - default: - QFAIL("Invalid configuration state"); - }; - } -} - -void tst_QNetworkSession::repeatedOpenClose_data() { - QTest::addColumn<QString>("bearerType"); - QTest::addColumn<QNetworkConfiguration::Type>("configurationType"); - QTest::addColumn<int>("repeatTimes"); - - QTest::newRow("WLAN_IAP") << "WLAN" << QNetworkConfiguration::InternetAccessPoint << 3; - // QTest::newRow("Cellular_IAP") << "cellular" << QNetworkConfiguration::InternetAccessPoint << 3; - // QTest::newRow("SNAP") << "bearer_type_not_relevant_with_SNAPs" << QNetworkConfiguration::ServiceNetwork << 3; -} - -// Tests repeated-open close. -void tst_QNetworkSession::repeatedOpenClose() -{ - QFETCH(QString, bearerType); - QFETCH(QNetworkConfiguration::Type, configurationType); - QFETCH(int, repeatTimes); - - // First check that opening once succeeds and determine if repeatable testing is doable - QNetworkConfiguration config = suitableConfiguration(bearerType, configurationType); - if (!config.isValid()) - QSKIP("No suitable configurations, skipping this round of repeated open-close test."); - qDebug() << "Using following configuratio to repeatedly open and close: " << config.name(); - QNetworkSession permanentSession(config); - if (!openSession(&permanentSession) || !closeSession(&permanentSession)) - QSKIP("Unable to open/close session, skipping this round of repeated open-close test."); - for (int i = 0; i < repeatTimes; i++) { - qDebug() << "Opening, loop number " << i; - QVERIFY(openSession(&permanentSession)); - qDebug() << "Closing, loop number, then waiting 5 seconds: " << i; - QVERIFY(closeSession(&permanentSession)); - QTest::qWait(5000); - } -} - -void tst_QNetworkSession::userChoiceSession_data() -{ - QTest::addColumn<QNetworkConfiguration>("configuration"); - - QNetworkConfiguration config = manager.defaultConfiguration(); - if (config.type() == QNetworkConfiguration::UserChoice) - QTest::newRow("UserChoice") << config; - else - QSKIP("Default configuration is not a UserChoice configuration."); -} - -void tst_QNetworkSession::userChoiceSession() -{ - QFETCH(QNetworkConfiguration, configuration); - - QCOMPARE(configuration.type(), QNetworkConfiguration::UserChoice); - - QNetworkSession session(configuration); - - // Check that configuration was really set - QCOMPARE(session.configuration(), configuration); - - QVERIFY(!session.isOpen()); - - // Check that session is not active - QVERIFY(session.sessionProperty("ActiveConfiguration").toString().isEmpty()); - - // The remaining tests require the session to be not NotAvailable. - if (session.state() == QNetworkSession::NotAvailable) - QSKIP("Network is not available."); - - QSignalSpy sessionOpenedSpy(&session, SIGNAL(opened())); - QSignalSpy sessionClosedSpy(&session, SIGNAL(closed())); - QSignalSpy stateChangedSpy(&session, SIGNAL(stateChanged(QNetworkSession::State))); - QSignalSpy errorSpy(&session, SIGNAL(error(QNetworkSession::SessionError))); - - // Test opening the session. - { - bool expectStateChange = session.state() != QNetworkSession::Connected; - - session.open(); - session.waitForOpened(); - - if (session.isOpen()) - QVERIFY(!sessionOpenedSpy.isEmpty() || !errorSpy.isEmpty()); - if (!errorSpy.isEmpty()) { - QNetworkSession::SessionError error = - qvariant_cast<QNetworkSession::SessionError>(errorSpy.first().at(0)); - if (error == QNetworkSession::OperationNotSupportedError) { - // The session needed to bring up the interface, - // but the operation is not supported. - QSKIP("Configuration does not support open()."); - } else if (error == QNetworkSession::InvalidConfigurationError) { - // The session needed to bring up the interface, but it is not possible for the - // specified configuration. - if ((session.configuration().state() & QNetworkConfiguration::Discovered) == - QNetworkConfiguration::Discovered) { - QFAIL("Failed to open session for Discovered configuration."); - } else { - QSKIP("Cannot test session for non-Discovered configuration."); - } - } else if (error == QNetworkSession::UnknownSessionError) { - QSKIP("Unknown session error."); - } else { - QFAIL("Error opening session."); - } - } else if (!sessionOpenedSpy.isEmpty()) { - QCOMPARE(sessionOpenedSpy.count(), 1); - QVERIFY(sessionClosedSpy.isEmpty()); - QVERIFY(errorSpy.isEmpty()); - - if (expectStateChange) - QTRY_VERIFY_WITH_TIMEOUT(!stateChangedSpy.isEmpty(), TestTimeOut); - - QCOMPARE(session.state(), QNetworkSession::Connected); -#ifndef QT_NO_NETWORKINTERFACE - QVERIFY(session.interface().isValid()); -#endif - const QString userChoiceIdentifier = - session.sessionProperty("UserChoiceConfiguration").toString(); - - QVERIFY(!userChoiceIdentifier.isEmpty()); - QVERIFY(userChoiceIdentifier != configuration.identifier()); - - QNetworkConfiguration userChoiceConfiguration = - manager.configurationFromIdentifier(userChoiceIdentifier); - - QVERIFY(userChoiceConfiguration.isValid()); - QVERIFY(userChoiceConfiguration.type() != QNetworkConfiguration::UserChoice); - - const QString testIdentifier("abc"); - //resetting UserChoiceConfiguration is ignored (read only property) - session.setSessionProperty("UserChoiceConfiguration", testIdentifier); - QVERIFY(session.sessionProperty("UserChoiceConfiguration").toString() != testIdentifier); - - const QString activeIdentifier = - session.sessionProperty("ActiveConfiguration").toString(); - - QVERIFY(!activeIdentifier.isEmpty()); - QVERIFY(activeIdentifier != configuration.identifier()); - - QNetworkConfiguration activeConfiguration = - manager.configurationFromIdentifier(activeIdentifier); - - QVERIFY(activeConfiguration.isValid()); - QCOMPARE(activeConfiguration.type(), QNetworkConfiguration::InternetAccessPoint); - - //resetting ActiveConfiguration is ignored (read only property) - session.setSessionProperty("ActiveConfiguration", testIdentifier); - QVERIFY(session.sessionProperty("ActiveConfiguration").toString() != testIdentifier); - - if (userChoiceConfiguration.type() == QNetworkConfiguration::InternetAccessPoint) { - QCOMPARE(userChoiceConfiguration, activeConfiguration); - } else { - QCOMPARE(userChoiceConfiguration.type(), QNetworkConfiguration::ServiceNetwork); - QVERIFY(userChoiceConfiguration.children().contains(activeConfiguration)); - } - } else { - QFAIL("Timeout waiting for session to open."); - } - } -} - -void tst_QNetworkSession::sessionOpenCloseStop_data() -{ - QTest::addColumn<QNetworkConfiguration>("configuration"); - QTest::addColumn<bool>("forceSessionStop"); - - foreach (const QNetworkConfiguration &config, manager.allConfigurations()) { - const QString name = config.name().isEmpty() ? QString("<Hidden>") : config.name(); - QTest::newRow((name + QLatin1String(" close")).toLocal8Bit().constData()) - << config << false; - QTest::newRow((name + QLatin1String(" stop")).toLocal8Bit().constData()) - << config << true; - } - - inProcessSessionManagementCount = 0; -} - -void tst_QNetworkSession::sessionOpenCloseStop() -{ - QFETCH(QNetworkConfiguration, configuration); - QFETCH(bool, forceSessionStop); -#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) - QSKIP("Deadlocks on Linux due to QTBUG-45655"); -#endif - - QNetworkSession session(configuration); - - // Test initial state of the session. - { - QCOMPARE(session.configuration(), configuration); - QVERIFY(!session.isOpen()); - // session may be invalid if configuration is removed between when - // sessionOpenCloseStop_data() is called and here. - QVERIFY((configuration.isValid() && (session.state() != QNetworkSession::Invalid)) || - (!configuration.isValid() && (session.state() == QNetworkSession::Invalid))); - QCOMPARE(session.error(), QNetworkSession::UnknownSessionError); - } - - // The remaining tests require the session to be not NotAvailable. - if (session.state() == QNetworkSession::NotAvailable) - QSKIP("Network is not available."); - - QSignalSpy sessionOpenedSpy(&session, SIGNAL(opened())); - QSignalSpy sessionClosedSpy(&session, SIGNAL(closed())); - QSignalSpy stateChangedSpy(&session, SIGNAL(stateChanged(QNetworkSession::State))); - QSignalSpy errorSpy(&session, SIGNAL(error(QNetworkSession::SessionError))); - - // Test opening the session. - { - QNetworkSession::State previousState = session.state(); - bool expectStateChange = previousState != QNetworkSession::Connected; - - session.open(); - session.waitForOpened(); - - // Wait until the configuration is uptodate as well, it may be signaled 'connected' - // bit later than the session - QTRY_VERIFY_WITH_TIMEOUT(configuration.state() == QNetworkConfiguration::Active, TestTimeOut); - - if (session.isOpen()) - QVERIFY(!sessionOpenedSpy.isEmpty() || !errorSpy.isEmpty()); - if (!errorSpy.isEmpty()) { - QNetworkSession::SessionError error = - qvariant_cast<QNetworkSession::SessionError>(errorSpy.first().at(0)); - - QCOMPARE(session.state(), previousState); - - if (error == QNetworkSession::OperationNotSupportedError) { - // The session needed to bring up the interface, - // but the operation is not supported. - QSKIP("Configuration does not support open()."); - } else if (error == QNetworkSession::InvalidConfigurationError) { - // The session needed to bring up the interface, but it is not possible for the - // specified configuration. - if ((session.configuration().state() & QNetworkConfiguration::Discovered) == - QNetworkConfiguration::Discovered) { - QFAIL("Failed to open session for Discovered configuration."); - } else { - QSKIP("Cannot test session for non-Discovered configuration."); - } - } else if (error == QNetworkSession::UnknownSessionError) { - QSKIP("Unknown Session error."); - } else { - QFAIL("Error opening session."); - } - } else if (!sessionOpenedSpy.isEmpty()) { - QCOMPARE(sessionOpenedSpy.count(), 1); - QVERIFY(sessionClosedSpy.isEmpty()); - QVERIFY(errorSpy.isEmpty()); - - if (expectStateChange) { - QTRY_VERIFY_WITH_TIMEOUT(stateChangedSpy.count() >= 2, TestTimeOut); - - QNetworkSession::State state = - qvariant_cast<QNetworkSession::State>(stateChangedSpy.at(0).at(0)); - QCOMPARE(state, QNetworkSession::Connecting); - - state = qvariant_cast<QNetworkSession::State>(stateChangedSpy.at(1).at(0)); - QCOMPARE(state, QNetworkSession::Connected); - } - - QCOMPARE(session.state(), QNetworkSession::Connected); -#ifndef QT_NO_NETWORKINTERFACE - QVERIFY(session.interface().isValid()); -#endif - } else { - QFAIL("Timeout waiting for session to open."); - } - } - - sessionOpenedSpy.clear(); - sessionClosedSpy.clear(); - stateChangedSpy.clear(); - errorSpy.clear(); - - QNetworkSession session2(configuration); - - QSignalSpy sessionOpenedSpy2(&session2, SIGNAL(opened())); - QSignalSpy sessionClosedSpy2(&session2, SIGNAL(closed())); - QSignalSpy stateChangedSpy2(&session2, SIGNAL(stateChanged(QNetworkSession::State))); - QSignalSpy errorSpy2(&session2, SIGNAL(error(QNetworkSession::SessionError))); - - // Test opening a second session. - { - QCOMPARE(session2.configuration(), configuration); - QVERIFY(!session2.isOpen()); - QCOMPARE(session2.state(), QNetworkSession::Connected); - QCOMPARE(session.error(), QNetworkSession::UnknownSessionError); - - session2.open(); - - QTRY_VERIFY_WITH_TIMEOUT(!sessionOpenedSpy2.isEmpty() || !errorSpy2.isEmpty(), TestTimeOut); - - if (errorSpy2.isEmpty()) { - QVERIFY(session2.isOpen()); - QCOMPARE(session2.state(), QNetworkSession::Connected); - } - QVERIFY(session.isOpen()); - QCOMPARE(session.state(), QNetworkSession::Connected); -#ifndef QT_NO_NETWORKINTERFACE - QVERIFY(session.interface().isValid()); - if (errorSpy2.isEmpty()) { - QCOMPARE(session.interface().hardwareAddress(), session2.interface().hardwareAddress()); - QCOMPARE(session.interface().index(), session2.interface().index()); - } -#endif - } - - sessionOpenedSpy2.clear(); - - if (forceSessionStop && session2.isOpen()) { - // Test forcing the second session to stop the interface. - QNetworkSession::State previousState = session.state(); - bool expectStateChange = previousState != QNetworkSession::Disconnected; - session2.stop(); - - // QNetworkSession::stop() must result either closed() signal - // or error() signal - QTRY_VERIFY_WITH_TIMEOUT(!sessionClosedSpy2.isEmpty() || !errorSpy2.isEmpty(), TestTimeOut); - QVERIFY(!session2.isOpen()); - - if (!errorSpy2.isEmpty()) { - // QNetworkSession::stop() resulted error() signal for session2 - // => also session should emit error() signal - QTRY_VERIFY_WITH_TIMEOUT(!errorSpy.isEmpty(), TestTimeOut); - - // check for SessionAbortedError - QNetworkSession::SessionError error = - qvariant_cast<QNetworkSession::SessionError>(errorSpy.first().at(0)); - QNetworkSession::SessionError error2 = - qvariant_cast<QNetworkSession::SessionError>(errorSpy2.first().at(0)); - - QCOMPARE(error, QNetworkSession::SessionAbortedError); - QCOMPARE(error2, QNetworkSession::SessionAbortedError); - - QCOMPARE(errorSpy.count(), 1); - QCOMPARE(errorSpy2.count(), 1); - - errorSpy.clear(); - errorSpy2.clear(); - } - - QVERIFY(errorSpy.isEmpty()); - QVERIFY(errorSpy2.isEmpty()); - - // Wait for Disconnected state - QTRY_NOOP(session2.state() == QNetworkSession::Disconnected); - - if (expectStateChange) - QTRY_VERIFY_WITH_TIMEOUT(stateChangedSpy2.count() >= 1 || !errorSpy2.isEmpty(), TestTimeOut); - - if (!errorSpy2.isEmpty()) { - QCOMPARE(session2.state(), previousState); - QCOMPARE(session.state(), previousState); - - QNetworkSession::SessionError error = - qvariant_cast<QNetworkSession::SessionError>(errorSpy2.first().at(0)); - if (error == QNetworkSession::OperationNotSupportedError) { - // The session needed to bring down the interface, - // but the operation is not supported. - QSKIP("Configuration does not support stop()."); - } else if (error == QNetworkSession::InvalidConfigurationError) { - // The session needed to bring down the interface, but it is not possible for the - // specified configuration. - if ((session.configuration().state() & QNetworkConfiguration::Discovered) == - QNetworkConfiguration::Discovered) { - QFAIL("Failed to stop session for Discovered configuration."); - } else { - QSKIP("Cannot test session for non-Discovered configuration."); - } - } else { - QFAIL("Error stopping session."); - } - } else if (!sessionClosedSpy2.isEmpty()) { - if (expectStateChange) { - if (configuration.type() == QNetworkConfiguration::ServiceNetwork) { - bool roamedSuccessfully = false; - - QNetworkSession::State state; - if (stateChangedSpy2.count() == 4) { - state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(0).at(0)); - QCOMPARE(state, QNetworkSession::Connecting); - - state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(1).at(0)); - QCOMPARE(state, QNetworkSession::Connected); - - state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(2).at(0)); - QCOMPARE(state, QNetworkSession::Closing); - - state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(3).at(0)); - QCOMPARE(state, QNetworkSession::Disconnected); - } else if (stateChangedSpy2.count() == 2) { - state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(0).at(0)); - QCOMPARE(state, QNetworkSession::Closing); - - state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(1).at(0)); - QCOMPARE(state, QNetworkSession::Disconnected); - } else { - QFAIL("Unexpected amount of state changes when roaming."); - } - - QTRY_VERIFY_WITH_TIMEOUT(session.state() == QNetworkSession::Roaming || - session.state() == QNetworkSession::Connected || - session.state() == QNetworkSession::Disconnected, TestTimeOut); - - QTRY_VERIFY_WITH_TIMEOUT(stateChangedSpy.count() > 0, TestTimeOut); - state = qvariant_cast<QNetworkSession::State>(stateChangedSpy.at(stateChangedSpy.count() - 1).at(0)); - - for (int i = 0; i < stateChangedSpy.count(); i++) { - QNetworkSession::State state_temp = - qvariant_cast<QNetworkSession::State>(stateChangedSpy.at(i).at(0)); - // Extra debug because a fragile point in testcase because statuses vary. - qDebug() << "------- Statechange spy at: " << i << " is " << state_temp; - } - - if (state == QNetworkSession::Roaming) { - QTRY_VERIFY_WITH_TIMEOUT(session.state() == QNetworkSession::Connected, TestTimeOut); - QTRY_VERIFY_WITH_TIMEOUT(session2.state() == QNetworkSession::Connected, TestTimeOut); - roamedSuccessfully = true; - } else if (state == QNetworkSession::Closing) { - QTRY_VERIFY_WITH_TIMEOUT(session2.state() == QNetworkSession::Disconnected, TestTimeOut); - QTRY_VERIFY_WITH_TIMEOUT(session.state() == QNetworkSession::Connected || - session.state() == QNetworkSession::Disconnected, TestTimeOut ); - roamedSuccessfully = false; - } else if (state == QNetworkSession::Disconnected) { - QTRY_VERIFY_WITH_TIMEOUT(!errorSpy.isEmpty(), TestTimeOut); - QTRY_VERIFY_WITH_TIMEOUT(session2.state() == QNetworkSession::Disconnected, TestTimeOut); - } else if (state == QNetworkSession::Connected) { - QTRY_VERIFY_WITH_TIMEOUT(errorSpy.isEmpty(),TestTimeOut); - - if (stateChangedSpy.count() > 1) { - state = qvariant_cast<QNetworkSession::State>(stateChangedSpy.at(stateChangedSpy.count() - 2).at(0)); - QCOMPARE(state, QNetworkSession::Roaming); - } - roamedSuccessfully = true; - } - - if (roamedSuccessfully) { - // Verify that you can open session based on the disconnected configuration - QString configId = session.sessionProperty("ActiveConfiguration").toString(); - QNetworkConfiguration config = manager.configurationFromIdentifier(configId); - QNetworkSession session3(config); - QSignalSpy errorSpy3(&session3, SIGNAL(error(QNetworkSession::SessionError))); - QSignalSpy sessionOpenedSpy3(&session3, SIGNAL(opened())); - session3.open(); - session3.waitForOpened(); - QTest::qWait(1000); // Wait awhile to get all signals from platform - if (session.isOpen()) - QVERIFY(!sessionOpenedSpy3.isEmpty() || !errorSpy3.isEmpty()); - session.stop(); - QTRY_VERIFY_WITH_TIMEOUT(session.state() == QNetworkSession::Disconnected, TestTimeOut); - } - if (!roamedSuccessfully) - QVERIFY(!errorSpy.isEmpty()); - } else { - QTest::qWait(2000); // Wait awhile to get all signals from platform - - if (stateChangedSpy2.count() == 2) { - QNetworkSession::State state = - qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(0).at(0)); - QCOMPARE(state, QNetworkSession::Closing); - state = qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(1).at(0)); - QCOMPARE(state, QNetworkSession::Disconnected); - } else { - QVERIFY(stateChangedSpy2.count() >= 1); - - for (int i = 0; i < stateChangedSpy2.count(); i++) { - QNetworkSession::State state_temp = - qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(i).at(0)); - // Extra debug because a fragile point in testcase. - qDebug() << "+++++ Statechange spy at: " << i << " is " << state_temp; - } - - QNetworkSession::State state = - qvariant_cast<QNetworkSession::State>(stateChangedSpy2.at(stateChangedSpy2.count() - 1).at(0)); - QCOMPARE(state, QNetworkSession::Disconnected); - } - } - - QTRY_VERIFY_WITH_TIMEOUT(!sessionClosedSpy.isEmpty(), TestTimeOut); - QTRY_VERIFY_WITH_TIMEOUT(session.state() == QNetworkSession::Disconnected, TestTimeOut); - } - - QVERIFY(errorSpy2.isEmpty()); - - ++inProcessSessionManagementCount; - } else { - QFAIL("Timeout waiting for session to stop."); - } - - QVERIFY(!sessionClosedSpy.isEmpty()); - QVERIFY(!sessionClosedSpy2.isEmpty()); - - QVERIFY(!session.isOpen()); - QVERIFY(!session2.isOpen()); - } else if (session2.isOpen()) { - // Test closing the second session. - { - int stateChangedCountBeforeClose = stateChangedSpy2.count(); - session2.close(); - - QTRY_VERIFY_WITH_TIMEOUT(!sessionClosedSpy2.isEmpty(), TestTimeOut); - QCOMPARE(stateChangedSpy2.count(), stateChangedCountBeforeClose); - - QVERIFY(sessionClosedSpy.isEmpty()); - - QVERIFY(session.isOpen()); - QVERIFY(!session2.isOpen()); - QCOMPARE(session.state(), QNetworkSession::Connected); - QCOMPARE(session2.state(), QNetworkSession::Connected); -#ifndef QT_NO_NETWORKINTERFACE - QVERIFY(session.interface().isValid()); - QCOMPARE(session.interface().hardwareAddress(), session2.interface().hardwareAddress()); - QCOMPARE(session.interface().index(), session2.interface().index()); -#endif - } - - sessionClosedSpy2.clear(); - - // Test closing the first session. - { - bool expectStateChange = session.state() != QNetworkSession::Disconnected && - manager.capabilities() & QNetworkConfigurationManager::SystemSessionSupport; - - session.close(); - - QTRY_VERIFY_WITH_TIMEOUT(!sessionClosedSpy.isEmpty() || !errorSpy.isEmpty(), TestTimeOut); - - QVERIFY(!session.isOpen()); - - if (expectStateChange) - QTRY_VERIFY_WITH_TIMEOUT(!stateChangedSpy.isEmpty() || !errorSpy.isEmpty(), TestTimeOut); - - if (!errorSpy.isEmpty()) { - QNetworkSession::SessionError error = - qvariant_cast<QNetworkSession::SessionError>(errorSpy.first().at(0)); - if (error == QNetworkSession::OperationNotSupportedError) { - // The session needed to bring down the interface, - // but the operation is not supported. - QSKIP("Configuration does not support close()."); - } else if (error == QNetworkSession::InvalidConfigurationError) { - // The session needed to bring down the interface, but it is not possible for the - // specified configuration. - if ((session.configuration().state() & QNetworkConfiguration::Discovered) == - QNetworkConfiguration::Discovered) { - QFAIL("Failed to close session for Discovered configuration."); - } else { - QSKIP("Cannot test session for non-Discovered configuration."); - } - } else { - QFAIL("Error closing session."); - } - } else if (!sessionClosedSpy.isEmpty()) { - QVERIFY(sessionOpenedSpy.isEmpty()); - QCOMPARE(sessionClosedSpy.count(), 1); - if (expectStateChange) - QVERIFY(!stateChangedSpy.isEmpty()); - QVERIFY(errorSpy.isEmpty()); - - if (expectStateChange) - QTRY_VERIFY_WITH_TIMEOUT(session.state() == QNetworkSession::Disconnected, TestTimeOut); - - ++inProcessSessionManagementCount; - } else { - QFAIL("Timeout waiting for session to close."); - } - } - } -} - -QDebug operator<<(QDebug debug, const QList<QNetworkConfiguration> &list) -{ - debug.nospace() << "( "; - foreach (const QNetworkConfiguration &config, list) - debug.nospace() << config.identifier() << ", "; - debug.nospace() << ")\n"; - return debug; -} - -// Note: outOfProcessSession requires that at least one configuration is -// at Discovered -state. -void tst_QNetworkSession::outOfProcessSession() -{ -#if !QT_CONFIG(process) - QSKIP("No qprocess support", SkipAll); -#else - updateConfigurations(); - QTest::qWait(2000); - - QNetworkConfigurationManager manager; - // Create a QNetworkConfigurationManager to detect configuration changes made in Lackey. This - // is actually the essence of this testcase - to check that platform mediates/reflects changes - // regardless of process boundaries. The interprocess communication is more like a way to get - // this test-case act correctly and timely. - QList<QNetworkConfiguration> before = manager.allConfigurations(QNetworkConfiguration::Active); - QSignalSpy spy(&manager, SIGNAL(configurationChanged(QNetworkConfiguration))); - - // Cannot read/write to processes on WinCE. - // Easiest alternative is to use sockets for IPC. - QLocalServer oopServer; - // First remove possible earlier listening address which would cause listen to fail - // (e.g. previously abruptly ended unit test might cause this) - QLocalServer::removeServer("tst_qnetworksession"); - oopServer.listen("tst_qnetworksession"); - - QProcess lackey; - QString lackeyExe = lackeyDir + "/lackey"; - lackey.start(lackeyExe); - QVERIFY2(lackey.waitForStarted(), qPrintable( - QString::fromLatin1("Could not start %1: %2").arg(lackeyExe, lackey.errorString()))); - - QVERIFY(oopServer.waitForNewConnection(-1)); - QLocalSocket *oopSocket = oopServer.nextPendingConnection(); - - do { - QByteArray output; - - if (oopSocket->waitForReadyRead()) - output = oopSocket->readLine().trimmed(); - - if (output.startsWith("Started session ")) { - QString identifier = QString::fromLocal8Bit(output.mid(20).constData()); - QNetworkConfiguration changed; - - do { - QTRY_VERIFY_WITH_TIMEOUT(!spy.isEmpty(), TestTimeOut); - changed = qvariant_cast<QNetworkConfiguration>(spy.takeFirst().at(0)); - } while (changed.identifier() != identifier); - - QVERIFY((changed.state() & QNetworkConfiguration::Active) == - QNetworkConfiguration::Active); - - QVERIFY(!before.contains(changed)); - - QList<QNetworkConfiguration> after = - manager.allConfigurations(QNetworkConfiguration::Active); - - QVERIFY(after.contains(changed)); - - spy.clear(); - - oopSocket->write("stop\n"); - oopSocket->waitForBytesWritten(); - - do { - QTRY_VERIFY_WITH_TIMEOUT(!spy.isEmpty(), TestTimeOut); - - changed = qvariant_cast<QNetworkConfiguration>(spy.takeFirst().at(0)); - } while (changed.identifier() != identifier); - - QVERIFY((changed.state() & QNetworkConfiguration::Active) != - QNetworkConfiguration::Active); - - QList<QNetworkConfiguration> afterStop = - manager.allConfigurations(QNetworkConfiguration::Active); - - QVERIFY(!afterStop.contains(changed)); - - oopSocket->disconnectFromServer(); - oopSocket->waitForDisconnected(-1); - - lackey.waitForFinished(); - } - // This is effected by QTBUG-4903, process will always report as running - //} while (lackey.state() == QProcess::Running); - - // Workaround: the socket in the lackey will disconnect on exit - } while (oopSocket->state() == QLocalSocket::ConnectedState); - - switch (lackey.exitCode()) { - case 0: - qDebug("Lackey returned exit success (0)"); - break; - case 1: - QSKIP("No discovered configurations found."); - case 2: - QSKIP("Lackey could not start session."); - default: - QSKIP("Lackey failed"); - } -#endif -} - -// A convenience / helper function for testcases. Return the first matching configuration. -// Ignores configurations in other than 'discovered' -state. Returns invalid (QNetworkConfiguration()) -// if none found. -QNetworkConfiguration suitableConfiguration(QString bearerType, QNetworkConfiguration::Type configType) { - - // Refresh configurations and derive configurations matching given parameters. - QNetworkConfigurationManager mgr; - QSignalSpy updateSpy(&mgr, SIGNAL(updateCompleted())); - - mgr.updateConfigurations(); - QTRY_NOOP(updateSpy.count() >= 1); - if (updateSpy.count() != 1) { - qDebug("tst_QNetworkSession::suitableConfiguration() failure: unable to update configurations"); - return QNetworkConfiguration(); - } - QList<QNetworkConfiguration> discoveredConfigs = mgr.allConfigurations(QNetworkConfiguration::Discovered); - foreach(QNetworkConfiguration config, discoveredConfigs) { - if ((config.state() & QNetworkConfiguration::Active) == QNetworkConfiguration::Active) { - discoveredConfigs.removeOne(config); - } else if (config.type() != configType) { - // qDebug() << "Dumping config because type (IAP/SNAP) mismatches: " << config.name(); - discoveredConfigs.removeOne(config); - } else if ((config.type() == QNetworkConfiguration::InternetAccessPoint) && - bearerType == "cellular") { // 'cellular' bearertype is for convenience - if (config.bearerTypeName() != "2G" && - config.bearerTypeName() != "CDMA2000" && - config.bearerTypeName() != "WCDMA" && - config.bearerTypeName() != "HSPA" && - config.bearerTypeName() != "EVDO" && - config.bearerTypeName() != "LTE" && - config.bearerTypeName() != "3G" && - config.bearerTypeName() != "4G") { - // qDebug() << "Dumping config because bearer mismatches (cellular): " << config.name(); - discoveredConfigs.removeOne(config); - } - } else if ((config.type() == QNetworkConfiguration::InternetAccessPoint) && - bearerType != config.bearerTypeName()) { - // qDebug() << "Dumping config because bearer mismatches (WLAN): " << config.name(); - discoveredConfigs.removeOne(config); - } - } - if (discoveredConfigs.isEmpty()) { - qDebug("tst_QNetworkSession::suitableConfiguration() failure: no suitable configurations present."); - return QNetworkConfiguration(); - } else { - return discoveredConfigs.first(); - } -} - -// A convenience-function: updates configurations and waits that they are updated. -void updateConfigurations() -{ - QNetworkConfigurationManager mgr; - QSignalSpy updateSpy(&mgr, SIGNAL(updateCompleted())); - mgr.updateConfigurations(); - QTRY_NOOP(updateSpy.count() >= 1); -} - -// A convenience-function: updates and prints all available confiurations and their states -void printConfigurations() -{ - QNetworkConfigurationManager manager; - QList<QNetworkConfiguration> allConfigs = - manager.allConfigurations(); - qDebug("tst_QNetworkSession::printConfigurations QNetworkConfigurationManager gives following configurations: "); - foreach(QNetworkConfiguration config, allConfigs) { - qDebug() << "Name of the configuration: " << config.name(); - qDebug() << "State of the configuration: " << config.state(); - } -} - -// A convenience function for test-cases: opens the given configuration and return -// true if it was done gracefully. -bool openSession(QNetworkSession *session) { - bool result = true; - QNetworkConfigurationManager mgr; - QSignalSpy openedSpy(session, SIGNAL(opened())); - QSignalSpy stateChangeSpy(session, SIGNAL(stateChanged(QNetworkSession::State))); - QSignalSpy errorSpy(session, SIGNAL(error(QNetworkSession::SessionError))); - QSignalSpy configChangeSpy(&mgr, SIGNAL(configurationChanged(QNetworkConfiguration))); - // Store some initial statuses, because expected signals differ if the config is already - // active by some other session - QNetworkConfiguration::StateFlags configInitState = session->configuration().state(); - QNetworkSession::State sessionInitState = session->state(); - qDebug() << "tst_QNetworkSession::openSession() name of the configuration to be opened: " << session->configuration().name(); - qDebug() << "tst_QNetworkSession::openSession() state of the configuration to be opened: " << session->configuration().state(); - qDebug() << "tst_QNetworkSession::openSession() state of the session to be opened: " << session->state(); - - if (session->isOpen() || - !session->sessionProperty("ActiveConfiguration").toString().isEmpty()) { - qDebug("tst_QNetworkSession::openSession() failure: session was already open / active."); - result = false; - } else { - session->open(); - session->waitForOpened(120000); // Bringing interfaces up and down may take time at platform - } - QTest::qWait(5000); // Wait a moment to ensure all signals are propagated - // Check that connection opening went by the book. Add checks here if more strictness needed. - if (!session->isOpen()) { - qDebug("tst_QNetworkSession::openSession() failure: QNetworkSession::open() failed."); - result = false; - } - if (openedSpy.count() != 1) { - qDebug("tst_QNetworkSession::openSession() failure: QNetworkSession::opened() - signal not received."); - result = false; - } - if (!errorSpy.isEmpty()) { - qDebug("tst_QNetworkSession::openSession() failure: QNetworkSession::error() - signal was detected."); - result = false; - } - if (sessionInitState != QNetworkSession::Connected && - stateChangeSpy.isEmpty()) { - qDebug("tst_QNetworkSession::openSession() failure: QNetworkSession::stateChanged() - signals not detected."); - result = false; - } - if (configInitState != QNetworkConfiguration::Active && - configChangeSpy.isEmpty()) { - qDebug("tst_QNetworkSession::openSession() failure: QNetworkConfigurationManager::configurationChanged() - signals not detected."); - result = false; - } - if (session->configuration().state() != QNetworkConfiguration::Active) { - qDebug("tst_QNetworkSession::openSession() failure: session's configuration is not in 'Active' -state."); - qDebug() << "tst_QNetworkSession::openSession() state is: " << session->configuration().state(); - result = false; - } - if (result == false) { - qDebug() << "tst_QNetworkSession::openSession() opening session failed."; - } else { - qDebug() << "tst_QNetworkSession::openSession() opening session succeeded."; - } - qDebug() << "tst_QNetworkSession::openSession() name of the configuration is: " << session->configuration().name(); - qDebug() << "tst_QNetworkSession::openSession() configuration state is: " << session->configuration().state(); - qDebug() << "tst_QNetworkSession::openSession() session state is: " << session->state(); - - return result; -} - -// Helper function for closing opened session. Performs checks that -// session is closed gradefully (e.g. signals). Function does not delete -// the session. The lastSessionOnConfiguration (true by default) is used to -// tell if there are more sessions open, basing on same configuration. This -// impacts the checks made. -bool closeSession(QNetworkSession *session, bool lastSessionOnConfiguration) { - if (!session) { - qDebug("tst_QNetworkSession::closeSession() failure: NULL session given"); - return false; - } - - qDebug() << "tst_QNetworkSession::closeSession() name of the configuration to be closed: " << session->configuration().name(); - qDebug() << "tst_QNetworkSession::closeSession() state of the configuration to be closed: " << session->configuration().state(); - qDebug() << "tst_QNetworkSession::closeSession() state of the session to be closed: " << session->state(); - - if (session->state() != QNetworkSession::Connected || - !session->isOpen()) { - qDebug("tst_QNetworkSession::closeSession() failure: session is not opened."); - return false; - } - QNetworkConfigurationManager mgr; - QSignalSpy sessionClosedSpy(session, SIGNAL(closed())); - QSignalSpy sessionStateChangedSpy(session, SIGNAL(stateChanged(QNetworkSession::State))); - QSignalSpy sessionErrorSpy(session, SIGNAL(error(QNetworkSession::SessionError))); - QSignalSpy configChangeSpy(&mgr, SIGNAL(configurationChanged(QNetworkConfiguration))); - - bool result = true; - session->close(); - QTest::qWait(5000); // Wait a moment so that all signals are propagated - - if (!sessionErrorSpy.isEmpty()) { - qDebug("tst_QNetworkSession::closeSession() failure: QNetworkSession::error() received."); - result = false; - } - if (sessionClosedSpy.count() != 1) { - qDebug("tst_QNetworkSession::closeSession() failure: QNetworkSession::closed() signal not received."); - result = false; - } - if (lastSessionOnConfiguration && - sessionStateChangedSpy.isEmpty()) { - qDebug("tst_QNetworkSession::closeSession() failure: QNetworkSession::stateChanged() signals not received."); - result = false; - } - if (lastSessionOnConfiguration && - session->state() != QNetworkSession::Disconnected) { - qDebug("tst_QNetworkSession::closeSession() failure: QNetworkSession is not in Disconnected -state"); - result = false; - } - QTRY_NOOP(!configChangeSpy.isEmpty()); - if (lastSessionOnConfiguration && - configChangeSpy.isEmpty()) { - qDebug("tst_QNetworkSession::closeSession() failure: QNetworkConfigurationManager::configurationChanged() - signal not detected."); - result = false; - } - if (lastSessionOnConfiguration && - session->configuration().state() == QNetworkConfiguration::Active) { - qDebug("tst_QNetworkSession::closeSession() failure: session's configuration is still in active state."); - result = false; - } - if (result == false) { - qDebug() << "tst_QNetworkSession::closeSession() closing session failed."; - } else { - qDebug() << "tst_QNetworkSession::closeSession() closing session succeeded."; - } - qDebug() << "tst_QNetworkSession::closeSession() name of the configuration is: " << session->configuration().name(); - qDebug() << "tst_QNetworkSession::closeSession() configuration state is: " << session->configuration().state(); - qDebug() << "tst_QNetworkSession::closeSession() session state is: " << session->state(); - return result; -} - -void tst_QNetworkSession::sessionAutoClose_data() -{ - QTest::addColumn<QNetworkConfiguration>("configuration"); - - bool testData = false; - foreach (const QNetworkConfiguration &config, - manager.allConfigurations(QNetworkConfiguration::Discovered)) { - QNetworkSession session(config); - if (!session.sessionProperty(QLatin1String("AutoCloseSessionTimeout")).isValid()) - continue; - - testData = true; - - const QString name = config.name().isEmpty() ? QString("<Hidden>") : config.name(); - QTest::newRow(name.toLocal8Bit().constData()) << config; - } - - if (!testData) - QSKIP("No applicable configurations to test"); -} - -void tst_QNetworkSession::sessionAutoClose() -{ - QFETCH(QNetworkConfiguration, configuration); - - QNetworkSession session(configuration); - - QCOMPARE(session.configuration(), configuration); - - QVariant autoCloseSession = session.sessionProperty(QLatin1String("AutoCloseSessionTimeout")); - - QVERIFY(autoCloseSession.isValid()); - - // property defaults to false - QCOMPARE(autoCloseSession.toInt(), -1); - - QSignalSpy closeSpy(&session, SIGNAL(closed())); - - session.open(); - session.waitForOpened(); - - if (!session.isOpen()) - QSKIP("Session not open"); - - // set session to auto close at next polling interval. - session.setSessionProperty(QLatin1String("AutoCloseSessionTimeout"), 0); - - QTRY_VERIFY_WITH_TIMEOUT(!closeSpy.isEmpty(), TestTimeOut); - - QCOMPARE(session.state(), QNetworkSession::Connected); - - QVERIFY(!session.isOpen()); - - QCOMPARE(session.configuration(), configuration); - - autoCloseSession = session.sessionProperty(QLatin1String("AutoCloseSessionTimeout")); - - QVERIFY(autoCloseSession.isValid()); - - QCOMPARE(autoCloseSession.toInt(), -1); -} - -void tst_QNetworkSession::usagePolicies() -{ - QNetworkSession session(manager.defaultConfiguration()); - QNetworkSession::UsagePolicies initial; - initial = session.usagePolicies(); - if (initial != 0) - QNetworkSessionPrivate::setUsagePolicies(session, { }); - QSignalSpy spy(&session, SIGNAL(usagePoliciesChanged(QNetworkSession::UsagePolicies))); - QNetworkSessionPrivate::setUsagePolicies(session, QNetworkSession::NoBackgroundTrafficPolicy); - QCOMPARE(spy.count(), 1); - QNetworkSession::UsagePolicies policies = qvariant_cast<QNetworkSession::UsagePolicies>(spy.at(0).at(0)); - QCOMPARE(policies, QNetworkSession::NoBackgroundTrafficPolicy); - QCOMPARE(session.usagePolicies(), QNetworkSession::NoBackgroundTrafficPolicy); - QNetworkSessionPrivate::setUsagePolicies(session, initial); - spy.clear(); - - session.open(); - QVERIFY(session.waitForOpened()); - - //policies may be changed when session is opened, if so, signal should have been emitted - if (session.usagePolicies() != initial) - QCOMPARE(spy.count(), 1); - else - QCOMPARE(spy.count(), 0); -} - - -#endif - -QTEST_MAIN(tst_QNetworkSession) -#include "tst_qnetworksession.moc" diff --git a/tests/auto/network/kernel/CMakeLists.txt b/tests/auto/network/kernel/CMakeLists.txt new file mode 100644 index 0000000000..6ce3fcdf32 --- /dev/null +++ b/tests/auto/network/kernel/CMakeLists.txt @@ -0,0 +1,19 @@ +add_subdirectory(qdnslookup) +add_subdirectory(qdnslookup_appless) +add_subdirectory(qnetworkinterface) +add_subdirectory(qnetworkdatagram) +add_subdirectory(qnetworkaddressentry) +add_subdirectory(qhostaddress) + +if(NOT WINRT) + add_subdirectory(qnetworkproxy) + add_subdirectory(qnetworkproxyfactory) +endif() + +if(QT_FEATURE_private_tests) + add_subdirectory(qauthenticator) + + if(NOT MACOS) + add_subdirectory(qhostinfo) + endif() +endif() diff --git a/tests/auto/network/kernel/qauthenticator/CMakeLists.txt b/tests/auto/network/kernel/qauthenticator/CMakeLists.txt new file mode 100644 index 0000000000..f461591884 --- /dev/null +++ b/tests/auto/network/kernel/qauthenticator/CMakeLists.txt @@ -0,0 +1,21 @@ +# Generated from qauthenticator.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qauthenticator Test: +##################################################################### + +add_qt_test(tst_qauthenticator + SOURCES + tst_qauthenticator.cpp + DEFINES + SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/\\\" + PUBLIC_LIBRARIES + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:qauthenticator.pro:<TRUE>: +# _REQUIREMENTS = "qtConfig(private_tests)" diff --git a/tests/auto/network/kernel/qdnslookup/CMakeLists.txt b/tests/auto/network/kernel/qdnslookup/CMakeLists.txt new file mode 100644 index 0000000000..896b4431d8 --- /dev/null +++ b/tests/auto/network/kernel/qdnslookup/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qdnslookup.pro. + +##################################################################### +## tst_qdnslookup Test: +##################################################################### + +add_qt_test(tst_qdnslookup + SOURCES + tst_qdnslookup.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/kernel/qdnslookup_appless/CMakeLists.txt b/tests/auto/network/kernel/qdnslookup_appless/CMakeLists.txt new file mode 100644 index 0000000000..847e1a6d90 --- /dev/null +++ b/tests/auto/network/kernel/qdnslookup_appless/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qdnslookup_appless.pro. + +##################################################################### +## tst_qdnslookup_appless Test: +##################################################################### + +add_qt_test(tst_qdnslookup_appless + SOURCES + tst_qdnslookup_appless.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/kernel/qhostaddress/CMakeLists.txt b/tests/auto/network/kernel/qhostaddress/CMakeLists.txt new file mode 100644 index 0000000000..f967625d38 --- /dev/null +++ b/tests/auto/network/kernel/qhostaddress/CMakeLists.txt @@ -0,0 +1,20 @@ +# Generated from qhostaddress.pro. + +##################################################################### +## tst_qhostaddress Test: +##################################################################### + +add_qt_test(tst_qhostaddress + SOURCES + tst_qhostaddress.cpp + PUBLIC_LIBRARIES + Qt::NetworkPrivate +) + +## Scopes: +##################################################################### + +extend_target(tst_qhostaddress CONDITION WIN32 + PUBLIC_LIBRARIES + ws2_32 +) diff --git a/tests/auto/network/kernel/qhostinfo/CMakeLists.txt b/tests/auto/network/kernel/qhostinfo/CMakeLists.txt new file mode 100644 index 0000000000..19eae0611d --- /dev/null +++ b/tests/auto/network/kernel/qhostinfo/CMakeLists.txt @@ -0,0 +1,31 @@ +# Generated from qhostinfo.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qhostinfo Test: +##################################################################### + +add_qt_test(tst_qhostinfo + SOURCES + tst_qhostinfo.cpp + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:qhostinfo.pro:<TRUE>: +# _REQUIREMENTS = "qtConfig(private_tests)" + +## Scopes: +##################################################################### + +extend_target(tst_qhostinfo CONDITION WIN32 + PUBLIC_LIBRARIES + ws2_32 +) + +#### Keys ignored in scope 3:.:.:qhostinfo.pro:WINRT: +# WINRT_MANIFEST.capabilities = "internetClientServer" diff --git a/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp b/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp index a603b2d879..c4364aeb4e 100644 --- a/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp +++ b/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp @@ -47,12 +47,6 @@ #include <private/qthread_p.h> #include <QTcpServer> -#ifndef QT_NO_BEARERMANAGEMENT -#include <QtNetwork/qnetworkconfigmanager.h> -#include <QtNetwork/qnetworkconfiguration.h> -#include <QtNetwork/qnetworksession.h> -#endif - #include <time.h> #if defined(Q_OS_WIN) #include <windows.h> @@ -121,11 +115,6 @@ private: bool lookupDone; int lookupsDoneCounter; QHostInfo lookupResults; -#ifndef QT_NO_BEARERMANAGEMENT - QNetworkConfigurationManager *netConfMan; - QNetworkConfiguration networkConfiguration; - QScopedPointer<QNetworkSession> networkSession; -#endif }; void tst_QHostInfo::swapFunction() @@ -180,17 +169,6 @@ void tst_QHostInfo::staticInformation() void tst_QHostInfo::initTestCase() { -#ifndef QT_NO_BEARERMANAGEMENT - //start the default network - netConfMan = new QNetworkConfigurationManager(this); - networkConfiguration = netConfMan->defaultConfiguration(); - networkSession.reset(new QNetworkSession(networkConfiguration)); - if (!networkSession->isOpen()) { - networkSession->open(); - networkSession->waitForOpened(30000); - } -#endif - ipv6Available = false; ipv6LookupsAvailable = false; diff --git a/tests/auto/network/kernel/qnetworkaddressentry/CMakeLists.txt b/tests/auto/network/kernel/qnetworkaddressentry/CMakeLists.txt new file mode 100644 index 0000000000..5a72d4e4a5 --- /dev/null +++ b/tests/auto/network/kernel/qnetworkaddressentry/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qnetworkaddressentry.pro. + +##################################################################### +## tst_qnetworkaddressentry Test: +##################################################################### + +add_qt_test(tst_qnetworkaddressentry + SOURCES + tst_qnetworkaddressentry.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/kernel/qnetworkdatagram/CMakeLists.txt b/tests/auto/network/kernel/qnetworkdatagram/CMakeLists.txt new file mode 100644 index 0000000000..ae24d32917 --- /dev/null +++ b/tests/auto/network/kernel/qnetworkdatagram/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qnetworkdatagram.pro. + +##################################################################### +## tst_qnetworkdatagram Test: +##################################################################### + +add_qt_test(tst_qnetworkdatagram + SOURCES + tst_qnetworkdatagram.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/kernel/qnetworkinterface/CMakeLists.txt b/tests/auto/network/kernel/qnetworkinterface/CMakeLists.txt new file mode 100644 index 0000000000..f23a17f077 --- /dev/null +++ b/tests/auto/network/kernel/qnetworkinterface/CMakeLists.txt @@ -0,0 +1,15 @@ +# Generated from qnetworkinterface.pro. + +##################################################################### +## tst_qnetworkinterface Test: +##################################################################### + +add_qt_test(tst_qnetworkinterface + SOURCES + ../../../../shared/emulationdetector.h + tst_qnetworkinterface.cpp + INCLUDE_DIRECTORIES + ../../../../shared + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp b/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp index bc6e5435df..47dd80a1c2 100644 --- a/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp +++ b/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp @@ -33,10 +33,6 @@ #include <qcoreapplication.h> #include <qnetworkinterface.h> #include <qudpsocket.h> -#ifndef QT_NO_BEARERMANAGEMENT -#include <QNetworkConfigurationManager> -#include <QNetworkSession> -#endif #include "../../../network-settings.h" #include "emulationdetector.h" @@ -54,7 +50,6 @@ public: private slots: void initTestCase(); - void cleanupTestCase(); void dump(); void consistencyCheck(); void loopbackIPv4(); @@ -64,13 +59,6 @@ private slots: void interfaceFromXXX_data(); void interfaceFromXXX(); void copyInvalidInterface(); - -private: -#ifndef QT_NO_BEARERMANAGEMENT - QNetworkConfigurationManager *netConfMan; - QNetworkConfiguration networkConfiguration; - QScopedPointer<QNetworkSession> networkSession; -#endif }; tst_QNetworkInterface::tst_QNetworkInterface() @@ -92,27 +80,6 @@ void tst_QNetworkInterface::initTestCase() { if (!QtNetworkSettings::verifyTestNetworkSettings()) QSKIP("No network test server available"); -#ifndef QT_NO_BEARERMANAGEMENT - netConfMan = new QNetworkConfigurationManager(this); - if (netConfMan->capabilities() - & QNetworkConfigurationManager::NetworkSessionRequired) { - networkConfiguration = netConfMan->defaultConfiguration(); - networkSession.reset(new QNetworkSession(networkConfiguration)); - if (!networkSession->isOpen()) { - networkSession->open(); - QVERIFY(networkSession->waitForOpened(30000)); - } - } -#endif -} - -void tst_QNetworkInterface::cleanupTestCase() -{ -#ifndef QT_NO_BEARERMANAGEMENT - if (networkSession && networkSession->isOpen()) { - networkSession->close(); - } -#endif } void tst_QNetworkInterface::dump() diff --git a/tests/auto/network/kernel/qnetworkproxy/CMakeLists.txt b/tests/auto/network/kernel/qnetworkproxy/CMakeLists.txt new file mode 100644 index 0000000000..e0cbe133af --- /dev/null +++ b/tests/auto/network/kernel/qnetworkproxy/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qnetworkproxy.pro. + +##################################################################### +## tst_qnetworkproxy Test: +##################################################################### + +add_qt_test(tst_qnetworkproxy + SOURCES + tst_qnetworkproxy.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/kernel/qnetworkproxyfactory/CMakeLists.txt b/tests/auto/network/kernel/qnetworkproxyfactory/CMakeLists.txt new file mode 100644 index 0000000000..ecacd338ab --- /dev/null +++ b/tests/auto/network/kernel/qnetworkproxyfactory/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qnetworkproxyfactory.pro. + +##################################################################### +## tst_qnetworkproxyfactory Test: +##################################################################### + +add_qt_test(tst_qnetworkproxyfactory + SOURCES + tst_qnetworkproxyfactory.cpp + PUBLIC_LIBRARIES + Qt::NetworkPrivate +) diff --git a/tests/auto/network/network.pro b/tests/auto/network/network.pro index 9a3ababe61..2572bb235f 100644 --- a/tests/auto/network/network.pro +++ b/tests/auto/network/network.pro @@ -2,10 +2,8 @@ TEMPLATE=subdirs SUBDIRS=\ selftest \ access \ - bearer \ kernel \ ssl \ socket \ win32: socket.CONFIG += no_check_target # QTBUG-24451 - all socket tests require waitForX -win32|mac:bearer.CONFIG += no_check_target # QTBUG-24503 - these tests fail if machine has a WLAN adaptor diff --git a/tests/auto/network/socket/CMakeLists.txt b/tests/auto/network/socket/CMakeLists.txt new file mode 100644 index 0000000000..5019e47140 --- /dev/null +++ b/tests/auto/network/socket/CMakeLists.txt @@ -0,0 +1,20 @@ +# Generated from socket.pro. + +add_subdirectory(qudpsocket) +### add_subdirectory(qlocalsocket) +add_subdirectory(qtcpserver) +add_subdirectory(qabstractsocket) + +if(QT_FEATURE_private_tests) + add_subdirectory(platformsocketengine) + add_subdirectory(qtcpsocket) + + if(NOT WINRT) + add_subdirectory(qhttpsocketengine) + add_subdirectory(qsocks5socketengine) + endif() +endif() + +if(QT_FEATURE_sctp) + add_subdirectory(qsctpsocket) +endif() diff --git a/tests/auto/network/socket/platformsocketengine/CMakeLists.txt b/tests/auto/network/socket/platformsocketengine/CMakeLists.txt new file mode 100644 index 0000000000..1dece78966 --- /dev/null +++ b/tests/auto/network/socket/platformsocketengine/CMakeLists.txt @@ -0,0 +1,38 @@ +# Generated from platformsocketengine.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_platformsocketengine Test: +##################################################################### + +add_qt_test(tst_platformsocketengine + SOURCES + tst_platformsocketengine.cpp + INCLUDE_DIRECTORIES + ${QT_SOURCE_TREE}/src/network + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:platformsocketengine.pro:<TRUE>: +# MOC_DIR = "tmp" +# _REQUIREMENTS = "qtConfig(private_tests)" + +## Scopes: +##################################################################### + +extend_target(tst_platformsocketengine CONDITION WIN32 + PUBLIC_LIBRARIES + ws2_32 +) + +extend_target(tst_platformsocketengine CONDITION QT_FEATURE_reduce_exports AND UNIX + SOURCES + ${QT_SOURCE_TREE}/src/network/socket/qabstractsocketengine.cpp ${QT_SOURCE_TREE}/src/network/socket/qabstractsocketengine_p.h + ${QT_SOURCE_TREE}/src/network/socket/qnativesocketengine.cpp ${QT_SOURCE_TREE}/src/network/socket/qnativesocketengine_p.h + ${QT_SOURCE_TREE}/src/network/socket/qnativesocketengine_unix.cpp +) diff --git a/tests/auto/network/socket/platformsocketengine/platformsocketengine.pri b/tests/auto/network/socket/platformsocketengine/platformsocketengine.pri index 868439de6a..df43a60065 100644 --- a/tests/auto/network/socket/platformsocketengine/platformsocketengine.pri +++ b/tests/auto/network/socket/platformsocketengine/platformsocketengine.pri @@ -9,5 +9,7 @@ win32: QMAKE_USE += ws2_32 unix:qtConfig(reduce_exports) { SOURCES += $$QNETWORK_SRC/socket/qnativesocketengine_unix.cpp SOURCES += $$QNETWORK_SRC/socket/qnativesocketengine.cpp + HEADERS += $$QNETWORK_SRC/socket/qnativesocketengine_p.h SOURCES += $$QNETWORK_SRC/socket/qabstractsocketengine.cpp + HEADERS += $$QNETWORK_SRC/socket/qabstractsocketengine_p.h } diff --git a/tests/auto/network/socket/qabstractsocket/CMakeLists.txt b/tests/auto/network/socket/qabstractsocket/CMakeLists.txt new file mode 100644 index 0000000000..ca7d64a2ff --- /dev/null +++ b/tests/auto/network/socket/qabstractsocket/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qabstractsocket.pro. + +##################################################################### +## tst_qabstractsocket Test: +##################################################################### + +add_qt_test(tst_qabstractsocket + SOURCES + tst_qabstractsocket.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt b/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt new file mode 100644 index 0000000000..6aeec0a983 --- /dev/null +++ b/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt @@ -0,0 +1,41 @@ +# Generated from qhttpsocketengine.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qhttpsocketengine Test: +##################################################################### + +add_qt_test(tst_qhttpsocketengine + SOURCES + tst_qhttpsocketengine.cpp + INCLUDE_DIRECTORIES + ${QT_SOURCE_TREE}/src/network + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:qhttpsocketengine.pro:<TRUE>: +# MOC_DIR = "tmp" +# _REQUIREMENTS = "qtConfig(private_tests)" + +## Scopes: +##################################################################### + +#### Keys ignored in scope 2:.:.:qhttpsocketengine.pro:LINUX: +# QT_TEST_SERVER_LIST = "squid" "danted" "cyrus" "apache2" + +extend_target(tst_qhttpsocketengine CONDITION WIN32 + PUBLIC_LIBRARIES + ws2_32 +) + +extend_target(tst_qhttpsocketengine CONDITION QT_FEATURE_reduce_exports AND UNIX + SOURCES + ${QT_SOURCE_TREE}/src/network/socket/qabstractsocketengine.cpp ${QT_SOURCE_TREE}/src/network/socket/qabstractsocketengine_p.h + ${QT_SOURCE_TREE}/src/network/socket/qnativesocketengine.cpp ${QT_SOURCE_TREE}/src/network/socket/qnativesocketengine_p.h + ${QT_SOURCE_TREE}/src/network/socket/qnativesocketengine_unix.cpp +) diff --git a/tests/auto/network/socket/qlocalsocket/CMakeLists.txt b/tests/auto/network/socket/qlocalsocket/CMakeLists.txt new file mode 100644 index 0000000000..97466174f9 --- /dev/null +++ b/tests/auto/network/socket/qlocalsocket/CMakeLists.txt @@ -0,0 +1,4 @@ +# Generated from qlocalsocket.pro. + +add_subdirectory(test) +add_subdirectory(socketprocess) diff --git a/tests/auto/network/socket/qlocalsocket/socketprocess/CMakeLists.txt b/tests/auto/network/socket/qlocalsocket/socketprocess/CMakeLists.txt new file mode 100644 index 0000000000..cb339eb2fa --- /dev/null +++ b/tests/auto/network/socket/qlocalsocket/socketprocess/CMakeLists.txt @@ -0,0 +1,14 @@ +# Generated from socketprocess.pro. + +##################################################################### +## socketprocess Binary: +##################################################################### + +add_qt_executable(socketprocess + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + main.cpp + PUBLIC_LIBRARIES + Qt::Network + Qt::Test +) diff --git a/tests/auto/network/socket/qlocalsocket/test/CMakeLists.txt b/tests/auto/network/socket/qlocalsocket/test/CMakeLists.txt new file mode 100644 index 0000000000..eb427796ae --- /dev/null +++ b/tests/auto/network/socket/qlocalsocket/test/CMakeLists.txt @@ -0,0 +1,28 @@ +# Generated from test.pro. + +##################################################################### +## tst_qlocalsocket Test: +##################################################################### + +add_qt_test(tst_qlocalsocket + SOURCES + ../tst_qlocalsocket.cpp + DEFINES + QLOCALSERVER_DEBUG + QLOCALSOCKET_DEBUG + SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../\\\" + PUBLIC_LIBRARIES + Qt::Network +) + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:test.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "../debug" + +#### Keys ignored in scope 4:.:.:test.pro:else: +# DESTDIR = "../release" + +#### Keys ignored in scope 5:.:.:test.pro:else: +# DESTDIR = ".." diff --git a/tests/auto/network/socket/qsctpsocket/CMakeLists.txt b/tests/auto/network/socket/qsctpsocket/CMakeLists.txt new file mode 100644 index 0000000000..d272d018b6 --- /dev/null +++ b/tests/auto/network/socket/qsctpsocket/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qsctpsocket.pro. + +##################################################################### +## tst_qsctpsocket Test: +##################################################################### + +add_qt_test(tst_qsctpsocket + SOURCES + tst_qsctpsocket.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt b/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt new file mode 100644 index 0000000000..fd58b931e6 --- /dev/null +++ b/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt @@ -0,0 +1,41 @@ +# Generated from qsocks5socketengine.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qsocks5socketengine Test: +##################################################################### + +add_qt_test(tst_qsocks5socketengine + SOURCES + tst_qsocks5socketengine.cpp + INCLUDE_DIRECTORIES + ${QT_SOURCE_TREE}/src/network + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:qsocks5socketengine.pro:<TRUE>: +# MOC_DIR = "tmp" +# _REQUIREMENTS = "qtConfig(private_tests)" + +## Scopes: +##################################################################### + +#### Keys ignored in scope 2:.:.:qsocks5socketengine.pro:LINUX: +# QT_TEST_SERVER_LIST = "danted" "apache2" "cyrus" + +extend_target(tst_qsocks5socketengine CONDITION WIN32 + PUBLIC_LIBRARIES + ws2_32 +) + +extend_target(tst_qsocks5socketengine CONDITION QT_FEATURE_reduce_exports AND UNIX + SOURCES + ${QT_SOURCE_TREE}/src/network/socket/qabstractsocketengine.cpp ${QT_SOURCE_TREE}/src/network/socket/qabstractsocketengine_p.h + ${QT_SOURCE_TREE}/src/network/socket/qnativesocketengine.cpp ${QT_SOURCE_TREE}/src/network/socket/qnativesocketengine_p.h + ${QT_SOURCE_TREE}/src/network/socket/qnativesocketengine_unix.cpp +) diff --git a/tests/auto/network/socket/qtcpserver/CMakeLists.txt b/tests/auto/network/socket/qtcpserver/CMakeLists.txt new file mode 100644 index 0000000000..01f6c8b672 --- /dev/null +++ b/tests/auto/network/socket/qtcpserver/CMakeLists.txt @@ -0,0 +1,4 @@ +# Generated from qtcpserver.pro. + +add_subdirectory(test) +add_subdirectory(crashingServer) diff --git a/tests/auto/network/socket/qtcpserver/crashingServer/CMakeLists.txt b/tests/auto/network/socket/qtcpserver/crashingServer/CMakeLists.txt new file mode 100644 index 0000000000..ad291f2ad8 --- /dev/null +++ b/tests/auto/network/socket/qtcpserver/crashingServer/CMakeLists.txt @@ -0,0 +1,16 @@ +# Generated from crashingServer.pro. + +##################################################################### +## crashingServer Binary: +##################################################################### + +add_qt_executable(crashingServer + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + main.cpp + PUBLIC_LIBRARIES + Qt::Network +) + +## Scopes: +##################################################################### diff --git a/tests/auto/network/socket/qtcpserver/test/.prev_CMakeLists.txt b/tests/auto/network/socket/qtcpserver/test/.prev_CMakeLists.txt new file mode 100644 index 0000000000..df05c5012b --- /dev/null +++ b/tests/auto/network/socket/qtcpserver/test/.prev_CMakeLists.txt @@ -0,0 +1,26 @@ +# Generated from test.pro. + +##################################################################### +## tst_qtcpserver Test: +##################################################################### + +add_qt_test(tst_qtcpserver + SOURCES + ../tst_qtcpserver.cpp + PUBLIC_LIBRARIES + Qt::Network +) + +#### Keys ignored in scope 1:.:.:test.pro:<TRUE>: +# MOC_DIR = "tmp" + +## Scopes: +##################################################################### + +extend_target(tst_qtcpserver CONDITION WIN32 + PUBLIC_LIBRARIES + ws2_32 +) + +#### Keys ignored in scope 6:.:.:test.pro:LINUX: +# QT_TEST_SERVER_LIST = "danted" "cyrus" "squid" "ftp-proxy" diff --git a/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt b/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt new file mode 100644 index 0000000000..b559024724 --- /dev/null +++ b/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt @@ -0,0 +1,27 @@ +# Generated from test.pro. + +##################################################################### +## tst_qtcpserver Test: +##################################################################### + +add_qt_test(tst_qtcpserver + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case + SOURCES + ../tst_qtcpserver.cpp + PUBLIC_LIBRARIES + Qt::Network +) + +#### Keys ignored in scope 1:.:.:test.pro:<TRUE>: +# MOC_DIR = "tmp" + +## Scopes: +##################################################################### + +extend_target(tst_qtcpserver CONDITION WIN32 + PUBLIC_LIBRARIES + ws2_32 +) + +#### Keys ignored in scope 6:.:.:test.pro:LINUX: +# QT_TEST_SERVER_LIST = "danted" "cyrus" "squid" "ftp-proxy" diff --git a/tests/auto/network/socket/qtcpserver/test/test.pro b/tests/auto/network/socket/qtcpserver/test/test.pro index 7e2e60a1e3..491ff28cdc 100644 --- a/tests/auto/network/socket/qtcpserver/test/test.pro +++ b/tests/auto/network/socket/qtcpserver/test/test.pro @@ -3,13 +3,13 @@ SOURCES += ../tst_qtcpserver.cpp win32: QMAKE_USE += ws2_32 -TARGET = ../tst_qtcpserver +TARGET = tst_qtcpserver win32 { CONFIG(debug, debug|release) { - TARGET = ../../debug/tst_qtcpserver + TARGET = ../debug/tst_qtcpserver } else { - TARGET = ../../release/tst_qtcpserver + TARGET = ../release/tst_qtcpserver } } diff --git a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp index 849d8b0ed1..094e28149c 100644 --- a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp +++ b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp @@ -55,12 +55,10 @@ #include <qstringlist.h> #include <qplatformdefs.h> #include <qhostinfo.h> +#include <qnetworkinterface.h> #include <QNetworkProxy> -#include <QNetworkSession> -#include <QNetworkConfiguration> -#include <QNetworkConfigurationManager> #include "../../../network-settings.h" #if defined(Q_OS_LINUX) @@ -123,9 +121,6 @@ private: bool ipv6GetsockoptionMissing(int level, int optname); #endif -#ifndef QT_NO_BEARERMANAGEMENT - QNetworkSession *networkSession; -#endif QString crashingServerDir; }; @@ -169,12 +164,6 @@ void tst_QTcpServer::initTestCase() if (!QtNetworkSettings::verifyTestNetworkSettings()) QSKIP("No network test server available"); #endif -#ifndef QT_NO_BEARERMANAGEMENT - QNetworkConfigurationManager man; - networkSession = new QNetworkSession(man.defaultConfiguration(), this); - networkSession->open(); - QVERIFY(networkSession->waitForOpened()); -#endif } void tst_QTcpServer::init() diff --git a/tests/auto/network/socket/qtcpsocket/CMakeLists.txt b/tests/auto/network/socket/qtcpsocket/CMakeLists.txt new file mode 100644 index 0000000000..645c65671a --- /dev/null +++ b/tests/auto/network/socket/qtcpsocket/CMakeLists.txt @@ -0,0 +1,9 @@ +# Generated from qtcpsocket.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() +add_subdirectory(test) +if(NOT VXWORKS) + add_subdirectory(stressTest) +endif() diff --git a/tests/auto/network/socket/qtcpsocket/stressTest/CMakeLists.txt b/tests/auto/network/socket/qtcpsocket/stressTest/CMakeLists.txt new file mode 100644 index 0000000000..da9d3a324f --- /dev/null +++ b/tests/auto/network/socket/qtcpsocket/stressTest/CMakeLists.txt @@ -0,0 +1,19 @@ +# Generated from stressTest.pro. + +##################################################################### +## stressTest Binary: +##################################################################### + +add_qt_executable(stressTest + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + Test.cpp Test.h + main.cpp + PUBLIC_LIBRARIES + Qt::Network + Qt::Test +) + +#### Keys ignored in scope 1:.:.:stressTest.pro:<TRUE>: +# MOC_DIR = ".moc/" +# TMP_DIR = ".tmp/" diff --git a/tests/auto/network/socket/qtcpsocket/test/.prev_CMakeLists.txt b/tests/auto/network/socket/qtcpsocket/test/.prev_CMakeLists.txt new file mode 100644 index 0000000000..61b8d25736 --- /dev/null +++ b/tests/auto/network/socket/qtcpsocket/test/.prev_CMakeLists.txt @@ -0,0 +1,33 @@ +# Generated from test.pro. + +##################################################################### +## tst_qtcpsocket Test: +##################################################################### + +add_qt_test(tst_qtcpsocket + SOURCES + ../tst_qtcpsocket.cpp + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) + +## Scopes: +##################################################################### + +extend_target(tst_qtcpsocket CONDITION WIN32 + PUBLIC_LIBRARIES + ws2_32 +) + +#### Keys ignored in scope 4:.:.:test.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "../debug" + +#### Keys ignored in scope 5:.:.:test.pro:else: +# DESTDIR = "../release" + +#### Keys ignored in scope 6:.:.:test.pro:else: +# DESTDIR = "../" + +#### Keys ignored in scope 7:.:.:test.pro:LINUX: +# QT_TEST_SERVER_LIST = "danted" "squid" "apache2" "ftp-proxy" "vsftpd" "iptables" "cyrus" diff --git a/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt b/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt new file mode 100644 index 0000000000..2acb8b5948 --- /dev/null +++ b/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt @@ -0,0 +1,40 @@ +# Generated from test.pro. + +##################################################################### +## tst_qtcpsocket Test: +##################################################################### + +add_qt_test(tst_qtcpsocket + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case + SOURCES + ../tst_qtcpsocket.cpp + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) + +## Scopes: +##################################################################### + +extend_target(tst_qtcpsocket CONDITION WIN32 + PUBLIC_LIBRARIES + ws2_32 +) + +# special case begin +set(THREADS_PREFER_PTHREAD_FLAG 1) +find_package(Threads) +target_link_libraries(tst_qtcpsocket PRIVATE Threads::Threads) +# special case end + +#### Keys ignored in scope 4:.:.:test.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "../debug" + +#### Keys ignored in scope 5:.:.:test.pro:else: +# DESTDIR = "../release" + +#### Keys ignored in scope 6:.:.:test.pro:else: +# DESTDIR = "../" + +#### Keys ignored in scope 7:.:.:test.pro:LINUX: +# QT_TEST_SERVER_LIST = "danted" "squid" "apache2" "ftp-proxy" "vsftpd" "iptables" "cyrus" diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp index 6dd390ccbd..88d2c46f3d 100644 --- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp @@ -52,6 +52,7 @@ #include <QFile> #include <QHostAddress> #include <QHostInfo> +#include <QNetworkInterface> #include <QMap> #include <QPointer> #if QT_CONFIG(process) diff --git a/tests/auto/network/socket/qudpsocket/CMakeLists.txt b/tests/auto/network/socket/qudpsocket/CMakeLists.txt new file mode 100644 index 0000000000..b9d0646e58 --- /dev/null +++ b/tests/auto/network/socket/qudpsocket/CMakeLists.txt @@ -0,0 +1,4 @@ +# Generated from qudpsocket.pro. + +add_subdirectory(test) +add_subdirectory(clientserver) diff --git a/tests/auto/network/socket/qudpsocket/clientserver/CMakeLists.txt b/tests/auto/network/socket/qudpsocket/clientserver/CMakeLists.txt new file mode 100644 index 0000000000..8b594c6913 --- /dev/null +++ b/tests/auto/network/socket/qudpsocket/clientserver/CMakeLists.txt @@ -0,0 +1,13 @@ +# Generated from clientserver.pro. + +##################################################################### +## clientserver Binary: +##################################################################### + +add_qt_executable(clientserver + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" + SOURCES + main.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/socket/qudpsocket/test/.prev_CMakeLists.txt b/tests/auto/network/socket/qudpsocket/test/.prev_CMakeLists.txt new file mode 100644 index 0000000000..f5ec5f50ce --- /dev/null +++ b/tests/auto/network/socket/qudpsocket/test/.prev_CMakeLists.txt @@ -0,0 +1,33 @@ +# Generated from test.pro. + +##################################################################### +## tst_qudpsocket Test: +##################################################################### + +add_qt_test(tst_qudpsocket + SOURCES + ../tst_qudpsocket.cpp + INCLUDE_DIRECTORIES + ../../../../../shared + PUBLIC_LIBRARIES + Qt::Network +) + +#### Keys ignored in scope 1:.:.:test.pro:<TRUE>: +# MOC_DIR = "tmp" +# testcase.timeout = "800" + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:test.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "../debug" + +#### Keys ignored in scope 4:.:.:test.pro:else: +# DESTDIR = "../release" + +#### Keys ignored in scope 5:.:.:test.pro:else: +# DESTDIR = "../" + +#### Keys ignored in scope 6:.:.:test.pro:LINUX: +# QT_TEST_SERVER_LIST = "danted" "echo" diff --git a/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt b/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt new file mode 100644 index 0000000000..3c2df284fc --- /dev/null +++ b/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt @@ -0,0 +1,34 @@ +# Generated from test.pro. + +##################################################################### +## tst_qudpsocket Test: +##################################################################### + +add_qt_test(tst_qudpsocket + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case + SOURCES + ../tst_qudpsocket.cpp + INCLUDE_DIRECTORIES + ../../../../../shared + PUBLIC_LIBRARIES + Qt::Network +) + +#### Keys ignored in scope 1:.:.:test.pro:<TRUE>: +# MOC_DIR = "tmp" +# testcase.timeout = "800" + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:test.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "../debug" + +#### Keys ignored in scope 4:.:.:test.pro:else: +# DESTDIR = "../release" + +#### Keys ignored in scope 5:.:.:test.pro:else: +# DESTDIR = "../" + +#### Keys ignored in scope 6:.:.:test.pro:LINUX: +# QT_TEST_SERVER_LIST = "danted" "echo" diff --git a/tests/auto/network/socket/qudpsocket/udpServer/.prev_CMakeLists.txt b/tests/auto/network/socket/qudpsocket/udpServer/.prev_CMakeLists.txt new file mode 100644 index 0000000000..be9819466f --- /dev/null +++ b/tests/auto/network/socket/qudpsocket/udpServer/.prev_CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from udpServer.pro. + +##################################################################### +## udpServer Binary: +##################################################################### + +add_qt_executable(udpServer + SOURCES + main.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/socket/qudpsocket/udpServer/CMakeLists.txt b/tests/auto/network/socket/qudpsocket/udpServer/CMakeLists.txt new file mode 100644 index 0000000000..d9da87126f --- /dev/null +++ b/tests/auto/network/socket/qudpsocket/udpServer/CMakeLists.txt @@ -0,0 +1,13 @@ +# Generated from udpServer.pro. + +##################################################################### +## udpServer Binary: +##################################################################### + +add_qt_executable(udpServer + OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/./" # special case + SOURCES + main.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/ssl/CMakeLists.txt b/tests/auto/network/ssl/CMakeLists.txt new file mode 100644 index 0000000000..c10cfabbf4 --- /dev/null +++ b/tests/auto/network/ssl/CMakeLists.txt @@ -0,0 +1,36 @@ +# Generated from ssl.pro. + +add_subdirectory(qpassworddigestor) +add_subdirectory(qsslcertificate) +add_subdirectory(qsslcipher) +add_subdirectory(qsslellipticcurve) +add_subdirectory(qsslerror) +add_subdirectory(qsslkey) + +if(QT_FEATURE_ssl) + + if(QT_FEATURE_private_tests) + add_subdirectory(qsslsocket) + if(NOT WINRT) + add_subdirectory(qsslsocket_onDemandCertificates_member) + add_subdirectory(qsslsocket_onDemandCertificates_static) + endif() + + if(QT_FEATURE_dtls) + add_subdirectory(qdtlscookie) + add_subdirectory(qdtls) + endif() + + if(QT_FEATURE_ocsp) + add_subdirectory(qocsp) + endif() + endif() +endif() + +if(QT_FEATURE_ssl) + + if(QT_FEATURE_private_tests) + add_subdirectory(qasn1element) + add_subdirectory(qssldiffiehellmanparameters) + endif() +endif() diff --git a/tests/auto/network/ssl/qasn1element/CMakeLists.txt b/tests/auto/network/ssl/qasn1element/CMakeLists.txt new file mode 100644 index 0000000000..aa9ff58012 --- /dev/null +++ b/tests/auto/network/ssl/qasn1element/CMakeLists.txt @@ -0,0 +1,13 @@ +# Generated from qasn1element.pro. + +##################################################################### +## tst_qasn1element Test: +##################################################################### + +add_qt_test(tst_qasn1element + SOURCES + tst_qasn1element.cpp + PUBLIC_LIBRARIES + Qt::Network + Qt::NetworkPrivate +) diff --git a/tests/auto/network/ssl/qdtls/CMakeLists.txt b/tests/auto/network/ssl/qdtls/CMakeLists.txt new file mode 100644 index 0000000000..77bf65f199 --- /dev/null +++ b/tests/auto/network/ssl/qdtls/CMakeLists.txt @@ -0,0 +1,25 @@ +# Generated from qdtls.pro. + +##################################################################### +## tst_qdtls Test: +##################################################################### + +# Collect test data +list(APPEND test_data "certs") + +add_qt_test(tst_qdtls + SOURCES + tst_qdtls.cpp + PUBLIC_LIBRARIES + Qt::NetworkPrivate + TESTDATA ${test_data} +) + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:qdtls.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "debug" + +#### Keys ignored in scope 4:.:.:qdtls.pro:else: +# DESTDIR = "release" diff --git a/tests/auto/network/ssl/qdtls/tst_qdtls.cpp b/tests/auto/network/ssl/qdtls/tst_qdtls.cpp index 5d79b0f26b..3bbde484ce 100644 --- a/tests/auto/network/ssl/qdtls/tst_qdtls.cpp +++ b/tests/auto/network/ssl/qdtls/tst_qdtls.cpp @@ -162,7 +162,6 @@ Q_DECLARE_METATYPE(QSslSocket::SslMode) Q_DECLARE_METATYPE(QSslSocket::PeerVerifyMode) Q_DECLARE_METATYPE(QList<QSslCertificate>) Q_DECLARE_METATYPE(QSslKey) -Q_DECLARE_METATYPE(QVector<QSslError>) QT_BEGIN_NAMESPACE diff --git a/tests/auto/network/ssl/qdtlscookie/CMakeLists.txt b/tests/auto/network/ssl/qdtlscookie/CMakeLists.txt new file mode 100644 index 0000000000..827716c3b7 --- /dev/null +++ b/tests/auto/network/ssl/qdtlscookie/CMakeLists.txt @@ -0,0 +1,21 @@ +# Generated from qdtlscookie.pro. + +##################################################################### +## tst_qdtlscookie Test: +##################################################################### + +add_qt_test(tst_qdtlscookie + SOURCES + tst_qdtlscookie.cpp + PUBLIC_LIBRARIES + Qt::NetworkPrivate +) + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:qdtlscookie.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "debug" + +#### Keys ignored in scope 4:.:.:qdtlscookie.pro:else: +# DESTDIR = "release" diff --git a/tests/auto/network/ssl/qocsp/CMakeLists.txt b/tests/auto/network/ssl/qocsp/CMakeLists.txt new file mode 100644 index 0000000000..399711f9a0 --- /dev/null +++ b/tests/auto/network/ssl/qocsp/CMakeLists.txt @@ -0,0 +1,22 @@ +# Generated from qocsp.pro. + +##################################################################### +## tst_qocsp Test: +##################################################################### + +add_qt_test(tst_qocsp + SOURCES + tst_qocsp.cpp + PUBLIC_LIBRARIES + Qt::Network + Qt::NetworkPrivate +) + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:qocsp.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "debug" + +#### Keys ignored in scope 4:.:.:qocsp.pro:else: +# DESTDIR = "release" diff --git a/tests/auto/network/ssl/qocsp/tst_qocsp.cpp b/tests/auto/network/ssl/qocsp/tst_qocsp.cpp index f877dcab2d..519ae5c720 100644 --- a/tests/auto/network/ssl/qocsp/tst_qocsp.cpp +++ b/tests/auto/network/ssl/qocsp/tst_qocsp.cpp @@ -60,7 +60,6 @@ using VectorOfErrors = QT_PREPEND_NAMESPACE(QVector<SslError>); using Latin1String = QT_PREPEND_NAMESPACE(QLatin1String); Q_DECLARE_METATYPE(SslError) -Q_DECLARE_METATYPE(VectorOfErrors) Q_DECLARE_METATYPE(Latin1String) QT_BEGIN_NAMESPACE diff --git a/tests/auto/network/ssl/qpassworddigestor/CMakeLists.txt b/tests/auto/network/ssl/qpassworddigestor/CMakeLists.txt new file mode 100644 index 0000000000..e0997fc26e --- /dev/null +++ b/tests/auto/network/ssl/qpassworddigestor/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qpassworddigestor.pro. + +##################################################################### +## tst_qpassworddigestor Test: +##################################################################### + +add_qt_test(tst_qpassworddigestor + SOURCES + tst_qpassworddigestor.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/ssl/qsslcertificate/.prev_CMakeLists.txt b/tests/auto/network/ssl/qsslcertificate/.prev_CMakeLists.txt new file mode 100644 index 0000000000..1509c2e809 --- /dev/null +++ b/tests/auto/network/ssl/qsslcertificate/.prev_CMakeLists.txt @@ -0,0 +1,31 @@ +# Generated from qsslcertificate.pro. + +##################################################################### +## tst_qsslcertificate Test: +##################################################################### + +# Collect test data +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + certificates/*) +list(APPEND test_data ${test_data_glob}) +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + more-certificates/*) +list(APPEND test_data ${test_data_glob}) +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + verify-certs/*) +list(APPEND test_data ${test_data_glob}) +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + pkcs12/*) +list(APPEND test_data ${test_data_glob}) + +add_qt_test(tst_qsslcertificate + SOURCES + tst_qsslcertificate.cpp + PUBLIC_LIBRARIES + Qt::Network + TESTDATA ${test_data} +) diff --git a/tests/auto/network/ssl/qsslcertificate/CMakeLists.txt b/tests/auto/network/ssl/qsslcertificate/CMakeLists.txt new file mode 100644 index 0000000000..4b8fefc499 --- /dev/null +++ b/tests/auto/network/ssl/qsslcertificate/CMakeLists.txt @@ -0,0 +1,38 @@ +# Generated from qsslcertificate.pro. + +##################################################################### +## tst_qsslcertificate Test: +##################################################################### + +# special case begin +# This test requires private tests to properly build +if (NOT QT_FEATURE_private_tests) + return() +endif() +# special case end + +# Collect test data +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + certificates/*) +list(APPEND test_data ${test_data_glob}) +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + more-certificates/*) +list(APPEND test_data ${test_data_glob}) +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + verify-certs/*) +list(APPEND test_data ${test_data_glob}) +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + pkcs12/*) +list(APPEND test_data ${test_data_glob}) + +add_qt_test(tst_qsslcertificate + SOURCES + tst_qsslcertificate.cpp + PUBLIC_LIBRARIES + Qt::Network + TESTDATA ${test_data} +) diff --git a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp index 6cd730bd38..0611deb184 100644 --- a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp +++ b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp @@ -84,8 +84,6 @@ private slots: void toPemOrDer_data(); void toPemOrDer(); void fromDevice(); - void fromPath_data(); - void fromPath(); void fromPath_qregularexpression_data(); void fromPath_qregularexpression(); void certInfo(); @@ -128,24 +126,25 @@ void tst_QSslCertificate::initTestCase() QDir dir(testDataDir + "certificates"); QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::Readable); - QRegExp rxCert(QLatin1String("^.+\\.(pem|der)$")); - QRegExp rxSan(QLatin1String("^(.+\\.(?:pem|der))\\.san$")); - QRegExp rxPubKey(QLatin1String("^(.+\\.(?:pem|der))\\.pubkey$")); - QRegExp rxDigest(QLatin1String("^(.+\\.(?:pem|der))\\.digest-(md5|sha1)$")); + QRegularExpression rxCert(QLatin1String("^.+\\.(pem|der)$")); + QRegularExpression rxSan(QLatin1String("^(.+\\.(?:pem|der))\\.san$")); + QRegularExpression rxPubKey(QLatin1String("^(.+\\.(?:pem|der))\\.pubkey$")); + QRegularExpression rxDigest(QLatin1String("^(.+\\.(?:pem|der))\\.digest-(md5|sha1)$")); + QRegularExpressionMatch match; foreach (QFileInfo fileInfo, fileInfoList) { - if (rxCert.indexIn(fileInfo.fileName()) >= 0) + if ((match = rxCert.match(fileInfo.fileName())).hasMatch()) certInfoList << CertInfo(fileInfo, - rxCert.cap(1) == QLatin1String("pem") ? QSsl::Pem : QSsl::Der); - if (rxSan.indexIn(fileInfo.fileName()) >= 0) - subjAltNameMap.insert(rxSan.cap(1), fileInfo.absoluteFilePath()); - if (rxPubKey.indexIn(fileInfo.fileName()) >= 0) - pubkeyMap.insert(rxPubKey.cap(1), fileInfo.absoluteFilePath()); - if (rxDigest.indexIn(fileInfo.fileName()) >= 0) { - if (rxDigest.cap(2) == QLatin1String("md5")) - md5Map.insert(rxDigest.cap(1), fileInfo.absoluteFilePath()); + match.captured(1) == QLatin1String("pem") ? QSsl::Pem : QSsl::Der); + if ((match = rxSan.match(fileInfo.fileName())).hasMatch()) + subjAltNameMap.insert(match.captured(1), fileInfo.absoluteFilePath()); + if ((match = rxPubKey.match(fileInfo.fileName())).hasMatch()) + pubkeyMap.insert(match.captured(1), fileInfo.absoluteFilePath()); + if ((match = rxDigest.match(fileInfo.fileName())).hasMatch()) { + if (match.captured(2) == QLatin1String("md5")) + md5Map.insert(match.captured(1), fileInfo.absoluteFilePath()); else - sha1Map.insert(rxDigest.cap(1), fileInfo.absoluteFilePath()); + sha1Map.insert(match.captured(1), fileInfo.absoluteFilePath()); } } } @@ -340,11 +339,12 @@ void tst_QSslCertificate::digest_data() static QByteArray convertDigest(const QByteArray &input) { QByteArray result; - QRegExp rx(QLatin1String("(?:=|:)([0-9A-Fa-f]{2})")); + QRegularExpression rx(QLatin1String("(?:=|:)([0-9A-Fa-f]{2})")); + QRegularExpressionMatch match; int pos = 0; - while ((pos = rx.indexIn(input, pos)) != -1) { - result.append(rx.cap(1).toLatin1()); - pos += rx.matchedLength(); + while ((match = rx.match(input, pos)).hasMatch()) { + result.append(match.captured(1).toLatin1()); + pos = match.capturedEnd(); } return QByteArray::fromHex(result); } @@ -420,16 +420,17 @@ void tst_QSslCertificate::subjectAlternativeNames() } // verify that each entry in fileContents is present in subjAltNames - QRegExp rx(QLatin1String("(email|DNS):([^,\\r\\n]+)")); - for (int pos = 0; (pos = rx.indexIn(fileContents, pos)) != -1; pos += rx.matchedLength()) { + QRegularExpression rx(QLatin1String("(email|DNS):([^,\\r\\n]+)")); + QRegularExpressionMatch match; + for (int pos = 0; (match = rx.match(fileContents, pos)).hasMatch(); pos = match.capturedEnd()) { QSsl::AlternativeNameEntryType key; - if (rx.cap(1) == QLatin1String("email")) + if (match.captured(1) == QLatin1String("email")) key = QSsl::EmailEntry; - else if (rx.cap(1) == QLatin1String("DNS")) + else if (match.captured(1) == QLatin1String("DNS")) key = QSsl::DnsEntry; else QFAIL("unsupported alternative name type"); - QVERIFY(altSubjectNames.contains(key, rx.cap(2))); + QVERIFY(altSubjectNames.contains(key, match.captured(2))); } } @@ -545,88 +546,6 @@ void tst_QSslCertificate::fromDevice() QVERIFY(certs.isEmpty()); } -void tst_QSslCertificate::fromPath_data() -{ - QTest::addColumn<QString>("path"); - QTest::addColumn<int>("syntax"); - QTest::addColumn<bool>("pemencoding"); - QTest::addColumn<int>("numCerts"); - - QTest::newRow("empty fixed pem") << QString() << int(QRegExp::FixedString) << true << 0; - QTest::newRow("empty fixed der") << QString() << int(QRegExp::FixedString) << false << 0; - QTest::newRow("empty regexp pem") << QString() << int(QRegExp::RegExp) << true << 0; - QTest::newRow("empty regexp der") << QString() << int(QRegExp::RegExp) << false << 0; - QTest::newRow("empty wildcard pem") << QString() << int(QRegExp::Wildcard) << true << 0; - QTest::newRow("empty wildcard der") << QString() << int(QRegExp::Wildcard) << false << 0; - QTest::newRow("\"certificates\" fixed pem") << (testDataDir + "certificates") << int(QRegExp::FixedString) << true << 0; - QTest::newRow("\"certificates\" fixed der") << (testDataDir + "certificates") << int(QRegExp::FixedString) << false << 0; - QTest::newRow("\"certificates\" regexp pem") << (testDataDir + "certificates") << int(QRegExp::RegExp) << true << 0; - QTest::newRow("\"certificates\" regexp der") << (testDataDir + "certificates") << int(QRegExp::RegExp) << false << 0; - QTest::newRow("\"certificates\" wildcard pem") << (testDataDir + "certificates") << int(QRegExp::Wildcard) << true << 0; - QTest::newRow("\"certificates\" wildcard der") << (testDataDir + "certificates") << int(QRegExp::Wildcard) << false << 0; - QTest::newRow("\"certificates/cert.pem\" fixed pem") << (testDataDir + "certificates/cert.pem") << int(QRegExp::FixedString) << true << 1; - QTest::newRow("\"certificates/cert.pem\" fixed der") << (testDataDir + "certificates/cert.pem") << int(QRegExp::FixedString) << false << 0; - QTest::newRow("\"certificates/cert.pem\" regexp pem") << (testDataDir + "certificates/cert.pem") << int(QRegExp::RegExp) << true << 1; - QTest::newRow("\"certificates/cert.pem\" regexp der") << (testDataDir + "certificates/cert.pem") << int(QRegExp::RegExp) << false << 0; - QTest::newRow("\"certificates/cert.pem\" wildcard pem") << (testDataDir + "certificates/cert.pem") << int(QRegExp::Wildcard) << true << 1; - QTest::newRow("\"certificates/cert.pem\" wildcard der") << (testDataDir + "certificates/cert.pem") << int(QRegExp::Wildcard) << false << 0; - QTest::newRow("\"certificates/*\" fixed pem") << (testDataDir + "certificates/*") << int(QRegExp::FixedString) << true << 0; - QTest::newRow("\"certificates/*\" fixed der") << (testDataDir + "certificates/*") << int(QRegExp::FixedString) << false << 0; - QTest::newRow("\"certificates/*\" regexp pem") << (testDataDir + "certificates/*") << int(QRegExp::RegExp) << true << 0; - QTest::newRow("\"certificates/*\" regexp der") << (testDataDir + "certificates/*") << int(QRegExp::RegExp) << false << 0; - QTest::newRow("\"certificates/*\" wildcard pem") << (testDataDir + "certificates/*") << int(QRegExp::Wildcard) << true << 7; - QTest::newRow("\"certificates/ca*\" wildcard pem") << (testDataDir + "certificates/ca*") << int(QRegExp::Wildcard) << true << 1; - QTest::newRow("\"certificates/cert*\" wildcard pem") << (testDataDir + "certificates/cert*") << int(QRegExp::Wildcard) << true << 4; - QTest::newRow("\"certificates/cert-[sure]*\" wildcard pem") << (testDataDir + "certificates/cert-[sure]*") << int(QRegExp::Wildcard) << true << 3; - QTest::newRow("\"certificates/cert-[not]*\" wildcard pem") << (testDataDir + "certificates/cert-[not]*") << int(QRegExp::Wildcard) << true << 0; - QTest::newRow("\"certificates/*\" wildcard der") << (testDataDir + "certificates/*") << int(QRegExp::Wildcard) << false << 2; - QTest::newRow("\"c*/c*.pem\" fixed pem") << (testDataDir + "c*/c*.pem") << int(QRegExp::FixedString) << true << 0; - QTest::newRow("\"c*/c*.pem\" fixed der") << (testDataDir + "c*/c*.pem") << int(QRegExp::FixedString) << false << 0; - QTest::newRow("\"c*/c*.pem\" regexp pem") << (testDataDir + "c*/c*.pem") << int(QRegExp::RegExp) << true << 0; - QTest::newRow("\"c*/c*.pem\" regexp der") << (testDataDir + "c*/c*.pem") << int(QRegExp::RegExp) << false << 0; - QTest::newRow("\"c*/c*.pem\" wildcard pem") << (testDataDir + "c*/c*.pem") << int(QRegExp::Wildcard) << true << 5; - QTest::newRow("\"c*/c*.pem\" wildcard der") << (testDataDir + "c*/c*.pem") << int(QRegExp::Wildcard) << false << 0; - QTest::newRow("\"d*/c*.pem\" fixed pem") << (testDataDir + "d*/c*.pem") << int(QRegExp::FixedString) << true << 0; - QTest::newRow("\"d*/c*.pem\" fixed der") << (testDataDir + "d*/c*.pem") << int(QRegExp::FixedString) << false << 0; - QTest::newRow("\"d*/c*.pem\" regexp pem") << (testDataDir + "d*/c*.pem") << int(QRegExp::RegExp) << true << 0; - QTest::newRow("\"d*/c*.pem\" regexp der") << (testDataDir + "d*/c*.pem") << int(QRegExp::RegExp) << false << 0; - QTest::newRow("\"d*/c*.pem\" wildcard pem") << (testDataDir + "d*/c*.pem") << int(QRegExp::Wildcard) << true << 0; - QTest::newRow("\"d*/c*.pem\" wildcard der") << (testDataDir + "d*/c*.pem") << int(QRegExp::Wildcard) << false << 0; - QTest::newRow("\"c.*/c.*.pem\" fixed pem") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::FixedString) << true << 0; - QTest::newRow("\"c.*/c.*.pem\" fixed der") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::FixedString) << false << 0; - QTest::newRow("\"c.*/c.*.pem\" regexp pem") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::RegExp) << true << 5; - QTest::newRow("\"c.*/c.*.pem\" regexp der") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::RegExp) << false << 0; - QTest::newRow("\"c.*/c.*.pem\" wildcard pem") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::Wildcard) << true << 0; - QTest::newRow("\"c.*/c.*.pem\" wildcard der") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::Wildcard) << false << 0; - QTest::newRow("\"d.*/c.*.pem\" fixed pem") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::FixedString) << true << 0; - QTest::newRow("\"d.*/c.*.pem\" fixed der") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::FixedString) << false << 0; - QTest::newRow("\"d.*/c.*.pem\" regexp pem") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::RegExp) << true << 0; - QTest::newRow("\"d.*/c.*.pem\" regexp der") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::RegExp) << false << 0; - QTest::newRow("\"d.*/c.*.pem\" wildcard pem") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::Wildcard) << true << 0; - QTest::newRow("\"d.*/c.*.pem\" wildcard der") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::Wildcard) << false << 0; -#ifdef Q_OS_LINUX - QTest::newRow("absolute path wildcard pem") << (testDataDir + "certificates/*.pem") << int(QRegExp::Wildcard) << true << 7; -#endif - - QTest::newRow("trailing-whitespace") << (testDataDir + "more-certificates/trailing-whitespace.pem") << int(QRegExp::FixedString) << true << 1; - QTest::newRow("no-ending-newline") << (testDataDir + "more-certificates/no-ending-newline.pem") << int(QRegExp::FixedString) << true << 1; - QTest::newRow("malformed-just-begin") << (testDataDir + "more-certificates/malformed-just-begin.pem") << int(QRegExp::FixedString) << true << 0; - QTest::newRow("malformed-just-begin-no-newline") << (testDataDir + "more-certificates/malformed-just-begin-no-newline.pem") << int(QRegExp::FixedString) << true << 0; -} - -void tst_QSslCertificate::fromPath() -{ - QFETCH(QString, path); - QFETCH(int, syntax); - QFETCH(bool, pemencoding); - QFETCH(int, numCerts); - - QCOMPARE(QSslCertificate::fromPath(path, - pemencoding ? QSsl::Pem : QSsl::Der, - QRegExp::PatternSyntax(syntax)).size(), - numCerts); -} - void tst_QSslCertificate::fromPath_qregularexpression_data() { QTest::addColumn<QString>("path"); diff --git a/tests/auto/network/ssl/qsslcipher/CMakeLists.txt b/tests/auto/network/ssl/qsslcipher/CMakeLists.txt new file mode 100644 index 0000000000..44e0e78220 --- /dev/null +++ b/tests/auto/network/ssl/qsslcipher/CMakeLists.txt @@ -0,0 +1,21 @@ +# Generated from qsslcipher.pro. + +##################################################################### +## tst_qsslcipher Test: +##################################################################### + +add_qt_test(tst_qsslcipher + SOURCES + tst_qsslcipher.cpp + PUBLIC_LIBRARIES + Qt::Network +) + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:qsslcipher.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "debug" + +#### Keys ignored in scope 4:.:.:qsslcipher.pro:else: +# DESTDIR = "release" diff --git a/tests/auto/network/ssl/qssldiffiehellmanparameters/CMakeLists.txt b/tests/auto/network/ssl/qssldiffiehellmanparameters/CMakeLists.txt new file mode 100644 index 0000000000..f6785a6736 --- /dev/null +++ b/tests/auto/network/ssl/qssldiffiehellmanparameters/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qssldiffiehellmanparameters.pro. + +##################################################################### +## tst_qssldiffiehellmanparameters Test: +##################################################################### + +add_qt_test(tst_qssldiffiehellmanparameters + SOURCES + tst_qssldiffiehellmanparameters.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/ssl/qsslellipticcurve/CMakeLists.txt b/tests/auto/network/ssl/qsslellipticcurve/CMakeLists.txt new file mode 100644 index 0000000000..4df88ff305 --- /dev/null +++ b/tests/auto/network/ssl/qsslellipticcurve/CMakeLists.txt @@ -0,0 +1,12 @@ +# Generated from qsslellipticcurve.pro. + +##################################################################### +## tst_qsslellipticcurve Test: +##################################################################### + +add_qt_test(tst_qsslellipticcurve + SOURCES + tst_qsslellipticcurve.cpp + PUBLIC_LIBRARIES + Qt::Network +) diff --git a/tests/auto/network/ssl/qsslerror/CMakeLists.txt b/tests/auto/network/ssl/qsslerror/CMakeLists.txt new file mode 100644 index 0000000000..e8b07ab049 --- /dev/null +++ b/tests/auto/network/ssl/qsslerror/CMakeLists.txt @@ -0,0 +1,21 @@ +# Generated from qsslerror.pro. + +##################################################################### +## tst_qsslerror Test: +##################################################################### + +add_qt_test(tst_qsslerror + SOURCES + tst_qsslerror.cpp + PUBLIC_LIBRARIES + Qt::Network +) + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:qsslerror.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "debug" + +#### Keys ignored in scope 4:.:.:qsslerror.pro:else: +# DESTDIR = "release" diff --git a/tests/auto/network/ssl/qsslkey/CMakeLists.txt b/tests/auto/network/ssl/qsslkey/CMakeLists.txt new file mode 100644 index 0000000000..04634d1997 --- /dev/null +++ b/tests/auto/network/ssl/qsslkey/CMakeLists.txt @@ -0,0 +1,32 @@ +# Generated from qsslkey.pro. + +##################################################################### +## tst_qsslkey Test: +##################################################################### + +# Collect test data +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + keys/*) +list(APPEND test_data ${test_data_glob}) +file(GLOB_RECURSE test_data_glob + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + rsa-*.pem) +list(APPEND test_data ${test_data_glob}) + +add_qt_test(tst_qsslkey + SOURCES + tst_qsslkey.cpp + PUBLIC_LIBRARIES + Qt::Network + TESTDATA ${test_data} +) + +## Scopes: +##################################################################### + +extend_target(tst_qsslkey CONDITION QT_FEATURE_private_tests + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) diff --git a/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp b/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp index f94756ed73..1807315061 100644 --- a/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp +++ b/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp @@ -112,17 +112,18 @@ void tst_QSslKey::initTestCase() QDir dir(testDataDir + "keys"); const QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::Readable); - QRegExp rx(QLatin1String("^(rsa|dsa|dh|ec)-(pub|pri)-(\\d+)-?[\\w-]*\\.(pem|der)$")); + QRegularExpression rx(QLatin1String("^(rsa|dsa|dh|ec)-(pub|pri)-(\\d+)-?[\\w-]*\\.(pem|der)$")); for (const QFileInfo &fileInfo : fileInfoList) { - if (rx.indexIn(fileInfo.fileName()) >= 0) { + auto match = rx.match(fileInfo.fileName()); + if (match.hasMatch()) { keyInfoList << KeyInfo( fileInfo, - rx.cap(1) == QLatin1String("rsa") ? QSsl::Rsa : - rx.cap(1) == QLatin1String("dsa") ? QSsl::Dsa : - rx.cap(1) == QLatin1String("dh") ? QSsl::Dh : QSsl::Ec, - rx.cap(2) == QLatin1String("pub") ? QSsl::PublicKey : QSsl::PrivateKey, - rx.cap(3).toInt(), - rx.cap(4) == QLatin1String("pem") ? QSsl::Pem : QSsl::Der); + match.captured(1) == QLatin1String("rsa") ? QSsl::Rsa : + match.captured(1) == QLatin1String("dsa") ? QSsl::Dsa : + match.captured(1) == QLatin1String("dh") ? QSsl::Dh : QSsl::Ec, + match.captured(2) == QLatin1String("pub") ? QSsl::PublicKey : QSsl::PrivateKey, + match.captured(3).toInt(), + match.captured(4) == QLatin1String("pem") ? QSsl::Pem : QSsl::Der); } } } diff --git a/tests/auto/network/ssl/qsslsocket/CMakeLists.txt b/tests/auto/network/ssl/qsslsocket/CMakeLists.txt new file mode 100644 index 0000000000..99ec2ad823 --- /dev/null +++ b/tests/auto/network/ssl/qsslsocket/CMakeLists.txt @@ -0,0 +1,38 @@ +# Generated from qsslsocket.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qsslsocket Test: +##################################################################### + +# Collect test data +list(APPEND test_data "certs") + +add_qt_test(tst_qsslsocket + SOURCES + tst_qsslsocket.cpp + DEFINES + SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/\\\" + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate + TESTDATA ${test_data} +) + +#### Keys ignored in scope 1:.:.:qsslsocket.pro:<TRUE>: +# _REQUIREMENTS = "qtConfig(private_tests)" + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:qsslsocket.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "debug" + +#### Keys ignored in scope 4:.:.:qsslsocket.pro:else: +# DESTDIR = "release" + +#### Keys ignored in scope 5:.:.:qsslsocket.pro:LINUX: +# QT_TEST_SERVER_LIST = "squid" "danted" "cyrus" "apache2" "echo" diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index 2d71bdfc26..8b5b4156bb 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -73,7 +73,7 @@ typedef QSharedPointer<QSslSocket> QSslSocketPtr; #else #define FLUKE_CERTIFICATE_ERROR QSslError::CertificateUntrusted #endif -#endif // QT_NO_SSL +#endif // QT_NO_OPENSSL // Detect ALPN (Application-Layer Protocol Negotiation) support #undef ALPN_SUPPORTED // Undef the variable first to be safe @@ -259,10 +259,14 @@ private slots: void signatureAlgorithm(); #endif - void disabledProtocols_data(); - void disabledProtocols(); + void unsupportedProtocols_data(); + void unsupportedProtocols(); void oldErrorsOnSocketReuse(); +#if QT_CONFIG(openssl) + void alertMissingCertificate(); + void alertInvalidCertificate(); +#endif // openssl void setEmptyDefaultConfiguration(); // this test should be last @@ -337,6 +341,8 @@ tst_QSslSocket::tst_QSslSocket() qRegisterMetaType<QSslError>("QSslError"); qRegisterMetaType<QAbstractSocket::SocketState>("QAbstractSocket::SocketState"); qRegisterMetaType<QAbstractSocket::SocketError>("QAbstractSocket::SocketError"); + qRegisterMetaType<QAlertLevel>("QAlertLevel"); + qRegisterMetaType<QAlertType>("QAlertType"); #ifndef QT_NO_OPENSSL qRegisterMetaType<QSslPreSharedKeyAuthenticator *>(); @@ -1180,25 +1186,6 @@ void tst_QSslSocket::protocol() QCOMPARE(socket->protocol(), QSsl::AnyProtocol); socket->abort(); } - { - // qt-test-server allows TlsV1, so it allows TlsV1SslV3 - socket->setProtocol(QSsl::TlsV1SslV3); - QCOMPARE(socket->protocol(), QSsl::TlsV1SslV3); - socket->connectToHostEncrypted(QtNetworkSettings::httpServerName(), 443); - if (setProxy && !socket->waitForEncrypted()) - QSKIP("Skipping flaky test - See QTBUG-29941"); - QCOMPARE(socket->protocol(), QSsl::TlsV1SslV3); - socket->abort(); - QCOMPARE(socket->protocol(), QSsl::TlsV1SslV3); - socket->connectToHost(QtNetworkSettings::httpServerName(), 443); - if (setProxy && !socket->waitForConnected()) - QSKIP("Skipping flaky test - See QTBUG-29941"); - socket->startClientEncryption(); - if (setProxy && !socket->waitForEncrypted()) - QSKIP("Skipping flaky test - See QTBUG-29941"); - QCOMPARE(socket->protocol(), QSsl::TlsV1SslV3); - socket->abort(); - } } class SslServer : public QTcpServer @@ -1230,6 +1217,8 @@ public: signals: void socketError(QAbstractSocket::SocketError); + void gotAlert(QAlertLevel level, QAlertType type, const QString &message); + void alertSent(QAlertLevel level, QAlertType type, const QString &message); protected: void incomingConnection(qintptr socketDescriptor) @@ -1241,6 +1230,8 @@ protected: if (ignoreSslErrors) connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(ignoreErrorSlot())); connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), this, SIGNAL(socketError(QAbstractSocket::SocketError))); + connect(socket, &QSslSocket::alertReceived, this, &SslServer::gotAlert); + connect(socket, &QSslSocket::alertSent, this, &SslServer::alertSent); QFile file(m_keyFile); QVERIFY(file.open(QIODevice::ReadOnly)); @@ -1304,20 +1295,13 @@ void tst_QSslSocket::protocolServerSide_data() QTest::addColumn<bool>("works"); QTest::newRow("tls1.0-tls1.0") << QSsl::TlsV1_0 << QSsl::TlsV1_0 << true; - QTest::newRow("tls1ssl3-tls1ssl3") << QSsl::TlsV1SslV3 << QSsl::TlsV1SslV3 << true; QTest::newRow("any-any") << QSsl::AnyProtocol << QSsl::AnyProtocol << true; QTest::newRow("secure-secure") << QSsl::SecureProtocols << QSsl::SecureProtocols << true; - QTest::newRow("tls1-tls1ssl3") << QSsl::TlsV1_0 << QSsl::TlsV1SslV3 << true; QTest::newRow("tls1.0-secure") << QSsl::TlsV1_0 << QSsl::SecureProtocols << true; QTest::newRow("tls1.0-any") << QSsl::TlsV1_0 << QSsl::AnyProtocol << true; - QTest::newRow("tls1ssl3-tls1.0") << QSsl::TlsV1SslV3 << QSsl::TlsV1_0 << true; - QTest::newRow("tls1ssl3-secure") << QSsl::TlsV1SslV3 << QSsl::SecureProtocols << true; - QTest::newRow("tls1ssl3-any") << QSsl::TlsV1SslV3 << QSsl::AnyProtocol << true; - QTest::newRow("secure-tls1.0") << QSsl::SecureProtocols << QSsl::TlsV1_0 << true; - QTest::newRow("secure-tls1ssl3") << QSsl::SecureProtocols << QSsl::TlsV1SslV3 << true; QTest::newRow("secure-any") << QSsl::SecureProtocols << QSsl::AnyProtocol << true; QTest::newRow("tls1.0orlater-tls1.0") << QSsl::TlsV1_0OrLater << QSsl::TlsV1_0 << true; @@ -1349,7 +1333,6 @@ void tst_QSslSocket::protocolServerSide_data() #endif // TLS1_3_VERSION QTest::newRow("any-tls1.0") << QSsl::AnyProtocol << QSsl::TlsV1_0 << true; - QTest::newRow("any-tls1ssl3") << QSsl::AnyProtocol << QSsl::TlsV1SslV3 << true; QTest::newRow("any-secure") << QSsl::AnyProtocol << QSsl::SecureProtocols << true; } @@ -4325,27 +4308,30 @@ void tst_QSslSocket::forwardReadChannelFinished() #endif // QT_NO_OPENSSL -void tst_QSslSocket::disabledProtocols_data() +void tst_QSslSocket::unsupportedProtocols_data() { - QTest::addColumn<QSsl::SslProtocol>("disabledProtocol"); - QTest::newRow("SslV2") << QSsl::SslV2; - QTest::newRow("SslV3") << QSsl::SslV3; + QTest::addColumn<QSsl::SslProtocol>("unsupportedProtocol"); + QTest::newRow("DtlsV1_0") << QSsl::DtlsV1_0; + QTest::newRow("DtlsV1_2") << QSsl::DtlsV1_2; + QTest::newRow("DtlsV1_0OrLater") << QSsl::DtlsV1_0OrLater; + QTest::newRow("DtlsV1_2OrLater") << QSsl::DtlsV1_2OrLater; + QTest::newRow("UnknownProtocol") << QSsl::UnknownProtocol; } -void tst_QSslSocket::disabledProtocols() +void tst_QSslSocket::unsupportedProtocols() { QFETCH_GLOBAL(const bool, setProxy); if (setProxy) return; - QFETCH(const QSsl::SslProtocol, disabledProtocol); + QFETCH(const QSsl::SslProtocol, unsupportedProtocol); const int timeoutMS = 500; // Test a client socket. { // 0. connectToHostEncrypted: client-side, non-blocking API, error is discovered // early, preventing any real connection from ever starting. QSslSocket socket; - socket.setProtocol(disabledProtocol); + socket.setProtocol(unsupportedProtocol); QCOMPARE(socket.error(), QAbstractSocket::UnknownSocketError); socket.connectToHostEncrypted(QStringLiteral("doesnotmatter.org"), 1010); QCOMPARE(socket.error(), QAbstractSocket::SslInvalidUserDataError); @@ -4363,7 +4349,7 @@ void tst_QSslSocket::disabledProtocols() socket.connectToHost(QHostAddress::LocalHost, server.serverPort()); QVERIFY(socket.waitForConnected(timeoutMS)); - socket.setProtocol(disabledProtocol); + socket.setProtocol(unsupportedProtocol); socket.startClientEncryption(); QCOMPARE(socket.error(), QAbstractSocket::SslInvalidUserDataError); } @@ -4377,7 +4363,7 @@ void tst_QSslSocket::disabledProtocols() // and then calls startServerEncryption() (which must fall). { SslServer server; - server.protocol = disabledProtocol; + server.protocol = unsupportedProtocol; QVERIFY(server.listen()); QTestEventLoop loop; @@ -4442,6 +4428,119 @@ void tst_QSslSocket::oldErrorsOnSocketReuse() #endif // QT_NO_SSL +#if QT_CONFIG(openssl) + +void (QSslSocket::*const tlsErrorSignal)(const QList<QSslError> &) = &QSslSocket::sslErrors; +void (QAbstractSocket::*const socketErrorSignal)(QAbstractSocket::SocketError) = &QAbstractSocket::error; + +void tst_QSslSocket::alertMissingCertificate() +{ + // In this test we want a server to abort the connection due to the failing + // client authentication. The server expected to send an alert before closing + // the connection, and the client expected to receive this alert and report it. + + QFETCH_GLOBAL(const bool, setProxy); + if (setProxy) // Not what we test here, bail out. + return; + + SslServer server; + if (!server.listen(QHostAddress::LocalHost)) + QSKIP("SslServer::listen() returned false"); + + // We want a certificate request to be sent to the client: + server.peerVerifyMode = QSslSocket::VerifyPeer; + // The only way we can force OpenSSL to send an alert - is to use + // a special option (so we fail before handshake is finished): + server.config.setMissingCertificateIsFatal(true); + + QSslSocket clientSocket; + connect(&clientSocket, tlsErrorSignal, [&clientSocket](const QList<QSslError> &errors){ + qDebug() << "ERR"; + clientSocket.ignoreSslErrors(errors); + }); + + QSignalSpy serverSpy(&server, &SslServer::alertSent); + QSignalSpy clientSpy(&clientSocket, &QSslSocket::alertReceived); + + clientSocket.connectToHostEncrypted(server.serverAddress().toString(), server.serverPort()); + + QTestEventLoop runner; + QTimer::singleShot(500, [&runner](){ + runner.exitLoop(); + }); + + int waitFor = 2; + auto earlyQuitter = [&runner, &waitFor](QAbstractSocket::SocketError) { + if (!--waitFor) + runner.exitLoop(); + }; + + // Presumably, RemoteHostClosedError for the client and SslHandshakeError + // for the server: + connect(&clientSocket, socketErrorSignal, earlyQuitter); + connect(&server, &SslServer::socketError, earlyQuitter); + + runner.enterLoopMSecs(1000); + + QVERIFY(serverSpy.count() > 0); + QVERIFY(clientSpy.count() > 0); + QVERIFY(server.socket && !server.socket->isEncrypted()); + QVERIFY(!clientSocket.isEncrypted()); +} + +void tst_QSslSocket::alertInvalidCertificate() +{ + // In this test a client will not ignore verification errors, + // it also will do 'early' checks, meaning the reported and + // not ignored _during_ the hanshake, not after. This ensures + // OpenSSL sends an alert. + QFETCH_GLOBAL(const bool, setProxy); + if (setProxy) // Not what we test here, bail out. + return; + + SslServer server; + if (!server.listen(QHostAddress::LocalHost)) + QSKIP("SslServer::listen() returned false"); + + QSslSocket clientSocket; + auto configuration = QSslConfiguration::defaultConfiguration(); + configuration.setHandshakeMustInterruptOnError(true); + QVERIFY(configuration.handshakeMustInterruptOnError()); + clientSocket.setSslConfiguration(configuration); + + QSignalSpy serverSpy(&server, &SslServer::gotAlert); + QSignalSpy clientSpy(&clientSocket, &QSslSocket::alertSent); + QSignalSpy interruptedSpy(&clientSocket, &QSslSocket::handshakeInterruptedOnError); + + clientSocket.connectToHostEncrypted(server.serverAddress().toString(), server.serverPort()); + + QTestEventLoop runner; + QTimer::singleShot(500, [&runner](){ + runner.exitLoop(); + }); + + int waitFor = 2; + auto earlyQuitter = [&runner, &waitFor](QAbstractSocket::SocketError) { + if (!--waitFor) + runner.exitLoop(); + }; + + // Presumably, RemoteHostClosedError for the server and SslHandshakeError + // for the client: + connect(&clientSocket, socketErrorSignal, earlyQuitter); + connect(&server, &SslServer::socketError, earlyQuitter); + + runner.enterLoopMSecs(1000); + + QVERIFY(serverSpy.count() > 0); + QVERIFY(clientSpy.count() > 0); + QVERIFY(interruptedSpy.count() > 0); + QVERIFY(server.socket && !server.socket->isEncrypted()); + QVERIFY(!clientSocket.isEncrypted()); +} + +#endif // openssl + QTEST_MAIN(tst_QSslSocket) #include "tst_qsslsocket.moc" diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt new file mode 100644 index 0000000000..c377e0a46a --- /dev/null +++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt @@ -0,0 +1,35 @@ +# Generated from qsslsocket_onDemandCertificates_member.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qsslsocket_onDemandCertificates_member Test: +##################################################################### + +add_qt_test(tst_qsslsocket_onDemandCertificates_member + SOURCES + tst_qsslsocket_onDemandCertificates_member.cpp + DEFINES + SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/\\\" + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:qsslsocket_onDemandCertificates_member.pro:<TRUE>: +# _REQUIREMENTS = "qtConfig(private_tests)" +# testcase.timeout = "300" + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:qsslsocket_onDemandCertificates_member.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "debug" + +#### Keys ignored in scope 4:.:.:qsslsocket_onDemandCertificates_member.pro:else: +# DESTDIR = "release" + +#### Keys ignored in scope 5:.:.:qsslsocket_onDemandCertificates_member.pro:LINUX: +# QT_TEST_SERVER_LIST = "squid" "danted" diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt new file mode 100644 index 0000000000..f3a3178879 --- /dev/null +++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt @@ -0,0 +1,34 @@ +# Generated from qsslsocket_onDemandCertificates_static.pro. + +if(NOT QT_FEATURE_private_tests) + return() +endif() + +##################################################################### +## tst_qsslsocket_onDemandCertificates_static Test: +##################################################################### + +add_qt_test(tst_qsslsocket_onDemandCertificates_static + SOURCES + tst_qsslsocket_onDemandCertificates_static.cpp + DEFINES + SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/\\\" + PUBLIC_LIBRARIES + Qt::CorePrivate + Qt::NetworkPrivate +) + +#### Keys ignored in scope 1:.:.:qsslsocket_onDemandCertificates_static.pro:<TRUE>: +# _REQUIREMENTS = "qtConfig(private_tests)" + +## Scopes: +##################################################################### + +#### Keys ignored in scope 3:.:.:qsslsocket_onDemandCertificates_static.pro:(CMAKE_BUILD_TYPE STREQUAL Debug): +# DESTDIR = "debug" + +#### Keys ignored in scope 4:.:.:qsslsocket_onDemandCertificates_static.pro:else: +# DESTDIR = "release" + +#### Keys ignored in scope 5:.:.:qsslsocket_onDemandCertificates_static.pro:LINUX: +# QT_TEST_SERVER_LIST = "squid" "danted" |