1# ast nmake interrupt handler tests 2 3INCLUDE test.def 4 5EXIT_USR1=$(( 256 + $(kill -l USR1) )) 6 7TEST 01 'SIGALRM' 8 9 EXEC --silent 10 INPUT Makefile $'all : a 11a : 12 sleep 11 13FREQ = 2s 14COUNT = 0 15.INIT : .INTERRUPT.INIT 16.INTERRUPT.INIT : .MAKE .VIRTUAL .FORCE 17 alarm $(FREQ) 18.INTERRUPT.ALRM : .MAKE .VIRTUAL .FORCE .REPEAT 19 let COUNT = COUNT + 1 20 print $(<) $(COUNT) 21 alarm $(FREQ)' 22 OUTPUT - $'.INTERRUPT.ALRM 1 23.INTERRUPT.ALRM 2 24.INTERRUPT.ALRM 3 25.INTERRUPT.ALRM 4 26.INTERRUPT.ALRM 5' 27 28 EXEC --silent FREQ=3s 29 OUTPUT - $'.INTERRUPT.ALRM 1 30.INTERRUPT.ALRM 2 31.INTERRUPT.ALRM 3' 32 33 EXEC --silent FREQ=5s 34 OUTPUT - $'.INTERRUPT.ALRM 1 35.INTERRUPT.ALRM 2' 36 37TEST 02 'obsolete generic interrupt' 38 39 DO trap - USR1 USR2 # coshell jobs ignore these 40 41 EXEC --silent --nojobs STATUS=continue 42 INPUT Makefile $'.INTERRUPT : .MAKE .VIRTUAL .FORCE .REPEAT 43 print $(<:T=M=) : caught signal $(.INTERRUPT) 44 .INTERRUPT := $(STATUS) 45all : USR1 USR2 46USR1 USR2 : 47 kill -$(<) $(.SYSCALL getpid) 48 sleep 2 49.INIT : init 50.DONE : done 51init done : .MAKE .VIRTUAL .FORCE 52 print $(<)' 53 OUTPUT - $'init 54all : USR1 : .INTERRUPT : caught signal USR1 55all : USR2 : .INTERRUPT : caught signal USR2 56done' 57 58 EXEC --silent --nojobs STATUS=exit 59 OUTPUT - $'init 60all : USR1 : .INTERRUPT : caught signal USR1 61done' 62 EXIT 3 63 64 EXEC --silent --nojobs STATUS=signal 65 DIAGNOSTICS 66 EXIT $EXIT_USR1 67 68TEST 03 'generic interrupt function' 69 70 EXEC --silent --nojobs STATUS=continue 71 INPUT Makefile $'.INTERRUPT : .FUNCTION 72 print $(<:T=M=) : caught signal $(%) 73 return $(STATUS) 74all : USR1 USR2 75USR1 USR2 : 76 kill -$(<) $(.SYSCALL getpid) 77 sleep 1 78.INIT : init 79.DONE : done 80init done : .MAKE .VIRTUAL .FORCE 81 print $(<)' 82 OUTPUT - $'init 83all : USR1 : .INTERRUPT : caught signal USR1 84all : USR2 : .INTERRUPT : caught signal USR2 85done' 86 87 EXEC --silent --nojobs STATUS=exit 88 OUTPUT - $'init 89all : USR1 : .INTERRUPT : caught signal USR1 90done' 91 EXIT 3 92 93 EXEC --silent --nojobs STATUS=signal 94 DIAGNOSTICS 95 EXIT $EXIT_USR1 96 97TEST 04 'obsolete specific interrupt' 98 99 EXEC --silent --nojobs STATUS=continue 100 INPUT Makefile $'.INTERRUPT.USR1 .INTERRUPT.USR2 : .MAKE .VIRTUAL .FORCE .REPEAT 101 print $(<:T=M=) : caught signal $(.INTERRUPT) 102 .INTERRUPT := $(STATUS) 103all : USR1 USR2 104USR1 USR2 : 105 kill -$(<) $(.SYSCALL getpid) 106 sleep 1 107.INIT : init 108.DONE : done 109init done : .MAKE .VIRTUAL .FORCE 110 print $(<)' 111 OUTPUT - $'init 112all : USR1 : .INTERRUPT.USR1 : caught signal USR1 113all : USR2 : .INTERRUPT.USR2 : caught signal USR2 114done' 115 116 EXEC --silent --nojobs STATUS=exit 117 OUTPUT - $'init 118all : USR1 : .INTERRUPT.USR1 : caught signal USR1 119done' 120 EXIT 3 121 122 EXEC --silent --nojobs STATUS=signal 123 DIAGNOSTICS 124 EXIT $EXIT_USR1 125 126TEST 05 'specific interrupt function' 127 128 EXEC --silent --nojobs STATUS=continue 129 INPUT Makefile $'.INTERRUPT.USR1 .INTERRUPT.USR2 : .FUNCTION 130 print $(<:T=M=) : caught signal $(%) 131 return $(STATUS) 132all : USR1 USR2 133USR1 USR2 : 134 kill -$(<) $(.SYSCALL getpid) 135 sleep 1 136.INIT : init 137.DONE : done 138init done : .MAKE .VIRTUAL .FORCE 139 print $(<)' 140 OUTPUT - $'init 141all : USR1 : .INTERRUPT.USR1 : caught signal USR1 142all : USR2 : .INTERRUPT.USR2 : caught signal USR2 143done' 144 145 EXEC --silent --nojobs STATUS=exit 146 OUTPUT - $'init 147all : USR1 : .INTERRUPT.USR1 : caught signal USR1 148done' 149 EXIT 3 150 151 EXEC --silent --nojobs STATUS=signal 152 DIAGNOSTICS 153 EXIT $EXIT_USR1 154 155TEST 06 'multiple interrupts' 156 157 EXEC -n 158 INPUT Makefile $'reap.check = 3s 159reset.check = 5m 160.GET : .FUNCTION 161 local I ID 162 ID := $(%:O=1) 163 for I $(%:O>1) 164 if "$(I:A=.EXISTS|.FAILED)" 165 print -u2 $(ID) done $(I) 166 else 167 eval 168 .NOTIFY.$(ID) : .MAKE .VIRTUAL .FORCE .REPEAT .AFTER 169 print -u2 $(ID) done $$(<<) 170 end 171 $(I) : .NOTIFY.$(ID) 172 run $(I) 173 end 174 end 175.REAP : .MAKE .VIRTUAL .FORCE .REPEAT 176 wait - 177 if $(.OUTSTANDING) > 0 178 alarm $(reap.check) .REAP 179 end 180.MAKERUN : .DO.REAP 181.DO.REAP : .MAKE .VIRTUAL .FORCE .REPEAT 182 alarm $(reap.check) .REAP 183.MAKEINIT : .DO.RESET 184.DO.RESET : .MAKE .VIRTUAL .FORCE .REPEAT 185 reset 186 alarm $(reset.check) .DO.RESET 187test : test-1 test-2 188test-1 : .MAKE 189 get 1 x 190 get 2 x y 191 get 3 x y z 192test-2 : .MAKE 193 get 4 x 194 get 5 y 195 get 6 z 196x : 197 sleep 5 198 echo $(<) >&2 199y : 200 sleep 10 201 echo $(<) >&2 202z : 203 sleep 15 204 echo $(<) >&2' 205 OUTPUT - $'+ sleep 5 206+ echo x >&2 207+ sleep 10 208+ echo y >&2 209+ sleep 15 210+ echo z >&2' 211 ERROR - $'1 done x 2122 done x 2132 done y 2143 done x 2153 done y 2163 done z 2174 done x 2185 done y 2196 done z' 220 221 EXEC -- 222 OUTPUT - 223 ERROR - $'+ sleep 5 224+ echo x 225+ 1>& 2 226x 2271 done x 2282 done x 2293 done x 230+ sleep 10 231+ echo y 232+ 1>& 2 233y 2342 done y 2353 done y 2364 done x 2375 done y 238+ sleep 15 239+ echo z 240+ 1>& 2 241z 2423 done z 2436 done z' 244 245TEST 07 'continue after caught interrupt' 246 247 EXEC 248 INPUT Makefile $'CONTINUE = 1 249.INTERRUPT.TERM : .MAKE 250 CONTINUE = 0 251 print interrupt 252.INIT .DONE : .MAKE 253 print $(<) 254action : .MAKE kill 255 print init 256 while CONTINUE 257 end 258 print done 259kill : 260 set +x; { sleep 1; kill -TERM $(.SYSCALL getpid); } >/dev/null 2>&1 &' 261 OUTPUT - $'.INIT 262init 263interrupt 264done 265.DONE' 266