From cf4b413fa4a81dbfaaaf50cb52f92ecc0d3c3f2a Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 9 Dec 2014 14:16:33 -0800 Subject: Make QtDBus unit tests compile with runtime dbus-1 too There's a change in Qt 5.4.0 that makes Qt compile with its own set of D-Bus headers, which means QT_CFLAGS_DBUS may be empty. Thus, we can't compile or link if we're using the actual libdbus-1 API to build the test. This commit makes these unit tests use the same dynamic loading mechanism. Change-Id: I56b2a7320086ef88793f6552cb54ca6224010451 Reviewed-by: Simon Hausmann --- tests/auto/dbus/qdbusmarshall/test/test.pro | 9 ++- .../auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp | 76 +++++++++++++--------- tests/auto/dbus/qdbustype/qdbustype.pro | 9 ++- tests/auto/dbus/qdbustype/tst_qdbustype.cpp | 26 +++++--- tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp | 4 +- tests/benchmarks/dbus/qdbustype/main.cpp | 9 ++- tests/benchmarks/dbus/qdbustype/qdbustype.pro | 11 +++- 7 files changed, 93 insertions(+), 51 deletions(-) (limited to 'tests') diff --git a/tests/auto/dbus/qdbusmarshall/test/test.pro b/tests/auto/dbus/qdbusmarshall/test/test.pro index 658cc52fde..4999080453 100644 --- a/tests/auto/dbus/qdbusmarshall/test/test.pro +++ b/tests/auto/dbus/qdbusmarshall/test/test.pro @@ -5,8 +5,13 @@ DESTDIR = ./ QT = core-private dbus-private testlib -LIBS += $$QT_LIBS_DBUS -QMAKE_CXXFLAGS += $$QT_CFLAGS_DBUS +contains(QT_CONFIG, dbus-linked) { + DEFINES += QT_LINKED_LIBDBUS + LIBS += $$QT_LIBS_DBUS + QMAKE_CXXFLAGS += $$QT_CFLAGS_DBUS +} else { + SOURCES += ../../../../../src/dbus/qdbus_symbols.cpp +} DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 macx:CONFIG += insignificant_test # QTBUG-37469 diff --git a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp index 0e8ac9b0f3..6507b34c97 100644 --- a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp +++ b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp @@ -37,7 +37,8 @@ #include "common.h" #include -#include +#include +#include #define QT_LINKED_LIBDBUS #include @@ -1033,23 +1034,31 @@ struct DisconnectRawDBus { { if (!connection) return; - dbus_connection_close(connection); - dbus_connection_unref(connection); + q_dbus_connection_close(connection); + q_dbus_connection_unref(connection); + } +}; +struct UnrefDBusMessage +{ + static void cleanup(DBusMessage *type) + { + if (!type) return; + q_dbus_message_unref(type); } }; -template struct GenericUnref +struct UnrefDBusPendingCall { - static void cleanup(T *type) + static void cleanup(DBusPendingCall *type) { if (!type) return; - unref(type); + q_dbus_pending_call_unref(type); } }; // use these scoped types to avoid memory leaks if QVERIFY or QCOMPARE fails typedef QScopedPointer ScopedDBusConnection; -typedef QScopedPointer > ScopedDBusMessage; -typedef QScopedPointer > ScopedDBusPendingCall; +typedef QScopedPointer ScopedDBusMessage; +typedef QScopedPointer ScopedDBusPendingCall; template struct SetResetValue { @@ -1074,12 +1083,12 @@ void tst_QDBusMarshall::receiveUnknownType() // this needs to be implemented in raw // open a new connection to the bus daemon DBusError error; - dbus_error_init(&error); - ScopedDBusConnection rawcon(dbus_bus_get_private(DBUS_BUS_SESSION, &error)); + q_dbus_error_init(&error); + ScopedDBusConnection rawcon(q_dbus_bus_get_private(DBUS_BUS_SESSION, &error)); QVERIFY2(rawcon.data(), error.name); // check if this bus supports passing file descriptors - if (!dbus_connection_can_send_type(rawcon.data(), DBUS_TYPE_UNIX_FD)) + if (!q_dbus_connection_can_send_type(rawcon.data(), DBUS_TYPE_UNIX_FD)) QSKIP("Your session bus does not allow sending Unix file descriptors"); // make sure this QDBusConnection won't handle Unix file descriptors @@ -1090,18 +1099,20 @@ void tst_QDBusMarshall::receiveUnknownType() // create a call back to us containing a file descriptor QDBusMessageSpy spy; con.registerObject("/spyObject", &spy, QDBusConnection::ExportAllSlots); - ScopedDBusMessage msg(dbus_message_new_method_call(con.baseService().toLatin1(), "/spyObject", NULL, "theSlot")); + ScopedDBusMessage msg(q_dbus_message_new_method_call(con.baseService().toLatin1(), "/spyObject", NULL, "theSlot")); int fd = fileno(stdout); - dbus_message_append_args(msg.data(), DBUS_TYPE_UNIX_FD, &fd, DBUS_TYPE_INVALID); + DBusMessageIter iter; + q_dbus_message_iter_init_append(msg.data(), &iter); + q_dbus_message_iter_append_basic(&iter, DBUS_TYPE_UNIX_FD, &fd); // try to send to us DBusPendingCall *pending_ptr; - dbus_connection_send_with_reply(rawcon.data(), msg.data(), &pending_ptr, 1000); + q_dbus_connection_send_with_reply(rawcon.data(), msg.data(), &pending_ptr, 1000); ScopedDBusPendingCall pending(pending_ptr); // check that it got sent - while (dbus_connection_dispatch(rawcon.data()) == DBUS_DISPATCH_DATA_REMAINS) + while (q_dbus_connection_dispatch(rawcon.data()) == DBUS_DISPATCH_DATA_REMAINS) ; // now spin our event loop. We don't catch this call, so let's get the reply @@ -1110,7 +1121,7 @@ void tst_QDBusMarshall::receiveUnknownType() loop.exec(); // now try to receive the reply - dbus_pending_call_block(pending.data()); + q_dbus_pending_call_block(pending.data()); // check that the spy received what it was supposed to receive QCOMPARE(spy.list.size(), 1); @@ -1118,48 +1129,49 @@ void tst_QDBusMarshall::receiveUnknownType() QFETCH(int, receivedTypeId); QCOMPARE(spy.list.at(0).arguments().at(0).userType(), receivedTypeId); - msg.reset(dbus_pending_call_steal_reply(pending.data())); + msg.reset(q_dbus_pending_call_steal_reply(pending.data())); QVERIFY(msg); - QCOMPARE(dbus_message_get_type(msg.data()), DBUS_MESSAGE_TYPE_METHOD_RETURN); - QCOMPARE(dbus_message_get_signature(msg.data()), DBUS_TYPE_INT32_AS_STRING); + QCOMPARE(q_dbus_message_get_type(msg.data()), DBUS_MESSAGE_TYPE_METHOD_RETURN); + QCOMPARE(q_dbus_message_get_signature(msg.data()), DBUS_TYPE_INT32_AS_STRING); int retval; - QVERIFY(dbus_message_get_args(msg.data(), &error, DBUS_TYPE_INT32, &retval, DBUS_TYPE_INVALID)); + QVERIFY(q_dbus_message_iter_init(msg.data(), &iter)); + q_dbus_message_iter_get_basic(&iter, &retval); QCOMPARE(retval, 42); } else { // create a signal that we'll emit static const char signalName[] = "signalName"; static const char interfaceName[] = "local.interface.name"; - ScopedDBusMessage msg(dbus_message_new_signal("/", interfaceName, signalName)); - con.connect(dbus_bus_get_unique_name(rawcon.data()), QString(), interfaceName, signalName, &QTestEventLoop::instance(), SLOT(exitLoop())); + ScopedDBusMessage msg(q_dbus_message_new_signal("/", interfaceName, signalName)); + con.connect(q_dbus_bus_get_unique_name(rawcon.data()), QString(), interfaceName, signalName, &QTestEventLoop::instance(), SLOT(exitLoop())); QDBusMessageSpy spy; - con.connect(dbus_bus_get_unique_name(rawcon.data()), QString(), interfaceName, signalName, &spy, SLOT(theSlot(QDBusMessage))); + con.connect(q_dbus_bus_get_unique_name(rawcon.data()), QString(), interfaceName, signalName, &spy, SLOT(theSlot(QDBusMessage))); DBusMessageIter iter; - dbus_message_iter_init_append(msg.data(), &iter); + q_dbus_message_iter_init_append(msg.data(), &iter); int fd = fileno(stdout); if (qstrcmp(QTest::currentDataTag(), "type-naked") == 0) { // send naked - dbus_message_iter_append_basic(&iter, DBUS_TYPE_UNIX_FD, &fd); + q_dbus_message_iter_append_basic(&iter, DBUS_TYPE_UNIX_FD, &fd); } else { DBusMessageIter subiter; if (qstrcmp(QTest::currentDataTag(), "type-variant") == 0) - dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, DBUS_TYPE_UNIX_FD_AS_STRING, &subiter); + q_dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, DBUS_TYPE_UNIX_FD_AS_STRING, &subiter); else if (qstrcmp(QTest::currentDataTag(), "type-array") == 0) - dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, DBUS_TYPE_UNIX_FD_AS_STRING, &subiter); + q_dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, DBUS_TYPE_UNIX_FD_AS_STRING, &subiter); else if (qstrcmp(QTest::currentDataTag(), "type-struct") == 0) - dbus_message_iter_open_container(&iter, DBUS_TYPE_STRUCT, 0, &subiter); - dbus_message_iter_append_basic(&subiter, DBUS_TYPE_UNIX_FD, &fd); - dbus_message_iter_close_container(&iter, &subiter); + q_dbus_message_iter_open_container(&iter, DBUS_TYPE_STRUCT, 0, &subiter); + q_dbus_message_iter_append_basic(&subiter, DBUS_TYPE_UNIX_FD, &fd); + q_dbus_message_iter_close_container(&iter, &subiter); } // send it - dbus_connection_send(rawcon.data(), msg.data(), 0); + q_dbus_connection_send(rawcon.data(), msg.data(), 0); // check that it got sent - while (dbus_connection_dispatch(rawcon.data()) == DBUS_DISPATCH_DATA_REMAINS) + while (q_dbus_connection_dispatch(rawcon.data()) == DBUS_DISPATCH_DATA_REMAINS) ; // now let's see what happens diff --git a/tests/auto/dbus/qdbustype/qdbustype.pro b/tests/auto/dbus/qdbustype/qdbustype.pro index 1e6335aa3b..21df33d2c7 100644 --- a/tests/auto/dbus/qdbustype/qdbustype.pro +++ b/tests/auto/dbus/qdbustype/qdbustype.pro @@ -2,6 +2,11 @@ CONFIG += testcase TARGET = tst_qdbustype QT = core-private dbus-private testlib SOURCES += tst_qdbustype.cpp -QMAKE_CXXFLAGS += $$QT_CFLAGS_DBUS -LIBS_PRIVATE += $$QT_LIBS_DBUS +contains(QT_CONFIG, dbus-linked) { + DEFINES += QT_LINKED_LIBDBUS + LIBS += $$QT_LIBS_DBUS + QMAKE_CXXFLAGS += $$QT_CFLAGS_DBUS +} else { + SOURCES += ../../../../src/dbus/qdbus_symbols.cpp +} DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/dbus/qdbustype/tst_qdbustype.cpp b/tests/auto/dbus/qdbustype/tst_qdbustype.cpp index 791a42dcc4..e674b6d686 100644 --- a/tests/auto/dbus/qdbustype/tst_qdbustype.cpp +++ b/tests/auto/dbus/qdbustype/tst_qdbustype.cpp @@ -35,8 +35,18 @@ #include #include - -#include +#include + +DEFINEFUNC(dbus_bool_t, dbus_signature_validate, (const char *signature, + DBusError *error), + (signature, error), return) +DEFINEFUNC(dbus_bool_t, dbus_signature_validate_single, (const char *signature, + DBusError *error), + (signature, error), return) +DEFINEFUNC(dbus_bool_t, dbus_type_is_basic, (int typecode), + (typecode), return) +DEFINEFUNC(dbus_bool_t, dbus_type_is_fixed, (int typecode), + (typecode), return) class tst_QDBusType : public QObject { @@ -182,7 +192,7 @@ void tst_QDBusType::isValidFixedType() int type = data.at(0).unicode(); if (isValid) - QCOMPARE(bool(dbus_type_is_fixed(type)), result); + QCOMPARE(bool(q_dbus_type_is_fixed(type)), result); QCOMPARE(QDBusUtil::isValidFixedType(type), result); } @@ -204,7 +214,7 @@ void tst_QDBusType::isValidBasicType() int type = data.at(0).unicode(); if (isValid) - QCOMPARE(bool(dbus_type_is_basic(type)), result); + QCOMPARE(bool(q_dbus_type_is_basic(type)), result); QCOMPARE(QDBusUtil::isValidBasicType(type), result); } @@ -220,7 +230,7 @@ void tst_QDBusType::isValidSingleSignature() QFETCH(QString, data); QFETCH(bool, result); - QCOMPARE(bool(dbus_signature_validate_single(data.toLatin1(), 0)), result); + QCOMPARE(bool(q_dbus_signature_validate_single(data.toLatin1(), 0)), result); QCOMPARE(QDBusUtil::isValidSingleSignature(data), result); } @@ -236,11 +246,11 @@ void tst_QDBusType::isValidArray() QFETCH(bool, result); data.prepend("a"); - QCOMPARE(bool(dbus_signature_validate_single(data.toLatin1(), 0)), result); + QCOMPARE(bool(q_dbus_signature_validate_single(data.toLatin1(), 0)), result); QCOMPARE(QDBusUtil::isValidSingleSignature(data), result); data.prepend("a"); - QCOMPARE(bool(dbus_signature_validate_single(data.toLatin1(), 0)), result); + QCOMPARE(bool(q_dbus_signature_validate_single(data.toLatin1(), 0)), result); QCOMPARE(QDBusUtil::isValidSingleSignature(data), result); } @@ -256,7 +266,7 @@ void tst_QDBusType::isValidSignature() data.append(data); if (data.at(0).unicode()) - QCOMPARE(bool(dbus_signature_validate(data.toLatin1(), 0)), result); + QCOMPARE(bool(q_dbus_signature_validate(data.toLatin1(), 0)), result); QCOMPARE(QDBusUtil::isValidSignature(data), result); } diff --git a/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp b/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp index eac61a38b8..7d0c5d8d99 100644 --- a/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp +++ b/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp @@ -34,7 +34,9 @@ #include #include #include -#include + +// We just need the DBUS_TYPE_* constants, so use our own copy +#include "../../../../src/dbus/dbus_minimal_p.h" class tst_qdbusxml2cpp : public QObject { diff --git a/tests/benchmarks/dbus/qdbustype/main.cpp b/tests/benchmarks/dbus/qdbustype/main.cpp index 4723ed1b97..ae7eb6582a 100644 --- a/tests/benchmarks/dbus/qdbustype/main.cpp +++ b/tests/benchmarks/dbus/qdbustype/main.cpp @@ -35,8 +35,11 @@ #include #include +#include -#include +DEFINEFUNC(dbus_bool_t, dbus_signature_validate, (const char *signature, + DBusError *error), + (signature, error), return) class tst_QDBusType: public QObject { @@ -85,9 +88,9 @@ void tst_QDBusType::benchmarkSignature() bool result; if (useNative) { - dbus_signature_validate(data.toLatin1(), 0); + q_dbus_signature_validate(data.toLatin1(), 0); QBENCHMARK { - result = dbus_signature_validate(data.toLatin1(), 0); + result = q_dbus_signature_validate(data.toLatin1(), 0); } } else { QDBusUtil::isValidSignature(data); diff --git a/tests/benchmarks/dbus/qdbustype/qdbustype.pro b/tests/benchmarks/dbus/qdbustype/qdbustype.pro index 0307dda4a0..1437e4d9eb 100644 --- a/tests/benchmarks/dbus/qdbustype/qdbustype.pro +++ b/tests/benchmarks/dbus/qdbustype/qdbustype.pro @@ -1,8 +1,13 @@ TARGET = tst_bench_qdbustype QT -= gui -QT += dbus dbus-private testlib -QMAKE_CXXFLAGS += $$QT_CFLAGS_DBUS -LIBS_PRIVATE += $$QT_LIBS_DBUS +QT += core-private dbus-private testlib +contains(QT_CONFIG, dbus-linked) { + DEFINES += QT_LINKED_LIBDBUS + LIBS += $$QT_LIBS_DBUS + QMAKE_CXXFLAGS += $$QT_CFLAGS_DBUS +} else { + SOURCES += ../../../../src/dbus/qdbus_symbols.cpp +} SOURCES += main.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 -- cgit v1.2.3