summaryrefslogtreecommitdiff
path: root/tests/signal.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/signal.test')
-rw-r--r--tests/signal.test98
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/signal.test b/tests/signal.test
new file mode 100644
index 0000000..e212501
--- /dev/null
+++ b/tests/signal.test
@@ -0,0 +1,98 @@
+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.4
+ foreach i [range 10] {
+ sleep 0.1
+ }
+ set msg ""
+ } on signal {msg} {
+ # Just set msg here
+ } finally {
+ alarm 0
+ }
+ signal default ALRM
+ list [expr {$i in {3 4 5}}] $msg
+} {1 SIGALRM}
+
+testreport