-C If\sa\stable-constraint\sPRIMARY\sKEY\slists\sa\ssingle\scolumn\sin\ssingle-quotes\sand\nthat\scolumn\shas\stype\sINTEGER,\sthen\smake\sthat\scolumn\san\sinteger\sprimary\skey,\nfor\shistorical\scompatibility.\s\sFix\sfor\sticket\s[ac661962a2aeab3c331].
-D 2015-11-01T21:19:13.044
+C Add\sthe\s"--jobs\sN"\soption\sto\sthe\sreleasetest.tcl\sscript\sto\sallow\stests\sto\sbe\srun\sin\sparallel\sby\sN\sprocesses.\sN\sdefaults\sto\s1.
+D 2015-11-02T18:32:00.281
F Makefile.in 4469ed8b02a9934fea9503d791165367d19db2f7
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 702d3e98f3afc6587a78481257f3c4c900efc3a4
F test/rdonly.test 64e2696c322e3538df0b1ed624e21f9a23ed9ff8
F test/regexp1.test 497ea812f264d12b6198d6e50a76be4a1973a9d8
F test/reindex.test 44edd3966b474468b823d481eafef0c305022254
-F test/releasetest.tcl 67a82199e6ddee609211488bc04ed3f9ea3aa28a
+F test/releasetest.tcl 27ce760f7ed8f9ccfc479b52380b5ab3b23df1d4
F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb
F test/rollback.test 458fe73eb3ffdfdf9f6ba3e9b7350a6220414dea
F test/rollback2.test fc14cf6d1a2b250d2735ef16124b971bce152f14
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 9f19420b0a79dff65fc3a9d548f4b3fc4955f9f9
-R 84796f7face623f0835cebd2cbfc3bf7
-U drh
-Z 6a5992b91acc5a2e6d8856fb63b43984
+P db319a035feeb6f8fcd04f90fb10cd4b06e68184
+R 091ec514c497414ee77bdc2045b96916
+T *branch * mp-releasetest
+T *sym-mp-releasetest *
+T -sym-trunk *
+U dan
+Z 4ab3d2d6b9016bc691ec66f068d2b949
#########################################################################
#########################################################################
+# Configuration verification: Check that each entry in the list of configs
+# specified for each platforms exists.
+#
foreach {key value} [array get ::Platforms] {
foreach {v t} $value {
if {0==[info exists ::Configs($v)]} {
}
}
-proc run_test_suite {name testtarget config} {
+#--------------------------------------------------------------------------
+# This command is invoked as the [main] routine for scripts run with the
+# "--slave" option.
+#
+# For each test (i.e. "configure && make test" execution), the master
+# process spawns a process with the --slave option. It writes two lines
+# to the slaves stdin. The first contains a single boolean value - the
+# value of ::TRACE to use in the slave script. The second line contains a
+# list in the same format as each element of the list passed to the
+# [run_all_test_suites] command in the master process.
+#
+# The slave then runs the "configure && make test" commands specified. It
+# exits successfully if the tests passes, or with a non-zero error code
+# otherwise.
+#
+proc run_slave_test {} {
+ # Read global vars configuration from stdin.
+ set V [gets stdin]
+ foreach {::TRACE} $V {}
+
+ # Read the test-suite configuration from stdin.
+ set T [gets stdin]
+ foreach {title dir configOpts testtarget cflags opts} $T {}
+
+ # Create and switch to the test directory.
+ trace_cmd file mkdir $dir
+ trace_cmd cd $dir
+ catch {file delete core}
+ catch {file delete test.log}
+
+ # Run the "./configure && make" commands.
+ set rc 0
+ set rc [catch [configureCommand $configOpts]]
+ if {!$rc} {
+ set rc [catch [makeCommand $testtarget $cflags $opts]]
+ }
+
+ # Exis successfully if the test passed, or with a non-zero error code
+ # otherwise.
+ exit $rc
+}
+
+# This command is invoked in the master process each time a slave
+# file-descriptor is readable.
+#
+proc slave_fileevent {fd T tm1} {
+ global G
+ foreach {title dir configOpts testtarget cflags opts} $T {}
+
+ if {[eof $fd]} {
+ fconfigure $fd -blocking 1
+ set rc [catch { close $fd }]
+
+ set errmsg {}
+ count_tests_and_errors [file join $dir test.log] rc errmsg
+
+ if {!$::TRACE} {
+ set tm2 [clock seconds]
+ set hours [expr {($tm2-$tm1)/3600}]
+ set minutes [expr {(($tm2-$tm1)/60)%60}]
+ set seconds [expr {($tm2-$tm1)%60}]
+ set tm [format (%02d:%02d:%02d) $hours $minutes $seconds]
+
+ if {$rc} {
+ set status FAIL
+ incr ::NERR
+ } else {
+ set status Ok
+ }
+
+ set n [string length $title]
+ PUTS "finished: ${title}[string repeat . [expr {63-$n}]] $status $tm"
+ if {$errmsg!=""} {PUTS " $errmsg"}
+ flush stdout
+ }
+
+ incr G(nJob) -1
+ } else {
+ set line [gets $fd]
+ if {[string trim $line] != ""} {
+ puts "Trace : $title - \"$line\""
+ }
+ }
+}
+
+#--------------------------------------------------------------------------
+# The only argument passed to this function is a list of test-suites to
+# run. Each "test-suite" is itself a list consisting of the following
+# elements:
+#
+# * Test title (for display).
+# * The name of the directory to run the test in.
+# * The argument for [configureCommand]
+# * The first argument for [makeCommand]
+# * The second argument for [makeCommand]
+# * The third argument for [makeCommand]
+#
+proc run_all_test_suites {alltests} {
+ global G
+ set tests $alltests
+
+ set G(nJob) 0
+
+ while {[llength $tests]>0 || $G(nJob)>0} {
+ if {$G(nJob)>=$::JOBS || [llength $tests]==0} {
+ vwait G(nJob)
+ }
+
+ if {[llength $tests]>0} {
+ set T [lindex $tests 0]
+ set tests [lrange $tests 1 end]
+ foreach {title dir configOpts testtarget cflags opts} $T {}
+ if {!$::TRACE} {
+ set n [string length $title]
+ PUTS "starting: ${title}"
+ flush stdout
+ }
+
+ # Run the job.
+ #
+ set tm1 [clock seconds]
+ incr G(nJob)
+ set fd [open "|[info nameofexecutable] [info script] --slave" r+]
+ fconfigure $fd -blocking 0
+ fileevent $fd readable [list slave_fileevent $fd $T $tm1]
+ puts $fd [list $::TRACE]
+ puts $fd [list {*}$T]
+ flush $fd
+ }
+ }
+}
+
+proc add_test_suite {listvar name testtarget config} {
+ upvar $listvar alltests
+
# Tcl variable $opts is used to build up the value used to set the
# OPTS Makefile variable. Variable $cflags holds the value for
# CFLAGS. The makefile will pass OPTS to both gcc and lemon, but
append opts " -DSQLITE_OS_UNIX=1"
}
- if {!$::TRACE} {
- set n [string length $title]
- PUTS -nonewline "${title}[string repeat . [expr {63-$n}]]"
- flush stdout
- }
-
- set rc 0
- set tm1 [clock seconds]
- set origdir [pwd]
- trace_cmd file mkdir $dir
- trace_cmd cd $dir
- set errmsg {}
- catch {file delete core}
- set rc [catch [configureCommand $configOpts]]
- if {!$rc} {
- set rc [catch [makeCommand $testtarget $cflags $opts]]
- count_tests_and_errors test.log rc errmsg
- }
- trace_cmd cd $origdir
- set tm2 [clock seconds]
-
- if {!$::TRACE} {
- set hours [expr {($tm2-$tm1)/3600}]
- set minutes [expr {(($tm2-$tm1)/60)%60}]
- set seconds [expr {($tm2-$tm1)%60}]
- set tm [format (%02d:%02d:%02d) $hours $minutes $seconds]
- if {$rc} {
- PUTS " FAIL $tm"
- incr ::NERR
- } else {
- PUTS " Ok $tm"
- }
- if {$errmsg!=""} {PUTS " $errmsg"}
- }
+ lappend alltests [list $title $dir $configOpts $testtarget $cflags $opts]
}
# The following procedure returns the "configure" command to be exectued for
if {$::TRACE} {
PUTS $args
}
+ set res ""
if {!$::DRYRUN} {
- uplevel 1 $args
+ set res [uplevel 1 $args]
}
+ return $res
}
set ::DRYRUN 0
set ::EXEC exec
set ::TRACE 0
+ set ::JOBS 1
set ::WITHTCL {}
set config {}
set platform $::tcl_platform(os)-$::tcl_platform(machine)
set x [lindex $argv $i]
if {[regexp {^--[a-z]} $x]} {set x [string range $x 1 end]}
switch -glob -- $x {
+ -slave {
+ run_slave_test
+ exit
+ }
+
-srcdir {
incr i
set ::SRCDIR [file normalize [lindex $argv $i]]
set platform [lindex $argv $i]
}
+ -jobs {
+ incr i
+ set ::JOBS [lindex $argv $i]
+ }
+
-quick {
set ::QUICK 1
}
set config_options [concat $::Configs($zConfig) $::EXTRACONFIG]
incr NTEST
- run_test_suite $zConfig $target $config_options
+ add_test_suite all $zConfig $target $config_options
# If the configuration included the SQLITE_DEBUG option, then remove
# it and run veryquick.test. If it did not include the SQLITE_DEBUG option
if {$debug_idx < 0} {
incr NTEST
append config_options " -DSQLITE_DEBUG=1"
- run_test_suite "${zConfig}_debug" $xtarget $config_options
+ add_test_suite all "${zConfig}_debug" $xtarget $config_options
} else {
incr NTEST
regsub { *-DSQLITE_MEMDEBUG[^ ]* *} $config_options { } config_options
regsub { *-DSQLITE_DEBUG[^ ]* *} $config_options { } config_options
- run_test_suite "${zConfig}_ndebug" $xtarget $config_options
+ add_test_suite all "${zConfig}_ndebug" $xtarget $config_options
}
}
}
+ run_all_test_suites $all
+
set elapsetime [expr {[clock seconds]-$STARTTIME}]
set hr [expr {$elapsetime/3600}]
set min [expr {($elapsetime/60)%60}]