summaryrefslogtreecommitdiff
path: root/tests/test-dbus-qeventloop
diff options
context:
space:
mode:
authorMartin Wolf <ext-martin.2.wolf@nokia.com>2010-02-08 14:39:14 +0200
committerMartin Wolf <ext-martin.2.wolf@nokia.com>2010-02-08 14:39:14 +0200
commitfd22517204cd038ff47b33ccb05cc17384eb8230 (patch)
tree5ef3026f5c73ea51fd42b3db30e53b48a1727c0f /tests/test-dbus-qeventloop
parent6751c585385f017d08540bbe121606d642afb220 (diff)
Small refactoring, added unit tests
Diffstat (limited to 'tests/test-dbus-qeventloop')
-rw-r--r--tests/test-dbus-qeventloop/test-dbus-qeventloop.cpp136
1 files changed, 116 insertions, 20 deletions
diff --git a/tests/test-dbus-qeventloop/test-dbus-qeventloop.cpp b/tests/test-dbus-qeventloop/test-dbus-qeventloop.cpp
index f50f95a..f39d3ea 100644
--- a/tests/test-dbus-qeventloop/test-dbus-qeventloop.cpp
+++ b/tests/test-dbus-qeventloop/test-dbus-qeventloop.cpp
@@ -7,6 +7,7 @@ class TestDbusQEventLoop: public QObject
private:
DBusConnection* systemBus;
+ DBusConnection* sessionBus;
DBUSConnectionEventLoop* dbusEventLoop;
void resetValues()
@@ -16,9 +17,10 @@ private:
responseInt = 0;
typeError = false;
noResponse = false;
+ timerTimeout = false;
}
- void processQTEventLoop(DBusPendingCall* pending)
+ void processQTEventLoop(DBusPendingCall* pending, int timeout)
{
// Reset response values to zeros and reset errors
resetValues();
@@ -32,19 +34,29 @@ private:
// If we have some pending operation, let's get notification about result
dbus_pending_call_set_notify(pending, TestDbusQEventLoop::pendingNotify, this, NULL);
+ // Setup timeout timer
+ startTimer(timeout);
+
// Pump QT event loop, but only until pending operation is not finished
while( !wasInNotifyFnc )
{
QCoreApplication::processEvents(QEventLoop::AllEvents);
+ if( timerTimeout )
+ {
+ return;
+ }
}
}
public:
+ int pongServerRunningSession;
+ int pongServerRunningSystem;
int wasInNotifyFnc;
const char* responseString;
uint32_t responseInt;
bool typeError;
bool noResponse;
+ bool timerTimeout;
TestDbusQEventLoop()
{
@@ -52,6 +64,12 @@ public:
}
protected:
+ void timerEvent(QTimerEvent *e)
+ {
+ timerTimeout = true;
+ killTimer(e->timerId());
+ }
+
static void pendingNotify(DBusPendingCall *pending, void *user_data)
{
MYDEBUG();
@@ -76,9 +94,13 @@ protected:
case DBUS_TYPE_STRING:
dbus_message_iter_get_basic(&args, &pThis->responseString);
if( error != NULL )
+ {
MYDEBUGC("Got error [%s]: %s", error, pThis->responseString);
+ }
else
+ {
MYDEBUGC("Got Reply: %s", pThis->responseString);
+ }
break;
case DBUS_TYPE_BOOLEAN:
case DBUS_TYPE_UINT32:
@@ -102,37 +124,109 @@ protected:
private slots:
void initTestCase()
{
+ // First allocate and obtain
+ dbusEventLoop = new DBUSConnectionEventLoop();
systemBus = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
- QVERIFY(systemBus != NULL);
+ sessionBus = dbus_bus_get(DBUS_BUS_SESSION, NULL);;
+ // Last check, if server is running
+ pongServerRunningSystem = dbus_bus_name_has_owner(systemBus, "com.nokia.dbusqeventloop.test", NULL);
+ pongServerRunningSession = dbus_bus_name_has_owner(sessionBus, "com.nokia.dbusqeventloop.test", NULL);
- dbusEventLoop = new DBUSConnectionEventLoop();
- QVERIFY(dbusEventLoop != NULL);
- QVERIFY(dbus_bus_name_has_owner(systemBus, "com.nokia.dbusqeventloop.test", NULL) == true);
+ // Create event loop ...
+ QVERIFY(dbusEventLoop != NULL);
+ QVERIFY(dbusEventLoop->addConnection(systemBus) == true);
+ QVERIFY(dbusEventLoop->addConnection(sessionBus) == true);
+ // Then test ... otherwise something don't have to be allocated (i.e. event loop)
+ QVERIFY(systemBus != NULL);
+ QVERIFY(sessionBus != NULL);
+ QVERIFY(pongServerRunningSystem != 0);
+ QVERIFY(pongServerRunningSession != 0);
}
void cleanupTestCase()
{
DBusMessage* message = dbus_message_new_method_call("com.nokia.dbusqeventloop.test", "/", NULL, "quit");
- QVERIFY(message != NULL);
DBusPendingCall* pending;
- dbus_connection_send_with_reply(systemBus, message, &pending, 3000);
- dbus_message_unref(message);
+ QVERIFY(message != NULL);
- processQTEventLoop(pending);
- QVERIFY(responseInt == 12345);
+ // Set correct values to suppress fake errors if connection fails in initTestCase()
+ bool systemTimeout = false, sessionTimeout = false;
+ int systemResponse = 12345, sessionResponse = 12345;
+
+ if( pongServerRunningSystem )
+ {
+ dbus_connection_send_with_reply(systemBus, message, &pending, 1000);
+
+ processQTEventLoop(pending, 4000);
+ systemTimeout = timerTimeout;
+ systemResponse = responseInt;
+ }
+
+ if( pongServerRunningSession )
+ {
+ dbus_connection_send_with_reply(sessionBus, message, &pending, 1000);
+
+ processQTEventLoop(pending, 4000);
+ sessionTimeout = timerTimeout;
+ sessionResponse = responseInt;
+ }
+
+ if( message )
+ {
+ dbus_message_unref(message);
+ }
QVERIFY(dbusEventLoop != NULL);
- delete dbusEventLoop;
- dbusEventLoop = NULL;
+ if( dbusEventLoop )
+ {
+ delete dbusEventLoop;
+ dbusEventLoop = NULL;
+ }
+
+ QVERIFY(systemTimeout == false);
+ QVERIFY(systemResponse == 12345);
+ QVERIFY(sessionTimeout == false);
+ QVERIFY(sessionResponse == 12345);
}
- void initConnectionTest()
+ void pingSystemBusTest()
{
- QVERIFY(dbusEventLoop->initConnection(systemBus) == true);
+ DBusMessage* message = dbus_message_new_method_call("com.nokia.dbusqeventloop.test", "/", NULL, "ping");
+ QVERIFY(message != NULL);
+
+ const char* temp = "pekny kohutik co sa prechadza po svojom novom dvore a obzera si sliepocky";
+ dbus_message_append_args(message, DBUS_TYPE_STRING, &temp, DBUS_TYPE_INVALID);
+
+ DBusPendingCall* pending;
+ dbus_connection_send_with_reply(systemBus, message, &pending, 3000);
+
+ // Free the signal now we have finished with it
+ dbus_message_unref(message);
+
+ processQTEventLoop(pending, 4000);
+ QVERIFY(timerTimeout == false);
+ QVERIFY(strcmp(temp, responseString) == 0);
}
+/*
+ void timeoutSystemBusTest()
+ {
+ DBusMessage* message = dbus_message_new_method_call("com.nokia.dbusqeventloop.test", "/", NULL, "timeout");
+ QVERIFY(message != NULL);
+
+ DBusPendingCall* pending;
+ dbus_connection_send_with_reply(systemBus, message, &pending, 1000);
+
+ // Free the signal now we have finished with it
+ dbus_message_unref(message);
- void pingTest()
+ processQTEventLoop(pending, 4000);
+ QVERIFY(timerTimeout == false);
+ QVERIFY(noResponse == true);
+ sleep(1);
+ }
+*/
+ void pingSessionBusTest()
{
DBusMessage* message = dbus_message_new_method_call("com.nokia.dbusqeventloop.test", "/", NULL, "ping");
QVERIFY(message != NULL);
@@ -141,27 +235,29 @@ private slots:
dbus_message_append_args(message, DBUS_TYPE_STRING, &temp, DBUS_TYPE_INVALID);
DBusPendingCall* pending;
- dbus_connection_send_with_reply(systemBus, message, &pending, 3000);
+ dbus_connection_send_with_reply(sessionBus, message, &pending, 3000);
// Free the signal now we have finished with it
dbus_message_unref(message);
- processQTEventLoop(pending);
+ processQTEventLoop(pending, 4000);
+ QVERIFY(timerTimeout == false);
QVERIFY(strcmp(temp, responseString) == 0);
}
- void timeoutTest()
+ void timeoutSessionBusTest()
{
DBusMessage* message = dbus_message_new_method_call("com.nokia.dbusqeventloop.test", "/", NULL, "timeout");
QVERIFY(message != NULL);
DBusPendingCall* pending;
- dbus_connection_send_with_reply(systemBus, message, &pending, 1000);
+ dbus_connection_send_with_reply(sessionBus, message, &pending, 1000);
// Free the signal now we have finished with it
dbus_message_unref(message);
- processQTEventLoop(pending);
+ processQTEventLoop(pending, 4000);
+ QVERIFY(timerTimeout == false);
QVERIFY(noResponse == true);
sleep(1);
}