]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Have testrunner.tcl run various builds as part of the 'release' command.
authordan <Dan Kennedy>
Fri, 3 Feb 2023 18:47:00 +0000 (18:47 +0000)
committerdan <Dan Kennedy>
Fri, 3 Feb 2023 18:47:00 +0000 (18:47 +0000)
FossilOrigin-Name: ba2fae30a81e2574f13a7351c9f843b8c2c7d2c93fcd71fb2de98f5b34f3e109

manifest
manifest.uuid
test/releasetest_data.tcl
test/testrunner.tcl
test/testrunner_data.tcl

index ffbb183f7229a34fdba1d52a285beb31401e7ac0..0dd6d747f53e51f665ce888cc88aa1d96597192e 100644 (file)
--- 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.
index 42d5d121e10b6b1d3872ba0736521560d6e07dc4..a47ceda038f44e13472bd29b8eebb9ab9605ca38 100644 (file)
@@ -1 +1 @@
-b2faf9289f6fbbcd4491e1b063da731b35aeed9ff1fc97f64798e99cac847b4a
\ No newline at end of file
+ba2fae30a81e2574f13a7351c9f843b8c2c7d2c93fcd71fb2de98f5b34f3e109
\ No newline at end of file
index 6efc44b92ce63e8cdf706285bf451dbe2525c1af..ef1777999742cd35a30b61632e356d9e00d33653 100644 (file)
@@ -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 <sqlite-src-dir>" }
+    puts {  echo "Usage: $0 <target>" }
     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%"
index 91db8c4df60e4e754ea9b5b820b7066c149f402c..227f1aa9828cd26d0a79c2a9da59e4186978f24d 100644 (file)
@@ -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} {
index 9f14118eec06d2eb920e0650a7997a5b0ca63591..d846b13ace3f5e97b42d41d3d2ff680eadf2849e 100644 (file)
@@ -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}