blob: caed95065f375e5070e5e5f27dd807f4776cbd78 (
plain)
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
constraint cmd try
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
|