diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-08-22 00:08:46 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-08-22 00:08:46 +0300 |
| commit | 4168cca8124acdbd1866eb87810efe1cfe16903c (patch) | |
| tree | 311b99d22ee32a47753036d6385b19201cb7727e /tests | |
| parent | 6e1ccf81948c356130a0a9bf02cf0027a47b7361 (diff) | |
| download | kmi-4168cca8124acdbd1866eb87810efe1cfe16903c.tar.gz kmi-4168cca8124acdbd1866eb87810efe1cfe16903c.zip | |
add basic ipc-req test
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/common/test.h | 20 | ||||
| -rw-r--r-- | tests/ipc-req/check.mk | 4 | ||||
| -rw-r--r-- | tests/ipc-req/init.c | 36 | ||||
| -rw-r--r-- | tests/ipc-req/source.mk | 2 |
4 files changed, 52 insertions, 10 deletions
diff --git a/tests/common/test.h b/tests/common/test.h index 40e3622..2738bcd 100644 --- a/tests/common/test.h +++ b/tests/common/test.h @@ -177,17 +177,17 @@ static inline id_t sys_req_abs_timer(uint64_t ticks) #define sys_ipc_kick3(pid, d0, d1, d2) syscall4(SYS_IPC_KICK, pid, d0, d1, d2) #define sys_ipc_kick4(pid, d0, d1, d2, d3) syscall5(SYS_IPC_KICK, pid, d0, d1, d2, d3) -#define sys_ipc_resp0(pid) syscall1(SYS_IPC_RESP, pid) -#define sys_ipc_resp1(pid, d0) syscall2(SYS_IPC_RESP, pid, d0) -#define sys_ipc_resp2(pid, d0, d1) syscall3(SYS_IPC_RESP, pid, d0, d1) -#define sys_ipc_resp3(pid, d0, d1, d2) syscall4(SYS_IPC_RESP, pid, d0, d1, d2) -#define sys_ipc_resp4(pid, d0, d1, d2, d3) syscall5(SYS_IPC_RESP, pid, d0, d1, d2, d3) +#define sys_ipc_resp0() syscall0(SYS_IPC_RESP) +#define sys_ipc_resp1(d0) syscall1(SYS_IPC_RESP, d0) +#define sys_ipc_resp2(d0, d1) syscall2(SYS_IPC_RESP, d0, d1) +#define sys_ipc_resp3(d0, d1, d2) syscall3(SYS_IPC_RESP, d0, d1, d2) +#define sys_ipc_resp4(d0, d1, d2, d3) syscall4(SYS_IPC_RESP, d0, d1, d2, d3) -#define sys_ipc_ghost0(pid) syscall1(SYS_IPC_GHOST, pid) -#define sys_ipc_ghost1(pid, d0) syscall2(SYS_IPC_GHOST, pid, d0) -#define sys_ipc_ghost2(pid, d0, d1) syscall3(SYS_IPC_GHOST, pid, d0, d1) -#define sys_ipc_ghost3(pid, d0, d1, d2) syscall4(SYS_IPC_GHOST, pid, d0, d1, d2) -#define sys_ipc_ghost4(pid, d0, d1, d2, d3) syscall5(SYS_IPC_GHOST, pid, d0, d1, d2, d3) +#define sys_ipc_ghost0() syscall1(SYS_IPC_GHOST) +#define sys_ipc_ghost1(d0) syscall2(SYS_IPC_GHOST, d0) +#define sys_ipc_ghost2(d0, d1) syscall3(SYS_IPC_GHOST, d0, d1) +#define sys_ipc_ghost3(d0, d1, d2) syscall4(SYS_IPC_GHOST, d0, d1, d2) +#define sys_ipc_ghost4(d0, d1, d2, d3) syscall5(SYS_IPC_GHOST, d0, d1, d2, d3) static inline enum sys_status sys_set_handler(id_t tid, id_t pid) { diff --git a/tests/ipc-req/check.mk b/tests/ipc-req/check.mk new file mode 100644 index 0000000..db9f580 --- /dev/null +++ b/tests/ipc-req/check.mk @@ -0,0 +1,4 @@ +ipc-req: do-ipc-req + @grep 'BUG' reports/ipc-req/log \ + && echo 'BUG' > reports/ipc-req/OK \ + || tail -n1 reports/ipc-req/log | tr -d '\r' > reports/ipc-req/OK diff --git a/tests/ipc-req/init.c b/tests/ipc-req/init.c new file mode 100644 index 0000000..7f1c6aa --- /dev/null +++ b/tests/ipc-req/init.c @@ -0,0 +1,36 @@ +#include <common/test.h> + +START(pid, tid, d0, d1, d2, d3) +{ + check(pid == 0 || pid == 1, "illegal pid for init"); + if (pid == 0) { + /* send request to ourselves */ + printf("sending ipc req to ourselves\n"); + struct sys_ret r = sys_ipc_req4(1, 1, 2, 3, 4); + printf("returned ipc req to ourselves\n"); + check(r.s == OK, "not OK return\n"); + check(r.a0 == 1, "not OK response ID\n"); + check(r.a1 == 1, "not OK d0 response\n"); + check(r.a2 == 2, "not OK d1 response\n"); + check(r.a3 == 3, "not OK d2 response\n"); + check(r.a4 == 4, "not OK d3 response\n"); + + /* try to request to non-existing proc */ + r = sys_ipc_req0(200); + check(r.s != OK, "got OK return for illegal pid\n"); + } + else if (pid == 1) { + printf("caught ipc req\n"); + check(pid == 1, "illegal pid source\n"); + check(tid == 1, "illegal tid source\n"); + check(d0 == 1, "illegal d0\n"); + check(d1 == 2, "illegal d1\n"); + check(d2 == 3, "illegal d2\n"); + check(d3 == 4, "illegal d3\n"); + + printf("sending response\n"); + sys_ipc_resp4(1, 2, 3, 4); + } + + ok(); +} diff --git a/tests/ipc-req/source.mk b/tests/ipc-req/source.mk new file mode 100644 index 0000000..0e65407 --- /dev/null +++ b/tests/ipc-req/source.mk @@ -0,0 +1,2 @@ +DO != ./scripts/gen-prog -n ipc-req -p init init.c +DO != ./scripts/gen-simple -n ipc-req -p init |
