summaryrefslogtreecommitdiffstats
path: root/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp')
-rw-r--r--tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp75
1 files changed, 32 insertions, 43 deletions
diff --git a/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index 86112f442d..a28869f24c 100644
--- a/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -1,43 +1,21 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2021 Alex Trotsenko <alex1973tr@gmail.com>
-** 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$
-**
-****************************************************************************/
+// 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
#include <QTest>
+#include <QtTest/qtesteventloop.h>
+
#include <QtCore/qglobal.h>
#include <QtCore/qthread.h>
#include <QtCore/qsemaphore.h>
#include <QtCore/qbytearray.h>
-#include <QtCore/qeventloop.h>
#include <QtCore/qvector.h>
#include <QtCore/qelapsedtimer.h>
#include <QtNetwork/qlocalsocket.h>
#include <QtNetwork/qlocalserver.h>
+using namespace std::chrono_literals;
+
class tst_QLocalSocket : public QObject
{
Q_OBJECT
@@ -75,7 +53,9 @@ public:
});
});
- QVERIFY(server.listen("foo"));
+ // TODO QTBUG-95136: on failure, remove the socket file and retry.
+ QVERIFY2(server.listen("foo"), qPrintable(server.errorString()));
+
running.release();
exec();
}
@@ -114,6 +94,10 @@ public:
});
socket->connectToServer("foo");
+ QVERIFY2(socket->waitForConnected(), "The system is probably reaching the maximum "
+ "number of open file descriptors. On Unix, "
+ "try to increase the limit with 'ulimit -n 32000' "
+ "and run the test again.");
QCOMPARE(socket->state(), QLocalSocket::ConnectedState);
}
}
@@ -146,7 +130,7 @@ void tst_QLocalSocket::pingPong()
QVERIFY(serverThread.running.tryAcquire(1, 3000));
SocketFactory factory(1, connections);
- QEventLoop eventLoop;
+ QTestEventLoop eventLoop;
QVector<qint64> bytesToRead;
QElapsedTimer timer;
@@ -157,15 +141,20 @@ void tst_QLocalSocket::pingPong()
if (--bytesToRead[channel] == 0 && --connections == 0) {
factory.stopped = true;
- eventLoop.quit();
+ eventLoop.exitLoop();
}
});
timer.start();
emit factory.start();
- eventLoop.exec();
-
- qDebug("Elapsed time: %.1f s", timer.elapsed() / 1000.0);
+ // QtTestLib's Watchdog defaults to 300 seconds; we want to give up before
+ // it bites.
+ eventLoop.enterLoop(290);
+
+ if (eventLoop.timeout())
+ qDebug("Timed out after %.1f s", timer.elapsed() / 1000.0);
+ else if (!QTest::currentTestFailed())
+ qDebug("Elapsed time: %.1f s", timer.elapsed() / 1000.0);
serverThread.quit();
serverThread.wait();
}
@@ -188,7 +177,7 @@ void tst_QLocalSocket::dataExchange()
QFETCH(int, chunkSize);
Q_ASSERT(chunkSize > 0 && connections > 0);
- const qint64 timeToTest = 5000;
+ const auto timeToTest = 5000ms;
ServerThread serverThread(chunkSize);
serverThread.start();
@@ -196,26 +185,26 @@ void tst_QLocalSocket::dataExchange()
QVERIFY(serverThread.running.tryAcquire(1, 3000));
SocketFactory factory(chunkSize, connections);
- QEventLoop eventLoop;
+ QTestEventLoop eventLoop;
qint64 totalReceived = 0;
QElapsedTimer timer;
- connect(&factory, &SocketFactory::bytesReceived,
- [&totalReceived, &timer, timeToTest, &factory, &eventLoop](int channel, qint64 bytes) {
+ connect(&factory, &SocketFactory::bytesReceived, [&](int channel, qint64 bytes) {
Q_UNUSED(channel);
totalReceived += bytes;
- if (timer.elapsed() >= timeToTest) {
+ if (timer.elapsed() >= timeToTest.count()) {
factory.stopped = true;
- eventLoop.quit();
+ eventLoop.exitLoop();
}
});
timer.start();
emit factory.start();
- eventLoop.exec();
+ eventLoop.enterLoop(timeToTest * 2);
- qDebug("Transfer rate: %.1f MB/s", totalReceived / 1048.576 / timer.elapsed());
+ if (!QTest::currentTestFailed())
+ qDebug("Transfer rate: %.1f MB/s", totalReceived / 1048.576 / timer.elapsed());
serverThread.quit();
serverThread.wait();
}