From 3148d0c7b403af1bd74a2082cdde61e6974b38c1 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 11 Dec 2014 15:51:01 -0800 Subject: Don't kill the subprocess in tst_qdbusabstractinterface Rohan was right in e88f9a92b7ab05ea9bc25083de7dee1b67dd673e to stabilize the test and reset the state, but killing the subprocess is overkill. All we need is to reset the state in both applications, which includes disconnecting and reconnecting to the peer, to discard any sent but not yet received messages. Change-Id: Ie01392e6e63bd70ef8345217d3fc641ed63c7aba Reviewed-by: Simon Hausmann --- .../tst_qdbusabstractinterface.cpp | 42 +++++++++++++--------- 1 file changed, 25 insertions(+), 17 deletions(-) (limited to 'tests') diff --git a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp index 904c1be88f..3ea2d939d9 100644 --- a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp +++ b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp @@ -51,6 +51,7 @@ class tst_QDBusAbstractInterface: public QObject { Q_OBJECT Interface targetObj; + QString peerAddress; Pinger getPinger(QString service = "", const QString &path = "/") { @@ -81,6 +82,7 @@ public: private slots: void initTestCase(); + void cleanupTestCase(); void init(); void cleanup(); @@ -223,12 +225,6 @@ void tst_QDBusAbstractInterface::initTestCase() QDBusConnection con = QDBusConnection::sessionBus(); QVERIFY(con.isConnected()); con.registerObject("/", &targetObj, QDBusConnection::ExportScriptableContents); -} - -void tst_QDBusAbstractInterface::init() -{ - QDBusConnection con = QDBusConnection::sessionBus(); - QVERIFY(con.isConnected()); // verify service isn't registered by something else // (e.g. a left over qpinger from a previous test run) @@ -249,10 +245,29 @@ void tst_QDBusAbstractInterface::init() QDBusMessage req = QDBusMessage::createMethodCall(serviceName, objectPath, interfaceName, "address"); QDBusMessage rpl = con.call(req); QVERIFY(rpl.type() == QDBusMessage::ReplyMessage); - QString address = rpl.arguments().at(0).toString(); + peerAddress = rpl.arguments().at(0).toString(); +} + +void tst_QDBusAbstractInterface::cleanupTestCase() +{ + // Kill peer, resetting the object exported by a separate process + proc.terminate(); + QVERIFY(proc.waitForFinished() || proc.state() == QProcess::NotRunning); + + // Wait until the service is certainly not registered + QDBusConnection con = QDBusConnection::sessionBus(); + if (con.isConnected()) { + QTRY_VERIFY(!con.interface()->isServiceRegistered(serviceName)); + } +} + +void tst_QDBusAbstractInterface::init() +{ + QDBusConnection con = QDBusConnection::sessionBus(); + QVERIFY(con.isConnected()); // connect to peer server - QDBusConnection peercon = QDBusConnection::connectToPeer(address, "peer"); + QDBusConnection peercon = QDBusConnection::connectToPeer(peerAddress, "peer"); QVERIFY(peercon.isConnected()); QDBusMessage req2 = QDBusMessage::createMethodCall(serviceName, objectPath, interfaceName, "isConnected"); @@ -265,20 +280,13 @@ void tst_QDBusAbstractInterface::cleanup() { QDBusConnection::disconnectFromPeer("peer"); - // Kill peer, resetting the object exported by a separate process - proc.terminate(); - QVERIFY(proc.waitForFinished() || proc.state() == QProcess::NotRunning); - // Reset the object exported by this process targetObj.m_stringProp = QString(); targetObj.m_variantProp = QDBusVariant(); targetObj.m_complexProp = RegisteredType(); - // Wait until the service is certainly not registered - QDBusConnection con = QDBusConnection::sessionBus(); - if (con.isConnected()) { - QTRY_VERIFY(!con.interface()->isServiceRegistered(serviceName)); - } + QDBusMessage resetCall = QDBusMessage::createMethodCall(serviceName, objectPath, interfaceName, "reset"); + QVERIFY(QDBusConnection::sessionBus().call(resetCall).type() == QDBusMessage::ReplyMessage); } void tst_QDBusAbstractInterface::makeVoidCall() -- cgit v1.2.3