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