summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2014-12-11 17:50:01 -0800
committerThiago Macieira <thiago.macieira@intel.com>2014-12-20 07:37:17 +0100
commitd55db285fc4ae0a978591213c294f53ab879cd40 (patch)
tree5cb6a91c8a219284035851ecaaaf0243cb1a9ea3 /tests/auto
parent36314ae75f2f13b6c93252dc2c93592bc0624296 (diff)
Autotest: Fix a race condition in launching the QtDBus sub-processes
Wait for the subprocess to print "ready" before assuming that it is ready to receive calls. waitForStarted() will return as soon as the child is running, but it may not have registered on D-Bus yet. This also solves the synchronization problem more elegantly than how tst_qdbusmarshall.cpp was trying to do it. Change-Id: I548dfba2677cc5a34ba50f4310c4d5baa98093b2 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver.cpp1
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp1
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp1
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp1
-rw-r--r--tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp1
-rw-r--r--tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp1
-rw-r--r--tests/auto/dbus/qdbusmarshall/qpong/qpong.cpp1
-rw-r--r--tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp16
8 files changed, 9 insertions, 14 deletions
diff --git a/tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver.cpp b/tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver.cpp
index b4a79fa754..c680d93dab 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver.cpp
+++ b/tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver.cpp
@@ -163,6 +163,7 @@ int main(int argc, char *argv[])
con.registerObject(objectPath, &server, QDBusConnection::ExportAllSlots);
printf("ready.\n");
+ fflush(stdout);
return app.exec();
}
diff --git a/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp b/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
index 2fdba4f7e1..971c939aad 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
+++ b/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
@@ -498,6 +498,7 @@ void tst_QDBusAbstractAdaptor::initTestCase()
#endif
proc.start(QFINDTESTDATA("qmyserver/qmyserver" EXE));
QVERIFY2(proc.waitForStarted(), qPrintable(proc.errorString()));
+ QVERIFY(proc.waitForReadyRead());
WaitForQMyServer w;
QVERIFY(w.ok());
diff --git a/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp b/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
index 49291abf92..49462d388c 100644
--- a/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
+++ b/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
@@ -118,6 +118,7 @@ int main(int argc, char *argv[])
con.registerObject(objectPath, &server, QDBusConnection::ExportAllSlots);
printf("ready.\n");
+ fflush(stdout);
return app.exec();
}
diff --git a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
index 6ab5e5ff61..0cb29d121b 100644
--- a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
+++ b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
@@ -238,6 +238,7 @@ void tst_QDBusAbstractInterface::initTestCase()
#endif
proc.start(QFINDTESTDATA("qpinger/qpinger" EXE));
QVERIFY2(proc.waitForStarted(), qPrintable(proc.errorString()));
+ QVERIFY(proc.waitForReadyRead());
// verify service is now registered
QTRY_VERIFY(con.interface()->isServiceRegistered(serviceName));
diff --git a/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp b/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp
index 4aacbdc5a2..7a22fe90ad 100644
--- a/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp
+++ b/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp
@@ -142,6 +142,7 @@ int main(int argc, char *argv[])
con.registerObject(objectPath, &server, QDBusConnection::ExportAllSlots);
printf("ready.\n");
+ fflush(stdout);
return app.exec();
}
diff --git a/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp b/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp
index 81e3aa3292..04992c9f28 100644
--- a/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp
+++ b/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp
@@ -273,6 +273,7 @@ void tst_QDBusInterface::initTestCase()
#endif
proc.start(QFINDTESTDATA("qmyserver/qmyserver" EXE));
QVERIFY2(proc.waitForStarted(), qPrintable(proc.errorString()));
+ QVERIFY(proc.waitForReadyRead());
WaitForQMyServer w;
QVERIFY(w.ok());
diff --git a/tests/auto/dbus/qdbusmarshall/qpong/qpong.cpp b/tests/auto/dbus/qdbusmarshall/qpong/qpong.cpp
index 5476dd7f8e..bb8aab3d21 100644
--- a/tests/auto/dbus/qdbusmarshall/qpong/qpong.cpp
+++ b/tests/auto/dbus/qdbusmarshall/qpong/qpong.cpp
@@ -66,6 +66,7 @@ int main(int argc, char *argv[])
con.registerObject(objectPath, &pong, QDBusConnection::ExportAllSlots);
printf("ready.\n");
+ fflush(stdout);
return app.exec();
}
diff --git a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp
index 0d9fba3e1f..4d12522a68 100644
--- a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp
+++ b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp
@@ -137,20 +137,8 @@ void tst_QDBusMarshall::initTestCase()
# define EXE ""
#endif
proc.start(QFINDTESTDATA("qpong/qpong" EXE));
- if (!QDBusConnection::sessionBus().interface()->isServiceRegistered(serviceName)) {
- QVERIFY2(proc.waitForStarted(), qPrintable(proc.errorString()));
-
- QVERIFY(con.isConnected());
- con.connect("org.freedesktop.DBus", QString(), "org.freedesktop.DBus", "NameOwnerChanged",
- QStringList() << serviceName << QString(""), QString(),
- &QTestEventLoop::instance(), SLOT(exitLoop()));
- QTestEventLoop::instance().enterLoop(2);
- QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(QDBusConnection::sessionBus().interface()->isServiceRegistered(serviceName));
- con.disconnect("org.freedesktop.DBus", QString(), "org.freedesktop.DBus", "NameOwnerChanged",
- QStringList() << serviceName << QString(""), QString(),
- &QTestEventLoop::instance(), SLOT(exitLoop()));
- }
+ QVERIFY2(proc.waitForStarted(), qPrintable(proc.errorString()));
+ QVERIFY(proc.waitForReadyRead());
}
void tst_QDBusMarshall::cleanupTestCase()