aboutsummaryrefslogtreecommitdiff
path: root/tests/signal.test
blob: e21250112ab6fe9ce4792979cb9da036cd8d6406 (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
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