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:
@@ -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."
|
||||
}
|
||||
|
Reference in New Issue
Block a user