[PATCH v2 3/5] tests: add a test for -Y option
Masatake YAMATO
yamato at redhat.com
Tue Aug 24 19:26:41 UTC 2021
From: <yamato at redhat.com>
From: Masatake YAMATO <yamato at redhat.com>
* tests/strace-Y-0123456789.c: New file.
* tests/gen_tests.in (strace-Y-0123456789): New test.
* tests/Makefile.am (CHECK_PROGRAMS): Add strace-Y-0123456789.
Signed-off-by: Masatake YAMATO <yamato at redhat.com>
---
tests/.gitignore | 1 +
tests/Makefile.am | 1 +
tests/gen_tests.in | 1 +
tests/strace-Y-0123456789.c | 88 +++++++++++++++++++++++++++++++++++++
4 files changed, 91 insertions(+)
create mode 100644 tests/strace-Y-0123456789.c
diff --git a/tests/.gitignore b/tests/.gitignore
index 485e1ff6e..00d8b044b 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -882,6 +882,7 @@ strace--strings-in-hex-non-ascii
strace-n
strace-x
strace-xx
+strace-Y-0123456789
swap
sxetmask
symlink
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7216b80ce..83fc867f1 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -322,6 +322,7 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \
stack-fcall-mangled \
status-none-threads \
status-unfinished-threads \
+ strace-Y-0123456789 \
syslog-success \
tgkill--pidns-translation \
threads-execve \
diff --git a/tests/gen_tests.in b/tests/gen_tests.in
index 281720c09..55d20b9d4 100644
--- a/tests/gen_tests.in
+++ b/tests/gen_tests.in
@@ -855,6 +855,7 @@ strace--timestamps-unix-us +strace-ttt.test 6 --timestamps=unix,us
strace-n -e trace=listen -n -qq -a 12
strace-x -e trace=chdir -x -a 12
strace-xx -e trace=chdir -xx -a 18
+strace-Y-0123456789 -e trace=getppid -e signal='!SIGCHLD' -q -f -Y -a 18
swap -a23 -e trace=swapon,swapoff
sxetmask -a11 -e trace=sgetmask,ssetmask
symlink -a34
diff --git a/tests/strace-Y-0123456789.c b/tests/strace-Y-0123456789.c
new file mode 100644
index 000000000..6640336ef
--- /dev/null
+++ b/tests/strace-Y-0123456789.c
@@ -0,0 +1,88 @@
+/*
+ * Test strace's -Y option
+ * Copyright (c) 2021 The strace developers.
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+/* The executable built from this source file should
+ * have a long name (> 16) to test how strace reports
+ * the initial value of /proc/$pid/comm.
+ * Even if linux returns a longer name, strace should
+ * not crash. */
+
+#include "tests.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/prctl.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#define NEW_NAME "0123456789abcdefghijklmnopqrstuvwxyz"
+
+static int
+do_default_action(void)
+{
+ pid_t pid = getpid();
+ pid_t ppid = getppid();
+
+ char comm[sizeof(NEW_NAME)];
+ prctl(PR_GET_NAME, comm);
+
+ printf("%-5d<%s> getppid() = %d\n", pid, comm, ppid);
+
+ fflush(stdout);
+
+ pid_t child = fork();
+ if (child < 0)
+ return 1;
+ else if (child == 0) {
+ pid = getpid();
+ ppid = getppid();
+ prctl(PR_GET_NAME, comm);
+ printf("%-5d<%s> getppid() = %d\n", pid, comm, ppid);
+ strcpy(comm, NEW_NAME);
+ prctl(PR_SET_NAME, comm);
+ prctl(PR_GET_NAME, comm);
+ ppid = getppid();
+ printf("%-5d<%s> getppid() = %d\n", pid, comm, ppid);
+ fflush(stdout);
+
+ char * self_argv[] = { (char *)"unused", (char *)"execve", NULL };
+ if (execve("/proc/self/exe", self_argv, NULL) != 0)
+ perror_msg_and_fail("execve");
+
+ }
+ else {
+ int status;
+ wait(&status);
+ printf("%-5d<exe> +++ exited with 0 +++\n", child);
+
+ ppid = getppid();
+ printf("%-5d<%s> getppid() = %d\n", pid, comm, ppid);
+ printf("%-5d<%s> +++ exited with 0 +++\n", pid, comm);
+ return WEXITSTATUS(status);
+ }
+ return 0;
+}
+
+static int
+do_execve_action(int argc, char **argv)
+{
+ return 0;
+}
+
+int
+main(int argc, char **argv)
+{
+ if (argc < 2)
+ return do_default_action();
+ else if (strcmp(argv[1], "execve") == 0)
+ return do_execve_action(argc, argv);
+ else
+ error_msg_and_fail("unexpected argument: %s", argv[1]);
+}
--
2.31.1
More information about the Strace-devel
mailing list