]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Update testrunner.tcl to allow the user to specify which tests to run on the command...
authordan <Dan Kennedy>
Wed, 13 Jul 2022 19:57:35 +0000 (19:57 +0000)
committerdan <Dan Kennedy>
Wed, 13 Jul 2022 19:57:35 +0000 (19:57 +0000)
FossilOrigin-Name: 900febcf362fa5f592c640d16177f33c13aab11ce31a61c7e18ff1be6e70bf9b

manifest
manifest.uuid
test/testrunner.tcl
test/testset.tcl [new file with mode: 0644]

index 0bd8756440bf1138a906c2f037d44fbf4ab829fc..5589f9eeeeb7d475b9ad71ba556404c1079c197f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\stestrunner.tcl\sso\sthat\sit\schecks\sfor\smemory\sleaks.
-D 2022-07-13T17:46:42.435
+C Update\stestrunner.tcl\sto\sallow\sthe\suser\sto\sspecify\swhich\stests\sto\srun\son\sthe\scommand\sline.
+D 2022-07-13T19:57:35.922
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -1507,7 +1507,8 @@ F test/temptable2.test d2940417496e2b9548e01d09990763fbe88c316504033256d51493e1f
 F test/temptable3.test d11a0974e52b347e45ee54ef1923c91ed91e4637
 F test/temptrigger.test 38f0ca479b1822d3117069e014daabcaacefffcc
 F test/tester.tcl 76771269dcc20b2c2d1d6f1175dd50d1eebddc004aebac865483f1829a5cd398
-F test/testrunner.tcl 3bdd2d32319c65f34d1aafe6fe66aac4881e78ded4880719f48203aeea13b1c4
+F test/testrunner.tcl 297f066a0c2c78e552a29060701825fcfd16cd915c19d51654112d54df2feacc
+F test/testset.tcl 8295bbfe2da21bc32a818b55b074d572a24a44fccfb74da919194a749bb7654c
 F test/thread001.test b61a29dd87cf669f5f6ac96124a7c97d71b0c80d9012746072055877055cf9ef
 F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58
 F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7
@@ -1980,8 +1981,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 ef229cbb7ffbeb8c8877dff70e9d6d43050d2297dee582a37df3a0caaebd2a41
-R 9ae28163af03b5806c7e690857875476
+P 106f6724d54ccec3edf8c9a0422b89c4f227adb26021ed6f0fc91392ef4b3fc5
+R 032a0dd6c8d21e7f2f5ea3dc860bfe74
 U dan
-Z 14e1b9ab4edb92095656b55f758ae601
+Z f52161ed1f80342c1b5b733a625a7b6b
 # Remove this line to create a well-formed Fossil manifest.
index 38cc6028ad92d34fda6bbd51c3fa01593f11d5d7..cda73bf94af6d73650d823b85a3c7c084b925809 100644 (file)
@@ -1 +1 @@
-106f6724d54ccec3edf8c9a0422b89c4f227adb26021ed6f0fc91392ef4b3fc5
\ No newline at end of file
+900febcf362fa5f592c640d16177f33c13aab11ce31a61c7e18ff1be6e70bf9b
\ No newline at end of file
index ce99a3a09f316983a94e86b51ec647d9ed796163..f3863f2023985dfb1fb128fb5b7f749e0a7a5139 100644 (file)
@@ -4,7 +4,7 @@
 # Usage:
 #
 proc usage {} {
-  puts stderr "Usage: $::argv0 ?SWITCHES?"
+  puts stderr "Usage: $::argv0 ?SWITCHES? ?PATTERN? ..."
   puts stderr ""
   puts stderr "where SWITCHES are:"
   puts stderr "    --jobs NUMBER-OF-JOBS"
@@ -70,7 +70,6 @@ proc default_njob {} {
 #-------------------------------------------------------------------------
 
 
-
 set R(dbname) [file normalize testrunner.db]
 set R(logname) [file normalize testrunner.log]
 set R(info_script) [file normalize [info script]]
@@ -78,6 +77,10 @@ set R(timeout) 10000              ;# Default busy-timeout for testrunner.
 set R(nJob)    [default_njob]     ;# Default number of helper processes
 set R(leaker)  ""                 ;# Name of first script to leak memory
 
+set R(patternlist) [list]
+
+set testdir [file dirname $argv0]
+source $testdir/testset.tcl
 
 # Parse the command line options. There are two ways to invoke this
 # script - to create a helper or coordinator process. If there are
@@ -114,80 +117,24 @@ if {$R(helper)==0} {
     set a [lindex $argv $ii]
     set n [string length $a]
 
-    if {($n>2 && [string match "$a*" --jobs]) || $a=="-j"} {
-      incr ii
-      set R(nJob) [lindex $argv $ii]
+    if {[string range $a 0 0]=="-"} {
+      if {($n>2 && [string match "$a*" --jobs]) || $a=="-j"} {
+        incr ii
+          set R(nJob) [lindex $argv $ii]
+      } else {
+        usage
+      }
     } else {
-      usage
+      lappend R(patternlist) [string map {% * _ .} $a]
     }
   }
 
   set argv [list]
 }
 
-set testdir [file dirname $argv0]
 source $testdir/tester.tcl
 db close
 
-#--------------------------------------------------------------------
-# This is temporary!
-# 
-# Return a list of all scripts in the "veryquick" test.
-#
-proc all_veryquick_scripts {} {
-  set OMIT {
-  async2.test async3.test backup_ioerr.test corrupt.test
-  corruptC.test crash.test crash2.test crash3.test crash4.test crash5.test
-  crash6.test crash7.test delete3.test e_fts3.test fts3rnd.test
-  fkey_malloc.test fuzz.test fuzz3.test fuzz_malloc.test in2.test loadext.test
-  misc7.test mutex2.test notify2.test onefile.test pagerfault2.test 
-  savepoint4.test savepoint6.test select9.test 
-  speed1.test speed1p.test speed2.test speed3.test speed4.test 
-  speed4p.test sqllimits1.test tkt2686.test thread001.test thread002.test
-  thread003.test thread004.test thread005.test trans2.test vacuum3.test 
-  incrvacuum_ioerr.test autovacuum_crash.test btree8.test shared_err.test
-  vtab_err.test walslow.test walcrash.test walcrash3.test
-  walthread.test rtree3.test indexfault.test securedel2.test
-  sort3.test sort4.test fts4growth.test fts4growth2.test
-  bigsort.test walprotocol.test mmap4.test fuzzer2.test
-  walcrash2.test e_fkey.test backup.test
-  writecrash.test
-
-  fts4merge.test fts4merge2.test fts4merge4.test fts4check.test
-  fts4merge5.test
-  fts3cov.test fts3snippet.test fts3corrupt2.test fts3an.test
-  fts3defer.test fts4langid.test fts3sort.test fts5unicode.test
-  rtree4.test sessionbig.test
-
-  all.test        async.test         quick.test  veryquick.test
-  memleak.test    permutations.test  soak.test   fts3.test
-  mallocAll.test  rtree.test         full.test   extraquick.test
-  session.test    rbu.test
-
-  }
-
-  set testdir [file normalize $::testdir]
-  set ret [list]
-
-  foreach f [glob -nocomplain $testdir/*.test] {
-    if {[lsearch $OMIT [file tail $f]]<0
-     && [string match *malloc* $f]==0
-     && [string match *ioerr* $f]==0
-     && [string match *fault* $f]==0
-     && [string match *bigfile* $f]==0
-     && [string match *_err* $f]==0
-     && [string match *fts5corrupt* $f]==0
-     && [string match *fts5big* $f]==0
-     && [string match *fts5aj* $f]==0
-    } { 
-      lappend ret $f
-    }
-  }
-
-  set ret
-}
-#--------------------------------------------------------------------
-
 
 proc r_write_db {tcl} {
   global R
@@ -204,9 +151,10 @@ proc r_write_db {tcl} {
 proc make_new_testset {} {
   global R
 
+  set scripts [testset_patternlist $R(patternlist)]
   r_write_db {
     db eval $R(schema)
-    foreach s [all_veryquick_scripts] {
+    foreach s $scripts {
       db eval { INSERT INTO script(filename, state) VALUES ($s, 'ready') }
     }
   }
diff --git a/test/testset.tcl b/test/testset.tcl
new file mode 100644 (file)
index 0000000..b98f2e2
--- /dev/null
@@ -0,0 +1,120 @@
+
+
+# Commands in this file:
+#
+#    testset_all
+#      Return a list of all test scripts designed to be run individually.
+#
+#    testset_veryquick
+#      The subset of [testset_all] meant to run as veryquick.test.
+# 
+
+set D(testdir) [file dir [file normalize [info script]]]
+
+proc testset_all {} {
+  global D
+  set ret [list]
+
+  # The following tests are driver scripts that themselves run lots of other
+  # test scripts. They should be ignored here.
+  set drivers {
+    all.test        async.test         quick.test  veryquick.test
+    memleak.test    permutations.test  soak.test   fts3.test
+    mallocAll.test  rtree.test         full.test   extraquick.test
+    session.test    rbu.test
+  }
+
+  set srcdir [file dirname $D(testdir)]
+  set ret [glob -nocomplain           \
+      $srcdir/test/*.test             \
+      $srcdir/ext/rtree/*.test        \
+      $srcdir/ext/fts5/test/*.test    \
+      $srcdir/ext/expert/*.test       \
+      $srcdir/ext/session/*.test      \
+  ]
+  set ret [ts_filter $ret $drivers]
+  return $ret
+}
+
+proc testset_veryquick {} {
+  set ret [testset_all]
+
+  set ret [ts_filter $ret {
+    async2.test async3.test backup_ioerr.test corrupt.test
+    corruptC.test crash.test crash2.test crash3.test crash4.test crash5.test
+    crash6.test crash7.test delete3.test e_fts3.test fts3rnd.test
+    fkey_malloc.test fuzz.test fuzz3.test fuzz_malloc.test in2.test loadext.test
+    misc7.test mutex2.test notify2.test onefile.test pagerfault2.test 
+    savepoint4.test savepoint6.test select9.test 
+    speed1.test speed1p.test speed2.test speed3.test speed4.test 
+    speed4p.test sqllimits1.test tkt2686.test thread001.test thread002.test
+    thread003.test thread004.test thread005.test trans2.test vacuum3.test 
+    incrvacuum_ioerr.test autovacuum_crash.test btree8.test shared_err.test
+    vtab_err.test walslow.test walcrash.test walcrash3.test
+    walthread.test rtree3.test indexfault.test securedel2.test
+    sort3.test sort4.test fts4growth.test fts4growth2.test
+    bigsort.test walprotocol.test mmap4.test fuzzer2.test
+    walcrash2.test e_fkey.test backup.test
+  
+    fts4merge.test fts4merge2.test fts4merge4.test fts4check.test
+    fts4merge5.test
+    fts3cov.test fts3snippet.test fts3corrupt2.test fts3an.test
+    fts3defer.test fts4langid.test fts3sort.test fts5unicode.test
+  
+    rtree4.test
+    sessionbig.test
+  }]
+
+  set ret [ts_filter $ret {
+    *malloc* *ioerr* *fault* *bigfile* *_err* *fts5corrupt* *fts5big* *fts5aj*
+  }]
+
+  return $ret
+}
+
+proc ts_filter {input exlist} {
+  foreach f $input { set a($f) 1 }
+  foreach e $exlist { array unset a */$e }
+  array names a
+}
+
+proc testset_patternlist {patternlist} {
+  set nPat [llength $patternlist]
+
+  if {$nPat==0} {
+    set scripts [testset_veryquick]
+  } else {
+    set ii 0
+    set p0 [lindex $patternlist 0]
+
+    if {$p0=="veryquick"} {
+      set scripts [testset_veryquick]
+      incr ii
+    } elseif {$p0=="all"} {
+      set scripts [testset_all]
+      incr ii
+    } else {
+      set scripts [testset_all]
+    }
+
+    if {$nPat>$ii} {
+      array set S [list]
+      foreach f $scripts { set a([file tail $f]) $f }
+
+      foreach p [lrange $patternlist $ii end] {
+        set nList [llength [array names a $p]]
+        if {$nList==0} {
+          puts stderr "Argument $p matches no scripts (typo?)"
+          exit 1
+        }
+        foreach n [array names a $p] { set S($a($n)) 1 }
+      }
+    }
+
+    set scripts [lsort [array names S]]
+  }
+
+  set scripts
+}
+
+