diff options
author | Markus Goetz <markus@woboq.com> | 2022-11-28 11:06:35 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2022-12-06 07:02:53 +0100 |
commit | 9329e4e8c7508c2fe1e22e4b8e96abc1ad1ece91 (patch) | |
tree | 79aace1861dc5939d17fd746e62ba86c161a58a2 /tests/auto/network/access | |
parent | b3b15f4cafcfc58792da5bcf4e73bf6a5a16ab19 (diff) |
tst_QNetworkReply: check whether we actually use six TCP connections in HTTP/1
Pick-to: 6.4 6.2
Task-number: QTBUG-25280
Task-number: QTBUG-108215
Change-Id: I5f94866e30f08465943922e3dee5150f37054225
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'tests/auto/network/access')
-rw-r--r-- | tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
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<char>) #endif +#include <memory> + #ifdef Q_OS_UNIX # include <sys/types.h> # include <unistd.h> // 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<QTcpSocket*> receivedSockets; + virtual void reply() + { + // Save sockets in a list + receivedSockets.insert((QTcpSocket*)sender()); + qobject_cast<QTcpSocket*>(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<std::unique_ptr<QNetworkReply>, 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 = |