1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-09-13 14:27:08 +03:00

0023586: The test execution process should correctly stop on user demand

Possibility to break DRAW commands by user break (Control-C) is implemented as follows:

- Treatment of Control-C (SIGINT signal) on UNIX in OSD::SetSignal() is made coherent with Windows implementation: instead of attempt to raise exception (simulated by longjump, does not work anyway), signal handler just sets a flag which can be later checked by OSD::ControlBreak()

- Call to OSD::ControlBreak() is added to common entry point for OCCT DRAW commands; this causes command interruption if Control-C has been pressed before its start.

- Command "dbreak" added allowing to check Control-Break status from Tcl script (raises Tcl exception if break was signaled)

- Command "dversion" added printing information on OCCT version, used build options, compiler, etc.

- Test system modified to properly handle and report user breaks and add version info in the summary log

Fix compiler error on Linux
This commit is contained in:
abv
2012-12-07 16:12:01 +04:00
parent 3994ec417f
commit 8a262fa13d
4 changed files with 163 additions and 6 deletions

View File

@@ -296,8 +296,9 @@ proc testgrid {args} {
# log command arguments and environment
set log "Command: testgrid $args\nHost: [info hostname]\nStarted on: [clock format [clock seconds] -format {%Y-%m-%d %H:%M:%S}]\n"
catch {set log "$log\nDRAW build:\n[dversion]\n" }
set log "$log\nEnvironment:\n"
foreach envar [array names env] {
foreach envar [lsort [array names env]] {
set log "$log$envar=\"$env($envar)\"\n"
}
set log "$log\n"
@@ -321,7 +322,14 @@ proc testgrid {args} {
}
# start test cases
set userbreak 0
foreach test_def $tests_list {
# check for user break
if { "[info commands dbreak]" == "dbreak" && [catch dbreak] } {
set userbreak 1
break
}
set dir [lindex $test_def 0]
set group [lindex $test_def 1]
set grid [lindex $test_def 2]
@@ -387,12 +395,17 @@ proc testgrid {args} {
# get results of started threads
if { $parallel > 0 } {
catch {tpool::resume $worker}
while { [llength [array names job_def]] > 0 } {
while { ! $userbreak && [llength [array names job_def]] > 0 } {
foreach job [tpool::wait $worker [array names job_def]] {
eval _log_test_case \[tpool::get $worker $job\] $job_def($job) log
unset job_def($job)
}
# check for user break
if { "[info commands dbreak]" == "dbreak" && [catch dbreak] } {
set userbreak 1
}
# update summary log with requested period
if { $logdir != "" && $refresh > 0 && [clock seconds] > $refresh_timer + $refresh } {
_log_summarize $logdir $log
@@ -400,12 +413,18 @@ proc testgrid {args} {
}
}
# release thread pool
tpool::cancel $worker [array names job_def]
tpool::release $worker
}
uplevel dchrono _timer stop
set time [lindex [split [uplevel dchrono _timer show] "\n"] 0]
if { $userbreak } {
puts "*********** Stopped by user break ***********"
set time "${time} \nNote: the process is not finished, stopped by user break!"
}
######################################################
# output summary logs and exit
######################################################
@@ -1243,7 +1262,8 @@ proc _log_html_summary {logdir log totals regressions improvements total_time} {
# time stamp and elapsed time info
if { $total_time != "" } {
puts $fd "<p>Generated on [clock format [clock seconds] -format {%Y-%m-%d %H:%M:%S}] on [info hostname] <p> $total_time"
puts $fd "<p>Generated on [clock format [clock seconds] -format {%Y-%m-%d %H:%M:%S}] on [info hostname]\n<p>"
puts $fd [join [split $total_time "\n"] "<p>"]
} else {
puts $fd "<p>NOTE: This is intermediate summary; the tests are still running! This page will refresh automatically until tests are finished."
}