From 87e6494e924849fc22d0602187b650a0b7a11fc8 Mon Sep 17 00:00:00 2001 From: luislavena Date: Fri, 18 Apr 2008 07:09:41 +0000 Subject: Added emulation of slow termination processes. git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/branches/stable_1-2@1011 19e92222-5c0b-0410-8929-a290d50e31e9 --- .../tests/fixtures/mock_process.bas | 76 ++++++++++++++++------ 1 file 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 -- cgit v1.2.3-24-ge0c7