From 9329e4e8c7508c2fe1e22e4b8e96abc1ad1ece91 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Mon, 28 Nov 2022 11:06:35 +0100 Subject: tst_QNetworkReply: check whether we actually use six TCP connections in HTTP/1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pick-to: 6.4 6.2 Task-number: QTBUG-25280 Task-number: QTBUG-108215 Change-Id: I5f94866e30f08465943922e3dee5150f37054225 Reviewed-by: MÃ¥rten Nordheim Reviewed-by: Qt CI Bot --- .../access/qnetworkreply/tst_qnetworkreply.cpp | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'tests/auto/network/access') diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index ea8e31c5e6..4c67317e9c 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -64,6 +64,8 @@ Q_DECLARE_METATYPE(QSharedPointer) #endif +#include + #ifdef Q_OS_UNIX # include # include // for getuid() @@ -443,6 +445,8 @@ private Q_SLOTS: void varyingCacheExpiry_data(); void varyingCacheExpiry(); + void amountOfHttp1ConnectionsQtbug25280(); + void dontInsertPartialContentIntoTheCache(); void httpUserAgent(); @@ -8102,6 +8106,48 @@ void tst_QNetworkReply::varyingCacheExpiry() QVERIFY(success); } +class Qtbug25280Server : public MiniHttpServer +{ +public: + Qtbug25280Server(QByteArray qba) : MiniHttpServer(qba, false) {} + QSet receivedSockets; + virtual void reply() + { + // Save sockets in a list + receivedSockets.insert((QTcpSocket*)sender()); + qobject_cast(sender())->write(dataToTransmit); + //qDebug() << "count=" << receivedSockets.count(); + } +}; + +// Also kind of QTBUG-8468 +void tst_QNetworkReply::amountOfHttp1ConnectionsQtbug25280() +{ + const int amount = 6; + QNetworkAccessManager manager; // function local instance + Qtbug25280Server server(tst_QNetworkReply::httpEmpty200Response); + server.doClose = false; + server.multiple = true; + QUrl url(QLatin1String("http://127.0.0.1")); // not "localhost" to prevent "Happy Eyeballs" + // from skewing the counting + url.setPort(server.serverPort()); + constexpr int NumRequests = 200; // send a lot more than we have sockets + int finished = 0; + std::array, NumRequests> replies; + for (auto &reply : replies) { + QNetworkRequest request(url); + reply.reset(manager.get(request)); + QObject::connect(reply.get(), &QNetworkReply::finished, + [&finished] { ++finished; }); + } + QTRY_COMPARE_WITH_TIMEOUT(finished, NumRequests, 60'000); + for (const auto &reply : replies) { + QCOMPARE(reply->error(), QNetworkReply::NoError); + QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); + } + QCOMPARE(server.receivedSockets.size(), amount); +} + void tst_QNetworkReply::dontInsertPartialContentIntoTheCache() { QByteArray reply206 = -- cgit v1.2.3