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