summaryrefslogtreecommitdiffstats
path: root/tests/auto/dbus
diff options
context:
space:
mode:
authorKai Uwe Broulik <kde@privat.broulik.de>2018-04-04 15:48:53 +0200
committerKai Uwe Broulik <kde@privat.broulik.de>2018-07-10 19:46:40 +0000
commitd743df975db3403ec83d67bd376d8a6bfea3dfb0 (patch)
tree647560847f9ae5d4bd6ddffc5d64d40a030a2f3d /tests/auto/dbus
parent5c5af7155ae989664919de1f10ac17121fa12a36 (diff)
Support interactive authorization flag in DBusMessage
This flag was introduced to serve as a replacement for a dedicated "interactive" boolean argument in method calls guarded by Polkit. Change-Id: Ida91c9872e70f8ca6672563d0ca6642f38c498ab Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/dbus')
-rw-r--r--tests/auto/dbus/qdbusinterface/qdbusinterface/qdbusinterface.pro9
-rw-r--r--tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp10
-rw-r--r--tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp27
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..468af1e0e0 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, &micro);
+
+ 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"