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# 29proc test_suite {name args} { 30 31 set default(-shutdown) "" 32 set default(-initialize) "" 33 set default(-presql) "" 34 set default(-description) "no description supplied (fixme)" 35 set default(-files) "" 36 set default(-prefix) "${name}." 37 38 array set options [array get default] 39 if {[llength $args]%2} { 40 error "uneven number of options/switches passed to test_suite" 41 } 42 foreach {k v} $args { 43 set o [array names options ${k}*] 44 if {[llength $o]>1} { error "ambiguous option: $k" } 45 if {[llength $o]==0} { error "unknown option: $k" } 46 set options([lindex $o 0]) $v 47 } 48 49 set ::testspec($name) [array get options] 50 lappend ::testsuitelist $name 51 52} 53 54#------------------------------------------------------------------------- 55# test_set ARGS... 56# 57proc test_set {args} { 58 set isExclude 0 59 foreach a $args { 60 if {[string match -* $a]} { 61 switch -- $a { 62 -include { set isExclude 0 } 63 -exclude { set isExclude 1 } 64 default { 65 error "Unknown switch: $a" 66 } 67 } 68 } elseif {$isExclude == 0} { 69 foreach f $a { set t($f) 1 } 70 } else { 71 foreach f $a { array unset t $f } 72 } 73 } 74 75 return [array names t] 76} 77 78#------------------------------------------------------------------------- 79# Set up the following global list variables containing the names of 80# various test scripts: 81# 82# $alltests 83# $allquicktests 84# 85set alltests [list] 86foreach f [glob $testdir/*.test] { lappend alltests [file tail $f] } 87if {$::tcl_platform(platform)!="unix"} { 88 set alltests [test_set $alltests -exclude crash.test crash2.test] 89} 90set alltests [test_set $alltests -exclude { 91 all.test async.test quick.test veryquick.test 92 memleak.test permutations.test soak.test fts3.test 93 mallocAll.test 94}] 95 96set allquicktests [test_set $alltests -exclude { 97 async2.test async3.test backup_ioerr.test corrupt.test 98 corruptC.test crash.test crash2.test crash3.test crash4.test crash5.test 99 crash6.test crash7.test delete3.test e_fts3.test fts3rnd.test 100 fkey_malloc.test fuzz.test fuzz3.test fuzz_malloc.test in2.test loadext.test 101 misc7.test mutex2.test notify2.test onefile.test pagerfault2.test 102 savepoint4.test savepoint6.test select9.test 103 speed1.test speed1p.test speed2.test speed3.test speed4.test 104 speed4p.test sqllimits1.test tkt2686.test thread001.test thread002.test 105 thread003.test thread004.test thread005.test trans2.test vacuum3.test 106 incrvacuum_ioerr.test autovacuum_crash.test btree8.test shared_err.test 107 vtab_err.test walslow.test walcrash.test 108 walthread.test 109}] 110if {[info exists ::env(QUICKTEST_INCLUDE)]} { 111 set allquicktests [concat $allquicktests $::env(QUICKTEST_INCLUDE)] 112} 113 114############################################################################# 115# Start of tests 116# 117 118#------------------------------------------------------------------------- 119# Define the generic test suites: 120# 121# veryquick 122# quick 123# full 124# 125lappend ::testsuitelist xxx 126 127test_suite "veryquick" -prefix "" -description { 128 "Very" quick test suite. Runs in less than 5 minutes on a workstation. 129 This test suite is the same as the "quick" tests, except that some files 130 that test malloc and IO errors are omitted. 131} -files [ 132 test_set $allquicktests -exclude *malloc* *ioerr* *fault* 133] 134 135test_suite "quick" -prefix "" -description { 136 Quick test suite. Runs in around 10 minutes on a workstation. 137} -files [ 138 test_set $allquicktests 139] 140 141test_suite "full" -prefix "" -description { 142 Full test suite. Takes a long time. 143} -files [ 144 test_set $alltests 145] -initialize { 146 unset -nocomplain ::G(isquick) 147} 148 149test_suite "threads" -prefix "" -description { 150 All multi-threaded tests. 151} -files { 152 notify2.test thread001.test thread002.test thread003.test 153 thread004.test thread005.test walthread.test 154} 155 156 157lappend ::testsuitelist xxx 158#------------------------------------------------------------------------- 159# Define the coverage related test suites: 160# 161# coverage-wal 162# 163test_suite "coverage-wal" -description { 164 Coverage tests for file wal.c. 165} -files { 166 wal.test wal2.test wal3.test walmode.test 167 walbak.test walhook.test walcrash2.test walcksum.test 168 walfault.test walbig.test 169} 170 171test_suite "coverage-pager" -description { 172 Coverage tests for file pager.c. 173} -files { 174 pager1.test pager2.test pagerfault.test pagerfault2.test 175 walfault.test walbak.test journal2.test tkt-9d68c883.test 176} 177 178 179lappend ::testsuitelist xxx 180#------------------------------------------------------------------------- 181# Define the permutation test suites: 182# 183 184# Run some tests using pre-allocated page and scratch blocks. 185# 186test_suite "memsubsys1" -description { 187 Tests using pre-allocated page and scratch blocks 188} -files [ 189 test_set $::allquicktests -exclude ioerr5.test malloc5.test 190] -initialize { 191 catch {db close} 192 sqlite3_shutdown 193 sqlite3_config_pagecache 4096 24 194 sqlite3_config_scratch 25000 1 195 sqlite3_initialize 196 autoinstall_test_functions 197} -shutdown { 198 catch {db close} 199 sqlite3_shutdown 200 sqlite3_config_pagecache 0 0 201 sqlite3_config_scratch 0 0 202 sqlite3_initialize 203 autoinstall_test_functions 204} 205 206# Run some tests using pre-allocated page and scratch blocks. This time 207# the allocations are too small to use in most cases. 208# 209# Both ioerr5.test and malloc5.test are excluded because they test the 210# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality. 211# This functionality is disabled if a pre-allocated page block is provided. 212# 213test_suite "memsubsys2" -description { 214 Tests using small pre-allocated page and scratch blocks 215} -files [ 216 test_set $::allquicktests -exclude ioerr5.test malloc5.test 217] -initialize { 218 catch {db close} 219 sqlite3_shutdown 220 sqlite3_config_pagecache 512 5 221 sqlite3_config_scratch 1000 1 222 sqlite3_initialize 223 autoinstall_test_functions 224} -shutdown { 225 catch {db close} 226 sqlite3_shutdown 227 sqlite3_config_pagecache 0 0 228 sqlite3_config_scratch 0 0 229 sqlite3_initialize 230 autoinstall_test_functions 231} 232 233# Run all tests with the lookaside allocator disabled. 234# 235test_suite "nolookaside" -description { 236 OOM tests with lookaside disabled 237} -initialize { 238 catch {db close} 239 sqlite3_shutdown 240 sqlite3_config_lookaside 0 0 241 sqlite3_initialize 242 autoinstall_test_functions 243} -shutdown { 244 catch {db close} 245 sqlite3_shutdown 246 sqlite3_config_lookaside 100 500 247 sqlite3_initialize 248 autoinstall_test_functions 249} -files $::allquicktests 250 251# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode. 252# 253test_suite "singlethread" -description { 254 Tests run in SQLITE_CONFIG_SINGLETHREAD mode 255} -initialize { 256 catch {db close} 257 sqlite3_shutdown 258 catch {sqlite3_config singlethread} 259 sqlite3_initialize 260 autoinstall_test_functions 261} -files { 262 delete.test delete2.test insert.test rollback.test select1.test 263 select2.test trans.test update.test vacuum.test types.test 264 types2.test types3.test 265} -shutdown { 266 catch {db close} 267 sqlite3_shutdown 268 catch {sqlite3_config serialized} 269 sqlite3_initialize 270 autoinstall_test_functions 271} 272 273test_suite "nomutex" -description { 274 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open(). 275} -initialize { 276 rename sqlite3 sqlite3_nomutex 277 proc sqlite3 {args} { 278 if {[string range [lindex $args 0] 0 0] ne "-"} { 279 lappend args -fullmutex 0 -nomutex 1 280 } 281 uplevel [concat sqlite3_nomutex $args] 282 } 283} -files { 284 delete.test delete2.test insert.test rollback.test select1.test 285 select2.test trans.test update.test vacuum.test types.test 286 types2.test types3.test 287} -shutdown { 288 rename sqlite3 {} 289 rename sqlite3_nomutex sqlite3 290} 291 292# Run some tests in SQLITE_CONFIG_MULTITHREAD mode. 293# 294test_suite "multithread" -description { 295 Tests run in SQLITE_CONFIG_MULTITHREAD mode 296} -initialize { 297 catch {db close} 298 sqlite3_shutdown 299 catch {sqlite3_config multithread} 300 sqlite3_initialize 301 autoinstall_test_functions 302} -files { 303 delete.test delete2.test insert.test rollback.test select1.test 304 select2.test trans.test update.test vacuum.test types.test 305 types2.test types3.test 306} -shutdown { 307 catch {db close} 308 sqlite3_shutdown 309 catch {sqlite3_config serialized} 310 sqlite3_initialize 311 autoinstall_test_functions 312} 313 314# Run some tests in SQLITE_OPEN_FULLMUTEX mode. 315# 316test_suite "fullmutex" -description { 317 Tests run in SQLITE_OPEN_FULLMUTEX mode 318} -initialize { 319 rename sqlite3 sqlite3_fullmutex 320 proc sqlite3 {args} { 321 if {[string range [lindex $args 0] 0 0] ne "-"} { 322 lappend args -nomutex 0 -fullmutex 1 323 } 324 uplevel [concat sqlite3_fullmutex $args] 325 } 326} -files { 327 delete.test delete2.test insert.test rollback.test select1.test 328 select2.test trans.test update.test vacuum.test types.test 329 types2.test types3.test 330} -shutdown { 331 rename sqlite3 {} 332 rename sqlite3_fullmutex sqlite3 333} 334 335# Run some tests using the "onefile" demo. 336# 337test_suite "onefile" -description { 338 Run some tests using the "test_onefile.c" demo 339} -initialize { 340 rename sqlite3 sqlite3_onefile 341 proc sqlite3 {args} { 342 if {[string range [lindex $args 0] 0 0] ne "-"} { 343 lappend args -vfs fs 344 } 345 uplevel [concat sqlite3_onefile $args] 346 } 347} -files { 348 conflict.test insert.test insert2.test insert3.test 349 rollback.test select1.test select2.test select3.test 350} -shutdown { 351 rename sqlite3 {} 352 rename sqlite3_onefile sqlite3 353} 354 355# Run some tests using UTF-16 databases. 356# 357test_suite "utf16" -description { 358 Run tests using UTF-16 databases 359} -presql { 360 pragma encoding = 'UTF-16' 361} -files { 362 alter.test alter3.test 363 auth.test bind.test blob.test capi2.test capi3.test collate1.test 364 collate2.test collate3.test collate4.test collate5.test collate6.test 365 conflict.test date.test delete.test expr.test fkey1.test func.test 366 hook.test index.test insert2.test insert.test interrupt.test in.test 367 intpkey.test ioerr.test join2.test join.test lastinsert.test 368 laststmtchanges.test limit.test lock2.test lock.test main.test 369 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test 370 null.test progress.test quote.test rowid.test select1.test select2.test 371 select3.test select4.test select5.test select6.test sort.test 372 subselect.test tableapi.test table.test temptable.test 373 trace.test trigger1.test trigger2.test trigger3.test 374 trigger4.test types2.test types.test unique.test update.test 375 vacuum.test view.test where.test 376} 377 378# Run some tests in exclusive locking mode. 379# 380test_suite "exclusive" -description { 381 Run tests in exclusive locking mode. 382} -presql { 383 pragma locking_mode = 'exclusive' 384} -files { 385 rollback.test select1.test select2.test 386 malloc.test ioerr.test 387} 388 389# Run some tests in exclusive locking mode with truncated journals. 390# 391test_suite "exclusive-truncate" -description { 392 Run tests in exclusive locking mode and truncate journal mode. 393} -presql { 394 pragma locking_mode = 'exclusive'; 395 pragma journal_mode = TRUNCATE; 396} -files { 397 delete.test delete2.test insert.test rollback.test select1.test 398 select2.test update.test malloc.test ioerr.test 399} 400 401# Run some tests in persistent journal mode. 402# 403test_suite "persistent_journal" -description { 404 Run tests in persistent-journal mode. 405} -presql { 406 pragma journal_mode = persist 407} -files { 408 delete.test delete2.test insert.test rollback.test select1.test 409 select2.test trans.test update.test vacuum.test 410} 411 412# Run some tests in truncating journal mode. 413# 414test_suite "truncate_journal" -description { 415 Run tests in persistent-journal mode. 416} -presql { 417 pragma journal_mode = truncate 418} -files { 419 delete.test delete2.test insert.test rollback.test select1.test 420 select2.test trans.test update.test vacuum.test 421 malloc.test ioerr.test 422} 423 424# Run some error tests in persistent journal mode. 425# 426test_suite "persistent_journal_error" -description { 427 Run malloc.test and ioerr.test in persistent-journal mode. 428} -presql { 429 pragma journal_mode = persist 430} -files { 431 malloc.test ioerr.test 432} 433 434# Run some tests in no journal mode. 435# 436test_suite "no_journal" -description { 437 Run tests in no-journal mode. 438} -presql { 439 pragma journal_mode = persist 440} -files { 441 delete.test delete2.test insert.test rollback.test select1.test 442 select2.test trans.test update.test vacuum.test 443} 444 445# Run some error tests in no journal mode. 446# 447test_suite "no_journal_error" -description { 448 Run malloc.test and ioerr.test in no-journal mode. 449} -presql { 450 pragma journal_mode = persist 451} -files { 452 malloc.test ioerr.test 453} 454 455# Run some crash-tests in autovacuum mode. 456# 457test_suite "autovacuum_crash" -description { 458 Run crash.test in autovacuum mode. 459} -presql { 460 pragma auto_vacuum = 1 461} -files crash.test 462 463# Run some ioerr-tests in autovacuum mode. 464# 465test_suite "autovacuum_ioerr" -description { 466 Run ioerr.test in autovacuum mode. 467} -presql { 468 pragma auto_vacuum = 1 469} -files ioerr.test 470 471# Run tests with an in-memory journal. 472# 473test_suite "inmemory_journal" -description { 474 Run tests with an in-memory journal file. 475} -presql { 476 pragma journal_mode = 'memory' 477} -files [test_set $::allquicktests -exclude { 478 # Exclude all tests that simulate IO errors. 479 autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test 480 ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test 481 vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test 482 e_fts3.test 483 484 # Exclude test scripts that use tcl IO to access journal files or count 485 # the number of fsync() calls. 486 pager.test exclusive.test jrnlmode.test sync.test misc1.test 487 journal1.test conflict.test crash8.test tkt3457.test io.test 488 489 # Exclude stmt.test, which expects sub-journals to use temporary files. 490 stmt.test 491 492 # WAL mode is different. 493 wal* 494}] 495 496ifcapable mem3 { 497 test_suite "memsys3" -description { 498 Run tests using the allocator in mem3.c. 499 } -files [test_set $::allquicktests -exclude { 500 autovacuum.test delete3.test manydb.test 501 bigrow.test incrblob2.test memdb.test 502 bitvec.test index2.test memsubsys1.test 503 capi3c.test ioerr.test memsubsys2.test 504 capi3.test join3.test pagesize.test 505 collate5.test limit.test backup_ioerr.test 506 backup_malloc.test 507 }] -initialize { 508 catch {db close} 509 sqlite3_reset_auto_extension 510 sqlite3_shutdown 511 sqlite3_config_heap 25000000 0 512 sqlite3_config_lookaside 0 0 513 ifcapable mem5 { 514 # If both memsys3 and memsys5 are enabled in the build, the call to 515 # [sqlite3_config_heap] will initialize the system to use memsys5. 516 # The following overrides this preference and installs the memsys3 517 # allocator. 518 sqlite3_install_memsys3 519 } 520 install_malloc_faultsim 1 521 sqlite3_initialize 522 autoinstall_test_functions 523 } -shutdown { 524 catch {db close} 525 sqlite3_shutdown 526 sqlite3_config_heap 0 0 527 sqlite3_config_lookaside 100 500 528 install_malloc_faultsim 1 529 sqlite3_initialize 530 autoinstall_test_functions 531 } 532} 533 534ifcapable mem5 { 535 test_suite "memsys5" -description { 536 Run tests using the allocator in mem5.c. 537 } -files [test_set $::allquicktests -exclude { 538 autovacuum.test delete3.test manydb.test 539 bigrow.test incrblob2.test memdb.test 540 bitvec.test index2.test memsubsys1.test 541 capi3c.test ioerr.test memsubsys2.test 542 capi3.test join3.test pagesize.test 543 collate5.test limit.test zeroblob.test 544 }] -initialize { 545 catch {db close} 546 sqlite3_shutdown 547 sqlite3_config_heap 25000000 64 548 sqlite3_config_lookaside 0 0 549 install_malloc_faultsim 1 550 sqlite3_initialize 551 autoinstall_test_functions 552 } -shutdown { 553 catch {db close} 554 sqlite3_shutdown 555 sqlite3_config_heap 0 0 556 sqlite3_config_lookaside 100 500 557 install_malloc_faultsim 1 558 sqlite3_initialize 559 autoinstall_test_functions 560 } 561 562 test_suite "memsys5-2" -description { 563 Run tests using the allocator in mem5.c in a different configuration. 564 } -files { 565 select1.test 566 } -initialize { 567 catch {db close} 568 sqlite3_shutdown 569 sqlite3_config_heap 40000000 16 570 sqlite3_config_lookaside 0 0 571 install_malloc_faultsim 1 572 sqlite3_initialize 573 autoinstall_test_functions 574 } -shutdown { 575 catch {db close} 576 sqlite3_shutdown 577 sqlite3_config_heap 0 0 578 sqlite3_config_lookaside 100 500 579 install_malloc_faultsim 1 580 sqlite3_initialize 581 autoinstall_test_functions 582 } 583} 584 585ifcapable threadsafe { 586 test_suite "no_mutex_try" -description { 587 The sqlite3_mutex_try() interface always fails 588 } -files [ 589 test_set $::allquicktests -exclude mutex1.test mutex2.test 590 ] -initialize { 591 catch {db close} 592 sqlite3_shutdown 593 install_mutex_counters 1 594 set ::disable_mutex_try 1 595 sqlite3_initialize 596 autoinstall_test_functions 597 } -shutdown { 598 catch {db close} 599 sqlite3_shutdown 600 install_mutex_counters 0 601 sqlite3_initialize 602 autoinstall_test_functions 603 } 604} 605 606# run_tests "crash_safe_append" -description { 607# Run crash.test with persistent journals on a SAFE_APPEND file-system. 608# } -initialize { 609# rename crashsql sa_crashsql 610# proc crashsql {args} { 611# set options [lrange $args 0 [expr {[llength $args]-2}]] 612# lappend options -char safe_append 613# set sql [lindex $args end] 614# lappend options " 615# PRAGMA journal_mode=persistent; 616# $sql 617# " 618# set fd [open test.db-journal w] 619# puts $fd [string repeat 1234567890 100000] 620# close $fd 621# eval sa_crashsql $options 622# } 623# } -shutdown { 624# rename crashsql {} 625# rename sa_crashsql crashsql 626# } -files crash.test 627 628test_suite "safe_append" -description { 629 Run some tests on a SAFE_APPEND file-system. 630} -initialize { 631 rename sqlite3 sqlite3_safeappend 632 proc sqlite3 {args} { 633 if {[string range [lindex $args 0] 0 0] ne "-"} { 634 lappend args -vfs devsym 635 } 636 uplevel [concat sqlite3_safeappend $args] 637 } 638 sqlite3_simulate_device -char safe_append 639} -shutdown { 640 rename sqlite3 {} 641 rename sqlite3_shutdown sqlite3 642} -files [ 643 test_set $::allquicktests shared_err.test -exclude async3.test 644] 645 646# The set of tests to run on the alternative-pcache 647set perm-alt-pcache-testset { 648 async.test 649 attach.test 650 delete.test delete2.test 651 index.test 652 insert.test insert2.test 653 join.test join2.test 654 rollback.test 655 select1.test select2.test 656 trans.test 657 update.test 658} 659 660test_suite "pcache0" -description { 661 Alternative pcache implementation without random discard 662} -initialize { 663 catch {db close} 664 sqlite3_shutdown 665 sqlite3_config_alt_pcache 1 0 1 666 sqlite3_initialize 667 autoinstall_test_functions 668} -shutdown { 669 catch {db close} 670 sqlite3_shutdown 671 sqlite3_config_alt_pcache 0 0 0 672 sqlite3_config_lookaside 100 500 673 install_malloc_faultsim 1 674 sqlite3_initialize 675 autoinstall_test_functions 676} -files ${perm-alt-pcache-testset} 677 678test_suite "pcache10" -description { 679 Alternative pcache implementation without 10% random discard 680} -initialize { 681 catch {db close} 682 sqlite3_shutdown 683 sqlite3_config_alt_pcache 1 50 1 684 sqlite3_initialize 685 autoinstall_test_functions 686} -shutdown { 687 catch {db close} 688 sqlite3_shutdown 689 sqlite3_config_alt_pcache 0 0 0 690 sqlite3_initialize 691 autoinstall_test_functions 692} -files ${perm-alt-pcache-testset} 693 694test_suite "pcache50" -description { 695 Alternative pcache implementation without 50% random discard 696} -initialize { 697 catch {db close} 698 sqlite3_shutdown 699 sqlite3_config_alt_pcache 1 50 1 700 sqlite3_initialize 701 autoinstall_test_functions 702} -shutdown { 703 catch {db close} 704 sqlite3_shutdown 705 sqlite3_config_alt_pcache 0 0 0 706 sqlite3_initialize 707 autoinstall_test_functions 708} -files ${perm-alt-pcache-testset} 709 710test_suite "pcache90" -description { 711 Alternative pcache implementation without 90% random discard 712} -initialize { 713 catch {db close} 714 sqlite3_shutdown 715 sqlite3_config_alt_pcache 1 50 1 716 sqlite3_initialize 717 autoinstall_test_functions 718} -shutdown { 719 catch {db close} 720 sqlite3_shutdown 721 sqlite3_config_alt_pcache 0 0 0 722 sqlite3_initialize 723 autoinstall_test_functions 724} -files ${perm-alt-pcache-testset} 725 726test_suite "pcache100" -description { 727 Alternative pcache implementation that always discards when unpinning 728} -initialize { 729 catch {db close} 730 sqlite3_shutdown 731 sqlite3_config_alt_pcache 1 100 1 732 sqlite3_initialize 733 autoinstall_test_functions 734} -shutdown { 735 catch {db close} 736 sqlite3_shutdown 737 sqlite3_config_alt_pcache 0 0 0 738 sqlite3_initialize 739 autoinstall_test_functions 740} -files ${perm-alt-pcache-testset} 741 742test_suite "journaltest" -description { 743 Check that pages are synced before being written (test_journal.c). 744} -initialize { 745 catch {db close} 746 register_jt_vfs -default "" 747} -shutdown { 748 unregister_jt_vfs 749} -files [test_set $::allquicktests -exclude { 750 wal* incrvacuum.test ioerr.test corrupt4.test io.test crash8.test 751 async4.test bigfile.test 752}] 753 754if {[info commands register_demovfs] != ""} { 755 test_suite "demovfs" -description { 756 Check that the demovfs (code in test_demovfs.c) more or less works. 757 } -initialize { 758 register_demovfs 759 } -shutdown { 760 unregister_demovfs 761 } -files { 762 insert.test insert2.test insert3.test rollback.test 763 select1.test select2.test select3.test 764 } 765} 766 767test_suite "wal" -description { 768 Run tests with journal_mode=WAL 769} -initialize { 770 set ::G(savepoint6_iterations) 100 771} -shutdown { 772 unset -nocomplain ::G(savepoint6_iterations) 773} -files { 774 savepoint.test savepoint2.test savepoint6.test 775 trans.test avtrans.test 776} 777# End of tests 778############################################################################# 779 780# run_tests NAME OPTIONS 781# 782# where available options are: 783# 784# -description TITLE 785# -initialize SCRIPT 786# -shutdown SCRIPT 787# -presql SQL 788# -files LIST-OF-FILES 789# -prefix NAME 790# 791proc run_tests {name args} { 792 array set options $args 793 794 set ::G(perm:name) $name 795 set ::G(perm:prefix) $options(-prefix) 796 set ::G(perm:presql) $options(-presql) 797 set ::G(isquick) 1 798 799 uplevel $options(-initialize) 800 801 foreach file [lsort $options(-files)] { 802 slave_test_file $::testdir/$file 803 } 804 805 uplevel $options(-shutdown) 806 807 unset ::G(perm:name) 808 unset ::G(perm:prefix) 809 unset ::G(perm:presql) 810} 811 812proc run_test_suite {name} { 813 if {[info exists ::testspec($name)]==0} { 814 error "No such test suite: $name" 815 } 816 uplevel run_tests $name $::testspec($name) 817} 818 819proc help {} { 820 puts "Usage: $::argv0 TESTSUITE ?TESTFILE?" 821 puts "" 822 puts "Available test-suites are:" 823 foreach k $::testsuitelist { 824 if {[info exists ::testspec($k)]==0} { 825 puts " ----------------------------------------" 826 puts "" 827 } else { 828 array set o $::testspec($k) 829 puts "Test suite: \"$k\"" 830 set d [string trim $o(-description)] 831 set d [regsub {\n *} $d "\n "] 832 puts " $d" 833 puts "" 834 } 835 } 836 exit -1 837} 838 839if {[info script] == $argv0} { 840 proc main {argv} { 841 if {[llength $argv]==0} { 842 help 843 } else { 844 set suite [lindex $argv 0] 845 if {[info exists ::testspec($suite)]==0} help 846 set extra "" 847 if {[llength $argv]>1} { set extra [list -files [lrange $argv 1 end]] } 848 eval run_tests $suite $::testspec($suite) $extra 849 } 850 } 851 main $argv 852 finish_test 853} 854 855