summaryrefslogtreecommitdiff
path: root/test/dbus_py_test.c
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2007-01-16 19:52:45 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2007-01-16 19:52:45 +0000
commit47860b5c25c823587e4e06636acc926b252fe114 (patch)
tree3f1b75023ce6ba31a444e06af1d1b008fb432c78 /test/dbus_py_test.c
parent916df7703d828afec95635d309ca83bc1c05fd98 (diff)
Add regression test for main loop failure handling (a main loop that never works)
Also run tests with DBUS_FATAL_WARNINGS and ulimit -c unlimited so they dump core at the slightest provocation.
Diffstat (limited to 'test/dbus_py_test.c')
-rw-r--r--test/dbus_py_test.c101
1 files changed, 101 insertions, 0 deletions
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: */