1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
|
source [file dirname [info script]]/testing.tcl
needs cmd signal
needs cmd pid
testConstraint try [expr {[info commands try] ne ""}]
test signal-1.1 "catch/throw" {
signal handle TERM
set x 1
set rc [catch -signal {
signal throw -TERM
incr x
} result]
signal default TERM
list [info returncode $rc] $result $x
} {signal SIGTERM 1}
test signal-1.2 "catch/kill" {
signal handle TERM
set x 1
set rc [catch -signal {
kill -TERM [pid]
incr x
} result]
signal default TERM
list [info returncode $rc] $result $x
} {signal SIGTERM 1}
test signal-1.3 "catch/alarm" {
signal handle ALRM
set x 1
set rc [catch -signal {
alarm .2
sleep 1
incr x
} result]
signal default ALRM
list [info returncode $rc] $result $x
} {signal SIGALRM 1}
test signal-1.4 "multiple signals before catch" {
signal handle ALRM INT
kill -INT [pid]
alarm .2
sleep 1
set x 1
set rc [catch -signal {
# Doesn't not execute because signals already active
incr x
} result]
signal default ALRM INT
list [info returncode $rc] [lsort $result] $x
} {signal {SIGALRM SIGINT} 1}
test signal-1.5 "ignored signals" {
signal handle INT
signal ignore HUP
set x 1
catch -signal {
# Send an ignored signal
kill -HUP [pid]
incr x
# Now a caught signal
kill -INT [pid]
incr x
} result
signal default INT TERM
list [lsort $result] $x
} {SIGINT 2}
test signal-1.6 "check ignored signals" {
list [signal check SIGINT] [signal check]
} {{} SIGHUP}
test signal-1.7 "clearing ignored signals" {
signal check -clear
signal check
} {}
test signal-1.8 "try/signal" try {
signal handle ALRM
try -signal {
alarm 0.8
foreach i [range 10] {
sleep 0.2
}
set msg ""
} on signal {msg} {
# Just set msg here
} finally {
alarm 0
}
signal default ALRM
list [expr {$i in {2 3 4}}] $msg
} {1 SIGALRM}
test signal-1.9 {throw an ignored signal} {
signal ignore SIGTERM
signal throw SIGTERM
signal check -clear SIGTERM
} {SIGTERM}
test signal-1.10 {throw with no signal} try {
# With no arg, signal throw means signal throw SIGINT
try -signal {
signal throw
} on signal msg {
}
set msg
} SIGINT
test signal-2.1 {bad signal} -body {
signal handle NONEXISTENT
} -returnCodes error -result {unknown signal NONEXISTENT}
test signal-2.2 {bad signal} -body {
signal handle 999999
} -returnCodes error -result {unknown signal 999999}
test signal-2.3 {signal by number} {
signal handle 2
signal default 2
} {}
test signal-2.4 {signal block} {
signal block SIGINT
signal handle SIGINT
signal default SIGINT
} {}
test signal-2.5 {signal check invalid} -body {
signal check NONEXISTENT
} -returnCodes error -result {unknown signal NONEXISTENT}
test signal-2.6 {signal check invalid num} -body {
signal check 999999
} -returnCodes error -result {unknown signal 999999}
test signal-2.7 {signal throw invalid} -body {
signal throw NONEXISTENT
} -returnCodes error -result {unknown signal NONEXISTENT}
test signal-2.8 {signal throw invalid num} -body {
signal throw 999999
} -returnCodes error -result {unknown signal 999999}
test signal-2.9 {signal list} {
expr {"SIGINT" in [signal default]}
} {1}
test alarm-1.1 {alarm usage} -body {
alarm
} -returnCodes error -result {wrong # args: should be "alarm seconds"}
test alarm-1.2 {alarm usage} -body {
alarm too many args
} -returnCodes error -result {wrong # args: should be "alarm seconds"}
test alarm-1.3 {alarm usage} -body {
alarm badnum
} -returnCodes error -result {expected floating-point number but got "badnum"}
test alarm-1.4 {alarm seconds} {
alarm 2
alarm 0
} {}
test sleep-1.1 {sleep usage} -body {
sleep
} -returnCodes error -result {wrong # args: should be "sleep seconds"}
test sleep-1.2 {sleep usage} -body {
sleep too many args
} -returnCodes error -result {wrong # args: should be "sleep seconds"}
test sleep-1.3 {sleep usage} -body {
sleep badnum
} -returnCodes error -result {expected floating-point number but got "badnum"}
test kill-1.1 {kill usage} -body {
kill
} -returnCodes error -result {wrong # args: should be "kill ?SIG|-0? pid"}
test kill-1.2 {kill usage} -body {
kill too many args
} -returnCodes error -result {wrong # args: should be "kill ?SIG|-0? pid"}
test kill-1.3 {kill bad signal} -body {
kill NONEXISTENT [pid]
} -returnCodes error -result {unknown signal NONEXISTENT}
test kill-1.4 {kill -0} {
kill -0 [pid]
} {}
test kill-1.5 {kill 0 pid} {
kill 0 [pid]
} {}
test kill-1.6 {kill to invalid process} -body {
kill 0 9999999
} -returnCodes error -result {kill: Failed to deliver signal}
testreport
|