summaryrefslogtreecommitdiffstats
path: root/tests/auto/dbus
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/dbus')
-rw-r--r--tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp39
1 files changed, 30 insertions, 9 deletions
diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
index 851ef6cc1f..4a09dca544 100644
--- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
@@ -35,6 +35,11 @@
#include <QtTest/QtTest>
#include <QtDBus/QtDBus>
+#ifdef Q_OS_UNIX
+# include <sys/types.h>
+# include <signal.h>
+#endif
+
void MyObject::method(const QDBusMessage &msg)
{
path = msg.path();
@@ -1352,23 +1357,39 @@ void tst_QDBusConnection::callVirtualObjectLocal()
void tst_QDBusConnection::pendingCallWhenDisconnected()
{
+#ifdef QT_NO_PROCESS
+ QSKIP("Test requires QProcess");
+#else
if (!QCoreApplication::instance())
QSKIP("Test requires a QCoreApplication");
- QDBusServer *server = new QDBusServer;
- QDBusConnection con = QDBusConnection::connectToPeer(server->address(), "disconnect");
- QTestEventLoop::instance().enterLoop(2);
- QVERIFY(con.isConnected());
- QDBusMessage message = QDBusMessage::createMethodCall("", "/", QString(), "method");
- QDBusPendingCall reply = con.asyncCall(message);
+ QProcess daemon;
+ daemon.start("dbus-daemon", QStringList() << "--session" << "--nofork" << "--print-address");
+ QVERIFY2(daemon.waitForReadyRead(2000),
+ "Daemon didn't print its address in time; error: \"" + daemon.errorString().toLocal8Bit() +
+ "\"; stderr:\n" + daemon.readAllStandardError());
- delete server;
+ QString address = QString::fromLocal8Bit(daemon.readAll().trimmed());
+ QDBusConnection con = QDBusConnection::connectToBus(address, "disconnect");
+ QVERIFY2(con.isConnected(), (con.lastError().name() + ": " + con.lastError().message()).toLocal8Bit());
- QTestEventLoop::instance().enterLoop(2);
+ // confirm we're connected and we're alone in this bus
+ QCOMPARE(con.baseService(), QString(":1.0"));
+
+ // kill the bus
+ daemon.terminate();
+ daemon.waitForFinished();
+
+ // send something, which we should get an error with
+ QDBusMessage message = QDBusMessage::createMethodCall("org.freedesktop.DBus", "/", QString(), "ListNames");
+ QDBusPendingCall reply = con.asyncCall(message);
+
+ reply.waitForFinished();
QVERIFY(!con.isConnected());
QVERIFY(reply.isFinished());
QVERIFY(reply.isError());
- QVERIFY(reply.error().type() == QDBusError::Disconnected);
+ QCOMPARE(reply.error().type(), QDBusError::Disconnected);
+#endif
}
QString MyObject::path;