blob: 4bd9d73493c9080b6f4b82297ee52e2a93b08a9d [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#
drh04335882008-09-26 21:08:08 +000012# $Id: permutations.test,v 1.31 2008/09/26 21:08:08 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
drh8a42cbd2008-07-10 18:13:42 +000042 autovacuum_ioerr no_mutex_try
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
danielk1977755339e2008-09-12 10:22:40 +000074 lookaside.test fuzz3.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)
154}
155
danielk1977c1def3e2008-08-30 13:25:10 +0000156proc shared_cache_setting {} {
157 set ret 0
158 catch {
159 set ret [sqlite3_enable_shared_cache]
160 }
161 return $ret
162}
163
danielk19771077e3f2008-06-21 18:07:37 +0000164#############################################################################
165# Start of tests
166
167# Run some tests using pre-allocated page and scratch blocks.
168#
169run_tests "memsubsys1" -description {
170 Tests using pre-allocated page and scratch blocks
danielk1977801880f2008-08-21 15:54:01 +0000171} -exclude {
172 ioerr5.test
173 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000174} -initialize {
drhd63bd752008-07-30 13:15:46 +0000175 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000176 sqlite3_shutdown
177 sqlite3_config_pagecache 4096 24
178 sqlite3_config_scratch 25000 1
179 sqlite3_initialize
danielk19771077e3f2008-06-21 18:07:37 +0000180} -shutdown {
181 catch {db close}
182 sqlite3_shutdown
183 sqlite3_config_pagecache 0 0
184 sqlite3_config_scratch 0 0
185 sqlite3_initialize
186}
187
188# Run some tests using pre-allocated page and scratch blocks. This time
189# the allocations are too small to use in most cases.
190#
danielk197734c61e62008-08-29 12:00:20 +0000191# Both ioerr5.test and malloc5.test are excluded because they test the
192# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
193# This functionality is disabled if a pre-allocated page block is provided.
194#
danielk19771077e3f2008-06-21 18:07:37 +0000195run_tests "memsubsys2" -description {
196 Tests using small pre-allocated page and scratch blocks
danielk197734c61e62008-08-29 12:00:20 +0000197} -exclude {
198 ioerr5.test
199 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000200} -initialize {
drhd63bd752008-07-30 13:15:46 +0000201 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000202 sqlite3_shutdown
203 sqlite3_config_pagecache 512 5
204 sqlite3_config_scratch 1000 1
205 sqlite3_initialize
danielk19771077e3f2008-06-21 18:07:37 +0000206} -shutdown {
207 catch {db close}
208 sqlite3_shutdown
209 sqlite3_config_pagecache 0 0
210 sqlite3_config_scratch 0 0
211 sqlite3_initialize
212}
213
drhe2a7c6e2008-08-01 15:06:30 +0000214# Run all tests with the lookaside allocator disabled.
215#
216run_tests "memsubsys3" -description {
217 OOM tests with lookaside disabled
218} -include {
219 malloc.test
220 malloc3.test
221 malloc4.test
222 malloc5.test
223 malloc6.test
224 malloc7.test
225 malloc8.test
226 malloc9.test
227 mallocA.test
228 mallocB.test
229 mallocC.test
230 mallocD.test
231 mallocE.test
232 mallocF.test
233 mallocG.test
234} -initialize {
235 catch {db close}
236 sqlite3_shutdown
237 sqlite3_config_lookaside 0 0
238 sqlite3_initialize
239} -shutdown {
240 catch {db close}
241 sqlite3_shutdown
242 sqlite3_config_lookaside 100 500
243 sqlite3_initialize
244}
245
danielk19771077e3f2008-06-21 18:07:37 +0000246# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
247#
248run_tests "singlethread" -description {
249 Tests run in SQLITE_CONFIG_SINGLETHREAD mode
250} -initialize {
251 do_test mutex2-singlethread.0 {
252 catch {db close}
253 sqlite3_shutdown
254 sqlite3_config singlethread
255 } SQLITE_OK
256} -include {
257 delete.test delete2.test insert.test rollback.test select1.test
258 select2.test trans.test update.test vacuum.test types.test
259 types2.test types3.test
260} -shutdown {
261 do_test mutex2-X {
262 catch {db close}
263 sqlite3_shutdown
264 sqlite3_config serialized
265 } SQLITE_OK
266}
267
danielk19779a6284c2008-07-10 17:52:49 +0000268run_tests "nomutex" -description {
drh039963a2008-09-03 00:43:15 +0000269 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
danielk19779a6284c2008-07-10 17:52:49 +0000270} -initialize {
271 rename sqlite3 sqlite3_nomutex
272 proc sqlite3 {args} {
273 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000274 lappend args -fullmutex 0 -nomutex 1
danielk19779a6284c2008-07-10 17:52:49 +0000275 }
276 uplevel [concat sqlite3_nomutex $args]
277 }
278} -include {
279 delete.test delete2.test insert.test rollback.test select1.test
280 select2.test trans.test update.test vacuum.test types.test
281 types2.test types3.test
282} -shutdown {
283 rename sqlite3 {}
284 rename sqlite3_nomutex sqlite3
285}
286
danielk19771077e3f2008-06-21 18:07:37 +0000287# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
288#
289run_tests "multithread" -description {
290 Tests run in SQLITE_CONFIG_MULTITHREAD mode
291} -initialize {
292 do_test mutex2-multithread.0 {
293 catch {db close}
294 sqlite3_shutdown
295 sqlite3_config multithread
296 } SQLITE_OK
297} -include {
298 delete.test delete2.test insert.test rollback.test select1.test
299 select2.test trans.test update.test vacuum.test types.test
300 types2.test types3.test
301} -shutdown {
302 do_test mutex2-X {
303 catch {db close}
304 sqlite3_shutdown
305 sqlite3_config serialized
306 } SQLITE_OK
307}
308
drh039963a2008-09-03 00:43:15 +0000309# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
310#
311run_tests "fullmutex" -description {
312 Tests run in SQLITE_OPEN_FULLMUTEX mode
313} -initialize {
314 rename sqlite3 sqlite3_fullmutex
315 proc sqlite3 {args} {
316 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000317 lappend args -nomutex 0 -fullmutex 1
drh039963a2008-09-03 00:43:15 +0000318 }
319 uplevel [concat sqlite3_fullmutex $args]
320 }
321} -include {
322 delete.test delete2.test insert.test rollback.test select1.test
323 select2.test trans.test update.test vacuum.test types.test
324 types2.test types3.test
325} -shutdown {
326 rename sqlite3 {}
327 rename sqlite3_fullmutex sqlite3
328}
329
danielk19771077e3f2008-06-21 18:07:37 +0000330# Run some tests using the "onefile" demo.
331#
332run_tests "onefile" -description {
333 Run some tests using the "test_onefile.c" demo
334} -initialize {
335 rename sqlite3 sqlite3_onefile
336 proc sqlite3 {args} {
337 if {[string range [lindex $args 0] 0 0] ne "-"} {
338 lappend args -vfs fs
339 }
340 uplevel [concat sqlite3_onefile $args]
341 }
342} -include {
343 conflict.test insert.test insert2.test insert3.test
344 rollback.test select1.test select2.test select3.test
danielk19771077e3f2008-06-21 18:07:37 +0000345} -shutdown {
346 rename sqlite3 {}
347 rename sqlite3_onefile sqlite3
348}
349
350# Run some tests using UTF-16 databases.
351#
352run_tests "utf16" -description {
353 Run tests using UTF-16 databases
danielk19772dd6d802008-06-21 19:10:27 +0000354} -presql {
danielk19771077e3f2008-06-21 18:07:37 +0000355 pragma encoding = 'UTF-16'
356} -include {
357 alter.test alter3.test
358 auth.test bind.test blob.test capi2.test capi3.test collate1.test
359 collate2.test collate3.test collate4.test collate5.test collate6.test
360 conflict.test date.test delete.test expr.test fkey1.test func.test
361 hook.test index.test insert2.test insert.test interrupt.test in.test
362 intpkey.test ioerr.test join2.test join.test lastinsert.test
363 laststmtchanges.test limit.test lock2.test lock.test main.test
364 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
365 null.test progress.test quote.test rowid.test select1.test select2.test
366 select3.test select4.test select5.test select6.test sort.test
367 subselect.test tableapi.test table.test temptable.test
368 trace.test trigger1.test trigger2.test trigger3.test
369 trigger4.test types2.test types.test unique.test update.test
370 vacuum.test view.test where.test
371}
372
373# Run some tests in exclusive locking mode.
374#
375run_tests "exclusive" -description {
376 Run tests in exclusive locking mode.
377} -presql {
378 pragma locking_mode = 'exclusive'
379} -include {
drh04335882008-09-26 21:08:08 +0000380 vacuum.test
danielk19771077e3f2008-06-21 18:07:37 +0000381 rollback.test select1.test select2.test
382 malloc.test ioerr.test
383}
384
drh04335882008-09-26 21:08:08 +0000385# Run some tests in exclusive locking mode with truncated journals.
386#
387run_tests "exclusive-truncate" -description {
388 Run tests in exclusive locking mode and truncate journal mode.
389} -presql {
390 pragma locking_mode = 'exclusive';
391 pragma journal_mode = TRUNCATE;
392} -include {
393 delete.test delete2.test insert.test rollback.test select1.test
394 select2.test update.test malloc.test ioerr.test
395}
396
danielk19771077e3f2008-06-21 18:07:37 +0000397# Run some tests in persistent journal mode.
398#
399run_tests "persistent_journal" -description {
400 Run tests in persistent-journal mode.
401} -presql {
402 pragma journal_mode = persist
403} -include {
404 delete.test delete2.test insert.test rollback.test select1.test
405 select2.test trans.test update.test vacuum.test
406}
407
drh04335882008-09-26 21:08:08 +0000408# Run some tests in truncating journal mode.
409#
410run_tests "truncate_journal" -description {
411 Run tests in persistent-journal mode.
412} -presql {
413 pragma journal_mode = truncate
414} -include {
415 delete.test delete2.test insert.test rollback.test select1.test
416 select2.test trans.test update.test vacuum.test
417 malloc.test ioerr.test
418}
419
danielk19771077e3f2008-06-21 18:07:37 +0000420# Run some error tests in persistent journal mode.
421#
422run_tests "persistent_journal_error" -description {
423 Run malloc.test and ioerr.test in persistent-journal mode.
424} -presql {
425 pragma journal_mode = persist
426} -include {
427 malloc.test ioerr.test
428}
429
430# Run some tests in no journal mode.
431#
432run_tests "no_journal" -description {
433 Run tests in no-journal mode.
434} -presql {
435 pragma journal_mode = persist
436} -include {
437 delete.test delete2.test insert.test rollback.test select1.test
438 select2.test trans.test update.test vacuum.test
439}
440
441# Run some error tests in no journal mode.
442#
443run_tests "no_journal_error" -description {
444 Run malloc.test and ioerr.test in no-journal mode.
445} -presql {
446 pragma journal_mode = persist
447} -include {
448 malloc.test ioerr.test
449}
450
451# Run some crash-tests in autovacuum mode.
452#
453run_tests "autovacuum_crash" -description {
454 Run crash.test in autovacuum mode.
455} -presql {
456 pragma auto_vacuum = 1
457} -include crash.test
458
459# Run some ioerr-tests in autovacuum mode.
460#
461run_tests "autovacuum_ioerr" -description {
462 Run ioerr.test in autovacuum mode.
463} -presql {
464 pragma auto_vacuum = 1
465} -include ioerr.test
466
danielk19776b39c2e2008-06-25 14:57:53 +0000467ifcapable mem3 {
468 run_tests "memsys3" -description {
469 Run tests using the allocator in mem3.c.
470 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000471 autovacuum.test delete3.test manydb.test
472 bigrow.test incrblob2.test memdb.test
473 bitvec.test index2.test memsubsys1.test
474 capi3c.test ioerr.test memsubsys2.test
475 capi3.test join3.test pagesize.test
476 collate5.test limit.test
danielk19776b39c2e2008-06-25 14:57:53 +0000477 } -initialize {
478 catch {db close}
479 sqlite3_reset_auto_extension
480 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000481 sqlite3_config_heap 25000000 0
drhe2a7c6e2008-08-01 15:06:30 +0000482 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000483 install_malloc_faultsim 1
484 sqlite3_initialize
485 autoinstall_test_functions
486 } -shutdown {
487 catch {db close}
488 sqlite3_reset_auto_extension
489 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000490 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000491 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000492 install_malloc_faultsim 1
493 sqlite3_initialize
494 }
danielk197757e5ea92008-06-24 19:02:55 +0000495}
496
danielk19776b39c2e2008-06-25 14:57:53 +0000497ifcapable mem5 {
498 run_tests "memsys5" -description {
499 Run tests using the allocator in mem5.c.
500 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000501 autovacuum.test delete3.test manydb.test
502 bigrow.test incrblob2.test memdb.test
503 bitvec.test index2.test memsubsys1.test
504 capi3c.test ioerr.test memsubsys2.test
505 capi3.test join3.test pagesize.test
506 collate5.test limit.test
danielk19776b39c2e2008-06-25 14:57:53 +0000507 } -initialize {
508 catch {db close}
509 sqlite3_reset_auto_extension
510 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000511 sqlite3_config_heap 25000000 64
drhe2a7c6e2008-08-01 15:06:30 +0000512 sqlite3_config_lookaside 0 0
danielk19775099be52008-06-27 13:27:03 +0000513 install_malloc_faultsim 1
514 sqlite3_initialize
515 autoinstall_test_functions
516 } -shutdown {
517 catch {db close}
518 sqlite3_reset_auto_extension
519 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000520 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000521 sqlite3_config_lookaside 100 500
danielk19775099be52008-06-27 13:27:03 +0000522 install_malloc_faultsim 1
523 sqlite3_initialize
524 }
525
526 run_tests "memsys5-2" -description {
527 Run tests using the allocator in mem5.c in a different configuration.
drh8a42cbd2008-07-10 18:13:42 +0000528 } -include {
529 select1.test
danielk19775099be52008-06-27 13:27:03 +0000530 } -initialize {
531 catch {db close}
532 sqlite3_reset_auto_extension
533 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000534 sqlite3_config_heap 40000000 16
drhe2a7c6e2008-08-01 15:06:30 +0000535 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000536 install_malloc_faultsim 1
537 sqlite3_initialize
538 autoinstall_test_functions
539 } -shutdown {
540 catch {db close}
541 sqlite3_reset_auto_extension
542 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000543 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000544 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000545 install_malloc_faultsim 1
546 sqlite3_initialize
547 }
danielk1977c66c0e12008-06-25 14:26:07 +0000548}
549
drh8a42cbd2008-07-10 18:13:42 +0000550ifcapable threadsafe {
551 run_tests "no_mutex_try" -description {
552 The sqlite3_mutex_try() interface always fails
drh0a846f92008-08-25 17:23:29 +0000553 } -exclude [concat $EXCLUDE mutex1.test mutex2.test] \
554 -initialize {
drh8a42cbd2008-07-10 18:13:42 +0000555 catch {db close}
556 sqlite3_shutdown
557 install_mutex_counters 1
558 set ::disable_mutex_try 1
559 } -shutdown {
560 catch {db close}
561 sqlite3_shutdown
562 install_mutex_counters 0
563 }
564}
565
danielk197789697182008-07-24 10:11:27 +0000566run_tests "memsys6" -description {
567 Run tests using the allocator in mem6.c.
danielk1977fae89172008-07-24 10:32:30 +0000568} -exclude {
569 capi3.test capi3c.test
danielk197789697182008-07-24 10:11:27 +0000570} -initialize {
571 catch {db close}
572 sqlite3_reset_auto_extension
573 sqlite3_shutdown
danielk197731fab4f2008-07-25 08:48:59 +0000574 sqlite3_config_chunkalloc 0
danielk197789697182008-07-24 10:11:27 +0000575 install_malloc_faultsim 1
576 sqlite3_initialize
577 autoinstall_test_functions
578} -shutdown {
579 catch {db close}
580 sqlite3_reset_auto_extension
581 sqlite3_shutdown
582 sqlite3_config_heap 0 0
583 install_malloc_faultsim 1
584 sqlite3_initialize
585}
danielk19772d340812008-07-24 08:20:40 +0000586
danielk1977b13dee92008-06-23 15:55:52 +0000587# run_tests "crash_safe_append" -description {
588# Run crash.test with persistent journals on a SAFE_APPEND file-system.
589# } -initialize {
590# rename crashsql sa_crashsql
591# proc crashsql {args} {
592# set options [lrange $args 0 [expr {[llength $args]-2}]]
593# lappend options -char safe_append
594# set sql [lindex $args end]
595# lappend options "
596# PRAGMA journal_mode=persistent;
597# $sql
598# "
599# set fd [open test.db-journal w]
600# puts $fd [string repeat 1234567890 100000]
601# close $fd
602# eval sa_crashsql $options
603# }
604# } -shutdown {
605# rename crashsql {}
606# rename sa_crashsql crashsql
607# } -include crash.test
608
danielk1977755339e2008-09-12 10:22:40 +0000609run_tests "safe_append" -description {
610 Run some tests on a SAFE_APPEND file-system.
611} -initialize {
612 rename sqlite3 sqlite3_safeappend
613 proc sqlite3 {args} {
614 if {[string range [lindex $args 0] 0 0] ne "-"} {
615 lappend args -vfs devsym
616 }
617 uplevel [concat sqlite3_safeappend $args]
618 }
619 sqlite3_simulate_device -char safe_append
620} -shutdown {
621 rename sqlite3 {}
622 rename sqlite3_shutdown sqlite3
623} -include [lsort [concat shared_err.test $ALLTESTS]] \
624 -exclude async3.test
625
danielk1977b13dee92008-06-23 15:55:52 +0000626
danielk19771077e3f2008-06-21 18:07:37 +0000627# End of tests
628#############################################################################
629
drh0a846f92008-08-25 17:23:29 +0000630if {$::perm::testmode eq "targets"} { puts "" ; exit }
danielk19771077e3f2008-06-21 18:07:37 +0000631
632# Restore the [sqlite3] command.
633#
634rename sqlite3 {}
635rename really_sqlite3 sqlite3
636
637# Restore the [finish_test] command.
638#
639rename finish_test ""
640rename really_finish_test2 finish_test
641
642# Restore the [do_test] command.
643#
644rename do_test ""
645rename really_do_test do_test
646
647finish_test