From: Denys Vlasenko Date: Sat, 1 Oct 2016 20:36:14 +0000 (+0200) Subject: ash testsuite: add return_in_trap1.tests X-Git-Tag: 1_26_0~201 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=3ed7e2749a3f9fd315d8f46a3b0a25ff10caf726;p=oweals%2Fbusybox.git ash testsuite: add return_in_trap1.tests Currently it fails Signed-off-by: Denys Vlasenko --- diff --git a/shell/ash_test/ash-signals/return_in_trap1.right b/shell/ash_test/ash-signals/return_in_trap1.right new file mode 100644 index 000000000..a6e637885 --- /dev/null +++ b/shell/ash_test/ash-signals/return_in_trap1.right @@ -0,0 +1,4 @@ +a:2 +b:0 +Trap +d:3 diff --git a/shell/ash_test/ash-signals/return_in_trap1.tests b/shell/ash_test/ash-signals/return_in_trap1.tests new file mode 100755 index 000000000..f2498024f --- /dev/null +++ b/shell/ash_test/ash-signals/return_in_trap1.tests @@ -0,0 +1,18 @@ +a() { + (exit 2) + echo a:$? + (kill -s USR1 $$; echo b:$?; exit 3) + echo c:$? # does not execute + (exit 4) +} + +trap "echo Trap; return" USR1 +a + +echo d:$? +# It's debatable what is the correct value above. +# Does 'return' in trap sees $? == 2 or $? == 3? +# IOW: after (kill..), does shell first wait for its completion +# and sets $?, then checks pending signals and runs a trap handler, +# or does it first checks pending signals and runs handler? +# hush does the former, and prints 3. diff --git a/shell/hush_test/hush-signals/catch.right b/shell/hush_test/hush-signals/catch.right new file mode 100644 index 000000000..80a062c4b --- /dev/null +++ b/shell/hush_test/hush-signals/catch.right @@ -0,0 +1,5 @@ +sending USR2 +caught +sending USR2 +sending USR2 +USR2 diff --git a/shell/hush_test/hush-signals/catch.tests b/shell/hush_test/hush-signals/catch.tests new file mode 100755 index 000000000..d2a21d17e --- /dev/null +++ b/shell/hush_test/hush-signals/catch.tests @@ -0,0 +1,20 @@ +# avoid ugly warnings about signals not being caught +trap ":" USR1 USR2 + +"$THIS_SH" -c ' +trap "echo caught" USR2 +echo "sending USR2" +kill -USR2 $$ + +trap "" USR2 +echo "sending USR2" +kill -USR2 $$ + +trap "-" USR2 +echo "sending USR2" +kill -USR2 $$ + +echo "not reached" +' + +trap "-" USR1 USR2 diff --git a/shell/hush_test/hush-signals/exit.right b/shell/hush_test/hush-signals/exit.right new file mode 100644 index 000000000..3d0072564 --- /dev/null +++ b/shell/hush_test/hush-signals/exit.right @@ -0,0 +1,12 @@ +cow +moo +Traps1: +trap -- 'exitfunc' EXIT +Traps2: +trap -- 'echo Should not run' EXIT +Check1: 42 +Traps1: +trap -- 'exitfunc' EXIT +Traps2: +trap -- 'echo Should not run' EXIT +Check2: 42 diff --git a/shell/hush_test/hush-signals/exit.tests b/shell/hush_test/hush-signals/exit.tests new file mode 100755 index 000000000..2061105dd --- /dev/null +++ b/shell/hush_test/hush-signals/exit.tests @@ -0,0 +1,34 @@ +"$THIS_SH" -c 'trap "echo cow" 0' +"$THIS_SH" -c 'trap "echo moo" EXIT' +"$THIS_SH" -c 'trap "echo no" 0; trap 0' + +( +exitfunc() { + echo "Traps1:" + trap + # EXIT trap is disabled after it is triggered, + # it can not be "re-armed" like this: + trap "echo Should not run" EXIT + echo "Traps2:" + trap +} +trap 'exitfunc' EXIT +exit 42 +) +echo Check1: $? + +( +exitfunc() { + echo "Traps1:" + trap + # EXIT trap is disabled after it is triggered, + # it can not be "re-armed" like this: + trap "echo Should not run" EXIT + echo "Traps2:" + trap + exit 42 +} +trap 'exitfunc' EXIT +exit 66 +) +echo Check2: $? diff --git a/shell/hush_test/hush-signals/return_in_trap1.right b/shell/hush_test/hush-signals/return_in_trap1.right new file mode 100644 index 000000000..a6e637885 --- /dev/null +++ b/shell/hush_test/hush-signals/return_in_trap1.right @@ -0,0 +1,4 @@ +a:2 +b:0 +Trap +d:3 diff --git a/shell/hush_test/hush-signals/return_in_trap1.tests b/shell/hush_test/hush-signals/return_in_trap1.tests new file mode 100755 index 000000000..f2498024f --- /dev/null +++ b/shell/hush_test/hush-signals/return_in_trap1.tests @@ -0,0 +1,18 @@ +a() { + (exit 2) + echo a:$? + (kill -s USR1 $$; echo b:$?; exit 3) + echo c:$? # does not execute + (exit 4) +} + +trap "echo Trap; return" USR1 +a + +echo d:$? +# It's debatable what is the correct value above. +# Does 'return' in trap sees $? == 2 or $? == 3? +# IOW: after (kill..), does shell first wait for its completion +# and sets $?, then checks pending signals and runs a trap handler, +# or does it first checks pending signals and runs handler? +# hush does the former, and prints 3. diff --git a/shell/hush_test/hush-signals/save-ret.right b/shell/hush_test/hush-signals/save-ret.right new file mode 100644 index 000000000..a3e12ce5e --- /dev/null +++ b/shell/hush_test/hush-signals/save-ret.right @@ -0,0 +1,2 @@ +YEAH +0 diff --git a/shell/hush_test/hush-signals/save-ret.tests b/shell/hush_test/hush-signals/save-ret.tests new file mode 100755 index 000000000..0786b6d96 --- /dev/null +++ b/shell/hush_test/hush-signals/save-ret.tests @@ -0,0 +1,4 @@ +# make sure we do not corrupt $? across traps +trap "echo YEAH; false" USR1 +kill -USR1 $$ +echo $? diff --git a/shell/hush_test/hush-signals/savetrap.right b/shell/hush_test/hush-signals/savetrap.right new file mode 100644 index 000000000..a59225be3 --- /dev/null +++ b/shell/hush_test/hush-signals/savetrap.right @@ -0,0 +1,8 @@ +trap -- 'echo Exiting' EXIT +trap -- 'echo WINCH!' WINCH +trap -- 'echo Exiting' EXIT +trap -- 'echo WINCH!' WINCH +trap -- 'echo Exiting' EXIT +trap -- 'echo WINCH!' WINCH +Done +Exiting diff --git a/shell/hush_test/hush-signals/savetrap.tests b/shell/hush_test/hush-signals/savetrap.tests new file mode 100755 index 000000000..c2b312fb8 --- /dev/null +++ b/shell/hush_test/hush-signals/savetrap.tests @@ -0,0 +1,9 @@ +trap 'echo Exiting' EXIT +trap 'echo WINCH!' SIGWINCH +v=` trap ` +echo "$v" +v=$( trap ) +echo "$v" +v=`trap` +echo "$v" +echo Done diff --git a/shell/hush_test/hush-signals/signal7.right b/shell/hush_test/hush-signals/signal7.right new file mode 100644 index 000000000..ba7453e42 --- /dev/null +++ b/shell/hush_test/hush-signals/signal7.right @@ -0,0 +1 @@ +Bug detected: 0 diff --git a/shell/hush_test/hush-signals/signal7.tests b/shell/hush_test/hush-signals/signal7.tests new file mode 100755 index 000000000..c2b1381f9 --- /dev/null +++ b/shell/hush_test/hush-signals/signal7.tests @@ -0,0 +1,18 @@ +bug() { + trap : exit + # Bug was causing sh to be run in subshell, + # as if this line is replaced with (sh -c ...; exit $?) & + # here: + sh -c 'echo REAL_CHILD=$$' & + echo PARENTS_IDEA_OF_CHILD=$! + wait # make sure bkgd shell completes +} + +bug | { +while read varval; do + eval $varval +done +test x"$REAL_CHILD" != x"" \ +&& test x"$REAL_CHILD" = x"$PARENTS_IDEA_OF_CHILD" +echo "Bug detected: $?" +} diff --git a/shell/hush_test/hush-signals/signal_read1.right b/shell/hush_test/hush-signals/signal_read1.right new file mode 100644 index 000000000..2870a8e70 --- /dev/null +++ b/shell/hush_test/hush-signals/signal_read1.right @@ -0,0 +1 @@ +Got HUP:0 diff --git a/shell/hush_test/hush-signals/signal_read1.tests b/shell/hush_test/hush-signals/signal_read1.tests new file mode 100755 index 000000000..1105479a3 --- /dev/null +++ b/shell/hush_test/hush-signals/signal_read1.tests @@ -0,0 +1,5 @@ +(sleep 1; kill -HUP $$) & +trap 'echo "Got HUP:$?"; exit' HUP +while true; do + read ignored +done diff --git a/shell/hush_test/hush-signals/signal_read2.right b/shell/hush_test/hush-signals/signal_read2.right new file mode 100644 index 000000000..71a6bc16d --- /dev/null +++ b/shell/hush_test/hush-signals/signal_read2.right @@ -0,0 +1,2 @@ +HUP +Done:129 diff --git a/shell/hush_test/hush-signals/signal_read2.tests b/shell/hush_test/hush-signals/signal_read2.tests new file mode 100755 index 000000000..eab5b9b5b --- /dev/null +++ b/shell/hush_test/hush-signals/signal_read2.tests @@ -0,0 +1,7 @@ +$THIS_SH -c ' +(sleep 1; kill -HUP $$) & +while true; do + read ignored +done +' +echo "Done:$?" diff --git a/shell/hush_test/hush-signals/subshell.right b/shell/hush_test/hush-signals/subshell.right new file mode 100644 index 000000000..f865b932b --- /dev/null +++ b/shell/hush_test/hush-signals/subshell.right @@ -0,0 +1,21 @@ +trap -- '' HUP +trap -- '' QUIT +trap -- '' SYS +Ok +trap -- '' HUP +trap -- '' QUIT +trap -- '' SYS +Ok +trap -- '' HUP +trap -- '' QUIT +trap -- '' SYS +Ok +trap -- '' HUP +trap -- '' QUIT +trap -- '' SYS +Ok +trap -- '' HUP +trap -- '' QUIT +trap -- '' SYS +TERM +Done diff --git a/shell/hush_test/hush-signals/subshell.tests b/shell/hush_test/hush-signals/subshell.tests new file mode 100755 index 000000000..d877f2b82 --- /dev/null +++ b/shell/hush_test/hush-signals/subshell.tests @@ -0,0 +1,19 @@ +# Non-empty traps should be reset in subshell + +# HUP is special in interactive shells +trap '' HUP +# QUIT is always special +trap '' QUIT +# SYS is not special +trap '' SYS +# WINCH is harmless +trap 'bad: caught WINCH' WINCH +# With TERM we'll check whether it is reset +trap 'bad: caught TERM' TERM + +(trap; "$THIS_SH" -c 'kill -HUP $PPID'; echo Ok) +(trap; "$THIS_SH" -c 'kill -QUIT $PPID'; echo Ok) +(trap; "$THIS_SH" -c 'kill -SYS $PPID'; echo Ok) +(trap; "$THIS_SH" -c 'kill -WINCH $PPID'; echo Ok) +(trap; "$THIS_SH" -c 'kill -TERM $PPID'; echo Bad: TERM is not reset) +echo Done diff --git a/shell/hush_test/hush-signals/usage.right b/shell/hush_test/hush-signals/usage.right new file mode 100644 index 000000000..c0dbd6c3c --- /dev/null +++ b/shell/hush_test/hush-signals/usage.right @@ -0,0 +1,14 @@ +___ +___ +___ +trap -- 'a' EXIT +trap -- 'a' INT +trap -- 'a' USR1 +trap -- 'a' USR2 +___ +___ +trap -- 'a' USR1 +trap -- 'a' USR2 +___ +___ +trap -- 'a' USR2 diff --git a/shell/hush_test/hush-signals/usage.tests b/shell/hush_test/hush-signals/usage.tests new file mode 100755 index 000000000..d29c6e74a --- /dev/null +++ b/shell/hush_test/hush-signals/usage.tests @@ -0,0 +1,23 @@ +# no output -- default state +echo ___ +trap + +# assign some traps +echo ___ +trap "a" EXIT INT USR1 USR2 + +# show them all +echo ___ +trap + +# clear one +echo ___ +trap 0 INT +echo ___ +trap + +# clear another +echo ___ +trap "-" USR1 +echo ___ +trap diff --git a/shell/hush_test/hush-trap/catch.right b/shell/hush_test/hush-trap/catch.right deleted file mode 100644 index 80a062c4b..000000000 --- a/shell/hush_test/hush-trap/catch.right +++ /dev/null @@ -1,5 +0,0 @@ -sending USR2 -caught -sending USR2 -sending USR2 -USR2 diff --git a/shell/hush_test/hush-trap/catch.tests b/shell/hush_test/hush-trap/catch.tests deleted file mode 100755 index d2a21d17e..000000000 --- a/shell/hush_test/hush-trap/catch.tests +++ /dev/null @@ -1,20 +0,0 @@ -# avoid ugly warnings about signals not being caught -trap ":" USR1 USR2 - -"$THIS_SH" -c ' -trap "echo caught" USR2 -echo "sending USR2" -kill -USR2 $$ - -trap "" USR2 -echo "sending USR2" -kill -USR2 $$ - -trap "-" USR2 -echo "sending USR2" -kill -USR2 $$ - -echo "not reached" -' - -trap "-" USR1 USR2 diff --git a/shell/hush_test/hush-trap/exit.right b/shell/hush_test/hush-trap/exit.right deleted file mode 100644 index 3d0072564..000000000 --- a/shell/hush_test/hush-trap/exit.right +++ /dev/null @@ -1,12 +0,0 @@ -cow -moo -Traps1: -trap -- 'exitfunc' EXIT -Traps2: -trap -- 'echo Should not run' EXIT -Check1: 42 -Traps1: -trap -- 'exitfunc' EXIT -Traps2: -trap -- 'echo Should not run' EXIT -Check2: 42 diff --git a/shell/hush_test/hush-trap/exit.tests b/shell/hush_test/hush-trap/exit.tests deleted file mode 100755 index 2061105dd..000000000 --- a/shell/hush_test/hush-trap/exit.tests +++ /dev/null @@ -1,34 +0,0 @@ -"$THIS_SH" -c 'trap "echo cow" 0' -"$THIS_SH" -c 'trap "echo moo" EXIT' -"$THIS_SH" -c 'trap "echo no" 0; trap 0' - -( -exitfunc() { - echo "Traps1:" - trap - # EXIT trap is disabled after it is triggered, - # it can not be "re-armed" like this: - trap "echo Should not run" EXIT - echo "Traps2:" - trap -} -trap 'exitfunc' EXIT -exit 42 -) -echo Check1: $? - -( -exitfunc() { - echo "Traps1:" - trap - # EXIT trap is disabled after it is triggered, - # it can not be "re-armed" like this: - trap "echo Should not run" EXIT - echo "Traps2:" - trap - exit 42 -} -trap 'exitfunc' EXIT -exit 66 -) -echo Check2: $? diff --git a/shell/hush_test/hush-trap/return_in_trap1.right b/shell/hush_test/hush-trap/return_in_trap1.right deleted file mode 100644 index a6e637885..000000000 --- a/shell/hush_test/hush-trap/return_in_trap1.right +++ /dev/null @@ -1,4 +0,0 @@ -a:2 -b:0 -Trap -d:3 diff --git a/shell/hush_test/hush-trap/return_in_trap1.tests b/shell/hush_test/hush-trap/return_in_trap1.tests deleted file mode 100755 index f2498024f..000000000 --- a/shell/hush_test/hush-trap/return_in_trap1.tests +++ /dev/null @@ -1,18 +0,0 @@ -a() { - (exit 2) - echo a:$? - (kill -s USR1 $$; echo b:$?; exit 3) - echo c:$? # does not execute - (exit 4) -} - -trap "echo Trap; return" USR1 -a - -echo d:$? -# It's debatable what is the correct value above. -# Does 'return' in trap sees $? == 2 or $? == 3? -# IOW: after (kill..), does shell first wait for its completion -# and sets $?, then checks pending signals and runs a trap handler, -# or does it first checks pending signals and runs handler? -# hush does the former, and prints 3. diff --git a/shell/hush_test/hush-trap/save-ret.right b/shell/hush_test/hush-trap/save-ret.right deleted file mode 100644 index a3e12ce5e..000000000 --- a/shell/hush_test/hush-trap/save-ret.right +++ /dev/null @@ -1,2 +0,0 @@ -YEAH -0 diff --git a/shell/hush_test/hush-trap/save-ret.tests b/shell/hush_test/hush-trap/save-ret.tests deleted file mode 100755 index 0786b6d96..000000000 --- a/shell/hush_test/hush-trap/save-ret.tests +++ /dev/null @@ -1,4 +0,0 @@ -# make sure we do not corrupt $? across traps -trap "echo YEAH; false" USR1 -kill -USR1 $$ -echo $? diff --git a/shell/hush_test/hush-trap/savetrap.right b/shell/hush_test/hush-trap/savetrap.right deleted file mode 100644 index a59225be3..000000000 --- a/shell/hush_test/hush-trap/savetrap.right +++ /dev/null @@ -1,8 +0,0 @@ -trap -- 'echo Exiting' EXIT -trap -- 'echo WINCH!' WINCH -trap -- 'echo Exiting' EXIT -trap -- 'echo WINCH!' WINCH -trap -- 'echo Exiting' EXIT -trap -- 'echo WINCH!' WINCH -Done -Exiting diff --git a/shell/hush_test/hush-trap/savetrap.tests b/shell/hush_test/hush-trap/savetrap.tests deleted file mode 100755 index c2b312fb8..000000000 --- a/shell/hush_test/hush-trap/savetrap.tests +++ /dev/null @@ -1,9 +0,0 @@ -trap 'echo Exiting' EXIT -trap 'echo WINCH!' SIGWINCH -v=` trap ` -echo "$v" -v=$( trap ) -echo "$v" -v=`trap` -echo "$v" -echo Done diff --git a/shell/hush_test/hush-trap/signal7.right b/shell/hush_test/hush-trap/signal7.right deleted file mode 100644 index ba7453e42..000000000 --- a/shell/hush_test/hush-trap/signal7.right +++ /dev/null @@ -1 +0,0 @@ -Bug detected: 0 diff --git a/shell/hush_test/hush-trap/signal7.tests b/shell/hush_test/hush-trap/signal7.tests deleted file mode 100755 index c2b1381f9..000000000 --- a/shell/hush_test/hush-trap/signal7.tests +++ /dev/null @@ -1,18 +0,0 @@ -bug() { - trap : exit - # Bug was causing sh to be run in subshell, - # as if this line is replaced with (sh -c ...; exit $?) & - # here: - sh -c 'echo REAL_CHILD=$$' & - echo PARENTS_IDEA_OF_CHILD=$! - wait # make sure bkgd shell completes -} - -bug | { -while read varval; do - eval $varval -done -test x"$REAL_CHILD" != x"" \ -&& test x"$REAL_CHILD" = x"$PARENTS_IDEA_OF_CHILD" -echo "Bug detected: $?" -} diff --git a/shell/hush_test/hush-trap/signal_read1.right b/shell/hush_test/hush-trap/signal_read1.right deleted file mode 100644 index 2870a8e70..000000000 --- a/shell/hush_test/hush-trap/signal_read1.right +++ /dev/null @@ -1 +0,0 @@ -Got HUP:0 diff --git a/shell/hush_test/hush-trap/signal_read1.tests b/shell/hush_test/hush-trap/signal_read1.tests deleted file mode 100755 index 1105479a3..000000000 --- a/shell/hush_test/hush-trap/signal_read1.tests +++ /dev/null @@ -1,5 +0,0 @@ -(sleep 1; kill -HUP $$) & -trap 'echo "Got HUP:$?"; exit' HUP -while true; do - read ignored -done diff --git a/shell/hush_test/hush-trap/signal_read2.right b/shell/hush_test/hush-trap/signal_read2.right deleted file mode 100644 index 71a6bc16d..000000000 --- a/shell/hush_test/hush-trap/signal_read2.right +++ /dev/null @@ -1,2 +0,0 @@ -HUP -Done:129 diff --git a/shell/hush_test/hush-trap/signal_read2.tests b/shell/hush_test/hush-trap/signal_read2.tests deleted file mode 100755 index eab5b9b5b..000000000 --- a/shell/hush_test/hush-trap/signal_read2.tests +++ /dev/null @@ -1,7 +0,0 @@ -$THIS_SH -c ' -(sleep 1; kill -HUP $$) & -while true; do - read ignored -done -' -echo "Done:$?" diff --git a/shell/hush_test/hush-trap/subshell.right b/shell/hush_test/hush-trap/subshell.right deleted file mode 100644 index f865b932b..000000000 --- a/shell/hush_test/hush-trap/subshell.right +++ /dev/null @@ -1,21 +0,0 @@ -trap -- '' HUP -trap -- '' QUIT -trap -- '' SYS -Ok -trap -- '' HUP -trap -- '' QUIT -trap -- '' SYS -Ok -trap -- '' HUP -trap -- '' QUIT -trap -- '' SYS -Ok -trap -- '' HUP -trap -- '' QUIT -trap -- '' SYS -Ok -trap -- '' HUP -trap -- '' QUIT -trap -- '' SYS -TERM -Done diff --git a/shell/hush_test/hush-trap/subshell.tests b/shell/hush_test/hush-trap/subshell.tests deleted file mode 100755 index d877f2b82..000000000 --- a/shell/hush_test/hush-trap/subshell.tests +++ /dev/null @@ -1,19 +0,0 @@ -# Non-empty traps should be reset in subshell - -# HUP is special in interactive shells -trap '' HUP -# QUIT is always special -trap '' QUIT -# SYS is not special -trap '' SYS -# WINCH is harmless -trap 'bad: caught WINCH' WINCH -# With TERM we'll check whether it is reset -trap 'bad: caught TERM' TERM - -(trap; "$THIS_SH" -c 'kill -HUP $PPID'; echo Ok) -(trap; "$THIS_SH" -c 'kill -QUIT $PPID'; echo Ok) -(trap; "$THIS_SH" -c 'kill -SYS $PPID'; echo Ok) -(trap; "$THIS_SH" -c 'kill -WINCH $PPID'; echo Ok) -(trap; "$THIS_SH" -c 'kill -TERM $PPID'; echo Bad: TERM is not reset) -echo Done diff --git a/shell/hush_test/hush-trap/usage.right b/shell/hush_test/hush-trap/usage.right deleted file mode 100644 index c0dbd6c3c..000000000 --- a/shell/hush_test/hush-trap/usage.right +++ /dev/null @@ -1,14 +0,0 @@ -___ -___ -___ -trap -- 'a' EXIT -trap -- 'a' INT -trap -- 'a' USR1 -trap -- 'a' USR2 -___ -___ -trap -- 'a' USR1 -trap -- 'a' USR2 -___ -___ -trap -- 'a' USR2 diff --git a/shell/hush_test/hush-trap/usage.tests b/shell/hush_test/hush-trap/usage.tests deleted file mode 100755 index d29c6e74a..000000000 --- a/shell/hush_test/hush-trap/usage.tests +++ /dev/null @@ -1,23 +0,0 @@ -# no output -- default state -echo ___ -trap - -# assign some traps -echo ___ -trap "a" EXIT INT USR1 USR2 - -# show them all -echo ___ -trap - -# clear one -echo ___ -trap 0 INT -echo ___ -trap - -# clear another -echo ___ -trap "-" USR1 -echo ___ -trap