diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-18 23:37:03 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-18 23:37:03 +0000 |
commit | e33cba46498a40774bc6d33a9258afbd5fa059e6 (patch) | |
tree | 4ce6b22f4f7b2b245b2d89bb9209a53e3274b263 /third_party/sqlite/src/test/permutations.test | |
parent | aaf6472fd01db928919d4dc13687bde2a4b5c7b9 (diff) | |
download | chromium_src-e33cba46498a40774bc6d33a9258afbd5fa059e6.zip chromium_src-e33cba46498a40774bc6d33a9258afbd5fa059e6.tar.gz chromium_src-e33cba46498a40774bc6d33a9258afbd5fa059e6.tar.bz2 |
Move bundled copy of sqlite one level deeper to better separate it
from our patches, READMEs, etc.
Also, add a shim header so we can use it for building
with system sqlite.
TEST=compile
BUG=22208
Review URL: http://codereview.chromium.org/3108030
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56619 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party/sqlite/src/test/permutations.test')
-rw-r--r-- | third_party/sqlite/src/test/permutations.test | 761 |
1 files changed, 761 insertions, 0 deletions
diff --git a/third_party/sqlite/src/test/permutations.test b/third_party/sqlite/src/test/permutations.test new file mode 100644 index 0000000..2dec299 --- /dev/null +++ b/third_party/sqlite/src/test/permutations.test @@ -0,0 +1,761 @@ +# 2008 June 21 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# +# $Id: permutations.test,v 1.51 2009/07/01 18:09:02 danielk1977 Exp $ + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +# Argument processing. +# +#puts "PERM-DEBUG: argv=$argv" +namespace eval ::perm { + variable testmode [lindex $::argv 0] + variable testfile [lindex $::argv 1] +} +set argv [lrange $argv 2 end] +#puts "PERM-DEBUG: testmode=$::perm::testmode tstfile=$::perm::testfile" + +set ::permutations_presql "" +set ::permutations_test_prefix "" + +if {$::perm::testmode eq "veryquick"} { + set ::perm::testmode [list persistent_journal no_journal] + set ISQUICK 1 +} +if {$::perm::testmode eq "quick"} { + set ::perm::testmode [list persistent_journal no_journal autovacuum_ioerr] + set ISQUICK 1 +} +if {$::perm::testmode eq "all" || $::perm::testmode eq ""} { + set ::perm::testmode { + memsubsys1 memsubsys2 singlethread multithread onefile utf16 exclusive + persistent_journal persistent_journal_error no_journal no_journal_error + autovacuum_ioerr no_mutex_try fullmutex journaltest inmemory_journal + pcache0 pcache10 pcache50 pcache90 pcache100 + } +} +if {$::perm::testmode eq "targets"} { + puts "" + puts -nonewline "veryquick " + puts "Same as persistent_journal and no_journal" + puts -nonewline "quick " + puts "Same as persistent_journal, no_journal and autovacuum_ioerr" + puts -nonewline "all " + puts "Everything except autovacuum_crash" +} +#puts "PERM-DEBUG: testmode=$::perm::testmode" + +set EXCLUDE { + all.test in2.test onefile.test + async2.test incrvacuum_ioerr.test permutations.test + async.test jrnlmode2.test quick.test + autovacuum_crash.test jrnlmode3.test shared_err.test + autovacuum_ioerr.test jrnlmode4.test soak.test + btree8.test loadext.test speed1p.test + corrupt.test malloc2.test speed1.test + crash2.test malloc3.test speed2.test + crash3.test malloc4.test speed3.test + crash4.test mallocAll.test speed4p.test + crash6.test malloc.test speed4.test + crash7.test memleak.test sqllimits1.test + crash.test memsubsys1.test thread001.test + exclusive3.test memsubsys2.test thread002.test + fts3.test misc7.test utf16.test + fuzz_malloc.test misuse.test veryquick.test + fuzz.test mutex2.test vtab_err.test + lookaside.test fuzz3.test savepoint4.test + savepoint6.test +} +set ALLTESTS [list] +foreach filename [glob $testdir/*.test] { + set filename [file tail $filename] + if {[lsearch $EXCLUDE $filename] < 0} { lappend ALLTESTS $filename } +} +set ALLTESTS [lsort $ALLTESTS] + +rename finish_test really_finish_test2 +proc finish_test {} {} + +rename do_test really_do_test + +proc do_test {name args} { + eval really_do_test [list "perm-$::permutations_test_prefix.$name"] $args +} + +# Overload the [sqlite3] command +rename sqlite3 really_sqlite3 +proc sqlite3 {args} { + set r [eval really_sqlite3 $args] + if { [llength $args] == 2 && $::permutations_presql ne "" } { + [lindex $args 0] eval $::permutations_presql + } + set r +} + +# run_tests OPTIONS +# +# where available options are: +# +# -initialize SCRIPT (default "") +# -shutdown SCRIPT (default "") +# -include LIST-OF-FILES (default $::ALLTESTS) +# -exclude LIST-OF-FILES (default "") +# -presql SQL (default "") +# -description TITLE (default "") +# +proc run_tests {name args} { + set ::permutations_test_prefix $name + set options(-shutdown) "" + set options(-initialize) "" + set options(-exclude) "" + set options(-include) $::ALLTESTS + set options(-presql) "" + set options(-description) "no description supplied (fixme)" + array set options $args + #puts "PERM-DEBUG: name=$name testfile=$::perm::testfile" + #puts "PERM-DEBUG: [array get options]" + + if {$::perm::testmode eq "targets"} { + puts [format "% -20s %s" $name [string trim $options(-description)]] + return + } + if {$::perm::testmode ne "" && [lsearch $::perm::testmode $name]<0} { + puts "skipping permutation test $name..." + return + } + + uplevel $options(-initialize) + set ::permutations_presql $options(-presql) + + foreach file [lsort $options(-include)] { + if {[lsearch $options(-exclude) $file] < 0 && + ( $::perm::testfile eq "" || + $::perm::testfile eq $file || + "$::perm::testfile.test" eq $file ) + } { + set ::perm::shared_cache_setting [shared_cache_setting] + uplevel source $::testdir/$file + if {$::perm::shared_cache_setting ne [shared_cache_setting]} { + error "File $::testdir/$file changed the shared cache setting from $::perm::shared_cache_setting to [shared_cache_setting]" + } + } else { + # puts "skipping file $file" + } + } + + uplevel $options(-shutdown) + set ::permutations_test_prefix "" +} + +proc shared_cache_setting {} { + set ret 0 + catch { + set ret [sqlite3_enable_shared_cache] + } + return $ret +} + +############################################################################# +# Start of tests + +# Run some tests using pre-allocated page and scratch blocks. +# +run_tests "memsubsys1" -description { + Tests using pre-allocated page and scratch blocks +} -exclude { + ioerr5.test + malloc5.test +} -initialize { + catch {db close} + sqlite3_shutdown + sqlite3_config_pagecache 4096 24 + sqlite3_config_scratch 25000 1 + sqlite3_initialize + autoinstall_test_functions +} -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_pagecache 0 0 + sqlite3_config_scratch 0 0 + sqlite3_initialize + autoinstall_test_functions +} + +# Run some tests using pre-allocated page and scratch blocks. This time +# the allocations are too small to use in most cases. +# +# Both ioerr5.test and malloc5.test are excluded because they test the +# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality. +# This functionality is disabled if a pre-allocated page block is provided. +# +run_tests "memsubsys2" -description { + Tests using small pre-allocated page and scratch blocks +} -exclude { + ioerr5.test + malloc5.test +} -initialize { + catch {db close} + sqlite3_shutdown + sqlite3_config_pagecache 512 5 + sqlite3_config_scratch 1000 1 + sqlite3_initialize + autoinstall_test_functions +} -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_pagecache 0 0 + sqlite3_config_scratch 0 0 + sqlite3_initialize + autoinstall_test_functions +} + +# Run all tests with the lookaside allocator disabled. +# +run_tests "nolookaside" -description { + OOM tests with lookaside disabled +} -initialize { + catch {db close} + sqlite3_shutdown + sqlite3_config_lookaside 0 0 + sqlite3_initialize + autoinstall_test_functions +} -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_lookaside 100 500 + sqlite3_initialize + autoinstall_test_functions +} + +# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode. +# +run_tests "singlethread" -description { + Tests run in SQLITE_CONFIG_SINGLETHREAD mode +} -initialize { + catch {db close} + sqlite3_shutdown + catch {sqlite3_config singlethread} + sqlite3_initialize + autoinstall_test_functions +} -include { + delete.test delete2.test insert.test rollback.test select1.test + select2.test trans.test update.test vacuum.test types.test + types2.test types3.test +} -shutdown { + catch {db close} + sqlite3_shutdown + catch {sqlite3_config serialized} + sqlite3_initialize + autoinstall_test_functions +} + +run_tests "nomutex" -description { + Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open(). +} -initialize { + rename sqlite3 sqlite3_nomutex + proc sqlite3 {args} { + if {[string range [lindex $args 0] 0 0] ne "-"} { + lappend args -fullmutex 0 -nomutex 1 + } + uplevel [concat sqlite3_nomutex $args] + } +} -include { + delete.test delete2.test insert.test rollback.test select1.test + select2.test trans.test update.test vacuum.test types.test + types2.test types3.test +} -shutdown { + rename sqlite3 {} + rename sqlite3_nomutex sqlite3 +} + +# Run some tests in SQLITE_CONFIG_MULTITHREAD mode. +# +run_tests "multithread" -description { + Tests run in SQLITE_CONFIG_MULTITHREAD mode +} -initialize { + catch {db close} + sqlite3_shutdown + catch {sqlite3_config multithread} + sqlite3_initialize + autoinstall_test_functions +} -include { + delete.test delete2.test insert.test rollback.test select1.test + select2.test trans.test update.test vacuum.test types.test + types2.test types3.test +} -shutdown { + catch {db close} + sqlite3_shutdown + catch {sqlite3_config serialized} + sqlite3_initialize + autoinstall_test_functions +} + +# Run some tests in SQLITE_OPEN_FULLMUTEX mode. +# +run_tests "fullmutex" -description { + Tests run in SQLITE_OPEN_FULLMUTEX mode +} -initialize { + rename sqlite3 sqlite3_fullmutex + proc sqlite3 {args} { + if {[string range [lindex $args 0] 0 0] ne "-"} { + lappend args -nomutex 0 -fullmutex 1 + } + uplevel [concat sqlite3_fullmutex $args] + } +} -include { + delete.test delete2.test insert.test rollback.test select1.test + select2.test trans.test update.test vacuum.test types.test + types2.test types3.test +} -shutdown { + rename sqlite3 {} + rename sqlite3_fullmutex sqlite3 +} + +# Run some tests using the "onefile" demo. +# +run_tests "onefile" -description { + Run some tests using the "test_onefile.c" demo +} -initialize { + rename sqlite3 sqlite3_onefile + proc sqlite3 {args} { + if {[string range [lindex $args 0] 0 0] ne "-"} { + lappend args -vfs fs + } + uplevel [concat sqlite3_onefile $args] + } +} -include { + conflict.test insert.test insert2.test insert3.test + rollback.test select1.test select2.test select3.test +} -shutdown { + rename sqlite3 {} + rename sqlite3_onefile sqlite3 +} + +# Run some tests using UTF-16 databases. +# +run_tests "utf16" -description { + Run tests using UTF-16 databases +} -presql { + pragma encoding = 'UTF-16' +} -include { + alter.test alter3.test + auth.test bind.test blob.test capi2.test capi3.test collate1.test + collate2.test collate3.test collate4.test collate5.test collate6.test + conflict.test date.test delete.test expr.test fkey1.test func.test + hook.test index.test insert2.test insert.test interrupt.test in.test + intpkey.test ioerr.test join2.test join.test lastinsert.test + laststmtchanges.test limit.test lock2.test lock.test main.test + memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test + null.test progress.test quote.test rowid.test select1.test select2.test + select3.test select4.test select5.test select6.test sort.test + subselect.test tableapi.test table.test temptable.test + trace.test trigger1.test trigger2.test trigger3.test + trigger4.test types2.test types.test unique.test update.test + vacuum.test view.test where.test +} + +# Run some tests in exclusive locking mode. +# +run_tests "exclusive" -description { + Run tests in exclusive locking mode. +} -presql { + pragma locking_mode = 'exclusive' +} -include { + rollback.test select1.test select2.test + malloc.test ioerr.test +} + +# Run some tests in exclusive locking mode with truncated journals. +# +run_tests "exclusive-truncate" -description { + Run tests in exclusive locking mode and truncate journal mode. +} -presql { + pragma locking_mode = 'exclusive'; + pragma journal_mode = TRUNCATE; +} -include { + delete.test delete2.test insert.test rollback.test select1.test + select2.test update.test malloc.test ioerr.test +} + +# Run some tests in persistent journal mode. +# +run_tests "persistent_journal" -description { + Run tests in persistent-journal mode. +} -presql { + pragma journal_mode = persist +} -include { + delete.test delete2.test insert.test rollback.test select1.test + select2.test trans.test update.test vacuum.test +} + +# Run some tests in truncating journal mode. +# +run_tests "truncate_journal" -description { + Run tests in persistent-journal mode. +} -presql { + pragma journal_mode = truncate +} -include { + delete.test delete2.test insert.test rollback.test select1.test + select2.test trans.test update.test vacuum.test + malloc.test ioerr.test +} + +# Run some error tests in persistent journal mode. +# +run_tests "persistent_journal_error" -description { + Run malloc.test and ioerr.test in persistent-journal mode. +} -presql { + pragma journal_mode = persist +} -include { + malloc.test ioerr.test +} + +# Run some tests in no journal mode. +# +run_tests "no_journal" -description { + Run tests in no-journal mode. +} -presql { + pragma journal_mode = persist +} -include { + delete.test delete2.test insert.test rollback.test select1.test + select2.test trans.test update.test vacuum.test +} + +# Run some error tests in no journal mode. +# +run_tests "no_journal_error" -description { + Run malloc.test and ioerr.test in no-journal mode. +} -presql { + pragma journal_mode = persist +} -include { + malloc.test ioerr.test +} + +# Run some crash-tests in autovacuum mode. +# +run_tests "autovacuum_crash" -description { + Run crash.test in autovacuum mode. +} -presql { + pragma auto_vacuum = 1 +} -include crash.test + +# Run some ioerr-tests in autovacuum mode. +# +run_tests "autovacuum_ioerr" -description { + Run ioerr.test in autovacuum mode. +} -presql { + pragma auto_vacuum = 1 +} -include ioerr.test + +# Run tests with an in-memory journal. +# +run_tests "inmemory_journal" -description { + Run tests with an in-memory journal file. +} -presql { + pragma journal_mode = 'memory' +} -exclude { + # Exclude all tests that simulate IO errors. + autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test + ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test + vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test + + # Exclude test scripts that use tcl IO to access journal files or count + # the number of fsync() calls. + pager.test exclusive.test jrnlmode.test sync.test misc1.test + journal1.test conflict.test crash8.test tkt3457.test io.test +} + +ifcapable mem3 { + run_tests "memsys3" -description { + Run tests using the allocator in mem3.c. + } -exclude { + autovacuum.test delete3.test manydb.test + bigrow.test incrblob2.test memdb.test + bitvec.test index2.test memsubsys1.test + capi3c.test ioerr.test memsubsys2.test + capi3.test join3.test pagesize.test + collate5.test limit.test backup_ioerr.test + backup_malloc.test + } -initialize { + catch {db close} + sqlite3_reset_auto_extension + sqlite3_shutdown + sqlite3_config_heap 25000000 0 + sqlite3_config_lookaside 0 0 + ifcapable mem5 { + # If both memsys3 and memsys5 are enabled in the build, the call to + # [sqlite3_config_heap] will initialize the system to use memsys5. + # The following overrides this preference and installs the memsys3 + # allocator. + sqlite3_install_memsys3 + } + install_malloc_faultsim 1 + sqlite3_initialize + autoinstall_test_functions + } -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_heap 0 0 + sqlite3_config_lookaside 100 500 + install_malloc_faultsim 1 + sqlite3_initialize + autoinstall_test_functions + } +} + +ifcapable mem5 { + run_tests "memsys5" -description { + Run tests using the allocator in mem5.c. + } -exclude { + autovacuum.test delete3.test manydb.test + bigrow.test incrblob2.test memdb.test + bitvec.test index2.test memsubsys1.test + capi3c.test ioerr.test memsubsys2.test + capi3.test join3.test pagesize.test + collate5.test limit.test zeroblob.test + } -initialize { + catch {db close} + sqlite3_shutdown + sqlite3_config_heap 25000000 64 + sqlite3_config_lookaside 0 0 + install_malloc_faultsim 1 + sqlite3_initialize + autoinstall_test_functions + } -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_heap 0 0 + sqlite3_config_lookaside 100 500 + install_malloc_faultsim 1 + sqlite3_initialize + autoinstall_test_functions + } + + run_tests "memsys5-2" -description { + Run tests using the allocator in mem5.c in a different configuration. + } -include { + select1.test + } -initialize { + catch {db close} + sqlite3_shutdown + sqlite3_config_heap 40000000 16 + sqlite3_config_lookaside 0 0 + install_malloc_faultsim 1 + sqlite3_initialize + autoinstall_test_functions + } -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_heap 0 0 + sqlite3_config_lookaside 100 500 + install_malloc_faultsim 1 + sqlite3_initialize + autoinstall_test_functions + } +} + +ifcapable threadsafe { + run_tests "no_mutex_try" -description { + The sqlite3_mutex_try() interface always fails + } -exclude [concat $EXCLUDE mutex1.test mutex2.test] \ + -initialize { + catch {db close} + sqlite3_shutdown + install_mutex_counters 1 + set ::disable_mutex_try 1 + sqlite3_initialize + autoinstall_test_functions + } -shutdown { + catch {db close} + sqlite3_shutdown + install_mutex_counters 0 + sqlite3_initialize + autoinstall_test_functions + } +} + +# run_tests "crash_safe_append" -description { +# Run crash.test with persistent journals on a SAFE_APPEND file-system. +# } -initialize { +# rename crashsql sa_crashsql +# proc crashsql {args} { +# set options [lrange $args 0 [expr {[llength $args]-2}]] +# lappend options -char safe_append +# set sql [lindex $args end] +# lappend options " +# PRAGMA journal_mode=persistent; +# $sql +# " +# set fd [open test.db-journal w] +# puts $fd [string repeat 1234567890 100000] +# close $fd +# eval sa_crashsql $options +# } +# } -shutdown { +# rename crashsql {} +# rename sa_crashsql crashsql +# } -include crash.test + +run_tests "safe_append" -description { + Run some tests on a SAFE_APPEND file-system. +} -initialize { + rename sqlite3 sqlite3_safeappend + proc sqlite3 {args} { + if {[string range [lindex $args 0] 0 0] ne "-"} { + lappend args -vfs devsym + } + uplevel [concat sqlite3_safeappend $args] + } + sqlite3_simulate_device -char safe_append +} -shutdown { + rename sqlite3 {} + rename sqlite3_shutdown sqlite3 +} -include [lsort [concat shared_err.test $ALLTESTS]] \ + -exclude async3.test + +# The set of tests to run on the alternative-pcache +set perm-alt-pcache-testset { + async.test + attach.test + delete.test delete2.test + index.test + insert.test insert2.test + join.test join2.test + rollback.test + select1.test select2.test + trans.test + update.test +} + +run_tests "pcache0" -description { + Alternative pcache implementation without random discard +} -initialize { + catch {db close} + sqlite3_shutdown + sqlite3_config_alt_pcache 1 0 1 + sqlite3_initialize + autoinstall_test_functions +} -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_alt_pcache 0 0 0 + sqlite3_config_lookaside 100 500 + install_malloc_faultsim 1 + sqlite3_initialize + autoinstall_test_functions +} -include ${perm-alt-pcache-testset} + +run_tests "pcache10" -description { + Alternative pcache implementation without 10% random discard +} -initialize { + catch {db close} + sqlite3_shutdown + sqlite3_config_alt_pcache 1 50 1 + sqlite3_initialize + autoinstall_test_functions +} -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_alt_pcache 0 0 0 + sqlite3_initialize + autoinstall_test_functions +} -include ${perm-alt-pcache-testset} + +run_tests "pcache50" -description { + Alternative pcache implementation without 50% random discard +} -initialize { + catch {db close} + sqlite3_shutdown + sqlite3_config_alt_pcache 1 50 1 + sqlite3_initialize + autoinstall_test_functions +} -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_alt_pcache 0 0 0 + sqlite3_initialize + autoinstall_test_functions +} -include ${perm-alt-pcache-testset} + +run_tests "pcache90" -description { + Alternative pcache implementation without 90% random discard +} -initialize { + catch {db close} + sqlite3_shutdown + sqlite3_config_alt_pcache 1 50 1 + sqlite3_initialize + autoinstall_test_functions +} -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_alt_pcache 0 0 0 + sqlite3_initialize + autoinstall_test_functions +} -include ${perm-alt-pcache-testset} + +run_tests "pcache100" -description { + Alternative pcache implementation that always discards when unpinning +} -initialize { + catch {db close} + sqlite3_shutdown + sqlite3_config_alt_pcache 1 100 1 + sqlite3_initialize + autoinstall_test_functions +} -shutdown { + catch {db close} + sqlite3_shutdown + sqlite3_config_alt_pcache 0 0 0 + sqlite3_initialize + autoinstall_test_functions +} -include ${perm-alt-pcache-testset} + +run_tests "journaltest" -description { + Check that pages are synced before being written (test_journal.c). +} -initialize { + set ISQUICK 1 + catch {db close} + register_jt_vfs -default "" + #sqlite3_instvfs binarylog -default binarylog ostrace.bin +} -shutdown { + #sqlite3_instvfs destroy binarylog + unregister_jt_vfs +} -include [concat $::ALLTESTS savepoint6.test +] -exclude { + incrvacuum.test + ioerr.test + corrupt4.test + io.test + crash8.test + async4.test +} + +# End of tests +############################################################################# + +if {$::perm::testmode eq "targets"} { puts "" ; exit } + +# Restore the [sqlite3] command. +# +rename sqlite3 {} +rename really_sqlite3 sqlite3 + +# Restore the [finish_test] command. +# +rename finish_test "" +rename really_finish_test2 finish_test + +# Restore the [do_test] command. +# +rename do_test "" +rename really_do_test do_test + +finish_test |