From 95cc6a5e1137af8c46e7534ddb55e39d9dffb612 Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 13 Jul 2022 19:57:35 +0000 Subject: [PATCH] Update testrunner.tcl to allow the user to specify which tests to run on the command line. FossilOrigin-Name: 900febcf362fa5f592c640d16177f33c13aab11ce31a61c7e18ff1be6e70bf9b --- manifest | 13 ++--- manifest.uuid | 2 +- test/testrunner.tcl | 82 ++++++------------------------ test/testset.tcl | 120 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 143 insertions(+), 74 deletions(-) create mode 100644 test/testset.tcl diff --git a/manifest b/manifest index 0bd8756440..5589f9eeee 100644 --- 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. diff --git a/manifest.uuid b/manifest.uuid index 38cc6028ad..cda73bf94a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -106f6724d54ccec3edf8c9a0422b89c4f227adb26021ed6f0fc91392ef4b3fc5 \ No newline at end of file +900febcf362fa5f592c640d16177f33c13aab11ce31a61c7e18ff1be6e70bf9b \ No newline at end of file diff --git a/test/testrunner.tcl b/test/testrunner.tcl index ce99a3a09f..f3863f2023 100644 --- a/test/testrunner.tcl +++ b/test/testrunner.tcl @@ -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 index 0000000000..b98f2e2a5a --- /dev/null +++ b/test/testset.tcl @@ -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 +} + +