2013-06-18 16:50:18 +00:00
#!/bin/sh
2015-12-17 17:56:48 +00:00
#
2013-06-18 16:50:18 +00:00
# Ensure that strace can detach from sleeping processes.
2015-12-17 17:56:48 +00:00
#
# Copyright (c) 2013-2015 Dmitry V. Levin <ldv@altlinux.org>
2018-12-24 23:46:43 +00:00
# Copyright (c) 2014-2018 The strace developers.
2015-12-17 17:56:48 +00:00
# All rights reserved.
#
2018-12-10 00:00:00 +00:00
# SPDX-License-Identifier: GPL-2.0-or-later
2013-06-18 16:50:18 +00:00
. "${srcdir=.}/init.sh"
2015-03-17 17:07:57 +00:00
run_prog_skip_if_failed \
kill -0 $$
2015-01-14 08:08:56 +00:00
2014-09-23 01:51:05 +00:00
check_prog sleep
2013-06-18 16:50:18 +00:00
2018-12-22 22:16:03 +00:00
trap - TERM
sleep $TIMEOUT_DURATION &
kill -TERM $!
wait $!
expected_rc=$?
2013-06-18 16:50:18 +00:00
set -e
tests: run every test except ksysent.test in its own subdirectory
Many test executables create temporary files in the current work
directory for the duration of their execution.
This level of test isolation allows more test executables to be invoked
several times simultaneously.
* tests/.gitignore: Add *.dir, remove *.log.*, *.tmp, *.tmp-*,
and *.tmp.* patterns.
* tests/Makefile.am (clean-local, clean-local-check): New rules.
(.PHONY): Add clean-local-check.
(CLEANFILES): Remove all but ksysent.h.
* tests/init.sh: Strip test-specific prefix from LOG, OUT, and EXP
variables. When invoked from a test, create a new test-specific
directory, chdir into it, and add more ../ prefix to STRACE variable.
(run_prog): Replace "./" with "../".
* tests/attach-f-p.test: Replace "./" with "../".
* tests/attach-p-cmd.test: Likewise.
* tests/bexecve.test: Likewise.
* tests/btrfs-v.test: Likewise.
* tests/btrfs-vw.test: Likewise.
* tests/btrfs-w.test: Likewise.
* tests/count.test: Likewise.
* tests/detach-running.test: Likewise.
* tests/detach-sleeping.test: Likewise.
* tests/detach-stopped.test: Likewise.
* tests/mmap.test: Likewise.
* tests/net-y-unix.test: Likewise.
* tests/net-yy-inet.test: Likewise.
* tests/net-yy-netlink.test: Likewise.
* tests/net-yy-unix.test: Likewise.
* tests/net.test: Likewise.
* tests/opipe.test: Likewise.
* tests/poll.test: Likewise.
* tests/prctl-seccomp-strict.test: Likewise.
* tests/qual_fault-exit_group.test: Likewise.
* tests/qual_fault.test: Likewise.
* tests/qual_inject-error-signal.test: Likewise.
* tests/qual_inject-retval.test: Likewise.
* tests/qual_inject-signal.test: Likewise.
* tests/qual_signal.test: Likewise.
* tests/qual_syscall.test: Likewise.
* tests/readv.test: Likewise.
* tests/redirect-fds.test: Likewise.
* tests/sched.test: Likewise.
* tests/scm_rights-fd.test: Likewise.
* tests/seccomp-strict.test: Likewise.
* tests/strace-C.test: Likewise.
* tests/strace-E.expected: Likewise.
* tests/strace-E.test: Likewise.
* tests/strace-S.test: Likewise.
* tests/strace-T.test: Likewise.
* tests/strace-V.test: Likewise.
* tests/strace-ff.test: Likewise.
* tests/strace-k.test: Likewise.
* tests/strace-r.expected: Likewise.
* tests/strace-r.test: Likewise.
* tests/strace-t.test: Likewise.
* tests/strace-tt.test: Likewise.
* tests/strace-ttt.test: Likewise.
* tests/sun_path.test: Likewise.
* tests/uname.test: Likewise.
* tests/unix-pair-send-recv.test: Likewise.
* tests/unix-pair-sendto-recvfrom.test: Likewise.
2017-04-02 01:03:24 +00:00
../set_ptracer_any sleep $((2*$TIMEOUT_DURATION)) > "$LOG" &
2013-06-18 16:50:18 +00:00
2015-03-17 17:07:57 +00:00
while ! [ -s "$LOG" ]; do
2013-06-18 16:50:18 +00:00
kill -0 $! 2> /dev/null ||
fail_ 'set_ptracer_any sleep failed'
2013-06-18 20:51:49 +00:00
$SLEEP_A_BIT
2013-06-18 16:50:18 +00:00
done
tracee_pid=$!
cleanup()
{
set +e
kill $tracee_pid
wait $tracee_pid 2> /dev/null
2014-08-11 01:31:23 -04:00
return 0
2013-06-18 16:50:18 +00:00
}
2015-03-17 17:07:57 +00:00
$STRACE -p $tracee_pid 2> "$LOG" &
2013-06-18 16:50:18 +00:00
2015-03-17 17:07:57 +00:00
while ! grep -F "Process $tracee_pid attached" "$LOG" > /dev/null; do
kill -0 $! 2> /dev/null || {
cleanup
dump_log_and_fail_with "$STRACE -p failed to attach"
}
2013-06-18 20:51:49 +00:00
$SLEEP_A_BIT
2013-06-18 16:50:18 +00:00
done
2018-12-22 22:16:03 +00:00
kill -TERM $!
wait $! && rc=0 || rc=$?
2013-06-18 16:50:18 +00:00
2015-03-17 17:07:57 +00:00
grep -F "Process $tracee_pid detached" "$LOG" > /dev/null || {
cleanup
dump_log_and_fail_with "$STRACE -p failed to detach"
}
2013-06-18 16:50:18 +00:00
2018-12-22 22:16:03 +00:00
[ "$rc" = "$expected_rc" ] || {
cleanup
dump_log_and_fail_with "$STRACE -p failed to terminate itself"
}
2013-06-19 14:57:05 +00:00
if [ -f /proc/self/status ]; then
$SLEEP_A_BIT
2015-03-17 17:07:57 +00:00
test -d /proc/$tracee_pid || {
cleanup
dump_log_and_fail_with 'tracee died after detach'
}
2016-12-13 19:59:47 +00:00
grep_pid_status "$tracee_pid" '^State:.*S (sleeping)' > /dev/null || {
grep_pid_status "$tracee_pid" '^State:'
2013-06-19 14:57:05 +00:00
cleanup
2015-03-17 17:07:57 +00:00
dump_log_and_fail_with 'tracee is not sleeping after detach'
2013-06-19 16:37:24 +02:00
}
2013-06-19 14:57:05 +00:00
fi
2013-06-19 16:37:24 +02:00
2013-06-18 16:50:18 +00:00
cleanup
exit 0