1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/permutations.test Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,646 @@
1.4 +# 2008 June 21
1.5 +#
1.6 +# The author disclaims copyright to this source code. In place of
1.7 +# a legal notice, here is a blessing:
1.8 +#
1.9 +# May you do good and not evil.
1.10 +# May you find forgiveness for yourself and forgive others.
1.11 +# May you share freely, never taking more than you give.
1.12 +#
1.13 +#***********************************************************************
1.14 +#
1.15 +# $Id: permutations.test,v 1.32 2008/09/29 14:27:41 danielk1977 Exp $
1.16 +
1.17 +set testdir [file dirname $argv0]
1.18 +source $testdir/tester.tcl
1.19 +
1.20 +# Argument processing.
1.21 +#
1.22 +#puts "PERM-DEBUG: argv=$argv"
1.23 +namespace eval ::perm {
1.24 + variable testmode [lindex $::argv 0]
1.25 + variable testfile [lindex $::argv 1]
1.26 +}
1.27 +set argv [lrange $argv 2 end]
1.28 +#puts "PERM-DEBUG: testmode=$::perm::testmode tstfile=$::perm::testfile"
1.29 +
1.30 +set ::permutations_presql ""
1.31 +set ::permutations_test_prefix ""
1.32 +
1.33 +if {$::perm::testmode eq "veryquick"} {
1.34 + set ::perm::testmode [list persistent_journal no_journal]
1.35 + set ISQUICK 1
1.36 +}
1.37 +if {$::perm::testmode eq "quick"} {
1.38 + set ::perm::testmode [list persistent_journal no_journal autovacuum_ioerr]
1.39 + set ISQUICK 1
1.40 +}
1.41 +if {$::perm::testmode eq "all" || $::perm::testmode eq ""} {
1.42 + set ::perm::testmode {
1.43 + memsubsys1 memsubsys2 singlethread multithread onefile utf16 exclusive
1.44 + persistent_journal persistent_journal_error no_journal no_journal_error
1.45 + autovacuum_ioerr no_mutex_try
1.46 + }
1.47 +}
1.48 +if {$::perm::testmode eq "targets"} {
1.49 + puts ""
1.50 + puts -nonewline "veryquick "
1.51 + puts "Same as persistent_journal and no_journal"
1.52 + puts -nonewline "quick "
1.53 + puts "Same as persistent_journal, no_journal and autovacuum_ioerr"
1.54 + puts -nonewline "all "
1.55 + puts "Everything except autovacuum_crash"
1.56 +}
1.57 +#puts "PERM-DEBUG: testmode=$::perm::testmode"
1.58 +
1.59 +set EXCLUDE {
1.60 + all.test in2.test onefile.test
1.61 + async2.test incrvacuum_ioerr.test permutations.test
1.62 + async.test jrnlmode2.test quick.test
1.63 + autovacuum_crash.test jrnlmode3.test shared_err.test
1.64 + autovacuum_ioerr.test jrnlmode4.test soak.test
1.65 + btree8.test loadext.test speed1p.test
1.66 + corrupt.test malloc2.test speed1.test
1.67 + crash2.test malloc3.test speed2.test
1.68 + crash3.test malloc4.test speed3.test
1.69 + crash4.test mallocAll.test speed4p.test
1.70 + crash6.test malloc.test speed4.test
1.71 + crash7.test memleak.test sqllimits1.test
1.72 + crash.test memsubsys1.test thread001.test
1.73 + exclusive3.test memsubsys2.test thread002.test
1.74 + fts3.test misc7.test utf16.test
1.75 + fuzz_malloc.test misuse.test veryquick.test
1.76 + fuzz.test mutex2.test vtab_err.test
1.77 + lookaside.test fuzz3.test
1.78 +}
1.79 +set ALLTESTS [list]
1.80 +foreach filename [glob $testdir/*.test] {
1.81 + set filename [file tail $filename]
1.82 + if {[lsearch $EXCLUDE $filename] < 0} { lappend ALLTESTS $filename }
1.83 +}
1.84 +set ALLTESTS [lsort $ALLTESTS]
1.85 +
1.86 +rename finish_test really_finish_test2
1.87 +proc finish_test {} {}
1.88 +
1.89 +rename do_test really_do_test
1.90 +
1.91 +proc do_test {name args} {
1.92 + eval really_do_test [list "perm-$::permutations_test_prefix.$name"] $args
1.93 +}
1.94 +
1.95 +# Overload the [sqlite3] command
1.96 +rename sqlite3 really_sqlite3
1.97 +proc sqlite3 {args} {
1.98 + set r [eval really_sqlite3 $args]
1.99 + if { [llength $args] == 2 && $::permutations_presql ne "" } {
1.100 + [lindex $args 0] eval $::permutations_presql
1.101 + }
1.102 + set r
1.103 +}
1.104 +
1.105 +# run_tests OPTIONS
1.106 +#
1.107 +# where available options are:
1.108 +#
1.109 +# -initialize SCRIPT (default "")
1.110 +# -shutdown SCRIPT (default "")
1.111 +# -include LIST-OF-FILES (default $::ALLTESTS)
1.112 +# -exclude LIST-OF-FILES (default "")
1.113 +# -presql SQL (default "")
1.114 +# -description TITLE (default "")
1.115 +#
1.116 +proc run_tests {name args} {
1.117 + set ::permutations_test_prefix $name
1.118 + set options(-shutdown) ""
1.119 + set options(-initialize) ""
1.120 + set options(-exclude) ""
1.121 + set options(-include) $::ALLTESTS
1.122 + set options(-presql) ""
1.123 + set options(-description) "no description supplied (fixme)"
1.124 + array set options $args
1.125 + #puts "PERM-DEBUG: name=$name testfile=$::perm::testfile"
1.126 + #puts "PERM-DEBUG: [array get options]"
1.127 +
1.128 + if {$::perm::testmode eq "targets"} {
1.129 + puts [format "% -20s %s" $name [string trim $options(-description)]]
1.130 + return
1.131 + }
1.132 + if {$::perm::testmode ne "" && [lsearch $::perm::testmode $name]<0} {
1.133 + puts "skipping permutation test $name..."
1.134 + return
1.135 + }
1.136 +
1.137 + uplevel $options(-initialize)
1.138 + set ::permutations_presql $options(-presql)
1.139 +
1.140 + foreach file [lsort $options(-include)] {
1.141 + if {[lsearch $options(-exclude) $file] < 0 &&
1.142 + ( $::perm::testfile eq "" ||
1.143 + $::perm::testfile eq $file ||
1.144 + "$::perm::testfile.test" eq $file )
1.145 + } {
1.146 + set ::perm::shared_cache_setting [shared_cache_setting]
1.147 + uplevel source $::testdir/$file
1.148 + if {$::perm::shared_cache_setting ne [shared_cache_setting]} {
1.149 + error "File $::testdir/$file changed the shared cache setting from $::perm::shared_cache_setting to [shared_cache_setting]"
1.150 + }
1.151 + } else {
1.152 + # puts "skipping file $file"
1.153 + }
1.154 + }
1.155 +
1.156 + uplevel $options(-shutdown)
1.157 +}
1.158 +
1.159 +proc shared_cache_setting {} {
1.160 + set ret 0
1.161 + catch {
1.162 + set ret [sqlite3_enable_shared_cache]
1.163 + }
1.164 + return $ret
1.165 +}
1.166 +
1.167 +#############################################################################
1.168 +# Start of tests
1.169 +
1.170 +# Run some tests using pre-allocated page and scratch blocks.
1.171 +#
1.172 +run_tests "memsubsys1" -description {
1.173 + Tests using pre-allocated page and scratch blocks
1.174 +} -exclude {
1.175 + ioerr5.test
1.176 + malloc5.test
1.177 +} -initialize {
1.178 + catch {db close}
1.179 + sqlite3_shutdown
1.180 + sqlite3_config_pagecache 4096 24
1.181 + sqlite3_config_scratch 25000 1
1.182 + sqlite3_initialize
1.183 +} -shutdown {
1.184 + catch {db close}
1.185 + sqlite3_shutdown
1.186 + sqlite3_config_pagecache 0 0
1.187 + sqlite3_config_scratch 0 0
1.188 + sqlite3_initialize
1.189 +}
1.190 +
1.191 +# Run some tests using pre-allocated page and scratch blocks. This time
1.192 +# the allocations are too small to use in most cases.
1.193 +#
1.194 +# Both ioerr5.test and malloc5.test are excluded because they test the
1.195 +# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
1.196 +# This functionality is disabled if a pre-allocated page block is provided.
1.197 +#
1.198 +run_tests "memsubsys2" -description {
1.199 + Tests using small pre-allocated page and scratch blocks
1.200 +} -exclude {
1.201 + ioerr5.test
1.202 + malloc5.test
1.203 +} -initialize {
1.204 + catch {db close}
1.205 + sqlite3_shutdown
1.206 + sqlite3_config_pagecache 512 5
1.207 + sqlite3_config_scratch 1000 1
1.208 + sqlite3_initialize
1.209 +} -shutdown {
1.210 + catch {db close}
1.211 + sqlite3_shutdown
1.212 + sqlite3_config_pagecache 0 0
1.213 + sqlite3_config_scratch 0 0
1.214 + sqlite3_initialize
1.215 +}
1.216 +
1.217 +# Run all tests with the lookaside allocator disabled.
1.218 +#
1.219 +run_tests "memsubsys3" -description {
1.220 + OOM tests with lookaside disabled
1.221 +} -include {
1.222 + malloc.test
1.223 + malloc3.test
1.224 + malloc4.test
1.225 + malloc5.test
1.226 + malloc6.test
1.227 + malloc7.test
1.228 + malloc8.test
1.229 + malloc9.test
1.230 + mallocA.test
1.231 + mallocB.test
1.232 + mallocC.test
1.233 + mallocD.test
1.234 + mallocE.test
1.235 + mallocF.test
1.236 + mallocG.test
1.237 +} -initialize {
1.238 + catch {db close}
1.239 + sqlite3_shutdown
1.240 + sqlite3_config_lookaside 0 0
1.241 + sqlite3_initialize
1.242 +} -shutdown {
1.243 + catch {db close}
1.244 + sqlite3_shutdown
1.245 + sqlite3_config_lookaside 100 500
1.246 + sqlite3_initialize
1.247 +}
1.248 +
1.249 +# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
1.250 +#
1.251 +run_tests "singlethread" -description {
1.252 + Tests run in SQLITE_CONFIG_SINGLETHREAD mode
1.253 +} -initialize {
1.254 + do_test mutex2-singlethread.0 {
1.255 + catch {db close}
1.256 + sqlite3_shutdown
1.257 + sqlite3_config singlethread
1.258 + } SQLITE_OK
1.259 +} -include {
1.260 + delete.test delete2.test insert.test rollback.test select1.test
1.261 + select2.test trans.test update.test vacuum.test types.test
1.262 + types2.test types3.test
1.263 +} -shutdown {
1.264 + do_test mutex2-X {
1.265 + catch {db close}
1.266 + sqlite3_shutdown
1.267 + sqlite3_config serialized
1.268 + } SQLITE_OK
1.269 +}
1.270 +
1.271 +run_tests "nomutex" -description {
1.272 + Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
1.273 +} -initialize {
1.274 + rename sqlite3 sqlite3_nomutex
1.275 + proc sqlite3 {args} {
1.276 + if {[string range [lindex $args 0] 0 0] ne "-"} {
1.277 + lappend args -fullmutex 0 -nomutex 1
1.278 + }
1.279 + uplevel [concat sqlite3_nomutex $args]
1.280 + }
1.281 +} -include {
1.282 + delete.test delete2.test insert.test rollback.test select1.test
1.283 + select2.test trans.test update.test vacuum.test types.test
1.284 + types2.test types3.test
1.285 +} -shutdown {
1.286 + rename sqlite3 {}
1.287 + rename sqlite3_nomutex sqlite3
1.288 +}
1.289 +
1.290 +# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
1.291 +#
1.292 +run_tests "multithread" -description {
1.293 + Tests run in SQLITE_CONFIG_MULTITHREAD mode
1.294 +} -initialize {
1.295 + do_test mutex2-multithread.0 {
1.296 + catch {db close}
1.297 + sqlite3_shutdown
1.298 + sqlite3_config multithread
1.299 + } SQLITE_OK
1.300 +} -include {
1.301 + delete.test delete2.test insert.test rollback.test select1.test
1.302 + select2.test trans.test update.test vacuum.test types.test
1.303 + types2.test types3.test
1.304 +} -shutdown {
1.305 + do_test mutex2-X {
1.306 + catch {db close}
1.307 + sqlite3_shutdown
1.308 + sqlite3_config serialized
1.309 + } SQLITE_OK
1.310 +}
1.311 +
1.312 +# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
1.313 +#
1.314 +run_tests "fullmutex" -description {
1.315 + Tests run in SQLITE_OPEN_FULLMUTEX mode
1.316 +} -initialize {
1.317 + rename sqlite3 sqlite3_fullmutex
1.318 + proc sqlite3 {args} {
1.319 + if {[string range [lindex $args 0] 0 0] ne "-"} {
1.320 + lappend args -nomutex 0 -fullmutex 1
1.321 + }
1.322 + uplevel [concat sqlite3_fullmutex $args]
1.323 + }
1.324 +} -include {
1.325 + delete.test delete2.test insert.test rollback.test select1.test
1.326 + select2.test trans.test update.test vacuum.test types.test
1.327 + types2.test types3.test
1.328 +} -shutdown {
1.329 + rename sqlite3 {}
1.330 + rename sqlite3_fullmutex sqlite3
1.331 +}
1.332 +
1.333 +# Run some tests using the "onefile" demo.
1.334 +#
1.335 +run_tests "onefile" -description {
1.336 + Run some tests using the "test_onefile.c" demo
1.337 +} -initialize {
1.338 + rename sqlite3 sqlite3_onefile
1.339 + proc sqlite3 {args} {
1.340 + if {[string range [lindex $args 0] 0 0] ne "-"} {
1.341 + lappend args -vfs fs
1.342 + }
1.343 + uplevel [concat sqlite3_onefile $args]
1.344 + }
1.345 +} -include {
1.346 + conflict.test insert.test insert2.test insert3.test
1.347 + rollback.test select1.test select2.test select3.test
1.348 +} -shutdown {
1.349 + rename sqlite3 {}
1.350 + rename sqlite3_onefile sqlite3
1.351 +}
1.352 +
1.353 +# Run some tests using UTF-16 databases.
1.354 +#
1.355 +run_tests "utf16" -description {
1.356 + Run tests using UTF-16 databases
1.357 +} -presql {
1.358 + pragma encoding = 'UTF-16'
1.359 +} -include {
1.360 + alter.test alter3.test
1.361 + auth.test bind.test blob.test capi2.test capi3.test collate1.test
1.362 + collate2.test collate3.test collate4.test collate5.test collate6.test
1.363 + conflict.test date.test delete.test expr.test fkey1.test func.test
1.364 + hook.test index.test insert2.test insert.test interrupt.test in.test
1.365 + intpkey.test ioerr.test join2.test join.test lastinsert.test
1.366 + laststmtchanges.test limit.test lock2.test lock.test main.test
1.367 + memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
1.368 + null.test progress.test quote.test rowid.test select1.test select2.test
1.369 + select3.test select4.test select5.test select6.test sort.test
1.370 + subselect.test tableapi.test table.test temptable.test
1.371 + trace.test trigger1.test trigger2.test trigger3.test
1.372 + trigger4.test types2.test types.test unique.test update.test
1.373 + vacuum.test view.test where.test
1.374 +}
1.375 +
1.376 +# Run some tests in exclusive locking mode.
1.377 +#
1.378 +run_tests "exclusive" -description {
1.379 + Run tests in exclusive locking mode.
1.380 +} -presql {
1.381 + pragma locking_mode = 'exclusive'
1.382 +} -include {
1.383 + rollback.test select1.test select2.test
1.384 + malloc.test ioerr.test
1.385 +}
1.386 +
1.387 +# Run some tests in exclusive locking mode with truncated journals.
1.388 +#
1.389 +run_tests "exclusive-truncate" -description {
1.390 + Run tests in exclusive locking mode and truncate journal mode.
1.391 +} -presql {
1.392 + pragma locking_mode = 'exclusive';
1.393 + pragma journal_mode = TRUNCATE;
1.394 +} -include {
1.395 + delete.test delete2.test insert.test rollback.test select1.test
1.396 + select2.test update.test malloc.test ioerr.test
1.397 +}
1.398 +
1.399 +# Run some tests in persistent journal mode.
1.400 +#
1.401 +run_tests "persistent_journal" -description {
1.402 + Run tests in persistent-journal mode.
1.403 +} -presql {
1.404 + pragma journal_mode = persist
1.405 +} -include {
1.406 + delete.test delete2.test insert.test rollback.test select1.test
1.407 + select2.test trans.test update.test vacuum.test
1.408 +}
1.409 +
1.410 +# Run some tests in truncating journal mode.
1.411 +#
1.412 +run_tests "truncate_journal" -description {
1.413 + Run tests in persistent-journal mode.
1.414 +} -presql {
1.415 + pragma journal_mode = truncate
1.416 +} -include {
1.417 + delete.test delete2.test insert.test rollback.test select1.test
1.418 + select2.test trans.test update.test vacuum.test
1.419 + malloc.test ioerr.test
1.420 +}
1.421 +
1.422 +# Run some error tests in persistent journal mode.
1.423 +#
1.424 +run_tests "persistent_journal_error" -description {
1.425 + Run malloc.test and ioerr.test in persistent-journal mode.
1.426 +} -presql {
1.427 + pragma journal_mode = persist
1.428 +} -include {
1.429 + malloc.test ioerr.test
1.430 +}
1.431 +
1.432 +# Run some tests in no journal mode.
1.433 +#
1.434 +run_tests "no_journal" -description {
1.435 + Run tests in no-journal mode.
1.436 +} -presql {
1.437 + pragma journal_mode = persist
1.438 +} -include {
1.439 + delete.test delete2.test insert.test rollback.test select1.test
1.440 + select2.test trans.test update.test vacuum.test
1.441 +}
1.442 +
1.443 +# Run some error tests in no journal mode.
1.444 +#
1.445 +run_tests "no_journal_error" -description {
1.446 + Run malloc.test and ioerr.test in no-journal mode.
1.447 +} -presql {
1.448 + pragma journal_mode = persist
1.449 +} -include {
1.450 + malloc.test ioerr.test
1.451 +}
1.452 +
1.453 +# Run some crash-tests in autovacuum mode.
1.454 +#
1.455 +run_tests "autovacuum_crash" -description {
1.456 + Run crash.test in autovacuum mode.
1.457 +} -presql {
1.458 + pragma auto_vacuum = 1
1.459 +} -include crash.test
1.460 +
1.461 +# Run some ioerr-tests in autovacuum mode.
1.462 +#
1.463 +run_tests "autovacuum_ioerr" -description {
1.464 + Run ioerr.test in autovacuum mode.
1.465 +} -presql {
1.466 + pragma auto_vacuum = 1
1.467 +} -include ioerr.test
1.468 +
1.469 +ifcapable mem3 {
1.470 + run_tests "memsys3" -description {
1.471 + Run tests using the allocator in mem3.c.
1.472 + } -exclude {
1.473 + autovacuum.test delete3.test manydb.test
1.474 + bigrow.test incrblob2.test memdb.test
1.475 + bitvec.test index2.test memsubsys1.test
1.476 + capi3c.test ioerr.test memsubsys2.test
1.477 + capi3.test join3.test pagesize.test
1.478 + collate5.test limit.test
1.479 + } -initialize {
1.480 + catch {db close}
1.481 + sqlite3_reset_auto_extension
1.482 + sqlite3_shutdown
1.483 + sqlite3_config_heap 25000000 0
1.484 + sqlite3_config_lookaside 0 0
1.485 + install_malloc_faultsim 1
1.486 + sqlite3_initialize
1.487 + autoinstall_test_functions
1.488 + } -shutdown {
1.489 + catch {db close}
1.490 + sqlite3_reset_auto_extension
1.491 + sqlite3_shutdown
1.492 + sqlite3_config_heap 0 0
1.493 + sqlite3_config_lookaside 100 500
1.494 + install_malloc_faultsim 1
1.495 + sqlite3_initialize
1.496 + }
1.497 +}
1.498 +
1.499 +ifcapable mem5 {
1.500 + run_tests "memsys5" -description {
1.501 + Run tests using the allocator in mem5.c.
1.502 + } -exclude {
1.503 + autovacuum.test delete3.test manydb.test
1.504 + bigrow.test incrblob2.test memdb.test
1.505 + bitvec.test index2.test memsubsys1.test
1.506 + capi3c.test ioerr.test memsubsys2.test
1.507 + capi3.test join3.test pagesize.test
1.508 + collate5.test limit.test
1.509 + } -initialize {
1.510 + catch {db close}
1.511 + sqlite3_reset_auto_extension
1.512 + sqlite3_shutdown
1.513 + sqlite3_config_heap 25000000 64
1.514 + sqlite3_config_lookaside 0 0
1.515 + install_malloc_faultsim 1
1.516 + sqlite3_initialize
1.517 + autoinstall_test_functions
1.518 + } -shutdown {
1.519 + catch {db close}
1.520 + sqlite3_reset_auto_extension
1.521 + sqlite3_shutdown
1.522 + sqlite3_config_heap 0 0
1.523 + sqlite3_config_lookaside 100 500
1.524 + install_malloc_faultsim 1
1.525 + sqlite3_initialize
1.526 + }
1.527 +
1.528 + run_tests "memsys5-2" -description {
1.529 + Run tests using the allocator in mem5.c in a different configuration.
1.530 + } -include {
1.531 + select1.test
1.532 + } -initialize {
1.533 + catch {db close}
1.534 + sqlite3_reset_auto_extension
1.535 + sqlite3_shutdown
1.536 + sqlite3_config_heap 40000000 16
1.537 + sqlite3_config_lookaside 0 0
1.538 + install_malloc_faultsim 1
1.539 + sqlite3_initialize
1.540 + autoinstall_test_functions
1.541 + } -shutdown {
1.542 + catch {db close}
1.543 + sqlite3_reset_auto_extension
1.544 + sqlite3_shutdown
1.545 + sqlite3_config_heap 0 0
1.546 + sqlite3_config_lookaside 100 500
1.547 + install_malloc_faultsim 1
1.548 + sqlite3_initialize
1.549 + }
1.550 +}
1.551 +
1.552 +ifcapable threadsafe {
1.553 + run_tests "no_mutex_try" -description {
1.554 + The sqlite3_mutex_try() interface always fails
1.555 + } -exclude [concat $EXCLUDE mutex1.test mutex2.test] \
1.556 + -initialize {
1.557 + catch {db close}
1.558 + sqlite3_shutdown
1.559 + install_mutex_counters 1
1.560 + set ::disable_mutex_try 1
1.561 + } -shutdown {
1.562 + catch {db close}
1.563 + sqlite3_shutdown
1.564 + install_mutex_counters 0
1.565 + }
1.566 +}
1.567 +
1.568 +run_tests "memsys6" -description {
1.569 + Run tests using the allocator in mem6.c.
1.570 +} -exclude {
1.571 + capi3.test capi3c.test
1.572 +} -initialize {
1.573 + catch {db close}
1.574 + sqlite3_reset_auto_extension
1.575 + sqlite3_shutdown
1.576 + sqlite3_config_chunkalloc 0
1.577 + install_malloc_faultsim 1
1.578 + sqlite3_initialize
1.579 + autoinstall_test_functions
1.580 +} -shutdown {
1.581 + catch {db close}
1.582 + sqlite3_reset_auto_extension
1.583 + sqlite3_shutdown
1.584 + sqlite3_config_heap 0 0
1.585 + install_malloc_faultsim 1
1.586 + sqlite3_initialize
1.587 +}
1.588 +
1.589 +# run_tests "crash_safe_append" -description {
1.590 +# Run crash.test with persistent journals on a SAFE_APPEND file-system.
1.591 +# } -initialize {
1.592 +# rename crashsql sa_crashsql
1.593 +# proc crashsql {args} {
1.594 +# set options [lrange $args 0 [expr {[llength $args]-2}]]
1.595 +# lappend options -char safe_append
1.596 +# set sql [lindex $args end]
1.597 +# lappend options "
1.598 +# PRAGMA journal_mode=persistent;
1.599 +# $sql
1.600 +# "
1.601 +# set fd [open test.db-journal w]
1.602 +# puts $fd [string repeat 1234567890 100000]
1.603 +# close $fd
1.604 +# eval sa_crashsql $options
1.605 +# }
1.606 +# } -shutdown {
1.607 +# rename crashsql {}
1.608 +# rename sa_crashsql crashsql
1.609 +# } -include crash.test
1.610 +
1.611 +run_tests "safe_append" -description {
1.612 + Run some tests on a SAFE_APPEND file-system.
1.613 +} -initialize {
1.614 + rename sqlite3 sqlite3_safeappend
1.615 + proc sqlite3 {args} {
1.616 + if {[string range [lindex $args 0] 0 0] ne "-"} {
1.617 + lappend args -vfs devsym
1.618 + }
1.619 + uplevel [concat sqlite3_safeappend $args]
1.620 + }
1.621 + sqlite3_simulate_device -char safe_append
1.622 +} -shutdown {
1.623 + rename sqlite3 {}
1.624 + rename sqlite3_shutdown sqlite3
1.625 +} -include [lsort [concat shared_err.test $ALLTESTS]] \
1.626 + -exclude async3.test
1.627 +
1.628 +
1.629 +# End of tests
1.630 +#############################################################################
1.631 +
1.632 +if {$::perm::testmode eq "targets"} { puts "" ; exit }
1.633 +
1.634 +# Restore the [sqlite3] command.
1.635 +#
1.636 +rename sqlite3 {}
1.637 +rename really_sqlite3 sqlite3
1.638 +
1.639 +# Restore the [finish_test] command.
1.640 +#
1.641 +rename finish_test ""
1.642 +rename really_finish_test2 finish_test
1.643 +
1.644 +# Restore the [do_test] command.
1.645 +#
1.646 +rename do_test ""
1.647 +rename really_do_test do_test
1.648 +
1.649 +finish_test