summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am11
-rw-r--r--test/dbus_py_test.c101
-rwxr-xr-xtest/run-test.sh6
-rw-r--r--test/test-unusable-main-loop.py17
4 files changed, 134 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am
index 6f01a1e..43264c1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,6 +19,7 @@ EXTRA_DIST = API_CHANGES.txt dbus-python.pc.in HACKING.txt \
test/test-service.py \
test/test-signals.py \
test/test-standalone.py \
+ test/test-unusable-main-loop.py \
test/TestSuitePythonService.service.in \
test/tmp-session-bus.conf.in
# miss out the gconf examples for now - they don't work
@@ -47,7 +48,8 @@ nobase_python_PYTHON = dbus_bindings.py \
# === Python C extensions ===
-pyexec_LTLIBRARIES = _dbus_bindings.la _dbus_glib_bindings.la
+pyexec_LTLIBRARIES = _dbus_bindings.la _dbus_glib_bindings.la \
+ dbus_py_test.la
_dbus_bindings_la_CPPFLAGS = -I$(srcdir)/include \
$(DBUS_CFLAGS) \
$(PYTHON_INCLUDES)
@@ -91,6 +93,13 @@ _dbus_glib_bindings_la_LDFLAGS = -module -avoid-version \
_dbus_glib_bindings_la_SOURCES = _dbus_glib_bindings/module.c \
include/dbus-python.h
+dbus_py_test_la_CPPFLAGS = -I$(top_srcdir)/include $(DBUS_CFLAGS) \
+ $(PYTHON_INCLUDES)
+dbus_py_test_la_LDFLAGS = -module -avoid-version \
+ $(DBUS_LIBS)
+dbus_py_test_la_SOURCES = test/dbus_py_test.c \
+ include/dbus-python.h
+
# === Tests ===
PWD = `pwd`
diff --git a/test/dbus_py_test.c b/test/dbus_py_test.c
new file mode 100644
index 0000000..7ef63c4
--- /dev/null
+++ b/test/dbus_py_test.c
@@ -0,0 +1,101 @@
+/* Test fixtures for dbus-python, based on _dbus_glib_bindings. */
+
+#include <Python.h>
+#include "dbus-python.h"
+
+#if defined(__GNUC__)
+# if __GNUC__ >= 3
+# define UNUSED __attribute__((__unused__))
+# else
+# define UNUSED /*nothing*/
+# endif
+#else
+# define UNUSED /*nothing*/
+#endif
+
+static dbus_bool_t
+dbus_py_test_set_up_conn(DBusConnection *conn UNUSED, void *data UNUSED)
+{
+ PyErr_SetString(PyExc_ValueError, "Dummy error from UnusableMainLoop");
+ return 0;
+}
+
+static dbus_bool_t
+dbus_py_test_set_up_srv(DBusServer *srv UNUSED, void *data UNUSED)
+{
+ PyErr_SetString(PyExc_ValueError, "Dummy error from UnusableMainLoop");
+ return 0;
+}
+
+static void
+dbus_py_test_free(void *data UNUSED)
+{
+}
+
+static PyObject *
+dbus_test_native_mainloop(void)
+{
+ PyObject *loop = DBusPyNativeMainLoop_New4(dbus_py_test_set_up_conn,
+ dbus_py_test_set_up_srv,
+ dbus_py_test_free,
+ NULL);
+ return loop;
+}
+
+static PyObject *
+UnusableMainLoop (PyObject *always_null UNUSED, PyObject *args, PyObject *kwargs)
+{
+ PyObject *mainloop, *function, *result;
+ int set_as_default = 0;
+ static char *argnames[] = {"set_as_default", NULL};
+
+ if (PyTuple_Size(args) != 0) {
+ PyErr_SetString(PyExc_TypeError, "UnusableMainLoop() takes no "
+ "positional arguments");
+ return NULL;
+ }
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|i", argnames,
+ &set_as_default)) {
+ return NULL;
+ }
+
+ mainloop = dbus_test_native_mainloop();
+ if (mainloop && set_as_default) {
+ if (!_dbus_bindings_module) {
+ PyErr_SetString(PyExc_ImportError, "_dbus_bindings not imported");
+ Py_DECREF(mainloop);
+ return NULL;
+ }
+ function = PyObject_GetAttrString(_dbus_bindings_module,
+ "set_default_main_loop");
+ if (!function) {
+ Py_DECREF(mainloop);
+ return NULL;
+ }
+ result = PyObject_CallFunctionObjArgs(function, mainloop, NULL);
+ Py_DECREF(function);
+ if (!result) {
+ Py_DECREF(mainloop);
+ return NULL;
+ }
+ }
+ return mainloop;
+}
+
+static PyMethodDef module_functions[] = {
+ {"UnusableMainLoop", (PyCFunction)UnusableMainLoop,
+ METH_VARARGS|METH_KEYWORDS, "Return a main loop that fails to attach"},
+ {NULL, NULL, 0, NULL}
+};
+
+PyMODINIT_FUNC
+initdbus_py_test(void)
+{
+ PyObject *this_module;
+
+ if (import_dbus_bindings("dbus_py_test") < 0) return;
+ this_module = Py_InitModule3 ("dbus_py_test", module_functions, "");
+ if (!this_module) return;
+}
+
+/* vim:set ft=c cino< sw=4 sts=4 et: */
diff --git a/test/run-test.sh b/test/run-test.sh
index 0cc5a7d..6058afa 100755
--- a/test/run-test.sh
+++ b/test/run-test.sh
@@ -1,5 +1,8 @@
#! /bin/bash
+export DBUS_FATAL_WARNINGS=1
+ulimit -c unlimited
+
function die()
{
if ! test -z "$DBUS_SESSION_BUS_PID" ; then
@@ -37,6 +40,9 @@ fi
echo "running test-standalone.py"
$PYTHON "$DBUS_TOP_SRCDIR"/test/test-standalone.py || die "test-standalone.py failed"
+echo "running test-unusable-main-loop.py"
+$PYTHON "$DBUS_TOP_SRCDIR"/test/test-unusable-main-loop.py || die "... failed"
+
echo "running the examples"
$PYTHON "$DBUS_TOP_SRCDIR"/examples/example-service.py &
diff --git a/test/test-unusable-main-loop.py b/test/test-unusable-main-loop.py
new file mode 100644
index 0000000..8bd8e99
--- /dev/null
+++ b/test/test-unusable-main-loop.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+
+import dbus
+
+from dbus_py_test import UnusableMainLoop
+
+def main():
+ UnusableMainLoop(set_as_default=True)
+ try:
+ bus = dbus.SessionBus()
+ except ValueError, e:
+ print "Correctly got ValueError from UnusableMainLoop"
+ else:
+ raise AssertionError("Expected ValueError from UnusableMainLoop")
+
+if __name__ == '__main__':
+ main()