blob: b3c416f43020a374c03da17139d6e5aa0226e89d [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#
drhbb77b752009-04-09 01:23:49 +000012# $Id: permutations.test,v 1.47 2009/04/09 01:23:49 drh 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
drh2206a2b2009-04-01 23:09:43 +000042 autovacuum_ioerr no_mutex_try fullmutex journaltest inmemory_journal
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
danielk19777e445fb2009-01-03 15:06:38 +000075 savepoint6.test
danielk19771077e3f2008-06-21 18:07:37 +000076}
77set ALLTESTS [list]
78foreach filename [glob $testdir/*.test] {
79 set filename [file tail $filename]
80 if {[lsearch $EXCLUDE $filename] < 0} { lappend ALLTESTS $filename }
81}
drh5393b652008-08-30 16:07:03 +000082set ALLTESTS [lsort $ALLTESTS]
danielk19771077e3f2008-06-21 18:07:37 +000083
84rename finish_test really_finish_test2
85proc finish_test {} {}
86
87rename do_test really_do_test
88
89proc do_test {name args} {
90 eval really_do_test [list "perm-$::permutations_test_prefix.$name"] $args
91}
92
93# Overload the [sqlite3] command
94rename sqlite3 really_sqlite3
95proc sqlite3 {args} {
96 set r [eval really_sqlite3 $args]
97 if { [llength $args] == 2 && $::permutations_presql ne "" } {
98 [lindex $args 0] eval $::permutations_presql
99 }
100 set r
101}
102
103# run_tests OPTIONS
104#
105# where available options are:
106#
107# -initialize SCRIPT (default "")
108# -shutdown SCRIPT (default "")
109# -include LIST-OF-FILES (default $::ALLTESTS)
110# -exclude LIST-OF-FILES (default "")
111# -presql SQL (default "")
112# -description TITLE (default "")
113#
114proc run_tests {name args} {
115 set ::permutations_test_prefix $name
116 set options(-shutdown) ""
117 set options(-initialize) ""
118 set options(-exclude) ""
119 set options(-include) $::ALLTESTS
120 set options(-presql) ""
121 set options(-description) "no description supplied (fixme)"
122 array set options $args
drh0a846f92008-08-25 17:23:29 +0000123 #puts "PERM-DEBUG: name=$name testfile=$::perm::testfile"
124 #puts "PERM-DEBUG: [array get options]"
danielk19771077e3f2008-06-21 18:07:37 +0000125
drh0a846f92008-08-25 17:23:29 +0000126 if {$::perm::testmode eq "targets"} {
danielk19771077e3f2008-06-21 18:07:37 +0000127 puts [format "% -20s %s" $name [string trim $options(-description)]]
128 return
129 }
drh0a846f92008-08-25 17:23:29 +0000130 if {$::perm::testmode ne "" && [lsearch $::perm::testmode $name]<0} {
131 puts "skipping permutation test $name..."
132 return
133 }
danielk19771077e3f2008-06-21 18:07:37 +0000134
danielk19771077e3f2008-06-21 18:07:37 +0000135 uplevel $options(-initialize)
136 set ::permutations_presql $options(-presql)
137
danielk1977c1def3e2008-08-30 13:25:10 +0000138 foreach file [lsort $options(-include)] {
drh0a846f92008-08-25 17:23:29 +0000139 if {[lsearch $options(-exclude) $file] < 0 &&
140 ( $::perm::testfile eq "" ||
141 $::perm::testfile eq $file ||
142 "$::perm::testfile.test" eq $file )
143 } {
danielk1977c1def3e2008-08-30 13:25:10 +0000144 set ::perm::shared_cache_setting [shared_cache_setting]
danielk19771077e3f2008-06-21 18:07:37 +0000145 uplevel source $::testdir/$file
danielk1977c1def3e2008-08-30 13:25:10 +0000146 if {$::perm::shared_cache_setting ne [shared_cache_setting]} {
147 error "File $::testdir/$file changed the shared cache setting from $::perm::shared_cache_setting to [shared_cache_setting]"
148 }
drh0a846f92008-08-25 17:23:29 +0000149 } else {
150 # puts "skipping file $file"
danielk19771077e3f2008-06-21 18:07:37 +0000151 }
152 }
153
154 uplevel $options(-shutdown)
danielk19773d9cf512008-10-07 15:00:08 +0000155 set ::permutations_test_prefix ""
danielk19771077e3f2008-06-21 18:07:37 +0000156}
157
danielk1977c1def3e2008-08-30 13:25:10 +0000158proc shared_cache_setting {} {
159 set ret 0
160 catch {
161 set ret [sqlite3_enable_shared_cache]
162 }
163 return $ret
164}
165
danielk19771077e3f2008-06-21 18:07:37 +0000166#############################################################################
167# Start of tests
168
169# Run some tests using pre-allocated page and scratch blocks.
170#
171run_tests "memsubsys1" -description {
172 Tests using pre-allocated page and scratch blocks
danielk1977801880f2008-08-21 15:54:01 +0000173} -exclude {
174 ioerr5.test
175 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000176} -initialize {
drhd63bd752008-07-30 13:15:46 +0000177 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000178 sqlite3_shutdown
179 sqlite3_config_pagecache 4096 24
180 sqlite3_config_scratch 25000 1
181 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000182 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000183} -shutdown {
184 catch {db close}
185 sqlite3_shutdown
186 sqlite3_config_pagecache 0 0
187 sqlite3_config_scratch 0 0
188 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000189 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000190}
191
192# Run some tests using pre-allocated page and scratch blocks. This time
193# the allocations are too small to use in most cases.
194#
danielk197734c61e62008-08-29 12:00:20 +0000195# Both ioerr5.test and malloc5.test are excluded because they test the
196# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
197# This functionality is disabled if a pre-allocated page block is provided.
198#
danielk19771077e3f2008-06-21 18:07:37 +0000199run_tests "memsubsys2" -description {
200 Tests using small pre-allocated page and scratch blocks
danielk197734c61e62008-08-29 12:00:20 +0000201} -exclude {
202 ioerr5.test
203 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000204} -initialize {
drhd63bd752008-07-30 13:15:46 +0000205 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000206 sqlite3_shutdown
207 sqlite3_config_pagecache 512 5
208 sqlite3_config_scratch 1000 1
209 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000210 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000211} -shutdown {
212 catch {db close}
213 sqlite3_shutdown
214 sqlite3_config_pagecache 0 0
215 sqlite3_config_scratch 0 0
216 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000217 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000218}
219
drhe2a7c6e2008-08-01 15:06:30 +0000220# Run all tests with the lookaside allocator disabled.
221#
danielk1977435f29d2008-10-11 17:04:04 +0000222run_tests "nolookaside" -description {
drhe2a7c6e2008-08-01 15:06:30 +0000223 OOM tests with lookaside disabled
drhe2a7c6e2008-08-01 15:06:30 +0000224} -initialize {
225 catch {db close}
226 sqlite3_shutdown
227 sqlite3_config_lookaside 0 0
228 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000229 autoinstall_test_functions
drhe2a7c6e2008-08-01 15:06:30 +0000230} -shutdown {
231 catch {db close}
232 sqlite3_shutdown
233 sqlite3_config_lookaside 100 500
234 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000235 autoinstall_test_functions
drhe2a7c6e2008-08-01 15:06:30 +0000236}
237
danielk19771077e3f2008-06-21 18:07:37 +0000238# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
239#
240run_tests "singlethread" -description {
241 Tests run in SQLITE_CONFIG_SINGLETHREAD mode
242} -initialize {
drh04df18d2009-01-06 14:50:11 +0000243 catch {db close}
244 sqlite3_shutdown
245 catch {sqlite3_config singlethread}
drhbb77b752009-04-09 01:23:49 +0000246 sqlite3_initialize
247 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000248} -include {
249 delete.test delete2.test insert.test rollback.test select1.test
250 select2.test trans.test update.test vacuum.test types.test
251 types2.test types3.test
252} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000253 catch {db close}
254 sqlite3_shutdown
255 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000256 sqlite3_initialize
257 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000258}
259
danielk19779a6284c2008-07-10 17:52:49 +0000260run_tests "nomutex" -description {
drh039963a2008-09-03 00:43:15 +0000261 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
danielk19779a6284c2008-07-10 17:52:49 +0000262} -initialize {
263 rename sqlite3 sqlite3_nomutex
264 proc sqlite3 {args} {
265 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000266 lappend args -fullmutex 0 -nomutex 1
danielk19779a6284c2008-07-10 17:52:49 +0000267 }
268 uplevel [concat sqlite3_nomutex $args]
269 }
270} -include {
271 delete.test delete2.test insert.test rollback.test select1.test
272 select2.test trans.test update.test vacuum.test types.test
273 types2.test types3.test
274} -shutdown {
275 rename sqlite3 {}
276 rename sqlite3_nomutex sqlite3
277}
278
danielk19771077e3f2008-06-21 18:07:37 +0000279# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
280#
281run_tests "multithread" -description {
282 Tests run in SQLITE_CONFIG_MULTITHREAD mode
283} -initialize {
drh04df18d2009-01-06 14:50:11 +0000284 catch {db close}
285 sqlite3_shutdown
286 catch {sqlite3_config multithread}
drhbb77b752009-04-09 01:23:49 +0000287 sqlite3_initialize
288 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000289} -include {
290 delete.test delete2.test insert.test rollback.test select1.test
291 select2.test trans.test update.test vacuum.test types.test
292 types2.test types3.test
293} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000294 catch {db close}
295 sqlite3_shutdown
296 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000297 sqlite3_initialize
298 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000299}
300
drh039963a2008-09-03 00:43:15 +0000301# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
302#
303run_tests "fullmutex" -description {
304 Tests run in SQLITE_OPEN_FULLMUTEX mode
305} -initialize {
306 rename sqlite3 sqlite3_fullmutex
307 proc sqlite3 {args} {
308 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000309 lappend args -nomutex 0 -fullmutex 1
drh039963a2008-09-03 00:43:15 +0000310 }
311 uplevel [concat sqlite3_fullmutex $args]
312 }
313} -include {
314 delete.test delete2.test insert.test rollback.test select1.test
315 select2.test trans.test update.test vacuum.test types.test
316 types2.test types3.test
317} -shutdown {
318 rename sqlite3 {}
319 rename sqlite3_fullmutex sqlite3
320}
321
danielk19771077e3f2008-06-21 18:07:37 +0000322# Run some tests using the "onefile" demo.
323#
324run_tests "onefile" -description {
325 Run some tests using the "test_onefile.c" demo
326} -initialize {
327 rename sqlite3 sqlite3_onefile
328 proc sqlite3 {args} {
329 if {[string range [lindex $args 0] 0 0] ne "-"} {
330 lappend args -vfs fs
331 }
332 uplevel [concat sqlite3_onefile $args]
333 }
334} -include {
335 conflict.test insert.test insert2.test insert3.test
336 rollback.test select1.test select2.test select3.test
danielk19771077e3f2008-06-21 18:07:37 +0000337} -shutdown {
338 rename sqlite3 {}
339 rename sqlite3_onefile sqlite3
340}
341
342# Run some tests using UTF-16 databases.
343#
344run_tests "utf16" -description {
345 Run tests using UTF-16 databases
danielk19772dd6d802008-06-21 19:10:27 +0000346} -presql {
danielk19771077e3f2008-06-21 18:07:37 +0000347 pragma encoding = 'UTF-16'
348} -include {
349 alter.test alter3.test
350 auth.test bind.test blob.test capi2.test capi3.test collate1.test
351 collate2.test collate3.test collate4.test collate5.test collate6.test
352 conflict.test date.test delete.test expr.test fkey1.test func.test
353 hook.test index.test insert2.test insert.test interrupt.test in.test
354 intpkey.test ioerr.test join2.test join.test lastinsert.test
355 laststmtchanges.test limit.test lock2.test lock.test main.test
356 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
357 null.test progress.test quote.test rowid.test select1.test select2.test
358 select3.test select4.test select5.test select6.test sort.test
359 subselect.test tableapi.test table.test temptable.test
360 trace.test trigger1.test trigger2.test trigger3.test
361 trigger4.test types2.test types.test unique.test update.test
362 vacuum.test view.test where.test
363}
364
365# Run some tests in exclusive locking mode.
366#
367run_tests "exclusive" -description {
368 Run tests in exclusive locking mode.
369} -presql {
370 pragma locking_mode = 'exclusive'
371} -include {
372 rollback.test select1.test select2.test
373 malloc.test ioerr.test
374}
375
drh04335882008-09-26 21:08:08 +0000376# Run some tests in exclusive locking mode with truncated journals.
377#
378run_tests "exclusive-truncate" -description {
379 Run tests in exclusive locking mode and truncate journal mode.
380} -presql {
381 pragma locking_mode = 'exclusive';
382 pragma journal_mode = TRUNCATE;
383} -include {
384 delete.test delete2.test insert.test rollback.test select1.test
385 select2.test update.test malloc.test ioerr.test
386}
387
danielk19771077e3f2008-06-21 18:07:37 +0000388# Run some tests in persistent journal mode.
389#
390run_tests "persistent_journal" -description {
391 Run tests in persistent-journal mode.
392} -presql {
393 pragma journal_mode = persist
394} -include {
395 delete.test delete2.test insert.test rollback.test select1.test
396 select2.test trans.test update.test vacuum.test
397}
398
drh04335882008-09-26 21:08:08 +0000399# Run some tests in truncating journal mode.
400#
401run_tests "truncate_journal" -description {
402 Run tests in persistent-journal mode.
403} -presql {
404 pragma journal_mode = truncate
405} -include {
406 delete.test delete2.test insert.test rollback.test select1.test
407 select2.test trans.test update.test vacuum.test
408 malloc.test ioerr.test
409}
410
danielk19771077e3f2008-06-21 18:07:37 +0000411# Run some error tests in persistent journal mode.
412#
413run_tests "persistent_journal_error" -description {
414 Run malloc.test and ioerr.test in persistent-journal mode.
415} -presql {
416 pragma journal_mode = persist
417} -include {
418 malloc.test ioerr.test
419}
420
421# Run some tests in no journal mode.
422#
423run_tests "no_journal" -description {
424 Run tests in no-journal mode.
425} -presql {
426 pragma journal_mode = persist
427} -include {
428 delete.test delete2.test insert.test rollback.test select1.test
429 select2.test trans.test update.test vacuum.test
430}
431
432# Run some error tests in no journal mode.
433#
434run_tests "no_journal_error" -description {
435 Run malloc.test and ioerr.test in no-journal mode.
436} -presql {
437 pragma journal_mode = persist
438} -include {
439 malloc.test ioerr.test
440}
441
442# Run some crash-tests in autovacuum mode.
443#
444run_tests "autovacuum_crash" -description {
445 Run crash.test in autovacuum mode.
446} -presql {
447 pragma auto_vacuum = 1
448} -include crash.test
449
450# Run some ioerr-tests in autovacuum mode.
451#
452run_tests "autovacuum_ioerr" -description {
453 Run ioerr.test in autovacuum mode.
454} -presql {
455 pragma auto_vacuum = 1
456} -include ioerr.test
457
danielk1977b3175382008-10-17 18:51:52 +0000458# Run tests with an in-memory journal.
459#
460run_tests "inmemory_journal" -description {
461 Run tests with an in-memory journal file.
462} -presql {
463 pragma journal_mode = 'memory'
464} -exclude {
465 # Exclude all tests that simulate IO errors.
466 autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test
467 ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test
drh2206a2b2009-04-01 23:09:43 +0000468 vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test
danielk1977b3175382008-10-17 18:51:52 +0000469
470 # Exclude test scripts that use tcl IO to access journal files or count
471 # the number of fsync() calls.
472 pager.test exclusive.test jrnlmode.test sync.test misc1.test
drh2206a2b2009-04-01 23:09:43 +0000473 journal1.test conflict.test crash8.test tkt3457.test
danielk1977b3175382008-10-17 18:51:52 +0000474}
475
danielk19776b39c2e2008-06-25 14:57:53 +0000476ifcapable mem3 {
477 run_tests "memsys3" -description {
478 Run tests using the allocator in mem3.c.
479 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000480 autovacuum.test delete3.test manydb.test
481 bigrow.test incrblob2.test memdb.test
482 bitvec.test index2.test memsubsys1.test
483 capi3c.test ioerr.test memsubsys2.test
484 capi3.test join3.test pagesize.test
485 collate5.test limit.test
danielk19776b39c2e2008-06-25 14:57:53 +0000486 } -initialize {
487 catch {db close}
488 sqlite3_reset_auto_extension
489 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000490 sqlite3_config_heap 25000000 0
drhe2a7c6e2008-08-01 15:06:30 +0000491 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000492 install_malloc_faultsim 1
493 sqlite3_initialize
494 autoinstall_test_functions
495 } -shutdown {
496 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000497 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000498 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000499 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000500 install_malloc_faultsim 1
501 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000502 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000503 }
danielk197757e5ea92008-06-24 19:02:55 +0000504}
505
danielk19776b39c2e2008-06-25 14:57:53 +0000506ifcapable mem5 {
507 run_tests "memsys5" -description {
508 Run tests using the allocator in mem5.c.
509 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000510 autovacuum.test delete3.test manydb.test
511 bigrow.test incrblob2.test memdb.test
512 bitvec.test index2.test memsubsys1.test
513 capi3c.test ioerr.test memsubsys2.test
514 capi3.test join3.test pagesize.test
danielk1977ac8d7b32008-11-13 16:21:50 +0000515 collate5.test limit.test zeroblob.test
danielk19776b39c2e2008-06-25 14:57:53 +0000516 } -initialize {
517 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000518 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000519 sqlite3_config_heap 25000000 64
drhe2a7c6e2008-08-01 15:06:30 +0000520 sqlite3_config_lookaside 0 0
danielk19775099be52008-06-27 13:27:03 +0000521 install_malloc_faultsim 1
522 sqlite3_initialize
523 autoinstall_test_functions
524 } -shutdown {
525 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000526 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000527 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000528 sqlite3_config_lookaside 100 500
danielk19775099be52008-06-27 13:27:03 +0000529 install_malloc_faultsim 1
530 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000531 autoinstall_test_functions
danielk19775099be52008-06-27 13:27:03 +0000532 }
533
534 run_tests "memsys5-2" -description {
535 Run tests using the allocator in mem5.c in a different configuration.
drh8a42cbd2008-07-10 18:13:42 +0000536 } -include {
537 select1.test
danielk19775099be52008-06-27 13:27:03 +0000538 } -initialize {
539 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000540 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000541 sqlite3_config_heap 40000000 16
drhe2a7c6e2008-08-01 15:06:30 +0000542 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000543 install_malloc_faultsim 1
544 sqlite3_initialize
545 autoinstall_test_functions
546 } -shutdown {
547 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000548 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000549 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000550 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000551 install_malloc_faultsim 1
552 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000553 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000554 }
danielk1977c66c0e12008-06-25 14:26:07 +0000555}
556
drh8a42cbd2008-07-10 18:13:42 +0000557ifcapable threadsafe {
558 run_tests "no_mutex_try" -description {
559 The sqlite3_mutex_try() interface always fails
drh0a846f92008-08-25 17:23:29 +0000560 } -exclude [concat $EXCLUDE mutex1.test mutex2.test] \
561 -initialize {
drh8a42cbd2008-07-10 18:13:42 +0000562 catch {db close}
563 sqlite3_shutdown
564 install_mutex_counters 1
565 set ::disable_mutex_try 1
drhbb77b752009-04-09 01:23:49 +0000566 sqlite3_initialize
567 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000568 } -shutdown {
569 catch {db close}
570 sqlite3_shutdown
571 install_mutex_counters 0
drhbb77b752009-04-09 01:23:49 +0000572 sqlite3_initialize
573 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000574 }
575}
576
danielk1977b13dee92008-06-23 15:55:52 +0000577# run_tests "crash_safe_append" -description {
578# Run crash.test with persistent journals on a SAFE_APPEND file-system.
579# } -initialize {
580# rename crashsql sa_crashsql
581# proc crashsql {args} {
582# set options [lrange $args 0 [expr {[llength $args]-2}]]
583# lappend options -char safe_append
584# set sql [lindex $args end]
585# lappend options "
586# PRAGMA journal_mode=persistent;
587# $sql
588# "
589# set fd [open test.db-journal w]
590# puts $fd [string repeat 1234567890 100000]
591# close $fd
592# eval sa_crashsql $options
593# }
594# } -shutdown {
595# rename crashsql {}
596# rename sa_crashsql crashsql
597# } -include crash.test
598
danielk1977755339e2008-09-12 10:22:40 +0000599run_tests "safe_append" -description {
600 Run some tests on a SAFE_APPEND file-system.
601} -initialize {
602 rename sqlite3 sqlite3_safeappend
603 proc sqlite3 {args} {
604 if {[string range [lindex $args 0] 0 0] ne "-"} {
605 lappend args -vfs devsym
606 }
607 uplevel [concat sqlite3_safeappend $args]
608 }
609 sqlite3_simulate_device -char safe_append
610} -shutdown {
611 rename sqlite3 {}
612 rename sqlite3_shutdown sqlite3
613} -include [lsort [concat shared_err.test $ALLTESTS]] \
614 -exclude async3.test
615
drhb232c232008-11-19 01:20:26 +0000616# The set of tests to run on the alternative-pcache
617set perm-alt-pcache-testset {
618 async.test
619 attach.test
620 delete.test delete2.test
621 index.test
622 insert.test insert2.test
623 join.test join2.test
624 rollback.test
625 select1.test select2.test
626 trans.test
627 update.test
628}
629
630run_tests "pcache0" -description {
631 Alternative pcache implementation without random discard
632} -initialize {
633 catch {db close}
drhb232c232008-11-19 01:20:26 +0000634 sqlite3_shutdown
635 sqlite3_config_alt_pcache 1 0 1
636 sqlite3_initialize
637 autoinstall_test_functions
638} -shutdown {
639 catch {db close}
drhb232c232008-11-19 01:20:26 +0000640 sqlite3_shutdown
641 sqlite3_config_alt_pcache 0 0 0
642 sqlite3_config_lookaside 100 500
643 install_malloc_faultsim 1
644 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000645 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000646} -include ${perm-alt-pcache-testset}
647
648run_tests "pcache10" -description {
649 Alternative pcache implementation without 10% random discard
650} -initialize {
651 catch {db close}
drhb232c232008-11-19 01:20:26 +0000652 sqlite3_shutdown
653 sqlite3_config_alt_pcache 1 50 1
654 sqlite3_initialize
655 autoinstall_test_functions
656} -shutdown {
657 catch {db close}
drhb232c232008-11-19 01:20:26 +0000658 sqlite3_shutdown
659 sqlite3_config_alt_pcache 0 0 0
660 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000661 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000662} -include ${perm-alt-pcache-testset}
663
664run_tests "pcache50" -description {
665 Alternative pcache implementation without 50% random discard
666} -initialize {
667 catch {db close}
drhb232c232008-11-19 01:20:26 +0000668 sqlite3_shutdown
669 sqlite3_config_alt_pcache 1 50 1
670 sqlite3_initialize
671 autoinstall_test_functions
672} -shutdown {
673 catch {db close}
drhb232c232008-11-19 01:20:26 +0000674 sqlite3_shutdown
675 sqlite3_config_alt_pcache 0 0 0
676 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000677 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000678} -include ${perm-alt-pcache-testset}
679
680run_tests "pcache90" -description {
681 Alternative pcache implementation without 90% random discard
682} -initialize {
683 catch {db close}
drhb232c232008-11-19 01:20:26 +0000684 sqlite3_shutdown
685 sqlite3_config_alt_pcache 1 50 1
686 sqlite3_initialize
687 autoinstall_test_functions
688} -shutdown {
689 catch {db close}
drhb232c232008-11-19 01:20:26 +0000690 sqlite3_shutdown
691 sqlite3_config_alt_pcache 0 0 0
692 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000693 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000694} -include ${perm-alt-pcache-testset}
695
696run_tests "pcache100" -description {
697 Alternative pcache implementation that always discards when unpinning
698} -initialize {
699 catch {db close}
drhb232c232008-11-19 01:20:26 +0000700 sqlite3_shutdown
701 sqlite3_config_alt_pcache 1 100 1
702 sqlite3_initialize
703 autoinstall_test_functions
704} -shutdown {
705 catch {db close}
drhb232c232008-11-19 01:20:26 +0000706 sqlite3_shutdown
707 sqlite3_config_alt_pcache 0 0 0
708 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000709 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000710} -include ${perm-alt-pcache-testset}
danielk1977b13dee92008-06-23 15:55:52 +0000711
danielk1977f3107512008-12-22 10:58:46 +0000712run_tests "journaltest" -description {
713 Check that pages are synced before being written (test_journal.c).
714} -initialize {
715 set ISQUICK 1
716 catch {db close}
717 register_jt_vfs -default ""
danielk1977f2c31ad2009-01-06 13:40:08 +0000718 #sqlite3_instvfs binarylog -default binarylog ostrace.bin
danielk1977f3107512008-12-22 10:58:46 +0000719} -shutdown {
danielk1977f2c31ad2009-01-06 13:40:08 +0000720 #sqlite3_instvfs destroy binarylog
danielk1977f3107512008-12-22 10:58:46 +0000721 unregister_jt_vfs
danielk19777e445fb2009-01-03 15:06:38 +0000722} -include [concat $::ALLTESTS savepoint6.test
723] -exclude {
danielk1977f3107512008-12-22 10:58:46 +0000724 incrvacuum.test
725 ioerr.test
726 corrupt4.test
727 io.test
danielk197793934972009-01-10 18:51:40 +0000728 crash8.test
danielk19777e445fb2009-01-03 15:06:38 +0000729}
danielk1977f3107512008-12-22 10:58:46 +0000730
danielk19771077e3f2008-06-21 18:07:37 +0000731# End of tests
732#############################################################################
733
drh0a846f92008-08-25 17:23:29 +0000734if {$::perm::testmode eq "targets"} { puts "" ; exit }
danielk19771077e3f2008-06-21 18:07:37 +0000735
736# Restore the [sqlite3] command.
737#
738rename sqlite3 {}
739rename really_sqlite3 sqlite3
740
741# Restore the [finish_test] command.
742#
743rename finish_test ""
744rename really_finish_test2 finish_test
745
746# Restore the [do_test] command.
747#
748rename do_test ""
749rename really_do_test do_test
750
751finish_test