diff options
author | luislavena <luislavena@19e92222-5c0b-0410-8929-a290d50e31e9> | 2008-04-18 07:09:41 +0000 |
---|---|---|
committer | luislavena <luislavena@19e92222-5c0b-0410-8929-a290d50e31e9> | 2008-04-18 07:09:41 +0000 |
commit | 87e6494e924849fc22d0602187b650a0b7a11fc8 (patch) | |
tree | 0fff3ee238efeb2c8d724286ba91267043ae8755 | |
parent | 12cc38aaf337b2b0e0d518ec6d311e8d82db7d30 (diff) | |
download | unicorn-87e6494e924849fc22d0602187b650a0b7a11fc8.tar.gz |
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/branches/stable_1-2@1011 19e92222-5c0b-0410-8929-a290d50e31e9
-rw-r--r-- | projects/mongrel_service/tests/fixtures/mock_process.bas | 76 |
1 files changed, 56 insertions, 20 deletions
diff --git a/projects/mongrel_service/tests/fixtures/mock_process.bas b/projects/mongrel_service/tests/fixtures/mock_process.bas index 833967c..e9405ab 100644 --- a/projects/mongrel_service/tests/fixtures/mock_process.bas +++ b/projects/mongrel_service/tests/fixtures/mock_process.bas @@ -14,43 +14,79 @@ #include once "crt.bi"
#include once "windows.bi"
-dim shared stop_hit as BOOL
+dim shared as any ptr control_signal, control_mutex
+dim shared flagged as byte
+dim shared result as integer
-function _console_handler(byval dwCtrlType as DWORD) as BOOL
+function slow_console_handler(byval dwCtrlType as DWORD) as BOOL
dim result as BOOL
if (dwCtrlType = CTRL_C_EVENT) then
- '# slow response, take 10 seconds...
- fprintf(stdout, !"out: slow stop\r\n")
- sleep (10*1000)
+ fprintf(stdout, !"out: CTRL-C received\r\n")
+ mutexlock(control_mutex)
result = 1
- stop_hit = TRUE
+ flagged = 1
+ condsignal(control_signal)
+ mutexunlock(control_mutex)
+ elseif (dwCtrlType = CTRL_BREAK_EVENT) then
+ fprintf(stdout, !"out: CTRL-BREAK received\r\n")
+ mutexlock(control_mutex)
+ result = 1
+ flagged = 2
+ condsignal(control_signal)
+ mutexunlock(control_mutex)
end if
return result
end function
-sub main()
+sub wait_for(byval flag_level as integer)
+ flagged = 0
+ '# set handler
+ if (SetConsoleCtrlHandler(@slow_console_handler, 1) = 0) then
+ fprintf(stderr, !"err: cannot set console handler\r\n")
+ end if
+ fprintf(stdout, !"out: waiting for keyboard signal\r\n")
+ mutexlock(control_mutex)
+ do until (flagged = flag_level)
+ condwait(control_signal, control_mutex)
+ loop
+ mutexunlock(control_mutex)
+ fprintf(stdout, !"out: got keyboard signal\r\n")
+ if (SetConsoleCtrlHandler(@slow_console_handler, 0) = 0) then
+ fprintf(stderr, !"err: cannot unset console handler\r\n")
+ end if
+end sub
+
+function main() as integer
fprintf(stdout, !"out: message\r\n")
fprintf(stderr, !"err: error\r\n")
select case lcase(command(1))
case "wait":
sleep
-
+ return 0
+
case "error":
'# terminate with error code
- end 1
-
- case "slow":
- stop_hit = FALSE
- SetConsoleCtrlHandler(@_console_handler, 1)
- do while (stop_hit = FALSE)
- sleep 15
- loop
- SetConsoleCtrlHandler(@_console_handler, 0)
- end 10
+ return 1
+
+ case "slow1":
+ wait_for(1)
+ return 10
+
+ case "slow2":
+ wait_for(2)
+ return 20
end select
-end sub
+end function
+
+control_signal = condcreate()
+control_mutex = mutexcreate()
+
+result = main()
+
+conddestroy(control_signal)
+mutexdestroy(control_mutex)
-main()
+end result
|