1# 2008 June 21 2# 3# The author disclaims copyright to this source code. In place of 4# a legal notice, here is a blessing: 5# 6# May you do good and not evil. 7# May you find forgiveness for yourself and forgive others. 8# May you share freely, never taking more than you give. 9# 10#*********************************************************************** 11# 12 13set testdir [file dirname $argv0] 14source $testdir/tester.tcl 15db close 16 17#------------------------------------------------------------------------- 18# test_suite NAME OPTIONS 19# 20# where available options are: 21# 22# -description TITLE (default "") 23# -initialize SCRIPT (default "") 24# -shutdown SCRIPT (default "") 25# -presql SQL (default "") 26# -files LIST-OF-FILES (default $::ALLTESTS) 27# -prefix NAME (default "$::NAME.") 28# -dbconfig SCRIPT (default "") 29# 30proc test_suite {name args} { 31 32 set default(-shutdown) "" 33 set default(-initialize) "" 34 set default(-presql) "" 35 set default(-description) "no description supplied (fixme)" 36 set default(-files) "" 37 set default(-prefix) "${name}." 38 set default(-dbconfig) "" 39 40 array set options [array get default] 41 if {[llength $args]%2} { 42 error "uneven number of options/switches passed to test_suite" 43 } 44 foreach {k v} $args { 45 set o [array names options ${k}*] 46 if {[llength $o]>1} { error "ambiguous option: $k" } 47 if {[llength $o]==0} { error "unknown option: $k" } 48 set options([lindex $o 0]) $v 49 } 50 51 set ::testspec($name) [array get options] 52 lappend ::testsuitelist $name 53} 54 55#------------------------------------------------------------------------- 56# test_set ARGS... 57# 58proc test_set {args} { 59 set isExclude 0 60 foreach a $args { 61 if {[string match -* $a]} { 62 switch -- $a { 63 -include { set isExclude 0 } 64 -exclude { set isExclude 1 } 65 default { 66 error "Unknown switch: $a" 67 } 68 } 69 } elseif {$isExclude == 0} { 70 foreach f $a { set t($f) 1 } 71 } else { 72 foreach f $a { array unset t $f } 73 foreach f $a { array unset t */$f } 74 } 75 } 76 77 return [array names t] 78} 79 80#------------------------------------------------------------------------- 81# Set up the following global list variables containing the names of 82# various test scripts: 83# 84# $alltests 85# $allquicktests 86# 87set alltests [list] 88foreach f [glob $testdir/*.test] { lappend alltests [file tail $f] } 89foreach f [glob -nocomplain \ 90 $testdir/../ext/rtree/*.test \ 91 $testdir/../ext/fts5/test/*.test \ 92 $testdir/../ext/lsm1/test/*.test \ 93] { 94 lappend alltests $f 95} 96foreach f [glob -nocomplain $testdir/../ext/session/*.test] { 97 lappend alltests $f 98} 99 100if {$::tcl_platform(platform)!="unix"} { 101 set alltests [test_set $alltests -exclude crash.test crash2.test] 102} 103set alltests [test_set $alltests -exclude { 104 all.test async.test quick.test veryquick.test 105 memleak.test permutations.test soak.test fts3.test 106 mallocAll.test rtree.test full.test extraquick.test 107 session.test 108}] 109 110set allquicktests [test_set $alltests -exclude { 111 async2.test async3.test backup_ioerr.test corrupt.test 112 corruptC.test crash.test crash2.test crash3.test crash4.test crash5.test 113 crash6.test crash7.test delete3.test e_fts3.test fts3rnd.test 114 fkey_malloc.test fuzz.test fuzz3.test fuzz_malloc.test in2.test loadext.test 115 misc7.test mutex2.test notify2.test onefile.test pagerfault2.test 116 savepoint4.test savepoint6.test select9.test 117 speed1.test speed1p.test speed2.test speed3.test speed4.test 118 speed4p.test sqllimits1.test tkt2686.test thread001.test thread002.test 119 thread003.test thread004.test thread005.test trans2.test vacuum3.test 120 incrvacuum_ioerr.test autovacuum_crash.test btree8.test shared_err.test 121 vtab_err.test walslow.test walcrash.test walcrash3.test 122 walthread.test rtree3.test indexfault.test securedel2.test 123 sort3.test sort4.test fts4growth.test fts4growth2.test 124 bigsort.test rbu.test walprotocol.test mmap4.test fuzzer2.test 125 walcrash2.test e_fkey.test backup.test 126 127 fts4merge.test fts4merge2.test fts4merge4.test fts4check.test 128 fts3cov.test fts3snippet.test fts3corrupt2.test fts3an.test 129 fts3defer.test fts4langid.test fts3sort.test fts5unicode.test 130 131 rtree4.test 132}] 133if {[info exists ::env(QUICKTEST_INCLUDE)]} { 134 set allquicktests [concat $allquicktests $::env(QUICKTEST_INCLUDE)] 135} 136if {[info exists ::env(QUICKTEST_OMIT)]} { 137 foreach x [split $::env(QUICKTEST_OMIT) ,] { 138 regsub -all \\y$x\\y $allquicktests {} allquicktests 139 } 140} 141 142# If the TEST_FAILURE environment variable is set, it means that we what to 143# deliberately provoke test failures in order to test the test infrastructure. 144# Only the main.test module is needed for this. 145# 146if {[info exists ::env(TEST_FAILURE)]} { 147 set allquicktests main.test 148} 149 150############################################################################# 151# Start of tests 152# 153 154#------------------------------------------------------------------------- 155# Define the generic test suites: 156# 157# veryquick 158# quick 159# full 160# 161lappend ::testsuitelist xxx 162 163test_suite "veryquick" -prefix "" -description { 164 "Very" quick test suite. Runs in minutes on a workstation. 165 This test suite is the same as the "quick" tests, except that some files 166 that test malloc and IO errors are omitted. 167} -files [ 168 test_set $allquicktests -exclude *malloc* *ioerr* *fault* *bigfile* *_err* \ 169 *fts5corrupt* *fts5big* *fts5aj* 170] 171 172test_suite "extraquick" -prefix "" -description { 173 "Extra" quick test suite. Runs in a few minutes on a workstation. 174 This test suite is the same as the "veryquick" tests, except that 175 slower tests are omitted. 176} -files [ 177 test_set $allquicktests -exclude *malloc* *ioerr* *fault* *bigfile* *_err* \ 178 wal3.test fts4merge* sort2.test mmap1.test walcrash* \ 179 percentile.test where8m.test walcksum.test savepoint3.test \ 180 fuzzer1.test fuzzer3.test fts3expr3.test 181] 182 183test_suite "mmap" -prefix "mm-" -description { 184 Similar to veryquick. Except with memory mapping enabled. 185} -presql { 186 pragma mmap_size = 268435456; 187} -files [ 188 test_set $allquicktests -exclude *malloc* *ioerr* *fault* -include malloc.test 189] 190 191test_suite "valgrind" -prefix "" -description { 192 Run the "veryquick" test suite with a couple of multi-process tests (that 193 fail under valgrind) omitted. 194} -files [ 195 test_set $allquicktests -exclude *malloc* *ioerr* *fault* *_err* wal.test \ 196 shell*.test crash8.test atof1.test selectG.test \ 197 tkt-fc62af4523.test numindex1.test 198] -initialize { 199 set ::G(valgrind) 1 200} -shutdown { 201 unset -nocomplain ::G(valgrind) 202} 203 204test_suite "valgrind-nolookaside" -prefix "" -description { 205 Run the "veryquick" test suite with a couple of multi-process tests (that 206 fail under valgrind) omitted. 207} -files [ 208 test_set $allquicktests -exclude *malloc* *ioerr* *fault* *_err* \ 209 wal.test atof1.test 210] -initialize { 211 set ::G(valgrind) 1 212 catch {db close} 213 sqlite3_shutdown 214 sqlite3_config_lookaside 0 0 215 sqlite3_initialize 216 autoinstall_test_functions 217} -shutdown { 218 catch {db close} 219 sqlite3_shutdown 220 sqlite3_config_lookaside 100 500 221 sqlite3_initialize 222 autoinstall_test_functions 223 unset -nocomplain ::G(valgrind) 224} 225 226 227test_suite "quick" -prefix "" -description { 228 Quick test suite. Runs in around 10 minutes on a workstation. 229} -files [ 230 test_set $allquicktests 231] 232 233test_suite "full" -prefix "" -description { 234 Full test suite. Takes a long time. 235} -files [ 236 test_set $alltests 237] -initialize { 238 unset -nocomplain ::G(isquick) 239} 240 241test_suite "threads" -prefix "" -description { 242 All multi-threaded tests. 243} -files { 244 notify2.test thread001.test thread002.test thread003.test 245 thread004.test thread005.test walthread.test 246} 247 248test_suite "fts3" -prefix "" -description { 249 All FTS3 tests except fts3rnd.test. 250} -files { 251 fts3aa.test fts3ab.test fts3ac.test fts3ad.test 252 fts3ae.test fts3af.test fts3ag.test fts3ah.test 253 fts3ai.test fts3aj.test fts3ak.test fts3al.test 254 fts3am.test fts3an.test fts3ao.test fts3atoken.test 255 fts3auto.test fts3aux1.test fts3aux2.test fts3b.test 256 fts3comp1.test fts3conf.test fts3corrupt2.test fts3corrupt.test 257 fts3cov.test fts3c.test fts3defer2.test fts3defer3.test 258 fts3defer.test fts3drop.test fts3d.test fts3e.test 259 fts3expr2.test fts3expr3.test fts3expr4.test fts3expr5.test 260 fts3expr.test fts3fault2.test fts3fault.test fts3first.test 261 fts3join.test fts3malloc.test fts3matchinfo.test fts3near.test 262 fts3offsets.test fts3prefix2.test fts3prefix.test fts3query.test 263 fts3shared.test fts3snippet.test fts3sort.test fts3tok1.test 264 fts3tok_err.test fts3varint.test fts4aa.test fts4check.test 265 fts4content.test fts4docid.test fts4growth2.test fts4growth.test 266 fts4incr.test fts4langid.test fts4lastrowid.test fts4merge2.test 267 fts4merge4.test fts4merge.test fts4noti.test fts4onepass.test 268 fts4opt.test fts4unicode.test 269 fts3corrupt3.test 270 fts3misc.test 271} 272 273test_suite "fts5" -prefix "" -description { 274 All FTS5 tests. 275} -files [glob -nocomplain $::testdir/../ext/fts5/test/*.test] 276 277test_suite "fts5-light" -prefix "" -description { 278 All FTS5 tests. 279} -files [ 280 test_set \ 281 [glob -nocomplain $::testdir/../ext/fts5/test/*.test] \ 282 -exclude *corrupt* *fault* *big* *fts5aj* 283] 284 285test_suite "nofaultsim" -prefix "" -description { 286 "Very" quick test suite. Runs in less than 5 minutes on a workstation. 287 This test suite is the same as the "quick" tests, except that some files 288 that test malloc and IO errors are omitted. 289} -files [ 290 test_set $allquicktests -exclude *malloc* *ioerr* *fault* *_err* 291] -initialize { 292 catch {db close} 293 sqlite3_shutdown 294 install_malloc_faultsim 0 295 sqlite3_initialize 296 autoinstall_test_functions 297} -shutdown { 298 unset -nocomplain ::G(valgrind) 299} 300 301test_suite "queryplanner" -prefix "" -description { 302 Tests of the query planner and query optimizer 303} -files { 304 alter2.test alter3.test alter4.test alter.test analyze3.test 305 analyze4.test analyze5.test analyze6.test analyze7.test analyze8.test 306 analyze.test attach2.test attach3.test attach4.test 307 attach.test autoinc.test autoindex1.test between.test cast.test 308 check.test closure01.test coalesce.test collate1.test collate2.test 309 collate3.test collate4.test collate5.test collate6.test collate7.test 310 collate8.test collate9.test collateA.test colmeta.test colname.test 311 conflict.test count.test coveridxscan.test createtab.test cse.test 312 date.test dbstatus2.test dbstatus.test default.test delete2.test 313 delete3.test delete.test descidx1.test descidx2.test descidx3.test 314 distinctagg.test distinct.test e_createtable.test e_delete.test 315 e_droptrigger.test e_dropview.test e_expr.test e_insert.test 316 eqp.test e_reindex.test e_resolve.test e_select2.test e_select.test 317 e_update.test exists.test expr.test fkey1.test fkey2.test fkey3.test 318 fkey4.test fkey5.test func2.test func3.test func.test 319 in3.test in4.test in5.test index2.test index3.test 320 index4.test index5.test indexedby.test index.test 321 insert2.test insert3.test insert4.test insert5.test insert.test 322 instr.test in.test intpkey.test join2.test join3.test join4.test 323 join5.test join6.test join.test like2.test like.test limit.test 324 minmax2.test minmax3.test minmax4.test minmax.test misc1.test misc2.test 325 misc3.test misc4.test misc5.test misc6.test misc7.test orderby1.test 326 orderby2.test orderby3.test orderby4.test randexpr1.test regexp1.test 327 reindex.test rowhash.test rowid.test schema2.test schema3.test 328 schema4.test schema5.test schema.test 329 select1.test select2.test select3.test select4.test select5.test 330 select6.test select7.test select8.test select9.test selectA.test 331 selectB.test selectC.test selectD.test selectE.test sidedelete.test 332 sort.test spellfix.test subquery2.test subquery.test subselect.test 333 substr.test tkt-02a8e81d44.test tkt1435.test tkt1443.test tkt1444.test 334 tkt1449.test tkt1473.test tkt1501.test tkt1512.test tkt1514.test 335 tkt1536.test tkt1537.test tkt1567.test tkt1644.test tkt1667.test 336 tkt1873.test tkt2141.test tkt2192.test tkt2213.test tkt2251.test 337 tkt2285.test tkt2332.test tkt2339.test tkt2391.test tkt2409.test 338 tkt2450.test tkt2565.test tkt2640.test tkt2643.test tkt2686.test 339 tkt-26ff0c2d1e.test tkt2767.test tkt2817.test tkt2820.test tkt2822.test 340 tkt2832.test tkt2854.test tkt2920.test tkt2927.test tkt2942.test 341 tkt-2a5629202f.test tkt-2d1a5c67d.test tkt-2ea2425d34.test tkt3080.test 342 tkt3093.test tkt3121.test tkt-31338dca7e.test tkt-313723c356.test 343 tkt3201.test tkt3292.test tkt3298.test tkt3334.test tkt3346.test 344 tkt3357.test tkt3419.test tkt3424.test tkt3442.test tkt3457.test 345 tkt3461.test tkt3493.test tkt3508.test tkt3522.test tkt3527.test 346 tkt3541.test tkt3554.test tkt3581.test tkt35xx.test tkt3630.test 347 tkt3718.test tkt3731.test tkt3757.test tkt3761.test tkt3762.test 348 tkt3773.test tkt3791.test tkt3793.test tkt3810.test tkt3824.test 349 tkt3832.test tkt3838.test tkt3841.test tkt-385a5b56b9.test tkt3871.test 350 tkt3879.test tkt-38cb5df375.test tkt3911.test tkt3918.test tkt3922.test 351 tkt3929.test tkt3935.test tkt3992.test tkt3997.test tkt-3998683a16.test 352 tkt-3a77c9714e.test tkt-3fe897352e.test tkt4018.test tkt-4a03edc4c8.test 353 tkt-4dd95f6943.test tkt-54844eea3f.test tkt-5d863f876e.test 354 tkt-5e10420e8d.test tkt-5ee23731f.test tkt-6bfb98dfc0.test 355 tkt-752e1646fc.test tkt-78e04e52ea.test tkt-7a31705a7e6.test 356 tkt-7bbfb7d442.test tkt-80ba201079.test tkt-80e031a00f.test 357 tkt-8454a207b9.test tkt-91e2e8ba6f.test tkt-94c04eaadb.test 358 tkt-9d68c883.test tkt-a7b7803e.test tkt-b1d3a2e531.test 359 tkt-b351d95f9.test tkt-b72787b1.test tkt-bd484a090c.test 360 tkt-bdc6bbbb38.test tkt-c48d99d690.test tkt-cbd054fa6b.test 361 tkt-d11f09d36e.test tkt-d635236375.test tkt-d82e3f3721.test 362 tkt-f3e5abed55.test tkt-f777251dc7a.test tkt-f7b4edec.test 363 tkt-f973c7ac31.test tkt-fa7bf5ec.test tkt-fc62af4523.test 364 tkt-fc7bd6358f.test trigger1.test trigger2.test trigger3.test 365 trigger4.test trigger5.test trigger6.test trigger7.test trigger8.test 366 trigger9.test triggerA.test triggerB.test triggerC.test triggerD.test 367 types2.test types3.test types.test unique.test unordered.test 368 update.test view.test vtab1.test vtab2.test vtab3.test vtab4.test 369 vtab5.test vtab6.test vtab7.test vtab8.test vtab9.test vtab_alter.test 370 vtabA.test vtabB.test vtabC.test vtabD.test vtabE.test 371 vtabF.test where2.test where3.test where4.test where5.test where6.test 372 where7.test where8m.test where8.test where9.test whereA.test whereB.test 373 whereC.test whereD.test whereE.test whereF.test wherelimit.test 374 where.test 375} 376 377test_suite "vfslog" -prefix "" -description { 378 "Vfslog" quick test suite. Like "veryquick" except does not omits 379 a few tests that do not work with a version 1 VFS. And the quota* tests, 380 which do not work with a VFS that uses the pVfs argument passed to 381 sqlite3_vfs methods. 382} -files [ 383 test_set $allquicktests -exclude *malloc* *ioerr* *fault* oserror.test \ 384 pager1.test syscall.test sysfault.test tkt3457.test quota* superlock* \ 385 wal* mmap* 386] 387 388lappend ::testsuitelist xxx 389#------------------------------------------------------------------------- 390# Define the coverage related test suites: 391# 392# coverage-wal 393# 394test_suite "coverage-wal" -description { 395 Coverage tests for file wal.c. 396} -files { 397 wal.test wal2.test wal3.test walmode.test 398 walbak.test walhook.test walcrash2.test walcksum.test 399 walfault.test walbig.test walnoshm.test 400 wal5.test 401} 402 403test_suite "coverage-pager" -description { 404 Coverage tests for file pager.c. 405} -files { 406 pager1.test pager2.test pagerfault.test pagerfault2.test 407 walfault.test walbak.test journal2.test tkt-9d68c883.test 408} 409 410test_suite "coverage-analyze" -description { 411 Coverage tests for file analyze.c. 412} -files { 413 analyze3.test analyze4.test analyze5.test analyze6.test 414 analyze7.test analyze8.test analyze9.test analyzeA.test 415 analyze.test analyzeB.test mallocA.test 416} 417 418test_suite "coverage-sorter" -description { 419 Coverage tests for file vdbesort.c. 420} -files { 421 sort.test sortfault.test 422} 423 424 425lappend ::testsuitelist xxx 426#------------------------------------------------------------------------- 427# Define the permutation test suites: 428# 429 430# Run some tests using pre-allocated page and scratch blocks. 431# 432# mmap1.test is excluded because a good number of its tests depend on 433# the page-cache being larger than the database. But this permutation 434# causes the effective limit on the page-cache to be just 24 pages. 435# 436test_suite "memsubsys1" -description { 437 Tests using pre-allocated page and scratch blocks 438} -files [ 439 test_set $::allquicktests -exclude ioerr5.test malloc5.test mmap1.test 440] -initialize { 441 test_set_config_pagecache 4096 24 442 catch {db close} 443 sqlite3_shutdown 444 sqlite3_config_scratch 25000 1 445 sqlite3_initialize 446 autoinstall_test_functions 447} -shutdown { 448 test_restore_config_pagecache 449 catch {db close} 450 sqlite3_shutdown 451 sqlite3_config_scratch 0 0 452 sqlite3_initialize 453 autoinstall_test_functions 454} 455 456# Run some tests using pre-allocated page and scratch blocks. This time 457# the allocations are too small to use in most cases. 458# 459# Both ioerr5.test and malloc5.test are excluded because they test the 460# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality. 461# This functionality is disabled if a pre-allocated page block is provided. 462# 463test_suite "memsubsys2" -description { 464 Tests using small pre-allocated page and scratch blocks 465} -files [ 466 test_set $::allquicktests -exclude ioerr5.test malloc5.test 467] -initialize { 468 test_set_config_pagecache 512 5 469 catch {db close} 470 sqlite3_shutdown 471 sqlite3_config_scratch 1000 1 472 sqlite3_initialize 473 autoinstall_test_functions 474} -shutdown { 475 test_restore_config_pagecache 476 catch {db close} 477 sqlite3_shutdown 478 sqlite3_config_scratch 0 0 479 sqlite3_initialize 480 autoinstall_test_functions 481} 482 483# Run all tests with the lookaside allocator disabled. 484# 485test_suite "nolookaside" -description { 486 OOM tests with lookaside disabled 487} -initialize { 488 catch {db close} 489 sqlite3_shutdown 490 sqlite3_config_lookaside 0 0 491 sqlite3_initialize 492 autoinstall_test_functions 493} -shutdown { 494 catch {db close} 495 sqlite3_shutdown 496 sqlite3_config_lookaside 100 500 497 sqlite3_initialize 498 autoinstall_test_functions 499} -files $::allquicktests 500 501# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode. 502# 503test_suite "singlethread" -description { 504 Tests run in SQLITE_CONFIG_SINGLETHREAD mode 505} -initialize { 506 catch {db close} 507 sqlite3_shutdown 508 catch {sqlite3_config singlethread} 509 sqlite3_initialize 510 autoinstall_test_functions 511} -files { 512 delete.test delete2.test insert.test rollback.test select1.test 513 select2.test trans.test update.test vacuum.test types.test 514 types2.test types3.test 515} -shutdown { 516 catch {db close} 517 sqlite3_shutdown 518 catch {sqlite3_config serialized} 519 sqlite3_initialize 520 autoinstall_test_functions 521} 522 523test_suite "nomutex" -description { 524 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open(). 525} -initialize { 526 rename sqlite3 sqlite3_nomutex 527 proc sqlite3 {args} { 528 if {[string range [lindex $args 0] 0 0] ne "-"} { 529 lappend args -fullmutex 0 -nomutex 1 530 } 531 uplevel [concat sqlite3_nomutex $args] 532 } 533} -files { 534 delete.test delete2.test insert.test rollback.test select1.test 535 select2.test trans.test update.test vacuum.test types.test 536 types2.test types3.test 537} -shutdown { 538 rename sqlite3 {} 539 rename sqlite3_nomutex sqlite3 540} 541 542# Run some tests in SQLITE_CONFIG_MULTITHREAD mode. 543# 544test_suite "multithread" -description { 545 Tests run in SQLITE_CONFIG_MULTITHREAD mode 546} -initialize { 547 catch {db close} 548 sqlite3_shutdown 549 catch {sqlite3_config multithread} 550 sqlite3_initialize 551 autoinstall_test_functions 552} -files { 553 delete.test delete2.test insert.test rollback.test select1.test 554 select2.test trans.test update.test vacuum.test types.test 555 types2.test types3.test sort4.test 556} -shutdown { 557 catch {db close} 558 sqlite3_shutdown 559 catch {sqlite3_config serialized} 560 sqlite3_initialize 561 autoinstall_test_functions 562} 563 564# Run some tests in SQLITE_OPEN_FULLMUTEX mode. 565# 566test_suite "fullmutex" -description { 567 Tests run in SQLITE_OPEN_FULLMUTEX mode 568} -initialize { 569 rename sqlite3 sqlite3_fullmutex 570 proc sqlite3 {args} { 571 if {[string range [lindex $args 0] 0 0] ne "-"} { 572 lappend args -nomutex 0 -fullmutex 1 573 } 574 uplevel [concat sqlite3_fullmutex $args] 575 } 576} -files { 577 delete.test delete2.test insert.test rollback.test select1.test 578 select2.test trans.test update.test vacuum.test types.test 579 types2.test types3.test 580} -shutdown { 581 rename sqlite3 {} 582 rename sqlite3_fullmutex sqlite3 583} 584 585# Run some tests using the "onefile" demo. 586# 587test_suite "onefile" -description { 588 Run some tests using the "test_onefile.c" demo 589} -initialize { 590 rename sqlite3 sqlite3_onefile 591 proc sqlite3 {args} { 592 if {[string range [lindex $args 0] 0 0] ne "-"} { 593 lappend args -vfs fs 594 } 595 uplevel [concat sqlite3_onefile $args] 596 } 597} -files { 598 conflict.test insert.test insert2.test insert3.test 599 rollback.test select1.test select2.test select3.test 600} -shutdown { 601 rename sqlite3 {} 602 rename sqlite3_onefile sqlite3 603} 604 605# Run some tests using UTF-16 databases. 606# 607test_suite "utf16" -description { 608 Run tests using UTF-16 databases 609} -presql { 610 pragma encoding = 'UTF-16' 611} -files { 612 alter.test alter3.test 613 analyze.test analyze3.test analyze4.test analyze5.test analyze6.test 614 analyze7.test analyze8.test analyze9.test analyzeA.test analyzeB.test 615 auth.test bind.test blob.test capi2.test capi3.test collate1.test 616 collate2.test collate3.test collate4.test collate5.test collate6.test 617 conflict.test date.test delete.test expr.test fkey1.test func.test 618 hook.test index.test insert2.test insert.test interrupt.test in.test 619 intpkey.test ioerr.test join2.test join.test lastinsert.test 620 laststmtchanges.test limit.test lock2.test lock.test main.test 621 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test 622 null.test progress.test quote.test rowid.test select1.test select2.test 623 select3.test select4.test select5.test select6.test sort.test 624 subselect.test tableapi.test table.test temptable.test 625 trace.test trigger1.test trigger2.test trigger3.test 626 trigger4.test types2.test types.test unique.test update.test 627 vacuum.test view.test where.test 628 bestindex1.test 629} 630 631# Run some tests in exclusive locking mode. 632# 633test_suite "exclusive" -description { 634 Run tests in exclusive locking mode. 635} -presql { 636 pragma locking_mode = 'exclusive' 637} -files { 638 rollback.test select1.test select2.test 639 malloc.test ioerr.test 640} 641 642# Run some tests in exclusive locking mode with truncated journals. 643# 644test_suite "exclusive-truncate" -description { 645 Run tests in exclusive locking mode and truncate journal mode. 646} -presql { 647 pragma locking_mode = 'exclusive'; 648 pragma journal_mode = TRUNCATE; 649} -files { 650 delete.test delete2.test insert.test rollback.test select1.test 651 select2.test update.test malloc.test ioerr.test 652} 653 654# Run some tests in persistent journal mode. 655# 656test_suite "persistent_journal" -description { 657 Run tests in persistent-journal mode. 658} -presql { 659 pragma journal_mode = persist 660} -files { 661 delete.test delete2.test insert.test rollback.test select1.test 662 select2.test trans.test update.test vacuum.test 663} 664 665# Run some tests in truncating journal mode. 666# 667test_suite "truncate_journal" -description { 668 Run tests in persistent-journal mode. 669} -presql { 670 pragma journal_mode = truncate 671} -files { 672 delete.test delete2.test insert.test rollback.test select1.test 673 select2.test trans.test update.test vacuum.test 674 malloc.test ioerr.test 675} 676 677# Run some error tests in persistent journal mode. 678# 679test_suite "persistent_journal_error" -description { 680 Run malloc.test and ioerr.test in persistent-journal mode. 681} -presql { 682 pragma journal_mode = persist 683} -files { 684 malloc.test ioerr.test 685} 686 687# Run some tests in no journal mode. 688# 689test_suite "no_journal" -description { 690 Run tests in no-journal mode. 691} -presql { 692 pragma journal_mode = persist 693} -files { 694 delete.test delete2.test insert.test rollback.test select1.test 695 select2.test trans.test update.test vacuum.test 696} 697 698# Run some error tests in no journal mode. 699# 700test_suite "no_journal_error" -description { 701 Run malloc.test and ioerr.test in no-journal mode. 702} -presql { 703 pragma journal_mode = persist 704} -files { 705 malloc.test ioerr.test 706} 707 708# Run some crash-tests in autovacuum mode. 709# 710test_suite "autovacuum_crash" -description { 711 Run crash.test in autovacuum mode. 712} -presql { 713 pragma auto_vacuum = 1 714} -files crash.test 715 716# Run some ioerr-tests in autovacuum mode. 717# 718test_suite "autovacuum_ioerr" -description { 719 Run ioerr.test in autovacuum mode. 720} -presql { 721 pragma auto_vacuum = 1 722} -files ioerr.test 723 724# Run tests with an in-memory journal. 725# 726test_suite "inmemory_journal" -description { 727 Run tests with an in-memory journal file. 728} -presql { 729 pragma journal_mode = 'memory' 730} -files [test_set $::allquicktests -exclude { 731 # Exclude all tests that simulate IO errors. 732 autovacuum_ioerr2.test cffault.test incrvacuum_ioerr.test ioerr.test 733 ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test 734 vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test 735 e_fts3.test fts3cov.test fts3malloc.test fts3rnd.test 736 fts3snippet.test mmapfault.test sessionfault.test sessionfault2.test 737 738 # Exclude test scripts that use tcl IO to access journal files or count 739 # the number of fsync() calls. 740 pager.test exclusive.test jrnlmode.test sync.test misc1.test 741 journal1.test conflict.test crash8.test tkt3457.test io.test 742 journal3.test 8_3_names.test 743 744 pager1.test async4.test corrupt.test filefmt.test pager2.test 745 corrupt5.test corruptA.test pageropt.test 746 747 # Exclude stmt.test, which expects sub-journals to use temporary files. 748 stmt.test symlink.test 749 750 zerodamage.test 751 752 # WAL mode is different. 753 wal* tkt-2d1a5c67d.test backcompat.test e_wal* rowallock.test 754 755 # This test does not work as the "PRAGMA journal_mode = memory" 756 # statement switches the database out of wal mode at inopportune 757 # times. 758 snapshot_fault.test 759 760 # This test assumes a journal file is created on disk. 761 delete_db.test 762 763 # This test depends on a successful recovery from the pager error 764 # state. Which is not possible with an in-memory journal 765 fts5fault1.test 766}] 767 768ifcapable mem3 { 769 test_suite "memsys3" -description { 770 Run tests using the allocator in mem3.c. 771 } -files [test_set $::allquicktests -exclude { 772 autovacuum.test delete3.test manydb.test 773 bigrow.test incrblob2.test memdb.test 774 bitvec.test index2.test memsubsys1.test 775 capi3c.test ioerr.test memsubsys2.test 776 capi3.test join3.test pagesize.test 777 collate5.test limit.test backup_ioerr.test 778 backup_malloc.test 779 }] -initialize { 780 catch {db close} 781 sqlite3_reset_auto_extension 782 sqlite3_shutdown 783 sqlite3_config_heap 25000000 0 784 sqlite3_config_lookaside 0 0 785 ifcapable mem5 { 786 # If both memsys3 and memsys5 are enabled in the build, the call to 787 # [sqlite3_config_heap] will initialize the system to use memsys5. 788 # The following overrides this preference and installs the memsys3 789 # allocator. 790 sqlite3_install_memsys3 791 } 792 install_malloc_faultsim 1 793 sqlite3_initialize 794 autoinstall_test_functions 795 } -shutdown { 796 catch {db close} 797 sqlite3_shutdown 798 sqlite3_config_heap 0 0 799 sqlite3_config_lookaside 100 500 800 install_malloc_faultsim 1 801 sqlite3_initialize 802 autoinstall_test_functions 803 } 804} 805 806ifcapable mem5 { 807 test_suite "memsys5" -description { 808 Run tests using the allocator in mem5.c. 809 } -files [test_set $::allquicktests -exclude { 810 autovacuum.test delete3.test manydb.test 811 bigrow.test incrblob2.test memdb.test 812 bitvec.test index2.test memsubsys1.test 813 capi3c.test ioerr.test memsubsys2.test 814 capi3.test join3.test pagesize.test 815 collate5.test limit.test zeroblob.test 816 }] -initialize { 817 catch {db close} 818 sqlite3_shutdown 819 sqlite3_config_heap 25000000 64 820 sqlite3_config_lookaside 0 0 821 install_malloc_faultsim 1 822 sqlite3_initialize 823 autoinstall_test_functions 824 } -shutdown { 825 catch {db close} 826 sqlite3_shutdown 827 sqlite3_config_heap 0 0 828 sqlite3_config_lookaside 100 500 829 install_malloc_faultsim 1 830 sqlite3_initialize 831 autoinstall_test_functions 832 } 833 834 test_suite "memsys5-2" -description { 835 Run tests using the allocator in mem5.c in a different configuration. 836 } -files { 837 select1.test 838 } -initialize { 839 catch {db close} 840 sqlite3_shutdown 841 sqlite3_config_memstatus 0 842 sqlite3_config_heap 40000000 16 843 sqlite3_config_lookaside 0 0 844 install_malloc_faultsim 1 845 sqlite3_initialize 846 autoinstall_test_functions 847 } -shutdown { 848 catch {db close} 849 sqlite3_shutdown 850 sqlite3_config_heap 0 0 851 sqlite3_config_lookaside 100 500 852 install_malloc_faultsim 1 853 sqlite3_initialize 854 autoinstall_test_functions 855 } 856} 857 858ifcapable threadsafe { 859 test_suite "no_mutex_try" -description { 860 The sqlite3_mutex_try() interface always fails 861 } -files [ 862 test_set $::allquicktests -exclude mutex1.test mutex2.test 863 ] -initialize { 864 catch {db close} 865 sqlite3_shutdown 866 install_mutex_counters 1 867 set ::disable_mutex_try 1 868 sqlite3_initialize 869 autoinstall_test_functions 870 } -shutdown { 871 catch {db close} 872 sqlite3_shutdown 873 install_mutex_counters 0 874 sqlite3_initialize 875 autoinstall_test_functions 876 } 877} 878 879# run_tests "crash_safe_append" -description { 880# Run crash.test with persistent journals on a SAFE_APPEND file-system. 881# } -initialize { 882# rename crashsql sa_crashsql 883# proc crashsql {args} { 884# set options [lrange $args 0 [expr {[llength $args]-2}]] 885# lappend options -char safe_append 886# set sql [lindex $args end] 887# lappend options " 888# PRAGMA journal_mode=persistent; 889# $sql 890# " 891# set fd [open test.db-journal w] 892# puts $fd [string repeat 1234567890 100000] 893# close $fd 894# eval sa_crashsql $options 895# } 896# } -shutdown { 897# rename crashsql {} 898# rename sa_crashsql crashsql 899# } -files crash.test 900 901test_suite "safe_append" -description { 902 Run some tests on a SAFE_APPEND file-system. 903} -initialize { 904 rename sqlite3 sqlite3_safeappend 905 proc sqlite3 {args} { 906 if {[string range [lindex $args 0] 0 0] ne "-"} { 907 lappend args -vfs devsym 908 } 909 uplevel [concat sqlite3_safeappend $args] 910 } 911 sqlite3_simulate_device -char safe_append 912} -shutdown { 913 rename sqlite3 {} 914 rename sqlite3_shutdown sqlite3 915} -files [ 916 test_set $::allquicktests shared_err.test -exclude async3.test 917] 918 919# The set of tests to run on the alternative-pcache 920set perm-alt-pcache-testset { 921 async.test 922 attach.test 923 delete.test delete2.test 924 index.test 925 insert.test insert2.test 926 join.test join2.test 927 rollback.test 928 select1.test select2.test 929 trans.test 930 update.test 931} 932 933foreach discard_rate {0 10 50 90 100} { 934 test_suite "pcache${discard_rate}" -description " 935 Alternative pcache implementation with ${discard_rate}% random discard 936 " -initialize " 937 catch {db close} 938 sqlite3_shutdown 939 sqlite3_config_alt_pcache 1 $discard_rate 1 940 sqlite3_initialize 941 autoinstall_test_functions 942 " -shutdown { 943 catch {db close} 944 sqlite3_shutdown 945 sqlite3_config_alt_pcache 0 0 0 946 sqlite3_config_lookaside 100 500 947 install_malloc_faultsim 1 948 sqlite3_initialize 949 autoinstall_test_functions 950 } -files ${perm-alt-pcache-testset} 951} 952 953test_suite "journaltest" -description { 954 Check that pages are synced before being written (test_journal.c). 955} -initialize { 956 catch {db close} 957 register_jt_vfs -default "" 958} -shutdown { 959 unregister_jt_vfs 960} -files [test_set $::allquicktests -exclude { 961 wal* incrvacuum.test ioerr.test corrupt4.test io.test crash8.test 962 async4.test bigfile.test backcompat.test e_wal* fstat.test mmap2.test 963 pager1.test syscall.test tkt3457.test *malloc* mmap* multiplex* nolock* 964 pager2.test *fault* rowal* snapshot* superlock* symlink.test 965 delete_db.test 966}] 967 968if {[info commands register_demovfs] != ""} { 969 test_suite "demovfs" -description { 970 Check that the demovfs (code in test_demovfs.c) more or less works. 971 } -initialize { 972 register_demovfs 973 } -shutdown { 974 unregister_demovfs 975 } -files { 976 insert.test insert2.test insert3.test rollback.test 977 select1.test select2.test select3.test 978 } 979} 980 981test_suite "wal" -description { 982 Run tests with journal_mode=WAL 983} -initialize { 984 set ::G(savepoint6_iterations) 100 985} -shutdown { 986 unset -nocomplain ::G(savepoint6_iterations) 987} -files { 988 savepoint.test savepoint2.test savepoint6.test 989 trans.test avtrans.test 990 991 fts3aa.test fts3ab.test fts3ac.test fts3ad.test 992 fts3ae.test fts3af.test fts3ag.test fts3ah.test 993 fts3ai.test fts3aj.test fts3ak.test fts3al.test 994 fts3am.test fts3an.test fts3ao.test fts3b.test 995 fts3c.test fts3d.test fts3e.test fts3query.test 996} 997 998test_suite "rtree" -description { 999 All R-tree related tests. Provides coverage of source file rtree.c. 1000} -files [glob -nocomplain $::testdir/../ext/rtree/*.test] 1001 1002test_suite "session" -description { 1003 All session module related tests. 1004} -files [glob -nocomplain $::testdir/../ext/session/*.test] 1005 1006test_suite "session_eec" -description { 1007 All session module related tests with sqlite3_extended_result_codes() set. 1008} -files [ 1009 glob -nocomplain $::testdir/../ext/session/*.test 1010] -dbconfig { 1011 sqlite3_extended_result_codes $::dbhandle 1 1012} 1013 1014test_suite "session_strm" -description { 1015 All session module related tests using the streaming APIs. 1016} -files [ 1017 glob -nocomplain $::testdir/../ext/session/*.test 1018] -dbconfig { 1019 set ::sqlite3session_streams 1 1020} 1021 1022test_suite "rbu" -description { 1023 RBU tests. 1024} -files [ 1025 test_set [glob -nocomplain $::testdir/../ext/rbu/*.test] -exclude rbu.test 1026] 1027 1028test_suite "no_optimization" -description { 1029 Run test scripts with optimizations disabled using the 1030 sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS) interface. 1031} -files { 1032 where.test where2.test where3.test where4.test where5.test 1033 where6.test where7.test where8.test where9.test 1034 whereA.test whereB.test wherelimit.test 1035 select1.test select2.test select3.test select4.test select5.test 1036 select7.test select8.test selectA.test selectC.test 1037} -dbconfig { 1038 optimization_control $::dbhandle all 0 1039} 1040 1041test_suite "prepare" -description { 1042 Run tests with the db connection using sqlite3_prepare() instead of _v2(). 1043} -dbconfig { 1044 db_use_legacy_prepare $::dbhandle 1 1045 #$::dbhandle cache size 0 1046} -files [ 1047 test_set $allquicktests -exclude *malloc* *ioerr* *fault* 1048] 1049 1050# End of tests 1051############################################################################# 1052 1053# run_tests NAME OPTIONS 1054# 1055# where available options are: 1056# 1057# -description TITLE 1058# -initialize SCRIPT 1059# -shutdown SCRIPT 1060# -presql SQL 1061# -files LIST-OF-FILES 1062# -prefix NAME 1063# 1064proc run_tests {name args} { 1065 array set options $args 1066 1067 set ::G(perm:name) $name 1068 set ::G(perm:prefix) $options(-prefix) 1069 set ::G(perm:presql) $options(-presql) 1070 set ::G(isquick) 1 1071 set ::G(perm:dbconfig) $options(-dbconfig) 1072 1073 foreach file [lsort $options(-files)] { 1074 uplevel $options(-initialize) 1075 if {[file tail $file] == $file} { set file [file join $::testdir $file] } 1076 slave_test_file $file 1077 uplevel $options(-shutdown) 1078 } 1079 1080 unset ::G(perm:name) 1081 unset ::G(perm:prefix) 1082 unset ::G(perm:presql) 1083 unset ::G(perm:dbconfig) 1084} 1085 1086proc run_test_suite {name} { 1087 if {[info exists ::testspec($name)]==0} { 1088 error "No such test suite: $name" 1089 } 1090 uplevel run_tests $name $::testspec($name) 1091} 1092 1093proc help {} { 1094 puts "Usage: $::argv0 TESTSUITE ?TESTFILE?" 1095 puts "" 1096 puts "Available test-suites are:" 1097 foreach k $::testsuitelist { 1098 if {[info exists ::testspec($k)]==0} { 1099 puts " ----------------------------------------" 1100 puts "" 1101 } else { 1102 array set o $::testspec($k) 1103 puts "Test suite: \"$k\"" 1104 set d [string trim $o(-description)] 1105 set d [regsub {\n *} $d "\n "] 1106 puts " $d" 1107 puts "" 1108 } 1109 } 1110 exit -1 1111} 1112 1113if {[file tail $argv0] == "permutations.test"} { 1114 proc main {argv} { 1115 if {[llength $argv]==0} { 1116 help 1117 } else { 1118 set suite [file tail [lindex $argv 0]] 1119 if {[info exists ::testspec($suite)]==0} help 1120 set extra "" 1121 if {[llength $argv]>1} { set extra [list -files [lrange $argv 1 end]] } 1122 eval run_tests $suite $::testspec($suite) $extra 1123 } 1124 } 1125 main $argv 1126 finish_test 1127} 1128