summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuHsueyu <anolasc13@gmail.com>2022-03-18 13:56:28 +0800
committerDmitry V. Levin <ldv@strace.io>2022-05-27 14:38:34 +0000
commit13cf2d1aebd86446d4f6194e977f1e75411784d7 (patch)
tree5363cffb8854ecb63751d9c7419a1d622f9124b9
parentd65d4c13fb9f6531399aacb560087e89fc24a282 (diff)
downloadstrace-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/.gitignore1
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/gen_tests.in1
-rw-r--r--tests/waitid-Y.c3
-rw-r--r--tests/waitid.c46
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)"