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