diff options
author | SuHsueyu <anolasc13@gmail.com> | 2022-03-18 13:56:28 +0800 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2022-05-27 14:38:34 +0000 |
commit | 13cf2d1aebd86446d4f6194e977f1e75411784d7 (patch) | |
tree | 5363cffb8854ecb63751d9c7419a1d622f9124b9 | |
parent | d65d4c13fb9f6531399aacb560087e89fc24a282 (diff) | |
download | strace-13cf2d1aebd86446d4f6194e977f1e75411784d7.tar.gz |
tests: add -Y test for waitid
* tests/waitid-Y.c: New file.
* tests/waitid.c (sprint_siginfo): Add "comm" argument.
[!MY_COMM] (MY_COMM): New macro.
[!SKIP_IF_PROC_IS_UNAVAILABLE] (SKIP_IF_PROC_IS_UNAVAILABLE): Likewise.
(do_waitid, main): Use them.
* tests/gen_tests.in (waitid-Y): New test.
* tests/Makefile.am (check_PROGRAMS): Add waitid-Y.
* tests/.gitignore: Likewise.
Co-authored-by: Dmitry V. Levin <ldv@strace.io>
-rw-r--r-- | tests/.gitignore | 1 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/gen_tests.in | 1 | ||||
-rw-r--r-- | tests/waitid-Y.c | 3 | ||||
-rw-r--r-- | tests/waitid.c | 46 |
5 files changed, 37 insertions, 15 deletions
diff --git a/tests/.gitignore b/tests/.gitignore index 5c3598f6e..d7137cbb7 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1043,6 +1043,7 @@ vmsplice wait4 wait4-v waitid +waitid-Y waitid-v waitpid xattr diff --git a/tests/Makefile.am b/tests/Makefile.am index 3b90d5664..c72b595f5 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -371,6 +371,7 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \ unix-pair-sendto-recvfrom \ vfork-f \ wait4-v \ + waitid-Y \ waitid-v \ xet_robust_list--pidns-translation \ xetpgid--pidns-translation \ diff --git a/tests/gen_tests.in b/tests/gen_tests.in index 20b5a24a1..9e83d33d7 100644 --- a/tests/gen_tests.in +++ b/tests/gen_tests.in @@ -1050,6 +1050,7 @@ vmsplice -ewrite=1 wait4 -esignal=none wait4-v -v -e signal=none -e trace=wait4 waitid -esignal=none +waitid-Y -Y -e signal=none -e trace=waitid waitid-v -v -e signal=none -e trace=waitid waitpid -a28 xattr -a22 -e trace=getxattr,fgetxattr,lgetxattr,setxattr,fsetxattr,lsetxattr,listxattr,flistxattr,llistxattr,removexattr,fremovexattr,lremovexattr diff --git a/tests/waitid-Y.c b/tests/waitid-Y.c new file mode 100644 index 000000000..ea142892e --- /dev/null +++ b/tests/waitid-Y.c @@ -0,0 +1,3 @@ +#define MY_COMM "<waitid-Y>" +#define SKIP_IF_PROC_IS_UNAVAILABLE skip_if_unavailable("/proc/self/fd/") +#include "waitid.c" diff --git a/tests/waitid.c b/tests/waitid.c index a14899530..dc1b7c1d3 100644 --- a/tests/waitid.c +++ b/tests/waitid.c @@ -18,6 +18,13 @@ #include "kernel_rusage.h" #include "scno.h" +#ifndef MY_COMM +# define MY_COMM "" +#endif +#ifndef SKIP_IF_PROC_IS_UNAVAILABLE +# define SKIP_IF_PROC_IS_UNAVAILABLE +#endif + static const char * sprint_rusage(const kernel_rusage_t *const ru) { @@ -97,19 +104,21 @@ si_code_2_name(const int code) } static const char * -sprint_siginfo(const siginfo_t *const si, const char *const status_text) +sprint_siginfo(const siginfo_t *const si, const char *const status_text, + const char *const comm) { static char buf[1024]; snprintf(buf, sizeof(buf), "{si_signo=SIGCHLD" ", si_code=%s" - ", si_pid=%d" + ", si_pid=%d%s" ", si_uid=%d" ", si_status=%s" ", si_utime=%llu" ", si_stime=%llu}", si_code_2_name(si->si_code), si->si_pid, + comm, si->si_uid, status_text, zero_extend_signed_to_ull(si->si_utime), @@ -143,6 +152,8 @@ do_waitid(const unsigned int idtype, int main(void) { + SKIP_IF_PROC_IS_UNAVAILABLE; + tprintf("%s", ""); int fds[2]; @@ -165,23 +176,24 @@ main(void) if (do_waitid(P_PID, pid, 0, WNOHANG|WEXITED, 0)) perror_msg_and_fail("waitid #1"); - tprintf("waitid(P_PID, %d, NULL, WNOHANG|WEXITED, NULL) = 0\n", pid); + tprintf("waitid(P_PID, %d%s, NULL, WNOHANG|WEXITED, NULL) = 0\n", + pid, MY_COMM); TAIL_ALLOC_OBJECT_CONST_PTR(siginfo_t, sinfo); memset(sinfo, 0, sizeof(*sinfo)); TAIL_ALLOC_OBJECT_CONST_PTR(kernel_rusage_t, rusage); if (do_waitid(P_PID, pid, sinfo, WNOHANG|WEXITED|WSTOPPED, rusage)) perror_msg_and_fail("waitid #2"); - tprintf("waitid(P_PID, %d, {}, WNOHANG|WEXITED|WSTOPPED, %s) = 0\n", - pid, sprint_rusage(rusage)); + tprintf("waitid(P_PID, %d%s, {}, WNOHANG|WEXITED|WSTOPPED, %s) = 0\n", + pid, MY_COMM, sprint_rusage(rusage)); assert(write(1, "", 1) == 1); (void) close(1); if (do_waitid(P_PID, pid, sinfo, WEXITED, rusage)) perror_msg_and_fail("waitid #3"); - tprintf("waitid(P_PID, %d, %s, WEXITED, %s) = 0\n", - pid, sprint_siginfo(sinfo, "42"), sprint_rusage(rusage)); + tprintf("waitid(P_PID, %d%s, %s, WEXITED, %s) = 0\n", + pid, MY_COMM, sprint_siginfo(sinfo, "42", ""), sprint_rusage(rusage)); pid = fork(); if (pid < 0) @@ -194,8 +206,9 @@ main(void) if (do_waitid(P_PID, pid, sinfo, WEXITED, rusage)) perror_msg_and_fail("waitid #4"); - tprintf("waitid(P_PID, %d, %s, WEXITED, %s) = 0\n", - pid, sprint_siginfo(sinfo, "SIGUSR1"), sprint_rusage(rusage)); + tprintf("waitid(P_PID, %d%s, %s, WEXITED, %s) = 0\n", + pid, MY_COMM, sprint_siginfo(sinfo, "SIGUSR1", ""), + sprint_rusage(rusage)); if (pipe(fds)) perror_msg_and_fail("pipe"); @@ -215,8 +228,9 @@ main(void) if (do_waitid(P_PID, pid, sinfo, WSTOPPED, rusage)) perror_msg_and_fail("waitid #5"); - tprintf("waitid(P_PID, %d, %s, WSTOPPED, %s) = 0\n", - pid, sprint_siginfo(sinfo, "SIGSTOP"), sprint_rusage(rusage)); + tprintf("waitid(P_PID, %d%s, %s, WSTOPPED, %s) = 0\n", + pid, MY_COMM, sprint_siginfo(sinfo, "SIGSTOP", MY_COMM), + sprint_rusage(rusage)); if (kill(pid, SIGCONT)) perror_msg_and_fail("kill(SIGCONT)"); @@ -224,8 +238,9 @@ main(void) #if defined WCONTINUED if (do_waitid(P_PID, pid, sinfo, WCONTINUED, rusage)) perror_msg_and_fail("waitid #6"); - tprintf("waitid(P_PID, %d, %s, WCONTINUED, %s) = 0\n", - pid, sprint_siginfo(sinfo, "SIGCONT"), sprint_rusage(rusage)); + tprintf("waitid(P_PID, %d%s, %s, WCONTINUED, %s) = 0\n", + pid, MY_COMM, sprint_siginfo(sinfo, "SIGCONT", MY_COMM), + sprint_rusage(rusage)); #endif /* WCONTINUED */ assert(write(1, "", 1) == 1); @@ -233,8 +248,9 @@ main(void) if (do_waitid(P_PID, pid, sinfo, WEXITED, rusage)) perror_msg_and_fail("waitid #7"); - tprintf("waitid(P_PID, %d, %s, WEXITED, %s) = 0\n", - pid, sprint_siginfo(sinfo, "0"), sprint_rusage(rusage)); + tprintf("waitid(P_PID, %d%s, %s, WEXITED, %s) = 0\n", + pid, MY_COMM, sprint_siginfo(sinfo, "0", ""), + sprint_rusage(rusage)); long rc = do_waitid(P_ALL, -1, sinfo, WEXITED|WSTOPPED, rusage); tprintf("waitid(P_ALL, -1, %p, WEXITED|WSTOPPED, %p)" |