diff options
Diffstat (limited to 'tests/benchmarks/network')
14 files changed, 301 insertions, 15 deletions
diff --git a/tests/benchmarks/network/access/CMakeLists.txt b/tests/benchmarks/network/access/CMakeLists.txt index 88e0b667f7..bc5148af55 100644 --- a/tests/benchmarks/network/access/CMakeLists.txt +++ b/tests/benchmarks/network/access/CMakeLists.txt @@ -2,9 +2,12 @@ # SPDX-License-Identifier: BSD-3-Clause add_subdirectory(qfile_vs_qnetworkaccessmanager) +add_subdirectory(qhttpheaders) add_subdirectory(qnetworkreply) -add_subdirectory(qnetworkreply_from_cache) -add_subdirectory(qnetworkdiskcache) +if(QT_FEATURE_networkdiskcache) + add_subdirectory(qnetworkreply_from_cache) + add_subdirectory(qnetworkdiskcache) +endif() if(QT_FEATURE_private_tests) add_subdirectory(qdecompresshelper) endif() diff --git a/tests/benchmarks/network/access/qdecompresshelper/main.cpp b/tests/benchmarks/network/access/qdecompresshelper/main.cpp index ea85aef42b..7f8b09ef0e 100644 --- a/tests/benchmarks/network/access/qdecompresshelper/main.cpp +++ b/tests/benchmarks/network/access/qdecompresshelper/main.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QtNetwork/private/qdecompresshelper_p.h> @@ -51,13 +51,14 @@ void tst_QDecompressHelper::decompress() file.seek(0); QDecompressHelper helper; helper.setEncoding(encoding); + helper.setDecompressedSafetyCheckThreshold(-1); QVERIFY(helper.isValid()); helper.feed(file.readAll()); qsizetype bytes = 0; + QByteArray out(64 * 1024, Qt::Uninitialized); while (helper.hasData()) { - QByteArray out(64 * 1024, Qt::Uninitialized); qsizetype bytesRead = helper.read(out.data(), out.size()); bytes += bytesRead; } diff --git a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp index de4c68619f..372158163f 100644 --- a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp +++ b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QDebug> #include <qtest.h> #include <QTest> diff --git a/tests/benchmarks/network/access/qhttpheaders/CMakeLists.txt b/tests/benchmarks/network/access/qhttpheaders/CMakeLists.txt new file mode 100644 index 0000000000..6e89259141 --- /dev/null +++ b/tests/benchmarks/network/access/qhttpheaders/CMakeLists.txt @@ -0,0 +1,10 @@ +# Copyright (C) 2024 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +qt_internal_add_benchmark(tst_bench_qhttpheaders + SOURCES + tst_bench_qhttpheaders.cpp + LIBRARIES + Qt::Test + Qt::Network +) diff --git a/tests/benchmarks/network/access/qhttpheaders/tst_bench_qhttpheaders.cpp b/tests/benchmarks/network/access/qhttpheaders/tst_bench_qhttpheaders.cpp new file mode 100644 index 0000000000..424b475b27 --- /dev/null +++ b/tests/benchmarks/network/access/qhttpheaders/tst_bench_qhttpheaders.cpp @@ -0,0 +1,266 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QtNetwork/qhttpheaders.h> + +#include <QtCore/qstring.h> +#include <QTest> + +using namespace Qt::StringLiterals; + +class tst_QHttpHeaders : public QObject +{ + Q_OBJECT +private slots: + void initTestCase(); + + void append_enum(); + void append_string_data(); + void append_string(); + + void contains_enum_data() { setupBasicEnumData(); } + void contains_enum(); + void contains_string_data() { setupBasicStringData(); } + void contains_string(); + + void values_enum_data() { setupBasicEnumData(); } + void values_enum(); + void values_string_data() { setupBasicStringData(); } + void values_string(); + + void combinedValue_enum_data() { setupBasicEnumData(); } + void combinedValue_enum(); + void combinedValue_string_data() { setupBasicStringData(); } + void combinedValue_string(); + + void removeAll_enum_data() { setupBasicEnumData(); } + void removeAll_enum(); + void removeAll_string_data() { setupBasicStringData(); } + void removeAll_string(); + +private: + using WKH = QHttpHeaders::WellKnownHeader; + + void setupBasicEnumData() + { + QTest::addColumn<WKH>("name"); + QTest::addColumn<bool>("exists"); + + QTest::newRow("Nonexistent enum") << WKH::CDNLoop << false; + QTest::newRow("Existent enum") << WKH::Accept << true; + } + + void setupBasicStringData() + { + QTest::addColumn<QString>("name"); + QTest::addColumn<bool>("exists"); + + QTest::newRow("Nonexistent string") << "cdn-loop" << false; + QTest::newRow("Existent wellknown string") << "accept" << true; + QTest::newRow("Existent custom string") << "customheader" << true; + } + + const QString customNameLowCase = u"customm-name"_s; // Not a typo, same length as knownName + const QString customNameMixCase = u"Customm-Name"_s; + const QString knownNameLowCase = u"content-type"_s; + const QString knownNameMixCase = u"Content-Type"_s; + static constexpr QAnyStringView value1{"value1"}; + static constexpr QAnyStringView value2{"value2"}; + static constexpr QAnyStringView value3{"value3"}; + static constexpr QAnyStringView value4{"value4"}; + + QHttpHeaders m_complexHeaders; + QHttpHeaders m_simpleHeaders; +}; + +void tst_QHttpHeaders::initTestCase() +{ + // A mix of known and custom headers in non-alphabetical order. + // "accept" (wellknown header) and "customheader" (custom header) + // have four values and in same order: value3, value1, value2, value4 + m_complexHeaders.append(WKH::Upgrade, value1); + m_complexHeaders.append("timeout", value1); + m_complexHeaders.append(WKH::KeepAlive, value1); + m_complexHeaders.append("nel", value1); + m_complexHeaders.append(WKH::Date, value1); + m_complexHeaders.append("accept", value3); + m_complexHeaders.append("customheader", value3); + m_complexHeaders.append(WKH::SoapAction, value1); + m_complexHeaders.append("foobar", value1); + m_complexHeaders.append(WKH::Accept, value1); + m_complexHeaders.append("customheader", value1); + m_complexHeaders.append(WKH::Cookie, value1); + m_complexHeaders.append("cookie", value1); + m_complexHeaders.append(WKH::ProxyStatus, value1); + m_complexHeaders.append("cookie", value1); + m_complexHeaders.append(WKH::Accept, value2); + m_complexHeaders.append("customheader", value2); + m_complexHeaders.append(WKH::Authorization, value1); + m_complexHeaders.append("content-type", value1); + m_complexHeaders.append(WKH::Destination, value1); + m_complexHeaders.append("rover", value1); + m_complexHeaders.append("accept", value4); + m_complexHeaders.append("customheader", value4); + m_complexHeaders.append(WKH::Range, value1); + m_complexHeaders.append("destination", value1); + m_complexHeaders.append(WKH::Location, value1); + m_complexHeaders.append("font", value1); + + // Simple headers with one value-less entry; having at least one entry ensures + // we don't include initial memory allocation into a test, and having + // as few as possible reduces cost of copying (header re-set) + m_simpleHeaders.append(WKH::Accept, ""); +} + +void tst_QHttpHeaders::append_enum() +{ + QHttpHeaders headers; + QBENCHMARK { + headers = m_simpleHeaders; // (Re-)set as we'll modify the headers + headers.append(WKH::Link, value1); + } + QCOMPARE(headers.size(), m_simpleHeaders.size() + 1); + QCOMPARE(headers.nameAt(headers.size() - 1), "link"); +} + +void tst_QHttpHeaders::append_string_data() +{ + QTest::addColumn<QString>("name"); + QTest::newRow("Custom lowcase string") << customNameLowCase; + QTest::newRow("WellKnown lowcase string") << knownNameLowCase; + QTest::newRow("Custom mixcase string") << customNameMixCase; + QTest::newRow("WellKnown mixcase string") << knownNameMixCase; +} + +void tst_QHttpHeaders::append_string() +{ + QFETCH(QString, name); + + QHttpHeaders headers; + QBENCHMARK { + headers = m_simpleHeaders; // (Re-)set as we'll modify the headers + headers.append(name, value1); + } + QCOMPARE(headers.size(), m_simpleHeaders.size() + 1); + QCOMPARE(headers.nameAt(headers.size() - 1), name.toLower()); +} + +void tst_QHttpHeaders::contains_enum() +{ + QFETCH(WKH, name); + QFETCH(bool, exists); + + bool result; + QBENCHMARK { + result = m_complexHeaders.contains(name); + } + QCOMPARE(result, exists); +} + +void tst_QHttpHeaders::contains_string() +{ + QFETCH(QString, name); + QFETCH(bool, exists); + + bool result; + QBENCHMARK { + result = m_complexHeaders.contains(name); + } + QCOMPARE(result, exists); +} + +void tst_QHttpHeaders::values_enum() +{ + QFETCH(WKH, name); + QFETCH(bool, exists); + + QList<QByteArray> result; + const QList<QByteArray> expectedResult{"value3", "value1", "value2", "value4"}; + QBENCHMARK { + result = m_complexHeaders.values(name); + } + if (exists) + QCOMPARE(result, expectedResult); + else + QVERIFY(result.isEmpty()); +} + +void tst_QHttpHeaders::values_string() +{ + QFETCH(QString, name); + QFETCH(bool, exists); + + QList<QByteArray> result; + const QList<QByteArray> expectedResult{"value3", "value1", "value2", "value4"}; + QBENCHMARK { + result = m_complexHeaders.values(name); + } + if (exists) + QCOMPARE(result, expectedResult); + else + QVERIFY(result.isEmpty()); +} + +void tst_QHttpHeaders::combinedValue_enum() +{ + QFETCH(WKH, name); + QFETCH(bool, exists); + + QByteArray result; + constexpr QByteArrayView expectedResult = "value3, value1, value2, value4"; + QBENCHMARK { + result = m_complexHeaders.combinedValue(name); + } + if (exists) + QCOMPARE(result, expectedResult); + else + QVERIFY(result.isEmpty()); +} + +void tst_QHttpHeaders::combinedValue_string() +{ + QFETCH(QString, name); + QFETCH(bool, exists); + + QByteArray result; + constexpr QByteArrayView expectedResult = "value3, value1, value2, value4"; + QBENCHMARK { + result = m_complexHeaders.combinedValue(name); + } + if (exists) + QCOMPARE(result, expectedResult); + else + QVERIFY(result.isEmpty()); +} + +void tst_QHttpHeaders::removeAll_enum() +{ + QFETCH(WKH, name); + QFETCH(bool, exists); + + QHttpHeaders headers = m_complexHeaders; + QCOMPARE(headers.contains(name), exists); + QBENCHMARK { + headers = m_complexHeaders; // Restore as we'll modify the headers + headers.removeAll(name); + } + QVERIFY(!headers.contains(name)); +} + +void tst_QHttpHeaders::removeAll_string() +{ + QFETCH(QString, name); + QFETCH(bool, exists); + + QHttpHeaders headers = m_complexHeaders; + QCOMPARE(headers.contains(name), exists); + QBENCHMARK { + headers = m_complexHeaders; // Restore as we'll modify the headers + headers.removeAll(name); + } + QVERIFY(!headers.contains(name)); +} + +QTEST_MAIN(tst_QHttpHeaders) + +#include "tst_bench_qhttpheaders.moc" diff --git a/tests/benchmarks/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/benchmarks/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp index c88787d9de..c70248f590 100644 --- a/tests/benchmarks/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp +++ b/tests/benchmarks/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QNetworkDiskCache> #include <QNetworkCacheMetaData> diff --git a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp index bb11a97f40..bab2743513 100644 --- a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only // This file contains benchmarks for QNetworkReply functions. #include <QDebug> diff --git a/tests/benchmarks/network/access/qnetworkreply_from_cache/tst_qnetworkreply_from_cache.cpp b/tests/benchmarks/network/access/qnetworkreply_from_cache/tst_qnetworkreply_from_cache.cpp index fdc2d99b12..c18daa8195 100644 --- a/tests/benchmarks/network/access/qnetworkreply_from_cache/tst_qnetworkreply_from_cache.cpp +++ b/tests/benchmarks/network/access/qnetworkreply_from_cache/tst_qnetworkreply_from_cache.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2012 Hewlett-Packard Development Company, L.P. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> #include <QBuffer> diff --git a/tests/benchmarks/network/kernel/qhostinfo/main.cpp b/tests/benchmarks/network/kernel/qhostinfo/main.cpp index 078abfaa93..66e4f52ec2 100644 --- a/tests/benchmarks/network/kernel/qhostinfo/main.cpp +++ b/tests/benchmarks/network/kernel/qhostinfo/main.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QDebug> diff --git a/tests/benchmarks/network/socket/CMakeLists.txt b/tests/benchmarks/network/socket/CMakeLists.txt index 034f618737..411a933dbb 100644 --- a/tests/benchmarks/network/socket/CMakeLists.txt +++ b/tests/benchmarks/network/socket/CMakeLists.txt @@ -1,6 +1,12 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause -add_subdirectory(qlocalsocket) +if(QT_FEATURE_localserver) + add_subdirectory(qlocalsocket) +endif() + +if(QT_FEATURE_udpsocket) + add_subdirectory(qudpsocket) +endif() + add_subdirectory(qtcpserver) -add_subdirectory(qudpsocket) diff --git a/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp index 6c779b6188..a28869f24c 100644 --- a/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp +++ b/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp @@ -1,6 +1,6 @@ // Copyright (C) 2021 The Qt Company Ltd. // Copyright (C) 2021 Alex Trotsenko <alex1973tr@gmail.com> -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> #include <QtTest/qtesteventloop.h> diff --git a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp index 501b5c37b4..68d60261d5 100644 --- a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp +++ b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2020 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> #include <QtCore/QElapsedTimer> diff --git a/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp index c41a5b3b18..d3ef636e74 100644 --- a/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp +++ b/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2019 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> #include <QtCore/qglobal.h> diff --git a/tests/benchmarks/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/benchmarks/network/ssl/qsslsocket/tst_qsslsocket.cpp index de7c6e186c..fd5f49863a 100644 --- a/tests/benchmarks/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/benchmarks/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> |