]> granicus.if.org Git - strace/commitdiff
tests: ensure that strace can detach from running processes
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 19 Jun 2013 10:22:18 +0000 (10:22 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 19 Jun 2013 10:22:18 +0000 (10:22 +0000)
* tests/detach-running: New test.
* tests/Makefile.am (TESTS): Add it.

tests/Makefile.am
tests/detach-running [new file with mode: 0755]

index 98fda59120ca21cce17ea0e9e0beb6d8b9d310cd..f8f80543eb1303d82537f098f7f2faca81404ee4 100644 (file)
@@ -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 (executable)
index 0000000..1132e0f
--- /dev/null
@@ -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