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>