summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDjalal Harouni <tixxdz@opendz.org>2014-10-25 12:31:10 +0100
committerDjalal Harouni <tixxdz@opendz.org>2014-10-25 12:31:10 +0100
commitbac48f70a4b8a1daf0ef0297e0cf75fd93ba8eb4 (patch)
treea0e7a1a12ee9ee49e017838b01d2973dceec6488 /test
parentad8ea54a3e08c32da857a4748ceb25ccbecbebd6 (diff)
downloadkdbus-bus-bac48f70a4b8a1daf0ef0297e0cf75fd93ba8eb4.tar.gz
kdbus-bus-bac48f70a4b8a1daf0ef0297e0cf75fd93ba8eb4.tar.bz2
kdbus-bus-bac48f70a4b8a1daf0ef0297e0cf75fd93ba8eb4.zip
test-monitor: add KDBUS_CMD_CONN_UPDATE tests for monitor connections
Signed-off-by: Djalal Harouni <tixxdz@opendz.org>
Diffstat (limited to 'test')
-rw-r--r--test/test-monitor.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/test/test-monitor.c b/test/test-monitor.c
index 59a6ab08840..dfda5dccb7a 100644
--- a/test/test-monitor.c
+++ b/test/test-monitor.c
@@ -21,6 +21,18 @@
#include "kdbus-enum.h"
#include "kdbus-test.h"
+static bool kdbus_item_in_message(struct kdbus_msg *msg,
+ uint64_t type)
+{
+ const struct kdbus_item *item;
+
+ KDBUS_ITEM_FOREACH(item, msg, items)
+ if (item->type == type)
+ return true;
+
+ return false;
+}
+
int kdbus_test_monitor(struct kdbus_test_env *env)
{
struct kdbus_conn *monitor, *conn;
@@ -83,6 +95,60 @@ int kdbus_test_monitor(struct kdbus_test_env *env)
kdbus_msg_free(msg);
kdbus_free(monitor, offset);
+ /*
+ * Since we are the only monitor, update the attach flags
+ * and tell we are not interessted in attach flags
+ */
+
+ ret = kdbus_conn_update_attach_flags(monitor, 0);
+ ASSERT_RETURN(ret == 0);
+
+ cookie++;
+ ret = kdbus_msg_send(env->conn, NULL, cookie, 0, 0, 0,
+ KDBUS_DST_ID_BROADCAST);
+ ASSERT_RETURN(ret == 0);
+
+ ret = kdbus_msg_recv_poll(monitor, 100, &msg, &offset);
+ ASSERT_RETURN(ret == 0);
+ ASSERT_RETURN(msg->cookie == cookie);
+
+ ret = kdbus_item_in_message(msg, KDBUS_ITEM_TIMESTAMP);
+ ASSERT_RETURN(ret == 0);
+
+ kdbus_msg_free(msg);
+ kdbus_free(monitor, offset);
+
+ /*
+ * Now we are interested in KDBUS_ITEM_TIMESTAMP and
+ * KDBUS_ITEM_CREDS
+ */
+ ret = kdbus_conn_update_attach_flags(monitor,
+ KDBUS_ATTACH_TIMESTAMP |
+ KDBUS_ATTACH_CREDS);
+ ASSERT_RETURN(ret == 0);
+
+ cookie++;
+ ret = kdbus_msg_send(env->conn, NULL, cookie, 0, 0, 0,
+ KDBUS_DST_ID_BROADCAST);
+ ASSERT_RETURN(ret == 0);
+
+ ret = kdbus_msg_recv_poll(monitor, 100, &msg, &offset);
+ ASSERT_RETURN(ret == 0);
+ ASSERT_RETURN(msg->cookie == cookie);
+
+ ret = kdbus_item_in_message(msg, KDBUS_ITEM_TIMESTAMP);
+ ASSERT_RETURN(ret == 1);
+
+ ret = kdbus_item_in_message(msg, KDBUS_ITEM_CREDS);
+ ASSERT_RETURN(ret == 1);
+
+ /* the KDBUS_ITEM_PID_COMM was not requested */
+ ret = kdbus_item_in_message(msg, KDBUS_ITEM_PID_COMM);
+ ASSERT_RETURN(ret == 0);
+
+ kdbus_msg_free(msg);
+ kdbus_free(monitor, offset);
+
kdbus_conn_free(monitor);
kdbus_conn_free(conn);