Annotation of embedaddon/sqlite3/test/permutations.test, revision 1.1.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>