chiark / gitweb /
bus: parse uid/gid/pid/tid meta data from kdbus messages
[elogind.git] / src / libsystemd-bus / test-bus-marshal.c
index 08364ef48b77c480545fea04b936ac13c460de48..20ae723fbe1a3640014399ec98c690f81f86d485 100644 (file)
@@ -37,8 +37,8 @@
 
 int main(int argc, char *argv[]) {
         _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
-        int r;
-        const char *x, *y, *z, *a, *b, *c;
+        int r, boolean;
+        const char *x, *y, *z, *a, *b, *c, *d;
         uint8_t u, v;
         void *buffer = NULL;
         size_t sz;
@@ -50,6 +50,9 @@ int main(int argc, char *argv[]) {
         r = sd_bus_message_append(m, "s", "a string");
         assert_se(r >= 0);
 
+        r = sd_bus_message_append(m, "s", NULL);
+        assert_se(r < 0);
+
         r = sd_bus_message_append(m, "as", 2, "string #1", "string #2");
         assert_se(r >= 0);
 
@@ -74,10 +77,10 @@ int main(int argc, char *argv[]) {
         r = sd_bus_message_close_container(m);
         assert_se(r >= 0);
 
-        r = message_seal(m, 4711);
+        r = bus_message_seal(m, 4711);
         assert_se(r >= 0);
 
-        message_dump(m);
+        bus_message_dump(m);
 
         r = bus_message_get_blob(m, &buffer, &sz);
         assert_se(r >= 0);
@@ -93,7 +96,9 @@ int main(int argc, char *argv[]) {
                 GDBusMessage *g;
                 char *p;
 
+#if !defined(GLIB_VERSION_2_36)
                 g_type_init();
+#endif
 
                 g = g_dbus_message_new_from_blob(buffer, sz, 0, NULL);
                 p = g_dbus_message_print(g, 0);
@@ -116,14 +121,55 @@ int main(int argc, char *argv[]) {
                         dbus_message_unref(w);
         }
 
-        free(buffer);
+        m = sd_bus_message_unref(m);
 
-        /* r = sd_bus_message_read(m, "sas", &x, 5, &y, &z, &a, &b, &c); */
-        /* assert_se(r >= 0); */
+        r = bus_message_from_malloc(buffer, sz, NULL, 0, NULL, NULL, &m);
+        assert_se(r >= 0);
 
-        /* r = sd_bus_message_read(m, "a{yv}", 2, */
-        /*                        &u, "s", &x, */
-        /*                        &v, "s", &y); */
+        bus_message_dump(m);
+
+        assert_se(sd_bus_message_rewind(m, true) >= 0);
+
+        r = sd_bus_message_read(m, "sas", &x, 2, &y, &z);
+        assert_se(r > 0);
+        assert_se(streq(x, "a string"));
+        assert_se(streq(y, "string #1"));
+        assert_se(streq(z, "string #2"));
+
+        r = sd_bus_message_read(m, "sass", &x, 5, &y, &z, &a, &b, &c, &d);
+        assert_se(r > 0);
+        assert_se(streq(x, "foobar"));
+        assert_se(streq(y, "foo"));
+        assert_se(streq(z, "bar"));
+        assert_se(streq(a, "waldo"));
+        assert_se(streq(b, "piep"));
+        assert_se(streq(c, "pap"));
+        assert_se(streq(d, "after"));
+
+        r = sd_bus_message_read(m, "a{yv}", 2, &u, "s", &x, &v, "s", &y);
+        assert_se(r > 0);
+        assert_se(u == 3);
+        assert_se(streq(x, "foo"));
+        assert_se(v == 5);
+        assert_se(streq(y, "waldo"));
+
+        r = sd_bus_message_read(m, "ba(ss)", &boolean, 3, &x, &y, &a, &b, &c, &d);
+        assert_se(r > 0);
+        assert_se(boolean);
+        assert_se(streq(x, "aaa"));
+        assert_se(streq(y, "1"));
+        assert_se(streq(a, "bbb"));
+        assert_se(streq(b, "2"));
+        assert_se(streq(c, "ccc"));
+        assert_se(streq(d, "3"));
+
+        r = sd_bus_message_read(m, "as", 2, &x, &y);
+        assert_se(r > 0);
+        assert_se(streq(x, "foobar"));
+        assert_se(streq(y, "waldo"));
+
+        r = sd_bus_message_peek_type(m, NULL, NULL);
+        assert_se(r == 0);
 
         return 0;
 }