diff options
Diffstat (limited to 'tests/auto/dbus/qdbusinterface')
3 files changed, 45 insertions, 1 deletions
diff --git a/tests/auto/dbus/qdbusinterface/qdbusinterface/qdbusinterface.pro b/tests/auto/dbus/qdbusinterface/qdbusinterface/qdbusinterface.pro index b7dedad133..67709105a6 100644 --- a/tests/auto/dbus/qdbusinterface/qdbusinterface/qdbusinterface.pro +++ b/tests/auto/dbus/qdbusinterface/qdbusinterface/qdbusinterface.pro @@ -4,4 +4,11 @@ HEADERS += ../myobject.h TARGET = ../tst_qdbusinterface DESTDIR = ./ -QT = core core-private dbus testlib +QT = core core-private dbus dbus-private testlib + +qtConfig(dbus-linked) { + DEFINES += QT_LINKED_LIBDBUS + QMAKE_USE += dbus +} else { + SOURCES += ../../../../../src/dbus/qdbus_symbols.cpp +} diff --git a/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp b/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp index da24429b9e..535d2f756b 100644 --- a/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp +++ b/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp @@ -115,6 +115,16 @@ public slots: return obj.m_complexProp; } + bool interactiveAuthorization() + { + if (message().isInteractiveAuthorizationAllowed()) + return true; + + sendErrorReply(QStringLiteral("org.freedesktop.DBus.Error.InteractiveAuthorizationRequired"), + QStringLiteral("Interactive authentication required.")); + return false; + } + void quit() { qApp->quit(); diff --git a/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp b/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp index 5494959aaf..05480c6dd2 100644 --- a/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp +++ b/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp @@ -33,6 +33,7 @@ #include <QtTest/QtTest> #include <QtCore/qvariant.h> #include <QtDBus/QtDBus> +#include <QtDBus/private/qdbus_symbols_p.h> #include <qdebug.h> #include "../qdbusmarshall/common.h" #include "myobject.h" @@ -213,6 +214,8 @@ private slots: void propertyWritePeer(); void complexPropertyReadPeer(); void complexPropertyWritePeer(); + + void interactiveAuthorizationRequired(); private: QProcess proc; }; @@ -1127,6 +1130,30 @@ void tst_QDBusInterface::complexPropertyWritePeer() QCOMPARE(complexPropPeer(), arg); } +void tst_QDBusInterface::interactiveAuthorizationRequired() +{ + int major; + int minor; + int micro; + q_dbus_get_version(&major, &minor, µ); + + QVersionNumber dbusVersion(major, minor, micro); + if (dbusVersion < QVersionNumber(1, 9, 2)) + QSKIP("Your DBus library is too old to support interactive authorization"); + + QDBusMessage req = QDBusMessage::createMethodCall(serviceName, objectPath, interfaceName, "interactiveAuthorization"); + QDBusMessage reply = QDBusConnection::sessionBus().call(req); + + QCOMPARE(reply.type(), QDBusMessage::ErrorMessage); + QCOMPARE(reply.errorName(), QStringLiteral("org.freedesktop.DBus.Error.InteractiveAuthorizationRequired")); + + req.setInteractiveAuthorizationAllowed(true); + reply = QDBusConnection::sessionBus().call(req); + + QCOMPARE(reply.type(), QDBusMessage::ReplyMessage); + QVERIFY(reply.arguments().at(0).toBool()); +} + QTEST_MAIN(tst_QDBusInterface) #include "tst_qdbusinterface.moc" |