blob: 178ca01cd0ebf3da0b5afe2f46740345edb0508d [file] [log] [blame]
danielk19771077e3f2008-06-21 18:07:37 +00001# 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#
danielk19776e10b392008-12-30 13:21:50 +000012# $Id: permutations.test,v 1.41 2008/12/30 13:21:51 danielk1977 Exp $
danielk19771077e3f2008-06-21 18:07:37 +000013
14set testdir [file dirname $argv0]
15source $testdir/tester.tcl
16
17# Argument processing.
18#
drh0a846f92008-08-25 17:23:29 +000019#puts "PERM-DEBUG: argv=$argv"
20namespace eval ::perm {
drh426c8542008-08-26 23:08:04 +000021 variable testmode [lindex $::argv 0]
22 variable testfile [lindex $::argv 1]
drh0a846f92008-08-25 17:23:29 +000023}
danielk19771077e3f2008-06-21 18:07:37 +000024set argv [lrange $argv 2 end]
drh426c8542008-08-26 23:08:04 +000025#puts "PERM-DEBUG: testmode=$::perm::testmode tstfile=$::perm::testfile"
danielk19771077e3f2008-06-21 18:07:37 +000026
27set ::permutations_presql ""
28set ::permutations_test_prefix ""
29
drh0a846f92008-08-25 17:23:29 +000030if {$::perm::testmode eq "veryquick"} {
31 set ::perm::testmode [list persistent_journal no_journal]
danielk19771077e3f2008-06-21 18:07:37 +000032 set ISQUICK 1
33}
drh0a846f92008-08-25 17:23:29 +000034if {$::perm::testmode eq "quick"} {
35 set ::perm::testmode [list persistent_journal no_journal autovacuum_ioerr]
danielk19771077e3f2008-06-21 18:07:37 +000036 set ISQUICK 1
37}
drhdf81a252008-08-25 19:09:01 +000038if {$::perm::testmode eq "all" || $::perm::testmode eq ""} {
drh0a846f92008-08-25 17:23:29 +000039 set ::perm::testmode {
danielk19771077e3f2008-06-21 18:07:37 +000040 memsubsys1 memsubsys2 singlethread multithread onefile utf16 exclusive
41 persistent_journal persistent_journal_error no_journal no_journal_error
danielk1977f3107512008-12-22 10:58:46 +000042 autovacuum_ioerr no_mutex_try fullmutex journaltest
danielk19771077e3f2008-06-21 18:07:37 +000043 }
44}
drh0a846f92008-08-25 17:23:29 +000045if {$::perm::testmode eq "targets"} {
danielk19771077e3f2008-06-21 18:07:37 +000046 puts ""
47 puts -nonewline "veryquick "
48 puts "Same as persistent_journal and no_journal"
49 puts -nonewline "quick "
50 puts "Same as persistent_journal, no_journal and autovacuum_ioerr"
51 puts -nonewline "all "
52 puts "Everything except autovacuum_crash"
53}
drhdf81a252008-08-25 19:09:01 +000054#puts "PERM-DEBUG: testmode=$::perm::testmode"
danielk19771077e3f2008-06-21 18:07:37 +000055
56set EXCLUDE {
drh8a42cbd2008-07-10 18:13:42 +000057 all.test in2.test onefile.test
58 async2.test incrvacuum_ioerr.test permutations.test
59 async.test jrnlmode2.test quick.test
60 autovacuum_crash.test jrnlmode3.test shared_err.test
61 autovacuum_ioerr.test jrnlmode4.test soak.test
62 btree8.test loadext.test speed1p.test
63 corrupt.test malloc2.test speed1.test
64 crash2.test malloc3.test speed2.test
65 crash3.test malloc4.test speed3.test
66 crash4.test mallocAll.test speed4p.test
67 crash6.test malloc.test speed4.test
68 crash7.test memleak.test sqllimits1.test
69 crash.test memsubsys1.test thread001.test
70 exclusive3.test memsubsys2.test thread002.test
71 fts3.test misc7.test utf16.test
72 fuzz_malloc.test misuse.test veryquick.test
73 fuzz.test mutex2.test vtab_err.test
danielk19776e10b392008-12-30 13:21:50 +000074 lookaside.test fuzz3.test savepoint4.test
danielk19771077e3f2008-06-21 18:07:37 +000075}
76set ALLTESTS [list]
77foreach filename [glob $testdir/*.test] {
78 set filename [file tail $filename]
79 if {[lsearch $EXCLUDE $filename] < 0} { lappend ALLTESTS $filename }
80}
drh5393b652008-08-30 16:07:03 +000081set ALLTESTS [lsort $ALLTESTS]
danielk19771077e3f2008-06-21 18:07:37 +000082
83rename finish_test really_finish_test2
84proc finish_test {} {}
85
86rename do_test really_do_test
87
88proc do_test {name args} {
89 eval really_do_test [list "perm-$::permutations_test_prefix.$name"] $args
90}
91
92# Overload the [sqlite3] command
93rename sqlite3 really_sqlite3
94proc sqlite3 {args} {
95 set r [eval really_sqlite3 $args]
96 if { [llength $args] == 2 && $::permutations_presql ne "" } {
97 [lindex $args 0] eval $::permutations_presql
98 }
99 set r
100}
101
102# run_tests OPTIONS
103#
104# where available options are:
105#
106# -initialize SCRIPT (default "")
107# -shutdown SCRIPT (default "")
108# -include LIST-OF-FILES (default $::ALLTESTS)
109# -exclude LIST-OF-FILES (default "")
110# -presql SQL (default "")
111# -description TITLE (default "")
112#
113proc run_tests {name args} {
114 set ::permutations_test_prefix $name
115 set options(-shutdown) ""
116 set options(-initialize) ""
117 set options(-exclude) ""
118 set options(-include) $::ALLTESTS
119 set options(-presql) ""
120 set options(-description) "no description supplied (fixme)"
121 array set options $args
drh0a846f92008-08-25 17:23:29 +0000122 #puts "PERM-DEBUG: name=$name testfile=$::perm::testfile"
123 #puts "PERM-DEBUG: [array get options]"
danielk19771077e3f2008-06-21 18:07:37 +0000124
drh0a846f92008-08-25 17:23:29 +0000125 if {$::perm::testmode eq "targets"} {
danielk19771077e3f2008-06-21 18:07:37 +0000126 puts [format "% -20s %s" $name [string trim $options(-description)]]
127 return
128 }
drh0a846f92008-08-25 17:23:29 +0000129 if {$::perm::testmode ne "" && [lsearch $::perm::testmode $name]<0} {
130 puts "skipping permutation test $name..."
131 return
132 }
danielk19771077e3f2008-06-21 18:07:37 +0000133
danielk19771077e3f2008-06-21 18:07:37 +0000134 uplevel $options(-initialize)
135 set ::permutations_presql $options(-presql)
136
danielk1977c1def3e2008-08-30 13:25:10 +0000137 foreach file [lsort $options(-include)] {
drh0a846f92008-08-25 17:23:29 +0000138 if {[lsearch $options(-exclude) $file] < 0 &&
139 ( $::perm::testfile eq "" ||
140 $::perm::testfile eq $file ||
141 "$::perm::testfile.test" eq $file )
142 } {
danielk1977c1def3e2008-08-30 13:25:10 +0000143 set ::perm::shared_cache_setting [shared_cache_setting]
danielk19771077e3f2008-06-21 18:07:37 +0000144 uplevel source $::testdir/$file
danielk1977c1def3e2008-08-30 13:25:10 +0000145 if {$::perm::shared_cache_setting ne [shared_cache_setting]} {
146 error "File $::testdir/$file changed the shared cache setting from $::perm::shared_cache_setting to [shared_cache_setting]"
147 }
drh0a846f92008-08-25 17:23:29 +0000148 } else {
149 # puts "skipping file $file"
danielk19771077e3f2008-06-21 18:07:37 +0000150 }
151 }
152
153 uplevel $options(-shutdown)
danielk19773d9cf512008-10-07 15:00:08 +0000154 set ::permutations_test_prefix ""
danielk19771077e3f2008-06-21 18:07:37 +0000155}
156
danielk1977c1def3e2008-08-30 13:25:10 +0000157proc shared_cache_setting {} {
158 set ret 0
159 catch {
160 set ret [sqlite3_enable_shared_cache]
161 }
162 return $ret
163}
164
danielk19771077e3f2008-06-21 18:07:37 +0000165#############################################################################
166# Start of tests
167
168# Run some tests using pre-allocated page and scratch blocks.
169#
170run_tests "memsubsys1" -description {
171 Tests using pre-allocated page and scratch blocks
danielk1977801880f2008-08-21 15:54:01 +0000172} -exclude {
173 ioerr5.test
174 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000175} -initialize {
drhd63bd752008-07-30 13:15:46 +0000176 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000177 sqlite3_shutdown
178 sqlite3_config_pagecache 4096 24
179 sqlite3_config_scratch 25000 1
180 sqlite3_initialize
danielk19771077e3f2008-06-21 18:07:37 +0000181} -shutdown {
182 catch {db close}
183 sqlite3_shutdown
184 sqlite3_config_pagecache 0 0
185 sqlite3_config_scratch 0 0
186 sqlite3_initialize
187}
188
189# Run some tests using pre-allocated page and scratch blocks. This time
190# the allocations are too small to use in most cases.
191#
danielk197734c61e62008-08-29 12:00:20 +0000192# Both ioerr5.test and malloc5.test are excluded because they test the
193# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
194# This functionality is disabled if a pre-allocated page block is provided.
195#
danielk19771077e3f2008-06-21 18:07:37 +0000196run_tests "memsubsys2" -description {
197 Tests using small pre-allocated page and scratch blocks
danielk197734c61e62008-08-29 12:00:20 +0000198} -exclude {
199 ioerr5.test
200 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000201} -initialize {
drhd63bd752008-07-30 13:15:46 +0000202 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000203 sqlite3_shutdown
204 sqlite3_config_pagecache 512 5
205 sqlite3_config_scratch 1000 1
206 sqlite3_initialize
danielk19771077e3f2008-06-21 18:07:37 +0000207} -shutdown {
208 catch {db close}
209 sqlite3_shutdown
210 sqlite3_config_pagecache 0 0
211 sqlite3_config_scratch 0 0
212 sqlite3_initialize
213}
214
drhe2a7c6e2008-08-01 15:06:30 +0000215# Run all tests with the lookaside allocator disabled.
216#
danielk1977435f29d2008-10-11 17:04:04 +0000217run_tests "nolookaside" -description {
drhe2a7c6e2008-08-01 15:06:30 +0000218 OOM tests with lookaside disabled
drhe2a7c6e2008-08-01 15:06:30 +0000219} -initialize {
220 catch {db close}
221 sqlite3_shutdown
222 sqlite3_config_lookaside 0 0
223 sqlite3_initialize
224} -shutdown {
225 catch {db close}
226 sqlite3_shutdown
227 sqlite3_config_lookaside 100 500
228 sqlite3_initialize
229}
230
danielk19771077e3f2008-06-21 18:07:37 +0000231# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
232#
233run_tests "singlethread" -description {
234 Tests run in SQLITE_CONFIG_SINGLETHREAD mode
235} -initialize {
236 do_test mutex2-singlethread.0 {
237 catch {db close}
238 sqlite3_shutdown
239 sqlite3_config singlethread
240 } SQLITE_OK
241} -include {
242 delete.test delete2.test insert.test rollback.test select1.test
243 select2.test trans.test update.test vacuum.test types.test
244 types2.test types3.test
245} -shutdown {
246 do_test mutex2-X {
247 catch {db close}
248 sqlite3_shutdown
249 sqlite3_config serialized
250 } SQLITE_OK
251}
252
danielk19779a6284c2008-07-10 17:52:49 +0000253run_tests "nomutex" -description {
drh039963a2008-09-03 00:43:15 +0000254 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
danielk19779a6284c2008-07-10 17:52:49 +0000255} -initialize {
256 rename sqlite3 sqlite3_nomutex
257 proc sqlite3 {args} {
258 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000259 lappend args -fullmutex 0 -nomutex 1
danielk19779a6284c2008-07-10 17:52:49 +0000260 }
261 uplevel [concat sqlite3_nomutex $args]
262 }
263} -include {
264 delete.test delete2.test insert.test rollback.test select1.test
265 select2.test trans.test update.test vacuum.test types.test
266 types2.test types3.test
267} -shutdown {
268 rename sqlite3 {}
269 rename sqlite3_nomutex sqlite3
270}
271
danielk19771077e3f2008-06-21 18:07:37 +0000272# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
273#
274run_tests "multithread" -description {
275 Tests run in SQLITE_CONFIG_MULTITHREAD mode
276} -initialize {
277 do_test mutex2-multithread.0 {
278 catch {db close}
279 sqlite3_shutdown
280 sqlite3_config multithread
281 } SQLITE_OK
282} -include {
283 delete.test delete2.test insert.test rollback.test select1.test
284 select2.test trans.test update.test vacuum.test types.test
285 types2.test types3.test
286} -shutdown {
287 do_test mutex2-X {
288 catch {db close}
289 sqlite3_shutdown
290 sqlite3_config serialized
291 } SQLITE_OK
292}
293
drh039963a2008-09-03 00:43:15 +0000294# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
295#
296run_tests "fullmutex" -description {
297 Tests run in SQLITE_OPEN_FULLMUTEX mode
298} -initialize {
299 rename sqlite3 sqlite3_fullmutex
300 proc sqlite3 {args} {
301 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000302 lappend args -nomutex 0 -fullmutex 1
drh039963a2008-09-03 00:43:15 +0000303 }
304 uplevel [concat sqlite3_fullmutex $args]
305 }
306} -include {
307 delete.test delete2.test insert.test rollback.test select1.test
308 select2.test trans.test update.test vacuum.test types.test
309 types2.test types3.test
310} -shutdown {
311 rename sqlite3 {}
312 rename sqlite3_fullmutex sqlite3
313}
314
danielk19771077e3f2008-06-21 18:07:37 +0000315# Run some tests using the "onefile" demo.
316#
317run_tests "onefile" -description {
318 Run some tests using the "test_onefile.c" demo
319} -initialize {
320 rename sqlite3 sqlite3_onefile
321 proc sqlite3 {args} {
322 if {[string range [lindex $args 0] 0 0] ne "-"} {
323 lappend args -vfs fs
324 }
325 uplevel [concat sqlite3_onefile $args]
326 }
327} -include {
328 conflict.test insert.test insert2.test insert3.test
329 rollback.test select1.test select2.test select3.test
danielk19771077e3f2008-06-21 18:07:37 +0000330} -shutdown {
331 rename sqlite3 {}
332 rename sqlite3_onefile sqlite3
333}
334
335# Run some tests using UTF-16 databases.
336#
337run_tests "utf16" -description {
338 Run tests using UTF-16 databases
danielk19772dd6d802008-06-21 19:10:27 +0000339} -presql {
danielk19771077e3f2008-06-21 18:07:37 +0000340 pragma encoding = 'UTF-16'
341} -include {
342 alter.test alter3.test
343 auth.test bind.test blob.test capi2.test capi3.test collate1.test
344 collate2.test collate3.test collate4.test collate5.test collate6.test
345 conflict.test date.test delete.test expr.test fkey1.test func.test
346 hook.test index.test insert2.test insert.test interrupt.test in.test
347 intpkey.test ioerr.test join2.test join.test lastinsert.test
348 laststmtchanges.test limit.test lock2.test lock.test main.test
349 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
350 null.test progress.test quote.test rowid.test select1.test select2.test
351 select3.test select4.test select5.test select6.test sort.test
352 subselect.test tableapi.test table.test temptable.test
353 trace.test trigger1.test trigger2.test trigger3.test
354 trigger4.test types2.test types.test unique.test update.test
355 vacuum.test view.test where.test
356}
357
358# Run some tests in exclusive locking mode.
359#
360run_tests "exclusive" -description {
361 Run tests in exclusive locking mode.
362} -presql {
363 pragma locking_mode = 'exclusive'
364} -include {
365 rollback.test select1.test select2.test
366 malloc.test ioerr.test
367}
368
drh04335882008-09-26 21:08:08 +0000369# Run some tests in exclusive locking mode with truncated journals.
370#
371run_tests "exclusive-truncate" -description {
372 Run tests in exclusive locking mode and truncate journal mode.
373} -presql {
374 pragma locking_mode = 'exclusive';
375 pragma journal_mode = TRUNCATE;
376} -include {
377 delete.test delete2.test insert.test rollback.test select1.test
378 select2.test update.test malloc.test ioerr.test
379}
380
danielk19771077e3f2008-06-21 18:07:37 +0000381# Run some tests in persistent journal mode.
382#
383run_tests "persistent_journal" -description {
384 Run tests in persistent-journal mode.
385} -presql {
386 pragma journal_mode = persist
387} -include {
388 delete.test delete2.test insert.test rollback.test select1.test
389 select2.test trans.test update.test vacuum.test
390}
391
drh04335882008-09-26 21:08:08 +0000392# Run some tests in truncating journal mode.
393#
394run_tests "truncate_journal" -description {
395 Run tests in persistent-journal mode.
396} -presql {
397 pragma journal_mode = truncate
398} -include {
399 delete.test delete2.test insert.test rollback.test select1.test
400 select2.test trans.test update.test vacuum.test
401 malloc.test ioerr.test
402}
403
danielk19771077e3f2008-06-21 18:07:37 +0000404# Run some error tests in persistent journal mode.
405#
406run_tests "persistent_journal_error" -description {
407 Run malloc.test and ioerr.test in persistent-journal mode.
408} -presql {
409 pragma journal_mode = persist
410} -include {
411 malloc.test ioerr.test
412}
413
414# Run some tests in no journal mode.
415#
416run_tests "no_journal" -description {
417 Run tests in no-journal mode.
418} -presql {
419 pragma journal_mode = persist
420} -include {
421 delete.test delete2.test insert.test rollback.test select1.test
422 select2.test trans.test update.test vacuum.test
423}
424
425# Run some error tests in no journal mode.
426#
427run_tests "no_journal_error" -description {
428 Run malloc.test and ioerr.test in no-journal mode.
429} -presql {
430 pragma journal_mode = persist
431} -include {
432 malloc.test ioerr.test
433}
434
435# Run some crash-tests in autovacuum mode.
436#
437run_tests "autovacuum_crash" -description {
438 Run crash.test in autovacuum mode.
439} -presql {
440 pragma auto_vacuum = 1
441} -include crash.test
442
443# Run some ioerr-tests in autovacuum mode.
444#
445run_tests "autovacuum_ioerr" -description {
446 Run ioerr.test in autovacuum mode.
447} -presql {
448 pragma auto_vacuum = 1
449} -include ioerr.test
450
danielk1977b3175382008-10-17 18:51:52 +0000451# Run tests with an in-memory journal.
452#
453run_tests "inmemory_journal" -description {
454 Run tests with an in-memory journal file.
455} -presql {
456 pragma journal_mode = 'memory'
457} -exclude {
458 # Exclude all tests that simulate IO errors.
459 autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test
460 ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test
461 vacuum3.test incrblob_err.test diskfull.test
462
463 # Exclude test scripts that use tcl IO to access journal files or count
464 # the number of fsync() calls.
465 pager.test exclusive.test jrnlmode.test sync.test misc1.test
466 journal1.test conflict.test
467}
468
danielk19776b39c2e2008-06-25 14:57:53 +0000469ifcapable mem3 {
470 run_tests "memsys3" -description {
471 Run tests using the allocator in mem3.c.
472 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000473 autovacuum.test delete3.test manydb.test
474 bigrow.test incrblob2.test memdb.test
475 bitvec.test index2.test memsubsys1.test
476 capi3c.test ioerr.test memsubsys2.test
477 capi3.test join3.test pagesize.test
478 collate5.test limit.test
danielk19776b39c2e2008-06-25 14:57:53 +0000479 } -initialize {
480 catch {db close}
481 sqlite3_reset_auto_extension
482 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000483 sqlite3_config_heap 25000000 0
drhe2a7c6e2008-08-01 15:06:30 +0000484 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000485 install_malloc_faultsim 1
486 sqlite3_initialize
487 autoinstall_test_functions
488 } -shutdown {
489 catch {db close}
490 sqlite3_reset_auto_extension
491 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000492 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000493 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000494 install_malloc_faultsim 1
495 sqlite3_initialize
496 }
danielk197757e5ea92008-06-24 19:02:55 +0000497}
498
danielk19776b39c2e2008-06-25 14:57:53 +0000499ifcapable mem5 {
500 run_tests "memsys5" -description {
501 Run tests using the allocator in mem5.c.
502 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000503 autovacuum.test delete3.test manydb.test
504 bigrow.test incrblob2.test memdb.test
505 bitvec.test index2.test memsubsys1.test
506 capi3c.test ioerr.test memsubsys2.test
507 capi3.test join3.test pagesize.test
danielk1977ac8d7b32008-11-13 16:21:50 +0000508 collate5.test limit.test zeroblob.test
danielk19776b39c2e2008-06-25 14:57:53 +0000509 } -initialize {
510 catch {db close}
511 sqlite3_reset_auto_extension
512 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000513 sqlite3_config_heap 25000000 64
drhe2a7c6e2008-08-01 15:06:30 +0000514 sqlite3_config_lookaside 0 0
danielk19775099be52008-06-27 13:27:03 +0000515 install_malloc_faultsim 1
516 sqlite3_initialize
517 autoinstall_test_functions
518 } -shutdown {
519 catch {db close}
520 sqlite3_reset_auto_extension
521 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000522 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000523 sqlite3_config_lookaside 100 500
danielk19775099be52008-06-27 13:27:03 +0000524 install_malloc_faultsim 1
525 sqlite3_initialize
526 }
527
528 run_tests "memsys5-2" -description {
529 Run tests using the allocator in mem5.c in a different configuration.
drh8a42cbd2008-07-10 18:13:42 +0000530 } -include {
531 select1.test
danielk19775099be52008-06-27 13:27:03 +0000532 } -initialize {
533 catch {db close}
534 sqlite3_reset_auto_extension
535 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000536 sqlite3_config_heap 40000000 16
drhe2a7c6e2008-08-01 15:06:30 +0000537 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000538 install_malloc_faultsim 1
539 sqlite3_initialize
540 autoinstall_test_functions
541 } -shutdown {
542 catch {db close}
543 sqlite3_reset_auto_extension
544 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000545 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000546 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000547 install_malloc_faultsim 1
548 sqlite3_initialize
549 }
danielk1977c66c0e12008-06-25 14:26:07 +0000550}
551
drh8a42cbd2008-07-10 18:13:42 +0000552ifcapable threadsafe {
553 run_tests "no_mutex_try" -description {
554 The sqlite3_mutex_try() interface always fails
drh0a846f92008-08-25 17:23:29 +0000555 } -exclude [concat $EXCLUDE mutex1.test mutex2.test] \
556 -initialize {
drh8a42cbd2008-07-10 18:13:42 +0000557 catch {db close}
558 sqlite3_shutdown
559 install_mutex_counters 1
560 set ::disable_mutex_try 1
561 } -shutdown {
562 catch {db close}
563 sqlite3_shutdown
564 install_mutex_counters 0
565 }
566}
567
danielk1977b13dee92008-06-23 15:55:52 +0000568# run_tests "crash_safe_append" -description {
569# Run crash.test with persistent journals on a SAFE_APPEND file-system.
570# } -initialize {
571# rename crashsql sa_crashsql
572# proc crashsql {args} {
573# set options [lrange $args 0 [expr {[llength $args]-2}]]
574# lappend options -char safe_append
575# set sql [lindex $args end]
576# lappend options "
577# PRAGMA journal_mode=persistent;
578# $sql
579# "
580# set fd [open test.db-journal w]
581# puts $fd [string repeat 1234567890 100000]
582# close $fd
583# eval sa_crashsql $options
584# }
585# } -shutdown {
586# rename crashsql {}
587# rename sa_crashsql crashsql
588# } -include crash.test
589
danielk1977755339e2008-09-12 10:22:40 +0000590run_tests "safe_append" -description {
591 Run some tests on a SAFE_APPEND file-system.
592} -initialize {
593 rename sqlite3 sqlite3_safeappend
594 proc sqlite3 {args} {
595 if {[string range [lindex $args 0] 0 0] ne "-"} {
596 lappend args -vfs devsym
597 }
598 uplevel [concat sqlite3_safeappend $args]
599 }
600 sqlite3_simulate_device -char safe_append
601} -shutdown {
602 rename sqlite3 {}
603 rename sqlite3_shutdown sqlite3
604} -include [lsort [concat shared_err.test $ALLTESTS]] \
605 -exclude async3.test
606
drhb232c232008-11-19 01:20:26 +0000607# The set of tests to run on the alternative-pcache
608set perm-alt-pcache-testset {
609 async.test
610 attach.test
611 delete.test delete2.test
612 index.test
613 insert.test insert2.test
614 join.test join2.test
615 rollback.test
616 select1.test select2.test
617 trans.test
618 update.test
619}
620
621run_tests "pcache0" -description {
622 Alternative pcache implementation without random discard
623} -initialize {
624 catch {db close}
625 sqlite3_reset_auto_extension
626 sqlite3_shutdown
627 sqlite3_config_alt_pcache 1 0 1
628 sqlite3_initialize
629 autoinstall_test_functions
630} -shutdown {
631 catch {db close}
632 sqlite3_reset_auto_extension
633 sqlite3_shutdown
634 sqlite3_config_alt_pcache 0 0 0
635 sqlite3_config_lookaside 100 500
636 install_malloc_faultsim 1
637 sqlite3_initialize
638} -include ${perm-alt-pcache-testset}
639
640run_tests "pcache10" -description {
641 Alternative pcache implementation without 10% random discard
642} -initialize {
643 catch {db close}
644 sqlite3_reset_auto_extension
645 sqlite3_shutdown
646 sqlite3_config_alt_pcache 1 50 1
647 sqlite3_initialize
648 autoinstall_test_functions
649} -shutdown {
650 catch {db close}
651 sqlite3_reset_auto_extension
652 sqlite3_shutdown
653 sqlite3_config_alt_pcache 0 0 0
654 sqlite3_initialize
655} -include ${perm-alt-pcache-testset}
656
657run_tests "pcache50" -description {
658 Alternative pcache implementation without 50% random discard
659} -initialize {
660 catch {db close}
661 sqlite3_reset_auto_extension
662 sqlite3_shutdown
663 sqlite3_config_alt_pcache 1 50 1
664 sqlite3_initialize
665 autoinstall_test_functions
666} -shutdown {
667 catch {db close}
668 sqlite3_reset_auto_extension
669 sqlite3_shutdown
670 sqlite3_config_alt_pcache 0 0 0
671 sqlite3_initialize
672} -include ${perm-alt-pcache-testset}
673
674run_tests "pcache90" -description {
675 Alternative pcache implementation without 90% random discard
676} -initialize {
677 catch {db close}
678 sqlite3_reset_auto_extension
679 sqlite3_shutdown
680 sqlite3_config_alt_pcache 1 50 1
681 sqlite3_initialize
682 autoinstall_test_functions
683} -shutdown {
684 catch {db close}
685 sqlite3_reset_auto_extension
686 sqlite3_shutdown
687 sqlite3_config_alt_pcache 0 0 0
688 sqlite3_initialize
689} -include ${perm-alt-pcache-testset}
690
691run_tests "pcache100" -description {
692 Alternative pcache implementation that always discards when unpinning
693} -initialize {
694 catch {db close}
695 sqlite3_reset_auto_extension
696 sqlite3_shutdown
697 sqlite3_config_alt_pcache 1 100 1
698 sqlite3_initialize
699 autoinstall_test_functions
700} -shutdown {
701 catch {db close}
702 sqlite3_reset_auto_extension
703 sqlite3_shutdown
704 sqlite3_config_alt_pcache 0 0 0
705 sqlite3_initialize
706} -include ${perm-alt-pcache-testset}
danielk1977b13dee92008-06-23 15:55:52 +0000707
danielk1977f3107512008-12-22 10:58:46 +0000708run_tests "journaltest" -description {
709 Check that pages are synced before being written (test_journal.c).
710} -initialize {
711 set ISQUICK 1
712 catch {db close}
713 register_jt_vfs -default ""
714} -shutdown {
715 unregister_jt_vfs
716} -exclude [concat $EXCLUDE {
717 incrvacuum.test
718 ioerr.test
719 corrupt4.test
720 io.test
721}]
722
danielk19771077e3f2008-06-21 18:07:37 +0000723# End of tests
724#############################################################################
725
drh0a846f92008-08-25 17:23:29 +0000726if {$::perm::testmode eq "targets"} { puts "" ; exit }
danielk19771077e3f2008-06-21 18:07:37 +0000727
728# Restore the [sqlite3] command.
729#
730rename sqlite3 {}
731rename really_sqlite3 sqlite3
732
733# Restore the [finish_test] command.
734#
735rename finish_test ""
736rename really_finish_test2 finish_test
737
738# Restore the [do_test] command.
739#
740rename do_test ""
741rename really_do_test do_test
742
743finish_test