[vala/0.34] tests: Add test for dbus fd passing failures
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/0.34] tests: Add test for dbus fd passing failures
- Date: Wed, 1 Mar 2017 10:21:51 +0000 (UTC)
commit c6b5371449156e0e234b15e66aca262fb02348b3
Author: Carlos Garnacho <carlosg gnome org>
Date: Sat Feb 18 15:05:06 2017 +0100
tests: Add test for dbus fd passing failures
The server will exhaust all fds before the fd list in the dbus
request is opened. We do expect it to fail in the client.
https://bugzilla.gnome.org/show_bug.cgi?id=778540
tests/Makefile.am | 1 +
tests/dbus/filedescriptor-errors.test | 77 +++++++++++++++++++++++++++++++++
2 files changed, 78 insertions(+), 0 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7f984ef..5a4012e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -217,6 +217,7 @@ TESTS = \
dbus/async-errors.test \
dbus/signals.test \
dbus/filedescriptor.test \
+ dbus/filedescriptor-errors.test \
dbus/dicts.test \
dbus/bug596862.vala \
dbus/bug602003.test \
diff --git a/tests/dbus/filedescriptor-errors.test b/tests/dbus/filedescriptor-errors.test
new file mode 100644
index 0000000..96f28cf
--- /dev/null
+++ b/tests/dbus/filedescriptor-errors.test
@@ -0,0 +1,77 @@
+Packages: gio-2.0 gio-unix-2.0 posix
+D-Bus
+
+Program: client
+
+[DBus (name = "org.example.Test")]
+interface Test : Object {
+ public abstract string test (UnixOutputStream output_stream) throws IOError;
+}
+
+void pipe (out UnixInputStream input, out UnixOutputStream output) throws IOError {
+ int pipefd[2];
+ if (Posix.pipe (pipefd) < 0) {
+ throw new IOError.FAILED ("Pipe creation failed");
+ }
+ input = new UnixInputStream (pipefd[0], true);
+ output = new UnixOutputStream (pipefd[1], true);
+}
+
+void main () {
+ // client
+ Test test = Bus.get_proxy_sync (BusType.SESSION, "org.example.Test", "/org/example/test");
+
+ UnixInputStream i;
+ UnixOutputStream o;
+ pipe (out i, out o);
+
+ try {
+ test.test (o);
+ // We expect the request to fail
+ assert_not_reached ();
+ } catch (Error e) {
+ }
+}
+
+Program: server
+
+[DBus (name = "org.example.Test")]
+class Test : Object {
+ public void test (UnixOutputStream output_stream) throws IOError {
+ uint8[] buffer = new uint8[1];
+ buffer[0] = 42;
+ output_stream.write (buffer);
+ }
+}
+
+MainLoop main_loop;
+
+void client_exit (Pid pid, int status) {
+ // client finished, terminate server
+ assert (status == 0);
+ main_loop.quit ();
+}
+
+void main () {
+ var conn = Bus.get_sync (BusType.SESSION);
+ conn.register_object ("/org/example/test", new Test ());
+
+ // try to register service in session bus
+ var request_result = conn.call_sync ("org.freedesktop.DBus", "/org/freedesktop/DBus",
"org.freedesktop.DBus", "RequestName",
+ new Variant ("(su)", "org.example.Test", 0x4), null, 0, -1);
+ assert ((uint) request_result.get_child_value (0) == 1);
+
+ // server ready, spawn client
+ Pid client_pid;
+ Process.spawn_async (null, { "test", "/dbus/filedescriptor-errors/client" }, null,
SpawnFlags.DO_NOT_REAP_CHILD, null, out client_pid);
+ ChildWatch.add (client_pid, client_exit);
+
+ main_loop = new MainLoop ();
+
+ /* Exhaust fds before the incoming request */
+ int fd = 0;
+ while (fd >= 0)
+ fd = Posix.open ("/", 0);
+
+ main_loop.run ();
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]