summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2013-06-19 10:22:18 +0000
committerDmitry V. Levin <ldv@altlinux.org>2013-06-19 10:22:18 +0000
commit78460f8bb2cbf5f2b9071961232abe574247ac96 (patch)
treeee35b34348f6a9431d58df9e701f6486b5e1a31b /tests
parent223e9a6f856d776ca15b099094c1218e6aaa65b1 (diff)
downloadstrace-78460f8bb2cbf5f2b9071961232abe574247ac96.tar.gz
strace-78460f8bb2cbf5f2b9071961232abe574247ac96.tar.bz2
strace-78460f8bb2cbf5f2b9071961232abe574247ac96.tar.xz
tests: ensure that strace can detach from running processes
* tests/detach-running: New test. * tests/Makefile.am (TESTS): Add it.
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am2
-rwxr-xr-xtests/detach-running45
2 files changed, 46 insertions, 1 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 98fda59..f8f8054 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -5,7 +5,7 @@ AM_CFLAGS = $(WARN_CFLAGS)
check_PROGRAMS = net-accept-connect set_ptracer_any
TESTS = ptrace_setoptions strace-f qual_syscall stat net \
- detach-sleeping detach-stopped
+ detach-sleeping detach-stopped detach-running
LOG_COMPILER = $(srcdir)/run.sh
diff --git a/tests/detach-running b/tests/detach-running
new file mode 100755
index 0000000..1132e0f
--- /dev/null
+++ b/tests/detach-running
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# Ensure that strace can detach from running processes.
+
+. "${srcdir=.}/init.sh"
+
+check_prog sleep
+check_prog grep
+
+set -e
+
+./set_ptracer_any sh -c "echo > $LOG; while :; do :; done" > /dev/null &
+
+while ! [ -s $LOG ]; do
+ kill -0 $! 2> /dev/null ||
+ fail_ 'set_ptracer_any sh failed'
+ $SLEEP_A_BIT
+done
+
+tracee_pid=$!
+
+cleanup()
+{
+ set +e
+ kill $tracee_pid
+ wait $tracee_pid 2> /dev/null
+}
+
+rm -f $LOG
+$STRACE -p $tracee_pid 2> $LOG &
+
+while ! grep -F "Process $tracee_pid attached" $LOG > /dev/null; do
+ kill -0 $! 2> /dev/null ||
+ { cat $LOG; cleanup; fail_ 'strace -p does not work'; }
+ $SLEEP_A_BIT
+done
+
+kill -INT $!
+wait $!
+
+grep -F "Process $tracee_pid detached" $LOG > /dev/null ||
+ { cat $LOG; cleanup; fail_ 'strace -p failed to detach'; }
+
+cleanup
+exit 0