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