summaryrefslogtreecommitdiffstats
path: root/tests/auto/dbus/qdbusabstractinterface
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/dbus/qdbusabstractinterface')
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp9
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.pro1
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/test/test.pro1
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp60
4 files changed, 45 insertions, 26 deletions
diff --git a/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp b/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
index 6be61ec9e0..49462d388c 100644
--- a/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
+++ b/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
@@ -38,13 +38,13 @@ static const char serviceName[] = "org.qtproject.autotests.qpinger";
static const char objectPath[] = "/org/qtproject/qpinger";
//static const char *interfaceName = serviceName;
-class PingerServer : public QDBusServer
+class PingerServer : public QDBusServer, protected QDBusContext
{
Q_OBJECT
Q_CLASSINFO("D-Bus Interface", "org.qtproject.autotests.qpinger")
public:
- PingerServer(QString addr = "unix:tmpdir=/tmp", QObject* parent = 0)
- : QDBusServer(addr, parent),
+ PingerServer(QObject* parent = 0)
+ : QDBusServer(parent),
m_conn("none")
{
connect(this, SIGNAL(newConnection(QDBusConnection)), SLOT(handleConnection(QDBusConnection)));
@@ -54,6 +54,8 @@ public:
public slots:
QString address() const
{
+ if (!QDBusServer::isConnected())
+ sendErrorReply(QDBusServer::lastError().name(), QDBusServer::lastError().message());
return QDBusServer::address();
}
@@ -116,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/qpinger/qpinger.pro b/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.pro
index 5001ec2cd2..957b47e413 100644
--- a/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.pro
+++ b/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.pro
@@ -1,6 +1,7 @@
SOURCES = qpinger.cpp ../interface.cpp
HEADERS = ../interface.h
TARGET = qpinger
+DESTDIR = ./
CONFIG -= app_bundle
CONFIG += console
QT = core dbus
diff --git a/tests/auto/dbus/qdbusabstractinterface/test/test.pro b/tests/auto/dbus/qdbusabstractinterface/test/test.pro
index 223c94866c..afd101455e 100644
--- a/tests/auto/dbus/qdbusabstractinterface/test/test.pro
+++ b/tests/auto/dbus/qdbusabstractinterface/test/test.pro
@@ -3,6 +3,7 @@ SOURCES += ../tst_qdbusabstractinterface.cpp ../interface.cpp
HEADERS += ../interface.h
TARGET = ../tst_qdbusabstractinterface
+DESTDIR = ./
QT = core testlib
QT += dbus
diff --git a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
index 904c1be88f..0cb29d121b 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,24 +225,20 @@ 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)
QVERIFY(!con.interface()->isServiceRegistered(serviceName));
// start peer server
- #ifdef Q_OS_WIN
- proc.start("qpinger");
- #else
- proc.start("./qpinger/qpinger");
- #endif
- QVERIFY(proc.waitForStarted());
+#ifdef Q_OS_WIN
+# define EXE ".exe"
+#else
+# define EXE ""
+#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));
@@ -249,10 +247,33 @@ 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
+#ifdef Q_OS_WIN
+ proc.kill(); // non-GUI processes don't respond to QProcess::terminate()
+#else
+ proc.terminate();
+#endif
+ 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 +286,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()