xref: /aosp_15_r20/external/toybox/tests/timeout.test (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh
4*cf5a6c84SAndroid Build Coastguard Worker
5*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin"
6*cf5a6c84SAndroid Build Coastguard Worker
7*cf5a6c84SAndroid Build Coastguard Worker# timeout's exit value is complicated!
8*cf5a6c84SAndroid Build Coastguard Workertestcmd "times out" '.1 sleep 100 ; echo $?'  '124\n' '' ''
9*cf5a6c84SAndroid Build Coastguard Workertestcmd "failure" '-s MONKEY .1 sleep 100 2>/dev/null ; echo $?' '125\n' '' ''
10*cf5a6c84SAndroid Build Coastguard Workertestcmd "early failure" '2>/dev/null ; echo $?' '125\n' '' ''
11*cf5a6c84SAndroid Build Coastguard Workertestcmd "can't execute" '1 / 2>/dev/null ; echo $?' '126\n' '' ''
12*cf5a6c84SAndroid Build Coastguard Workertestcmd "can't find" '1 /does/not/exist 2>/dev/null ; echo $?' '127\n' '' ''
13*cf5a6c84SAndroid Build Coastguard Workertestcmd "custom signal" '-s 3 .1 sleep 100; echo $?' '124\n' '' ''
14*cf5a6c84SAndroid Build Coastguard Workertestcmd "killed" '-s 9 .1 sleep 100; echo $?' '137\n' '' ''
15*cf5a6c84SAndroid Build Coastguard Workertestcmd "TERM" '-s TERM .1 sleep 100; echo $?' '124\n' '' ''
16*cf5a6c84SAndroid Build Coastguard Workertestcmd "exit 0" '1 true ; echo $?' '0\n' '' ''
17*cf5a6c84SAndroid Build Coastguard Workertestcmd "exit 1" '1 false ; echo $?' '1\n' '' ''
18*cf5a6c84SAndroid Build Coastguard Worker
19*cf5a6c84SAndroid Build Coastguard Workertestcmd "--preserve-status" '--preserve-status .1 sleep 100 ; echo $?' '143\n' '' ''
20*cf5a6c84SAndroid Build Coastguard Workertestcmd "--preserve-status killed" '--preserve-status -s 9 .1 sleep 100 ; echo $?' '137\n' '' ''
21*cf5a6c84SAndroid Build Coastguard Worker
22*cf5a6c84SAndroid Build Coastguard Worker# There's another special case where if the subprocess catches our timeout
23*cf5a6c84SAndroid Build Coastguard Worker# signal and exits, we need to report that as a timeout (unless overridden).
24*cf5a6c84SAndroid Build Coastguard Workercat > loop.sh <<EOF
25*cf5a6c84SAndroid Build Coastguard Worker#!/bin/sh
26*cf5a6c84SAndroid Build Coastguard Workertrap "exit 3" TERM
27*cf5a6c84SAndroid Build Coastguard Workerwhile true; do
28*cf5a6c84SAndroid Build Coastguard Worker  :
29*cf5a6c84SAndroid Build Coastguard Workerdone
30*cf5a6c84SAndroid Build Coastguard WorkerEOF
31*cf5a6c84SAndroid Build Coastguard Workerchmod a+x loop.sh
32*cf5a6c84SAndroid Build Coastguard Workertestcmd "trap-and-exit" '1 ./loop.sh ; echo $?' '124\n' '' ''
33*cf5a6c84SAndroid Build Coastguard Workertestcmd "trap-and-exit --preserve-status" \
34*cf5a6c84SAndroid Build Coastguard Worker  '--preserve-status 1 ./loop.sh ; echo $?' '3\n' '' ''
35*cf5a6c84SAndroid Build Coastguard Workerrm loop.sh
36*cf5a6c84SAndroid Build Coastguard Worker
37*cf5a6c84SAndroid Build Coastguard Workertoyonly testcmd "-i" \
38*cf5a6c84SAndroid Build Coastguard Worker  "-i 1 sh -c 'for i in .25 .50 2; do sleep \$i; echo hello; done'" \
39*cf5a6c84SAndroid Build Coastguard Worker  "hello\nhello\n" "" ""
40*cf5a6c84SAndroid Build Coastguard Workertesting '-v' "{ timeout -v .1 sleep 3;} 2>&1 | egrep -o 'TERM|sleep'" \
41*cf5a6c84SAndroid Build Coastguard Worker  'TERM\nsleep\n' '' ''
42*cf5a6c84SAndroid Build Coastguard Worker
43