From: dan Date: Fri, 3 Feb 2023 18:47:00 +0000 (+0000) Subject: Have testrunner.tcl run various builds as part of the 'release' command. X-Git-Tag: version-3.41.0~59^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=33d3559736b45f667209507e02bbd83799e56951;p=thirdparty%2Fsqlite.git Have testrunner.tcl run various builds as part of the 'release' command. FossilOrigin-Name: ba2fae30a81e2574f13a7351c9f843b8c2c7d2c93fcd71fb2de98f5b34f3e109 --- diff --git a/manifest b/manifest index ffbb183f72..0dd6d747f5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Avoid\susing\sTcl\scommand\s[clock]\sin\stestrunner.tcl. -D 2023-02-03T11:32:51.147 +C Have\stestrunner.tcl\srun\svarious\sbuilds\sas\spart\sof\sthe\s'release'\scommand. +D 2023-02-03T18:47:00.141 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -1402,7 +1402,7 @@ F test/recover.test fd5199f928757cb308661b5fdca1abc19398a798ff7f24b57c3071e9f8e0 F test/regexp1.test 8f2a8bc1569666e29a4cee6c1a666cd224eb6d50e2470d1dc1df995170f3e0f1 F test/regexp2.test 55ed41da802b0e284ac7e2fe944be3948f93ff25abbca0361a609acfed1368b5 F test/reindex.test cd9d6021729910ece82267b4f5e1b5ac2911a7566c43b43c176a6a4732e2118d -F test/releasetest_data.tcl 0db8aee0c348090fd06da47020ab4ed8ec692e0723427b2f3947d4dfb806f3b0 +F test/releasetest_data.tcl 4094c9fc5c9ac544014fa3c66c791bde7d95874b26dd0fd1c058124638ea9001 F test/resetdb.test 54c06f18bc832ac6d6319e5ab23d5c8dd49fdbeec7c696d791682a8006bd5fc3 F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb F test/returning1.test 3ef7b264598b3292be0cdb028e4acb7524c5fd409b33b78449f894dfd68db334 @@ -1565,8 +1565,8 @@ F test/temptable2.test 76821347810ecc88203e6ef0dd6897b6036ac788e9dd3e6b04fd4d163 F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637 F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc F test/tester.tcl 8d54d40a55e12554b4509bc12078b201b233c8e842a7543629094a21b1ba956d -F test/testrunner.tcl ef21c2f377e4a6648252afbdd7a330256fa075eb3f1f12a4af4fffabb132cdef -F test/testrunner_data.tcl 38e2f2b2eb3033b58b4f7428affb5d627719e97ee166c8b95296c39ffca6c849 +F test/testrunner.tcl 733f7767c0588ad0ced09c75b6a358dd610f0d6d26750be2c5323363bba124d2 +F test/testrunner_data.tcl ec3b2db9f00746b641f2e010bc4e3504f2aff60983d8786a363f66ad40e0483e F test/thread001.test a0985c117eab62c0c65526e9fa5d1360dd1cac5b03bde223902763274ce21899 F test/thread002.test c24c83408e35ba5a952a3638b7ac03ccdf1ce4409289c54a050ac4c5f1de7502 F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7 @@ -2047,8 +2047,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 69d934a1bfad86f3f60dab146db539645f5735f1bdb07dfe3a3d88828a03390b -R 2c8cdf901157932d2f3f5be2f780ac84 +P b2faf9289f6fbbcd4491e1b063da731b35aeed9ff1fc97f64798e99cac847b4a +R da71c094a7c065812b6c827874cf66e7 U dan -Z 4428f02730b2f2d17ac513e2b892f834 +Z bc53011b32b3964f996ff997c59940a1 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 42d5d121e1..a47ceda038 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b2faf9289f6fbbcd4491e1b063da731b35aeed9ff1fc97f64798e99cac847b4a \ No newline at end of file +ba2fae30a81e2574f13a7351c9f843b8c2c7d2c93fcd71fb2de98f5b34f3e109 \ No newline at end of file diff --git a/test/releasetest_data.tcl b/test/releasetest_data.tcl index 6efc44b92c..ef17779997 100644 --- a/test/releasetest_data.tcl +++ b/test/releasetest_data.tcl @@ -417,7 +417,7 @@ proc main_script {args} { usage } set config [lindex $args end-1] - set target [lindex $args end] + set srcdir [lindex $args end] set opts [list] ;# OPTS value set cflags [expr {$bMsvc ? "-Zi" : "-g"}] ;# CFLAGS value @@ -542,14 +542,16 @@ proc main_script {args} { puts {set -e} puts {} puts {if [ "$#" -ne 1 ] ; then} - puts { echo "Usage: $0 " } + puts { echo "Usage: $0 " } puts { exit -1 } puts {fi } - puts {SRCDIR=$1} + puts "SRCDIR=\"$srcdir\"" puts {} puts "TCL=\"[::tcl::pkgconfig get libdir,install]\"" - puts "\$SRCDIR/configure --with-tcl=\$TCL $configOpts" + puts {if [ ! -f Makefile ] ; then} + puts " \$SRCDIR/configure --with-tcl=\$TCL $configOpts" + puts {fi} puts {} puts {OPTS=" -DSQLITE_NO_SYNC=1"} foreach o $opts { @@ -558,11 +560,11 @@ proc main_script {args} { puts {} puts "CFLAGS=\"$cflags\"" puts {} - puts "make $target \"CFLAGS=\$CFLAGS\" \"OPTS=\$OPTS\" $makeOpts" + puts "make \$1 \"CFLAGS=\$CFLAGS\" \"OPTS=\$OPTS\" $makeOpts" } else { - puts {set SRCDIR=%1} - set makecmd "nmake /f %SRCDIR%\\Makefile.msc TOP=%SRCDIR% $target " + puts {set TARGET=%1} + set makecmd "nmake /f %SRCDIR%\\Makefile.msc TOP=\"$srcdir\" %TARGET%" append makecmd "\"CFLAGS=$cflags\" \"OPTS=$opts\" $makeOpts" puts "set TMP=%CD%" diff --git a/test/testrunner.tcl b/test/testrunner.tcl index 91db8c4df6..227f1aa982 100644 --- a/test/testrunner.tcl +++ b/test/testrunner.tcl @@ -111,15 +111,18 @@ set R(schema) { config TEXT, filename TEXT, -- full path to test script slow BOOLEAN, -- true if script is "slow" - state TEXT CHECK( state IN ('ready', 'running', 'done', 'failed') ), + state TEXT CHECK( state IN ('', 'ready', 'running', 'done', 'failed') ), time INTEGER, -- Time in ms output TEXT, -- full output of test script - ismake AS (config='make'), + priority AS ((config='make') + ((config='build')*2) + (slow*4)), + jobtype AS ( + CASE WHEN config IN ('build', 'make') THEN config ELSE 'script' END + ), PRIMARY KEY(build, config, filename) ); - CREATE INDEX i1 ON script(state, ismake); - CREATE INDEX i2 ON script(state, slow DESC, ismake); + CREATE INDEX i1 ON script(state, jobtype); + CREATE INDEX i2 ON script(state, priority); } #------------------------------------------------------------------------- @@ -161,19 +164,64 @@ set R(build.logname) [file normalize testrunner_build.log] set R(info_script) [file normalize [info script]] set R(timeout) 10000 ;# Default busy-timeout for testrunner.db set R(nJob) [default_njob] ;# Default number of helper processes -set R(leaker) "" ;# Name of first script to leak memory - set R(patternlist) [list] +# This script runs individual tests - tcl scripts or [make xyz] commands - +# in directories named "testdir$N", where $N is an integer. This variable +# contains a list of integers indicating the directories in use. +# +# This variable is accessed only via the following commands: +# +# dirs_nHelper +# Return the number of entries currently in the list. +# +# dirs_freeDir IDIR +# Remove value IDIR from the list. It is an error if it is not present. +# +# dirs_allocDir +# Select a value that is not already in the list. Add it to the list +# and return it. +# +set R(dirs_in_use) [list] + +proc dirs_nHelper {} { + global R + llength $R(dirs_in_use) +} +proc dirs_freeDir {iDir} { + global R + set out [list] + foreach d $R(dirs_in_use) { + if {$iDir!=$d} { lappend out $d } + } + if {[llength $out]!=[llength $R(dirs_in_use)]-1} { + error "dirs_freeDir could not find $iDir" + } + set R(dirs_in_use) $out +} +proc dirs_allocDir {} { + global R + array set inuse [list] + foreach d $R(dirs_in_use) { + set inuse($d) 1 + } + for {set iRet 0} {[info exists inuse($iRet)]} {incr iRet} { } + lappend R(dirs_in_use) $iRet + return $iRet +} + switch -nocase -glob -- $tcl_platform(os) { *darwin* { set R(platform) osx + set R(make) make.sh } *linux* { set R(platform) linux + set R(make) make.sh } *win* { set R(platform) win + set R(make) make.bat } default { error "cannot determine platform!" @@ -244,13 +292,14 @@ proc launch_another_build {} { foreach {dirname b} $build {} puts "Launching build \"$b\" in directory $dirname..." - set srcdir [file dirname [file dirname $R(info_script)]] + set target coretestprogs + if {$b=="User-Auth"} { set target testfixture } incr R(nHelperRunning) set pwd [pwd] cd $dirname - set fd [open "|bash build.sh $srcdir 2>@1"] + set fd [open "|bash $R(make) $target 2>@1"] cd $pwd set O($fd) "" @@ -263,23 +312,20 @@ if {[lindex $argv 0]=="build"} { # Load configuration data. source [file join [file dirname [info script]] testrunner_data.tcl] + set srcdir [file dirname [file dirname $R(info_script)]] foreach b [trd_builds $R(platform)] { set dirname [build_to_dirname $b] create_or_clear_dir $dirname - set target "testprogs" - if {$b=="Device-One"} { set target coretestprogs } - if {$b=="User-Auth"} { set target testfixture } + set cmd [info nameofexec] + lappend cmd [file join [file dirname $R(info_script)] releasetest_data.tcl] + if {$R(platform)=="win"} { lappend $cmd -msvc } + lappend cmd script $b $srcdir - set cmd [list \ - [info nameofexec] \ - [file join [file dirname $R(info_script)] releasetest_data.tcl] \ - script $b $target - ] set script [exec {*}$cmd] - set fd [open [file join $dirname build.sh] w] + set fd [open [file join $dirname $R(make)] w] puts $fd $script close $fd @@ -361,6 +407,13 @@ proc testset_patternlist {patternlist} { foreach c [trd_configs $platform $b] { testset_append testset $b $c $patternlist } + + if {[llength $patternlist]==0 || $b=="User-Auth"} { + set target testfixture + } else { + set target coretestprogs + } + lappend testset [list $b build $target] } if {[llength $patternlist]==0} { @@ -376,18 +429,18 @@ proc testset_patternlist {patternlist} { set clist [trd_all_configs] set patternlist [lrange $patternlist 1 end] foreach c $clist { - testset_append testset Default $c $patternlist + testset_append testset "" $c $patternlist } } elseif {[info exists ::testspec($first)]} { set clist $first set patternlist [lrange $patternlist 1 end] - testset_append testset Default $first [lrange $patternlist 1 end] + testset_append testset "" $first [lrange $patternlist 1 end] } elseif { [llength $patternlist]==0 } { - testset_append testset Default veryquick $patternlist + testset_append testset "" veryquick $patternlist } else { - testset_append testset Default full $patternlist + testset_append testset "" full $patternlist } set testset @@ -404,7 +457,7 @@ proc testset_append {listvar build config patternlist} { set bMatch 0 foreach p $patternlist { if {[string match $p [file tail $f]]} { - set bMatch + set bMatch 1 break } } @@ -442,16 +495,10 @@ proc r_write_db {tcl} { # proc r_get_next_job {iJob} { - switch -- [expr $iJob%3] { - 0 { - set orderby "ORDER BY ismake ASC" - } - 1 { - set orderby "ORDER BY slow DESC, ismake ASC" - } - 2 { - set orderby "ORDER BY ismake DESC" - } + if {($iJob%2)} { + set orderby "ORDER BY priority ASC" + } else { + set orderby "ORDER BY priority DESC" } r_write_db { @@ -496,7 +543,7 @@ proc make_new_testset {} { foreach {b c s} $t {} set slow 0 - if {$c!="make"} { + if {$c!="make" && $c!="build"} { set fd [open $s] for {set ii 0} {$ii<100 && ![eof $fd]} {incr ii} { set line [gets $fd] @@ -515,9 +562,14 @@ proc make_new_testset {} { set c "default" } + set state ready + if {$b!="" && $c!="build"} { + set state "" + } + db eval { INSERT INTO script(build, config, filename, slow, state) - VALUES ($b, $c, $s, $slow, 'ready') + VALUES ($b, $c, $s, $slow, $state) } } } @@ -550,9 +602,15 @@ proc script_input_ready {fd iJob b c f} { UPDATE script SET output = $output, state=$state, time=$tm WHERE (build, config, filename) = ($b, $c, $f) } + if {$state=="done" && $c=="build"} { + db eval { + UPDATE script SET state = 'ready' WHERE (build, state)==($b, '') + } + } } - launch_another_job $iJob + dirs_freeDir $iJob + launch_some_jobs incr ::wakeup } else { set rc [catch { gets $fd line } res] @@ -585,16 +643,38 @@ proc launch_another_job {iJob} { set T($iJob) [clock_milliseconds] set job [r_get_next_job $iJob] - if {$job==""} return + if {$job==""} { return 0 } foreach {b c f} $job {} - if {$c=="make"} { + if {$c=="build"} { + set srcdir [file dirname [file dirname $R(info_script)]] + set builddir [build_to_dirname $b] + create_or_clear_dir $builddir + + set cmd [info nameofexec] + lappend cmd [file join [file dirname $R(info_script)] releasetest_data.tcl] + if {$R(platform)=="win"} { lappend $cmd -msvc } + lappend cmd script $b $srcdir + + set script [exec {*}$cmd] + set fd [open [file join $builddir $R(make)] w] + puts $fd $script + close $fd + + puts "Launching build \"$b\" in directory $builddir..." + set target coretestprogs + if {$b=="User-Auth"} { set target testfixture } + + set cmd "bash $R(make) $target" + set dir $builddir + + } elseif {$c=="make"} { set builddir [build_to_dirname $b] copy_dir $builddir $dir - set cmd "make $f" + set cmd "bash $R(make) $f" } else { - if {$b=="Default"} { + if {$b==""} { set testfixture [info nameofexec] } else { set testfixture [ @@ -619,6 +699,8 @@ proc launch_another_job {iJob} { fileevent $fd readable [list script_input_ready $fd $iJob $b $c $f] incr R(nHelperRunning) +1 unset -nocomplain ::env(OMIT_MISUSE) + + return 1 } proc one_line_report {} { @@ -628,31 +710,47 @@ proc one_line_report {} { set tm [format "%.2f" [expr $tm/1000.0]] foreach s {ready running done failed} { - set v($s,0) 0 - set v($s,1) 0 + set v($s,build) 0 + set v($s,make) 0 + set v($s,script) 0 } - set t(0) 0 - set t(1) 0 r_write_db { db eval { - SELECT state, ismake, count(*) AS cnt + SELECT state, jobtype, count(*) AS cnt FROM script - GROUP BY state, ismake + GROUP BY state, jobtype } { - set v($state,$ismake) $cnt - incr t($ismake) $cnt + set v($state,$jobtype) $cnt + if {[info exists t($jobtype)]} { + incr t($jobtype) $cnt + } else { + set t($jobtype) $cnt + } } } - set d0 [expr $v(done,0)+$v(failed,0)] - set d1 [expr $v(done,1)+$v(failed,1)] - - puts "${tm}s: scripts: ($d0/$t(0)) $v(failed,0) failed, $v(running,0) running, makes: ($d1/$t(1)) $v(failed,1) failed, $v(running,1) running" + set text "" + foreach j [array names t] { + set fin [expr $v(done,$j) + $v(failed,$j)] + lappend text "$j: ($fin/$t($j)) f=$v(failed,$j) r=$v(running,$j)" + } + puts "${tm}s: [join $text { || }]" after 1000 one_line_report } +proc launch_some_jobs {} { + global R + while {[dirs_nHelper]<$R(nJob)} { + set iDir [dirs_allocDir] + if {0==[launch_another_job $iDir]} { + dirs_freeDir $iDir + break; + } + } +} + proc run_testset {} { global R set ii 0 @@ -660,9 +758,8 @@ proc run_testset {} { set R(starttime) [clock_milliseconds] set R(log) [open $R(logname) w] - for {set ii 0} {$ii<$R(nJob)} {incr ii} { - launch_another_job $ii - } + launch_some_jobs + # launch_another_job $ii one_line_report while {$R(nHelperRunning)>0} { diff --git a/test/testrunner_data.tcl b/test/testrunner_data.tcl index 9f14118eec..d846b13ace 100644 --- a/test/testrunner_data.tcl +++ b/test/testrunner_data.tcl @@ -55,7 +55,7 @@ namespace eval trd { set extra(linux.Sanitize) {fuzztest sourcetest} set extra(linux.Default) {fuzztest sourcetest threadtest} - set extra(osx.Default) {fuzztest threadtest} + set extra(osx.Apple) {fuzztest threadtest} set extra(osx.Have-Not) {fuzztest sourcetest} set extra(osx.Locking-Style) {mptest fuzztest sourcetest}