[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 05/14] add mach_port tests
From: |
Luca Dariz |
Subject: |
[PATCH 05/14] add mach_port tests |
Date: |
Thu, 28 Dec 2023 20:42:52 +0100 |
---
tests/test-mach_port.c | 80 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
create mode 100644 tests/test-mach_port.c
diff --git a/tests/test-mach_port.c b/tests/test-mach_port.c
new file mode 100644
index 00000000..4f095047
--- /dev/null
+++ b/tests/test-mach_port.c
@@ -0,0 +1,80 @@
+
+#include <mach/message.h>
+#include <mach/mach_types.h>
+#include <mach/vm_param.h>
+
+#include <syscalls.h>
+#include <testlib.h>
+
+#include <mach.user.h>
+#include <mach_port.user.h>
+
+void test_mach_port(void)
+{
+ kern_return_t err;
+
+ mach_port_name_t *namesp;
+ mach_msg_type_number_t namesCnt=0;
+ mach_port_type_t *typesp;
+ mach_msg_type_number_t typesCnt=0;
+ err = mach_port_names(mach_task_self(), &namesp, &namesCnt, &typesp,
&typesCnt);
+ ASSERT_RET(err, "mach_port_names");
+ printf("mach_port_names: type/name length: %d %d\n", namesCnt, typesCnt);
+ ASSERT((namesCnt != 0) && (namesCnt == typesCnt),
+ "mach_port_names: wrong type/name length");
+ for (int i=0; i<namesCnt; i++)
+ printf("port name %d type %x\n", namesp[i], typesp[i]);
+
+ /*
+ * test mach_port_type()
+ * use the ports we have already as bootstrap modules
+ * maybe we could do more checks on the bootstrap ports, on other modules
+ */
+ mach_port_type_t pt;
+ err = mach_port_type(mach_task_self(), host_priv(), &pt);
+ ASSERT_RET(err, "mach_port_type host_priv");
+ ASSERT(pt == MACH_PORT_TYPE_SEND, "wrong type for host_priv");
+
+ err = mach_port_type(mach_task_self(), device_priv(), &pt);
+ ASSERT_RET(err, "mach_port_type device_priv");
+ ASSERT(pt == MACH_PORT_TYPE_SEND, "wrong type for device_priv");
+
+ err = mach_port_rename(mach_task_self(), device_priv(), 111);
+ ASSERT_RET(err, "mach_port_rename");
+ // FIXME: it seems we can't restore the old name
+ err = mach_port_rename(mach_task_self(), 111, 112);
+ ASSERT_RET(err, "mach_port_rename restore orig");
+
+ err = mach_port_allocate_name(mach_task_self(), MACH_PORT_RIGHT_RECEIVE,
1000);
+ ASSERT_RET(err, "mach_port_allocate_name");
+ err = mach_port_allocate_name(mach_task_self(), MACH_PORT_RIGHT_PORT_SET,
1001);
+ ASSERT_RET(err, "mach_port_allocate_name");
+ err = mach_port_allocate_name(mach_task_self(), MACH_PORT_RIGHT_DEAD_NAME,
1002);
+ ASSERT_RET(err, "mach_port_allocate_name");
+
+ mach_port_t newname = 123;
+ err = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE,
&newname);
+ ASSERT_RET(err, "mach_port_allocate");
+ err = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_PORT_SET,
&newname);
+ ASSERT_RET(err, "mach_port_allocate");
+ err = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_DEAD_NAME,
&newname);
+ ASSERT_RET(err, "mach_port_allocate");
+
+ err = mach_port_destroy(mach_task_self(), newname);
+ ASSERT_RET(err, "mach_port_destroy");
+
+ err = mach_port_deallocate(mach_task_self(), 1002);
+ ASSERT_RET(err, "mach_port_deallocate");
+
+ mach_port_urefs_t urefs;
+ err = mach_port_get_refs(mach_task_self(), 1002, MACH_PORT_RIGHT_DEAD_NAME,
&urefs);
+ ASSERT_RET(err, "mach_port_get_refs");
+
+ // TODO test other rpc
+}
+
+int main(int argc, char *argv[], int envc, char *envp[])
+{
+ test_mach_port();
+ return 0;
+}
--
2.39.2
[PATCH 08/14] add thread creation helper to tests, Luca Dariz, 2023/12/28
[PATCH 03/14] add mach_host tests, Luca Dariz, 2023/12/28