1*ef2b2b9dSAaron LI# $FreeBSD$ 2*ef2b2b9dSAaron LI 3*ef2b2b9dSAaron LIatf_test_case nominal 4*ef2b2b9dSAaron LInominal_head() 5*ef2b2b9dSAaron LI{ 6*ef2b2b9dSAaron LI atf_set "descr" "Basic tests on timeout(1) utility" 7*ef2b2b9dSAaron LI} 8*ef2b2b9dSAaron LI 9*ef2b2b9dSAaron LInominal_body() 10*ef2b2b9dSAaron LI{ 11*ef2b2b9dSAaron LI atf_check \ 12*ef2b2b9dSAaron LI -o empty \ 13*ef2b2b9dSAaron LI -e empty \ 14*ef2b2b9dSAaron LI -s exit:0 \ 15*ef2b2b9dSAaron LI timeout 5 true 16*ef2b2b9dSAaron LI} 17*ef2b2b9dSAaron LI 18*ef2b2b9dSAaron LIatf_test_case time_unit 19*ef2b2b9dSAaron LItime_unit_head() 20*ef2b2b9dSAaron LI{ 21*ef2b2b9dSAaron LI atf_set "descr" "Test parsing the default time unit" 22*ef2b2b9dSAaron LI} 23*ef2b2b9dSAaron LI 24*ef2b2b9dSAaron LItime_unit_body() 25*ef2b2b9dSAaron LI{ 26*ef2b2b9dSAaron LI atf_check \ 27*ef2b2b9dSAaron LI -o empty \ 28*ef2b2b9dSAaron LI -e empty \ 29*ef2b2b9dSAaron LI -s exit:0 \ 30*ef2b2b9dSAaron LI timeout 1d true 31*ef2b2b9dSAaron LI 32*ef2b2b9dSAaron LI atf_check \ 33*ef2b2b9dSAaron LI -o empty \ 34*ef2b2b9dSAaron LI -e empty \ 35*ef2b2b9dSAaron LI -s exit:0 \ 36*ef2b2b9dSAaron LI timeout 1h true 37*ef2b2b9dSAaron LI 38*ef2b2b9dSAaron LI atf_check \ 39*ef2b2b9dSAaron LI -o empty \ 40*ef2b2b9dSAaron LI -e empty \ 41*ef2b2b9dSAaron LI -s exit:0 \ 42*ef2b2b9dSAaron LI timeout 1m true 43*ef2b2b9dSAaron LI 44*ef2b2b9dSAaron LI atf_check \ 45*ef2b2b9dSAaron LI -o empty \ 46*ef2b2b9dSAaron LI -e empty \ 47*ef2b2b9dSAaron LI -s exit:0 \ 48*ef2b2b9dSAaron LI timeout 1s true 49*ef2b2b9dSAaron LI} 50*ef2b2b9dSAaron LI 51*ef2b2b9dSAaron LIatf_test_case no_timeout 52*ef2b2b9dSAaron LIno_timeout_head() 53*ef2b2b9dSAaron LI{ 54*ef2b2b9dSAaron LI atf_set "descr" "Test disabled timeout" 55*ef2b2b9dSAaron LI} 56*ef2b2b9dSAaron LI 57*ef2b2b9dSAaron LIno_timeout_body() 58*ef2b2b9dSAaron LI{ 59*ef2b2b9dSAaron LI atf_check \ 60*ef2b2b9dSAaron LI -o empty \ 61*ef2b2b9dSAaron LI -e empty \ 62*ef2b2b9dSAaron LI -s exit:0 \ 63*ef2b2b9dSAaron LI timeout 0 true 64*ef2b2b9dSAaron LI} 65*ef2b2b9dSAaron LI 66*ef2b2b9dSAaron LIatf_test_case exit_numbers 67*ef2b2b9dSAaron LIexit_numbers_head() 68*ef2b2b9dSAaron LI{ 69*ef2b2b9dSAaron LI atf_set "descr" "Test exit numbers" 70*ef2b2b9dSAaron LI} 71*ef2b2b9dSAaron LI 72*ef2b2b9dSAaron LIexit_numbers_body() 73*ef2b2b9dSAaron LI{ 74*ef2b2b9dSAaron LI atf_check \ 75*ef2b2b9dSAaron LI -o empty \ 76*ef2b2b9dSAaron LI -e empty \ 77*ef2b2b9dSAaron LI -s exit:2 \ 78*ef2b2b9dSAaron LI -x timeout 5 sh -c \'exit 2\' 79*ef2b2b9dSAaron LI 80*ef2b2b9dSAaron LI atf_check \ 81*ef2b2b9dSAaron LI -o empty \ 82*ef2b2b9dSAaron LI -e empty \ 83*ef2b2b9dSAaron LI -s exit:124 \ 84*ef2b2b9dSAaron LI timeout .1 sleep 1 85*ef2b2b9dSAaron LI 86*ef2b2b9dSAaron LI # With preserv status exit should be 128 + TERM aka 143 87*ef2b2b9dSAaron LI atf_check \ 88*ef2b2b9dSAaron LI -o empty \ 89*ef2b2b9dSAaron LI -e empty \ 90*ef2b2b9dSAaron LI -s exit:143 \ 91*ef2b2b9dSAaron LI timeout --preserve-status .1 sleep 10 92*ef2b2b9dSAaron LI 93*ef2b2b9dSAaron LI atf_check \ 94*ef2b2b9dSAaron LI -o empty \ 95*ef2b2b9dSAaron LI -e empty \ 96*ef2b2b9dSAaron LI -s exit:124 \ 97*ef2b2b9dSAaron LI timeout -s1 -k1 .1 sleep 10 98*ef2b2b9dSAaron LI 99*ef2b2b9dSAaron LI atf_check \ 100*ef2b2b9dSAaron LI -o empty \ 101*ef2b2b9dSAaron LI -e empty \ 102*ef2b2b9dSAaron LI -s exit:0 \ 103*ef2b2b9dSAaron LI -x sh -c 'trap "" CHLD; exec timeout 10 true' 104*ef2b2b9dSAaron LI} 105*ef2b2b9dSAaron LI 106*ef2b2b9dSAaron LIatf_test_case with_a_child 107*ef2b2b9dSAaron LIwith_a_child_head() 108*ef2b2b9dSAaron LI{ 109*ef2b2b9dSAaron LI atf_set "descr" "When starting with a child (coreutils bug#9098)" 110*ef2b2b9dSAaron LI} 111*ef2b2b9dSAaron LI 112*ef2b2b9dSAaron LIwith_a_child_body() 113*ef2b2b9dSAaron LI{ 114*ef2b2b9dSAaron LI out=$(sleep .1 & exec timeout .5 sh -c 'sleep 2; echo foo') 115*ef2b2b9dSAaron LI status=$? 116*ef2b2b9dSAaron LI test "$out" = "" && test $status = 124 || atf_fail 117*ef2b2b9dSAaron LI 118*ef2b2b9dSAaron LI} 119*ef2b2b9dSAaron LI 120*ef2b2b9dSAaron LIatf_test_case invalid_timeout 121*ef2b2b9dSAaron LIinvalid_timeout_head() 122*ef2b2b9dSAaron LI{ 123*ef2b2b9dSAaron LI atf_set "descr" "Invalid timeout" 124*ef2b2b9dSAaron LI} 125*ef2b2b9dSAaron LI 126*ef2b2b9dSAaron LIinvalid_timeout_body() 127*ef2b2b9dSAaron LI{ 128*ef2b2b9dSAaron LI atf_check \ 129*ef2b2b9dSAaron LI -o empty \ 130*ef2b2b9dSAaron LI -e inline:"timeout: invalid duration\n" \ 131*ef2b2b9dSAaron LI -s exit:125 \ 132*ef2b2b9dSAaron LI timeout invalid sleep 0 133*ef2b2b9dSAaron LI 134*ef2b2b9dSAaron LI atf_check \ 135*ef2b2b9dSAaron LI -o empty \ 136*ef2b2b9dSAaron LI -e inline:"timeout: invalid duration\n" \ 137*ef2b2b9dSAaron LI -s exit:125 \ 138*ef2b2b9dSAaron LI timeout --kill-after=invalid 1 sleep 0 139*ef2b2b9dSAaron LI 140*ef2b2b9dSAaron LI atf_check \ 141*ef2b2b9dSAaron LI -o empty \ 142*ef2b2b9dSAaron LI -e inline:"timeout: invalid duration\n" \ 143*ef2b2b9dSAaron LI -s exit:125 \ 144*ef2b2b9dSAaron LI timeout 42D sleep 0 145*ef2b2b9dSAaron LI 146*ef2b2b9dSAaron LI atf_check \ 147*ef2b2b9dSAaron LI -o empty \ 148*ef2b2b9dSAaron LI -e inline:"timeout: invalid duration\n" \ 149*ef2b2b9dSAaron LI -s exit:125 \ 150*ef2b2b9dSAaron LI timeout 999999999999999999999999999999999999999999999999999999999999d sleep 0 151*ef2b2b9dSAaron LI 152*ef2b2b9dSAaron LI atf_check \ 153*ef2b2b9dSAaron LI -o empty \ 154*ef2b2b9dSAaron LI -e inline:"timeout: invalid duration\n" \ 155*ef2b2b9dSAaron LI -s exit:125 \ 156*ef2b2b9dSAaron LI timeout 2.34e+5d sleep 0 157*ef2b2b9dSAaron LI} 158*ef2b2b9dSAaron LI 159*ef2b2b9dSAaron LIatf_test_case invalid_signal 160*ef2b2b9dSAaron LIinvalid_signal_head() 161*ef2b2b9dSAaron LI{ 162*ef2b2b9dSAaron LI atf_set "descr" "Invalid signal" 163*ef2b2b9dSAaron LI} 164*ef2b2b9dSAaron LI 165*ef2b2b9dSAaron LIinvalid_signal_body() 166*ef2b2b9dSAaron LI{ 167*ef2b2b9dSAaron LI atf_check \ 168*ef2b2b9dSAaron LI -o empty \ 169*ef2b2b9dSAaron LI -e inline:"timeout: invalid signal\n" \ 170*ef2b2b9dSAaron LI -s exit:125 \ 171*ef2b2b9dSAaron LI timeout --signal=invalid 1 sleep 0 172*ef2b2b9dSAaron LI} 173*ef2b2b9dSAaron LI 174*ef2b2b9dSAaron LIatf_test_case invalid_command 175*ef2b2b9dSAaron LIinvalid_command_head() 176*ef2b2b9dSAaron LI{ 177*ef2b2b9dSAaron LI atf_set "descr" "Invalid command" 178*ef2b2b9dSAaron LI} 179*ef2b2b9dSAaron LI 180*ef2b2b9dSAaron LIinvalid_command_body() 181*ef2b2b9dSAaron LI{ 182*ef2b2b9dSAaron LI atf_check \ 183*ef2b2b9dSAaron LI -o empty \ 184*ef2b2b9dSAaron LI -e inline:"timeout: exec(.): Permission denied\n" \ 185*ef2b2b9dSAaron LI -s exit:126 \ 186*ef2b2b9dSAaron LI timeout 10 . 187*ef2b2b9dSAaron LI} 188*ef2b2b9dSAaron LI 189*ef2b2b9dSAaron LIatf_test_case no_such_command 190*ef2b2b9dSAaron LIno_such_command_head() 191*ef2b2b9dSAaron LI{ 192*ef2b2b9dSAaron LI atf_set "descr" "No such command" 193*ef2b2b9dSAaron LI} 194*ef2b2b9dSAaron LI 195*ef2b2b9dSAaron LIno_such_command_body() 196*ef2b2b9dSAaron LI{ 197*ef2b2b9dSAaron LI atf_check \ 198*ef2b2b9dSAaron LI -o empty \ 199*ef2b2b9dSAaron LI -e inline:"timeout: exec(enoexists): No such file or directory\n" \ 200*ef2b2b9dSAaron LI -s exit:127 \ 201*ef2b2b9dSAaron LI timeout 10 enoexists 202*ef2b2b9dSAaron LI} 203*ef2b2b9dSAaron LI 204*ef2b2b9dSAaron LIatf_init_test_cases() 205*ef2b2b9dSAaron LI{ 206*ef2b2b9dSAaron LI atf_add_test_case nominal 207*ef2b2b9dSAaron LI atf_add_test_case time_unit 208*ef2b2b9dSAaron LI atf_add_test_case no_timeout 209*ef2b2b9dSAaron LI atf_add_test_case exit_numbers 210*ef2b2b9dSAaron LI atf_add_test_case with_a_child 211*ef2b2b9dSAaron LI atf_add_test_case invalid_timeout 212*ef2b2b9dSAaron LI atf_add_test_case invalid_signal 213*ef2b2b9dSAaron LI atf_add_test_case invalid_command 214*ef2b2b9dSAaron LI atf_add_test_case no_such_command 215*ef2b2b9dSAaron LI} 216