summaryrefslogtreecommitdiffstats
path: root/tests/auto/network/socket/qlocalsocket/socketprocess
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2012-10-24 11:28:57 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-25 10:19:48 +0200
commitb5d55f3a353313735f3b26448961a5722c0bf669 (patch)
treeedeffc91f072e70972732591ccdbf73c2cd7b858 /tests/auto/network/socket/qlocalsocket/socketprocess
parent935f223440bd125ccbda380ea880486653e8b42e (diff)
fix flakiness of tst_qlocalsocket::processConnection
QSystemSemaphore is persistent after a crash and we'd have to toggle the Open/Create flag. Waiting for the server being available by trying to connect is much more reliable. Change-Id: I510814cef189b43658911f8ade3cf831ae6c7e58 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Diffstat (limited to 'tests/auto/network/socket/qlocalsocket/socketprocess')
-rw-r--r--tests/auto/network/socket/qlocalsocket/socketprocess/main.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/tests/auto/network/socket/qlocalsocket/socketprocess/main.cpp b/tests/auto/network/socket/qlocalsocket/socketprocess/main.cpp
index de78f9afe7..226a477ac4 100644
--- a/tests/auto/network/socket/qlocalsocket/socketprocess/main.cpp
+++ b/tests/auto/network/socket/qlocalsocket/socketprocess/main.cpp
@@ -41,13 +41,14 @@
#include <qcoreapplication.h>
+#include <qelapsedtimer.h>
+#include <qeventloop.h>
#include <qlocalsocket.h>
#include <qlocalserver.h>
-#include <qsystemsemaphore.h>
+#include <qtimer.h>
const QString serverName = QStringLiteral("qlocalsocket_autotest");
const QByteArray testData("test");
-QSystemSemaphore *semaphore = 0;
bool runServer(int numberOfConnections)
{
@@ -61,11 +62,9 @@ bool runServer(int numberOfConnections)
fprintf(stderr, "server: listen failed: %s\n", qPrintable(server->errorString()));
return false;
}
- semaphore->release();
for (int i = 1; i <= numberOfConnections; ++i) {
printf("server: wait for connection %d\n", i);
if (!server->waitForNewConnection(30000)) {
- semaphore->acquire();
fprintf(stderr, "server: waitForNewConnection failed: %s\n",
qPrintable(server->errorString()));
return false;
@@ -74,31 +73,40 @@ bool runServer(int numberOfConnections)
printf("server: writing \"%s\"\n", testData.data());
socket->write(testData);
if (!socket->waitForBytesWritten()) {
- semaphore->acquire();
fprintf(stderr, "server: waitForBytesWritten failed: %s\n",
qPrintable(socket->errorString()));
return false;
}
printf("server: data written\n");
if (socket->error() != QLocalSocket::UnknownSocketError) {
- semaphore->acquire();
fprintf(stderr, "server: socket error %d\n", socket->error());
return false;
}
}
- semaphore->acquire();
return true;
}
bool runClient()
{
- semaphore->acquire(); // wait until the server is up and running
- semaphore->release();
-
QLocalSocket socket;
printf("client: connecting to \"%s\"\n", qPrintable(serverName));
- socket.connectToServer(serverName, QLocalSocket::ReadWrite);
- if (!socket.waitForConnected()) {
+ QElapsedTimer connectTimer;
+ connectTimer.start();
+ forever {
+ socket.connectToServer(serverName, QLocalSocket::ReadWrite);
+ if (socket.waitForConnected())
+ break;
+ if (socket.error() == QLocalSocket::ServerNotFoundError) {
+ if (connectTimer.elapsed() > 5000) {
+ fprintf(stderr, "client: server not found. Giving up.\n");
+ return false;
+ }
+ printf("client: server not found. Trying again...\n");
+ QEventLoop eventLoop;
+ QTimer::singleShot(500, &eventLoop, SLOT(quit()));
+ eventLoop.exec();
+ continue;
+ }
fprintf(stderr, "client: waitForConnected failed: %s\n",
qPrintable(socket.errorString()));
return false;
@@ -122,8 +130,6 @@ bool runClient()
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
- QSystemSemaphore s("tst_qlocalsocket_socketprocess");
- semaphore = &s;
if (argc < 2)
return EXIT_FAILURE;
if (strcmp(argv[1], "--server") == 0) {