strace/tests/detach-stopped.test

99 lines
1.9 KiB
Plaintext
Raw Normal View History

#!/bin/sh
#
# Ensure that strace can detach from stopped processes.
#
# Copyright (c) 2013-2015 Dmitry V. Levin <ldv@altlinux.org>
2018-12-25 02:46:43 +03:00
# Copyright (c) 2014-2018 The strace developers.
# All rights reserved.
#
# SPDX-License-Identifier: GPL-2.0-or-later
. "${srcdir=.}/init.sh"
run_prog_skip_if_failed \
kill -0 $$
$STRACE -d -enone / > /dev/null 2> "$LOG"
if grep -x "[^:]*strace: PTRACE_SEIZE doesn't work" "$LOG" > /dev/null; then
skip_ "PTRACE_SEIZE doesn't work"
fi
check_prog sleep
trap - TERM
sleep $TIMEOUT_DURATION &
kill -TERM $!
wait $!
expected_rc=$?
set -e
tests: cleanup temporary files removals As every test now runs in its own subdirectory, there is no need to remove leftover files manually by each test. * tests/init.sh (run_strace_match_diff): Do not remove $EXP. * tests/brk.test: Likewise. * tests/options-syntax.test: Likewise. * tests/qual_inject-retval.test (check_injection): Likewise. * tests/qual_signal.test (test_one_sig): Likewise. * tests/sched.test: Likewise. * tests/seccomp-strict.test: Likewise. * tests/strace-V.test: Likewise. * tests/strace-tt.test: Likewise. * tests/strace-ttt.test: Likewise. * tests/threads-execve.test: Likewise. * tests/attach-f-p.test: Use $EXP instead of $OUT, do not remove it. * tests/personality.test: Likewise. * tests/poll.test: Likewise. * tests/fstat.test: Likewise. * tests/ipc.sh: Likewise. * tests/restart_syscall.test: Likewise. * tests/utimensat.test: Likewise. * tests/attach-p-cmd.test: Likewise. Do not remove attach-p-cmd.test-lock. * tests/detach-running.test: Do not remove $LOG. * tests/detach-sleeping.test: Likewise. * tests/detach-stopped.test: Likewise. * tests/redirect.test: Do not remove $OUT. * tests/strace-S.test: Likewise. * tests/getdents.test: Do not remove $LOG.dir. * tests/getdents64.test: Likewise. * tests/readdir.test: Likewise. * tests/btrfs-v.test: Do not remove $EXP and $OUT. * tests/btrfs-vw.test: Likewise. * tests/btrfs-w.test: Likewise. * tests/execve-v.test: Likewise. * tests/execve.test: Likewise. * tests/fadvise64.test: Likewise. * tests/getuid.test: Likewise. * tests/ioctl.test: Likewise. * tests/ioctl_dm-v.test: Likewise. * tests/ioctl_dm.test: Likewise. * tests/ioctl_evdev-v.test: Likewise. * tests/ioctl_loop-nv.test: Likewise. * tests/ioctl_loop-v.test: Likewise. * tests/ioctl_loop.test: Likewise. * tests/ioctl_rtc-v.test: Likewise. * tests/ioctl_sock_gifconf.test: Likewise. * tests/llseek.test: Likewise. * tests/lseek.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/opipe.test: Likewise. * tests/prctl-arg2-intptr.test: Likewise. * tests/prctl-dumpable.test: Likewise. * tests/prctl-name.test: Likewise. * tests/prctl-no-args.test: Likewise. * tests/prctl-pdeathsig.test: Likewise. * tests/prctl-seccomp-filter-v.test: Likewise. * tests/prctl-seccomp-strict.test: Likewise. * tests/prctl-securebits.test: Likewise. * tests/prctl-tid_address.test: Likewise. * tests/prctl-tsc.test: Likewise. * tests/umovestr2.test: Likewise. * tests/uname.test: Likewise. * tests/pread64-pwrite64.test: Do nore remove pread64-pwrite64-tmpfile. * tests/read-write.test: Do nore remove read-write-tmpfile. * tests/qual_fault.test (check_fault_injection): Do not remove $EXP, $outexp, and $outgot. * tests/redirect-fds.test (check_fd): Reorder removal of work files. * tests/pc.test: Use $EXP instead of $EXPECTED, do not remove it. * tests/strace-t.test: Likewise. * tests/scm_rights-fd.test: Likewise. Use dir instead of $LOG.dir, do not remove it. * tests/strace-ff.test: Do not remove $OUT and $LOG.* files.
2017-04-03 19:24:28 +03:00
> "$LOG"
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 04:03:24 +03:00
../set_ptracer_any sleep $((2*$TIMEOUT_DURATION)) > "$LOG" &
while ! [ -s "$LOG" ]; do
kill -0 $! 2> /dev/null ||
fail_ 'set_ptracer_any sleep failed'
$SLEEP_A_BIT
done
tracee_pid=$!
kill -STOP $tracee_pid
cleanup()
{
set +e
kill $tracee_pid
kill -CONT $tracee_pid
wait $tracee_pid 2> /dev/null
return 0
}
tests: cleanup temporary files removals As every test now runs in its own subdirectory, there is no need to remove leftover files manually by each test. * tests/init.sh (run_strace_match_diff): Do not remove $EXP. * tests/brk.test: Likewise. * tests/options-syntax.test: Likewise. * tests/qual_inject-retval.test (check_injection): Likewise. * tests/qual_signal.test (test_one_sig): Likewise. * tests/sched.test: Likewise. * tests/seccomp-strict.test: Likewise. * tests/strace-V.test: Likewise. * tests/strace-tt.test: Likewise. * tests/strace-ttt.test: Likewise. * tests/threads-execve.test: Likewise. * tests/attach-f-p.test: Use $EXP instead of $OUT, do not remove it. * tests/personality.test: Likewise. * tests/poll.test: Likewise. * tests/fstat.test: Likewise. * tests/ipc.sh: Likewise. * tests/restart_syscall.test: Likewise. * tests/utimensat.test: Likewise. * tests/attach-p-cmd.test: Likewise. Do not remove attach-p-cmd.test-lock. * tests/detach-running.test: Do not remove $LOG. * tests/detach-sleeping.test: Likewise. * tests/detach-stopped.test: Likewise. * tests/redirect.test: Do not remove $OUT. * tests/strace-S.test: Likewise. * tests/getdents.test: Do not remove $LOG.dir. * tests/getdents64.test: Likewise. * tests/readdir.test: Likewise. * tests/btrfs-v.test: Do not remove $EXP and $OUT. * tests/btrfs-vw.test: Likewise. * tests/btrfs-w.test: Likewise. * tests/execve-v.test: Likewise. * tests/execve.test: Likewise. * tests/fadvise64.test: Likewise. * tests/getuid.test: Likewise. * tests/ioctl.test: Likewise. * tests/ioctl_dm-v.test: Likewise. * tests/ioctl_dm.test: Likewise. * tests/ioctl_evdev-v.test: Likewise. * tests/ioctl_loop-nv.test: Likewise. * tests/ioctl_loop-v.test: Likewise. * tests/ioctl_loop.test: Likewise. * tests/ioctl_rtc-v.test: Likewise. * tests/ioctl_sock_gifconf.test: Likewise. * tests/llseek.test: Likewise. * tests/lseek.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/opipe.test: Likewise. * tests/prctl-arg2-intptr.test: Likewise. * tests/prctl-dumpable.test: Likewise. * tests/prctl-name.test: Likewise. * tests/prctl-no-args.test: Likewise. * tests/prctl-pdeathsig.test: Likewise. * tests/prctl-seccomp-filter-v.test: Likewise. * tests/prctl-seccomp-strict.test: Likewise. * tests/prctl-securebits.test: Likewise. * tests/prctl-tid_address.test: Likewise. * tests/prctl-tsc.test: Likewise. * tests/umovestr2.test: Likewise. * tests/uname.test: Likewise. * tests/pread64-pwrite64.test: Do nore remove pread64-pwrite64-tmpfile. * tests/read-write.test: Do nore remove read-write-tmpfile. * tests/qual_fault.test (check_fault_injection): Do not remove $EXP, $outexp, and $outgot. * tests/redirect-fds.test (check_fd): Reorder removal of work files. * tests/pc.test: Use $EXP instead of $EXPECTED, do not remove it. * tests/strace-t.test: Likewise. * tests/scm_rights-fd.test: Likewise. Use dir instead of $LOG.dir, do not remove it. * tests/strace-ff.test: Do not remove $OUT and $LOG.* files.
2017-04-03 19:24:28 +03:00
> "$LOG"
$STRACE -p $tracee_pid 2> "$LOG" &
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"
}
$SLEEP_A_BIT
done
while ! grep -F -e '--- stopped by ' "$LOG" > /dev/null; do
kill -0 $! 2> /dev/null || {
cleanup
dump_log_and_fail_with "$STRACE -p missed stop notifications"
}
$SLEEP_A_BIT
done
kill -TERM $!
wait $! && rc=0 || rc=$?
grep -F "Process $tracee_pid detached" "$LOG" > /dev/null || {
cleanup
dump_log_and_fail_with "$STRACE -p failed to detach"
}
[ "$rc" = "$expected_rc" ] || {
cleanup
dump_log_and_fail_with "$STRACE -p failed to terminate itself"
}
if [ -f /proc/self/status ]; then
$SLEEP_A_BIT
test -d /proc/$tracee_pid || {
cleanup
dump_log_and_fail_with 'tracee died after detach'
}
grep_pid_status "$tracee_pid" '^State:.*T (stopped)' > /dev/null || {
grep_pid_status "$tracee_pid" '^State:'
cleanup
dump_log_and_fail_with 'tracee is not group-stopped after detach'
}
fi
cleanup
exit 0