blob: 6553e128627c139ad640704e7d1c18f4874a5955 [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#
drh2206a2b2009-04-01 23:09:43 +000012# $Id: permutations.test,v 1.46 2009/04/01 23:09:44 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
danielk19771077e3f2008-06-21 18:07:37 +0000182} -shutdown {
183 catch {db close}
184 sqlite3_shutdown
185 sqlite3_config_pagecache 0 0
186 sqlite3_config_scratch 0 0
187 sqlite3_initialize
188}
189
190# Run some tests using pre-allocated page and scratch blocks. This time
191# the allocations are too small to use in most cases.
192#
danielk197734c61e62008-08-29 12:00:20 +0000193# Both ioerr5.test and malloc5.test are excluded because they test the
194# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
195# This functionality is disabled if a pre-allocated page block is provided.
196#
danielk19771077e3f2008-06-21 18:07:37 +0000197run_tests "memsubsys2" -description {
198 Tests using small pre-allocated page and scratch blocks
danielk197734c61e62008-08-29 12:00:20 +0000199} -exclude {
200 ioerr5.test
201 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000202} -initialize {
drhd63bd752008-07-30 13:15:46 +0000203 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000204 sqlite3_shutdown
205 sqlite3_config_pagecache 512 5
206 sqlite3_config_scratch 1000 1
207 sqlite3_initialize
danielk19771077e3f2008-06-21 18:07:37 +0000208} -shutdown {
209 catch {db close}
210 sqlite3_shutdown
211 sqlite3_config_pagecache 0 0
212 sqlite3_config_scratch 0 0
213 sqlite3_initialize
214}
215
drhe2a7c6e2008-08-01 15:06:30 +0000216# Run all tests with the lookaside allocator disabled.
217#
danielk1977435f29d2008-10-11 17:04:04 +0000218run_tests "nolookaside" -description {
drhe2a7c6e2008-08-01 15:06:30 +0000219 OOM tests with lookaside disabled
drhe2a7c6e2008-08-01 15:06:30 +0000220} -initialize {
221 catch {db close}
222 sqlite3_shutdown
223 sqlite3_config_lookaside 0 0
224 sqlite3_initialize
225} -shutdown {
226 catch {db close}
227 sqlite3_shutdown
228 sqlite3_config_lookaside 100 500
229 sqlite3_initialize
230}
231
danielk19771077e3f2008-06-21 18:07:37 +0000232# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
233#
234run_tests "singlethread" -description {
235 Tests run in SQLITE_CONFIG_SINGLETHREAD mode
236} -initialize {
drh04df18d2009-01-06 14:50:11 +0000237 catch {db close}
238 sqlite3_shutdown
239 catch {sqlite3_config singlethread}
danielk19771077e3f2008-06-21 18:07:37 +0000240} -include {
241 delete.test delete2.test insert.test rollback.test select1.test
242 select2.test trans.test update.test vacuum.test types.test
243 types2.test types3.test
244} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000245 catch {db close}
246 sqlite3_shutdown
247 catch {sqlite3_config serialized}
danielk19771077e3f2008-06-21 18:07:37 +0000248}
249
danielk19779a6284c2008-07-10 17:52:49 +0000250run_tests "nomutex" -description {
drh039963a2008-09-03 00:43:15 +0000251 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
danielk19779a6284c2008-07-10 17:52:49 +0000252} -initialize {
253 rename sqlite3 sqlite3_nomutex
254 proc sqlite3 {args} {
255 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000256 lappend args -fullmutex 0 -nomutex 1
danielk19779a6284c2008-07-10 17:52:49 +0000257 }
258 uplevel [concat sqlite3_nomutex $args]
259 }
260} -include {
261 delete.test delete2.test insert.test rollback.test select1.test
262 select2.test trans.test update.test vacuum.test types.test
263 types2.test types3.test
264} -shutdown {
265 rename sqlite3 {}
266 rename sqlite3_nomutex sqlite3
267}
268
danielk19771077e3f2008-06-21 18:07:37 +0000269# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
270#
271run_tests "multithread" -description {
272 Tests run in SQLITE_CONFIG_MULTITHREAD mode
273} -initialize {
drh04df18d2009-01-06 14:50:11 +0000274 catch {db close}
275 sqlite3_shutdown
276 catch {sqlite3_config multithread}
danielk19771077e3f2008-06-21 18:07:37 +0000277} -include {
278 delete.test delete2.test insert.test rollback.test select1.test
279 select2.test trans.test update.test vacuum.test types.test
280 types2.test types3.test
281} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000282 catch {db close}
283 sqlite3_shutdown
284 catch {sqlite3_config serialized}
danielk19771077e3f2008-06-21 18:07:37 +0000285}
286
drh039963a2008-09-03 00:43:15 +0000287# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
288#
289run_tests "fullmutex" -description {
290 Tests run in SQLITE_OPEN_FULLMUTEX mode
291} -initialize {
292 rename sqlite3 sqlite3_fullmutex
293 proc sqlite3 {args} {
294 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000295 lappend args -nomutex 0 -fullmutex 1
drh039963a2008-09-03 00:43:15 +0000296 }
297 uplevel [concat sqlite3_fullmutex $args]
298 }
299} -include {
300 delete.test delete2.test insert.test rollback.test select1.test
301 select2.test trans.test update.test vacuum.test types.test
302 types2.test types3.test
303} -shutdown {
304 rename sqlite3 {}
305 rename sqlite3_fullmutex sqlite3
306}
307
danielk19771077e3f2008-06-21 18:07:37 +0000308# Run some tests using the "onefile" demo.
309#
310run_tests "onefile" -description {
311 Run some tests using the "test_onefile.c" demo
312} -initialize {
313 rename sqlite3 sqlite3_onefile
314 proc sqlite3 {args} {
315 if {[string range [lindex $args 0] 0 0] ne "-"} {
316 lappend args -vfs fs
317 }
318 uplevel [concat sqlite3_onefile $args]
319 }
320} -include {
321 conflict.test insert.test insert2.test insert3.test
322 rollback.test select1.test select2.test select3.test
danielk19771077e3f2008-06-21 18:07:37 +0000323} -shutdown {
324 rename sqlite3 {}
325 rename sqlite3_onefile sqlite3
326}
327
328# Run some tests using UTF-16 databases.
329#
330run_tests "utf16" -description {
331 Run tests using UTF-16 databases
danielk19772dd6d802008-06-21 19:10:27 +0000332} -presql {
danielk19771077e3f2008-06-21 18:07:37 +0000333 pragma encoding = 'UTF-16'
334} -include {
335 alter.test alter3.test
336 auth.test bind.test blob.test capi2.test capi3.test collate1.test
337 collate2.test collate3.test collate4.test collate5.test collate6.test
338 conflict.test date.test delete.test expr.test fkey1.test func.test
339 hook.test index.test insert2.test insert.test interrupt.test in.test
340 intpkey.test ioerr.test join2.test join.test lastinsert.test
341 laststmtchanges.test limit.test lock2.test lock.test main.test
342 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
343 null.test progress.test quote.test rowid.test select1.test select2.test
344 select3.test select4.test select5.test select6.test sort.test
345 subselect.test tableapi.test table.test temptable.test
346 trace.test trigger1.test trigger2.test trigger3.test
347 trigger4.test types2.test types.test unique.test update.test
348 vacuum.test view.test where.test
349}
350
351# Run some tests in exclusive locking mode.
352#
353run_tests "exclusive" -description {
354 Run tests in exclusive locking mode.
355} -presql {
356 pragma locking_mode = 'exclusive'
357} -include {
358 rollback.test select1.test select2.test
359 malloc.test ioerr.test
360}
361
drh04335882008-09-26 21:08:08 +0000362# Run some tests in exclusive locking mode with truncated journals.
363#
364run_tests "exclusive-truncate" -description {
365 Run tests in exclusive locking mode and truncate journal mode.
366} -presql {
367 pragma locking_mode = 'exclusive';
368 pragma journal_mode = TRUNCATE;
369} -include {
370 delete.test delete2.test insert.test rollback.test select1.test
371 select2.test update.test malloc.test ioerr.test
372}
373
danielk19771077e3f2008-06-21 18:07:37 +0000374# Run some tests in persistent journal mode.
375#
376run_tests "persistent_journal" -description {
377 Run tests in persistent-journal mode.
378} -presql {
379 pragma journal_mode = persist
380} -include {
381 delete.test delete2.test insert.test rollback.test select1.test
382 select2.test trans.test update.test vacuum.test
383}
384
drh04335882008-09-26 21:08:08 +0000385# Run some tests in truncating journal mode.
386#
387run_tests "truncate_journal" -description {
388 Run tests in persistent-journal mode.
389} -presql {
390 pragma journal_mode = truncate
391} -include {
392 delete.test delete2.test insert.test rollback.test select1.test
393 select2.test trans.test update.test vacuum.test
394 malloc.test ioerr.test
395}
396
danielk19771077e3f2008-06-21 18:07:37 +0000397# Run some error tests in persistent journal mode.
398#
399run_tests "persistent_journal_error" -description {
400 Run malloc.test and ioerr.test in persistent-journal mode.
401} -presql {
402 pragma journal_mode = persist
403} -include {
404 malloc.test ioerr.test
405}
406
407# Run some tests in no journal mode.
408#
409run_tests "no_journal" -description {
410 Run tests in no-journal mode.
411} -presql {
412 pragma journal_mode = persist
413} -include {
414 delete.test delete2.test insert.test rollback.test select1.test
415 select2.test trans.test update.test vacuum.test
416}
417
418# Run some error tests in no journal mode.
419#
420run_tests "no_journal_error" -description {
421 Run malloc.test and ioerr.test in no-journal mode.
422} -presql {
423 pragma journal_mode = persist
424} -include {
425 malloc.test ioerr.test
426}
427
428# Run some crash-tests in autovacuum mode.
429#
430run_tests "autovacuum_crash" -description {
431 Run crash.test in autovacuum mode.
432} -presql {
433 pragma auto_vacuum = 1
434} -include crash.test
435
436# Run some ioerr-tests in autovacuum mode.
437#
438run_tests "autovacuum_ioerr" -description {
439 Run ioerr.test in autovacuum mode.
440} -presql {
441 pragma auto_vacuum = 1
442} -include ioerr.test
443
danielk1977b3175382008-10-17 18:51:52 +0000444# Run tests with an in-memory journal.
445#
446run_tests "inmemory_journal" -description {
447 Run tests with an in-memory journal file.
448} -presql {
449 pragma journal_mode = 'memory'
450} -exclude {
451 # Exclude all tests that simulate IO errors.
452 autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test
453 ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test
drh2206a2b2009-04-01 23:09:43 +0000454 vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test
danielk1977b3175382008-10-17 18:51:52 +0000455
456 # Exclude test scripts that use tcl IO to access journal files or count
457 # the number of fsync() calls.
458 pager.test exclusive.test jrnlmode.test sync.test misc1.test
drh2206a2b2009-04-01 23:09:43 +0000459 journal1.test conflict.test crash8.test tkt3457.test
danielk1977b3175382008-10-17 18:51:52 +0000460}
461
danielk19776b39c2e2008-06-25 14:57:53 +0000462ifcapable mem3 {
463 run_tests "memsys3" -description {
464 Run tests using the allocator in mem3.c.
465 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000466 autovacuum.test delete3.test manydb.test
467 bigrow.test incrblob2.test memdb.test
468 bitvec.test index2.test memsubsys1.test
469 capi3c.test ioerr.test memsubsys2.test
470 capi3.test join3.test pagesize.test
471 collate5.test limit.test
danielk19776b39c2e2008-06-25 14:57:53 +0000472 } -initialize {
473 catch {db close}
474 sqlite3_reset_auto_extension
475 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000476 sqlite3_config_heap 25000000 0
drhe2a7c6e2008-08-01 15:06:30 +0000477 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000478 install_malloc_faultsim 1
479 sqlite3_initialize
480 autoinstall_test_functions
481 } -shutdown {
482 catch {db close}
483 sqlite3_reset_auto_extension
484 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000485 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000486 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000487 install_malloc_faultsim 1
488 sqlite3_initialize
489 }
danielk197757e5ea92008-06-24 19:02:55 +0000490}
491
danielk19776b39c2e2008-06-25 14:57:53 +0000492ifcapable mem5 {
493 run_tests "memsys5" -description {
494 Run tests using the allocator in mem5.c.
495 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000496 autovacuum.test delete3.test manydb.test
497 bigrow.test incrblob2.test memdb.test
498 bitvec.test index2.test memsubsys1.test
499 capi3c.test ioerr.test memsubsys2.test
500 capi3.test join3.test pagesize.test
danielk1977ac8d7b32008-11-13 16:21:50 +0000501 collate5.test limit.test zeroblob.test
danielk19776b39c2e2008-06-25 14:57:53 +0000502 } -initialize {
503 catch {db close}
504 sqlite3_reset_auto_extension
505 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000506 sqlite3_config_heap 25000000 64
drhe2a7c6e2008-08-01 15:06:30 +0000507 sqlite3_config_lookaside 0 0
danielk19775099be52008-06-27 13:27:03 +0000508 install_malloc_faultsim 1
509 sqlite3_initialize
510 autoinstall_test_functions
511 } -shutdown {
512 catch {db close}
513 sqlite3_reset_auto_extension
514 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000515 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000516 sqlite3_config_lookaside 100 500
danielk19775099be52008-06-27 13:27:03 +0000517 install_malloc_faultsim 1
518 sqlite3_initialize
519 }
520
521 run_tests "memsys5-2" -description {
522 Run tests using the allocator in mem5.c in a different configuration.
drh8a42cbd2008-07-10 18:13:42 +0000523 } -include {
524 select1.test
danielk19775099be52008-06-27 13:27:03 +0000525 } -initialize {
526 catch {db close}
527 sqlite3_reset_auto_extension
528 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000529 sqlite3_config_heap 40000000 16
drhe2a7c6e2008-08-01 15:06:30 +0000530 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000531 install_malloc_faultsim 1
532 sqlite3_initialize
533 autoinstall_test_functions
534 } -shutdown {
535 catch {db close}
536 sqlite3_reset_auto_extension
537 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000538 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000539 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000540 install_malloc_faultsim 1
541 sqlite3_initialize
542 }
danielk1977c66c0e12008-06-25 14:26:07 +0000543}
544
drh8a42cbd2008-07-10 18:13:42 +0000545ifcapable threadsafe {
546 run_tests "no_mutex_try" -description {
547 The sqlite3_mutex_try() interface always fails
drh0a846f92008-08-25 17:23:29 +0000548 } -exclude [concat $EXCLUDE mutex1.test mutex2.test] \
549 -initialize {
drh8a42cbd2008-07-10 18:13:42 +0000550 catch {db close}
551 sqlite3_shutdown
552 install_mutex_counters 1
553 set ::disable_mutex_try 1
554 } -shutdown {
555 catch {db close}
556 sqlite3_shutdown
557 install_mutex_counters 0
558 }
559}
560
danielk1977b13dee92008-06-23 15:55:52 +0000561# run_tests "crash_safe_append" -description {
562# Run crash.test with persistent journals on a SAFE_APPEND file-system.
563# } -initialize {
564# rename crashsql sa_crashsql
565# proc crashsql {args} {
566# set options [lrange $args 0 [expr {[llength $args]-2}]]
567# lappend options -char safe_append
568# set sql [lindex $args end]
569# lappend options "
570# PRAGMA journal_mode=persistent;
571# $sql
572# "
573# set fd [open test.db-journal w]
574# puts $fd [string repeat 1234567890 100000]
575# close $fd
576# eval sa_crashsql $options
577# }
578# } -shutdown {
579# rename crashsql {}
580# rename sa_crashsql crashsql
581# } -include crash.test
582
danielk1977755339e2008-09-12 10:22:40 +0000583run_tests "safe_append" -description {
584 Run some tests on a SAFE_APPEND file-system.
585} -initialize {
586 rename sqlite3 sqlite3_safeappend
587 proc sqlite3 {args} {
588 if {[string range [lindex $args 0] 0 0] ne "-"} {
589 lappend args -vfs devsym
590 }
591 uplevel [concat sqlite3_safeappend $args]
592 }
593 sqlite3_simulate_device -char safe_append
594} -shutdown {
595 rename sqlite3 {}
596 rename sqlite3_shutdown sqlite3
597} -include [lsort [concat shared_err.test $ALLTESTS]] \
598 -exclude async3.test
599
drhb232c232008-11-19 01:20:26 +0000600# The set of tests to run on the alternative-pcache
601set perm-alt-pcache-testset {
602 async.test
603 attach.test
604 delete.test delete2.test
605 index.test
606 insert.test insert2.test
607 join.test join2.test
608 rollback.test
609 select1.test select2.test
610 trans.test
611 update.test
612}
613
614run_tests "pcache0" -description {
615 Alternative pcache implementation without random discard
616} -initialize {
617 catch {db close}
618 sqlite3_reset_auto_extension
619 sqlite3_shutdown
620 sqlite3_config_alt_pcache 1 0 1
621 sqlite3_initialize
622 autoinstall_test_functions
623} -shutdown {
624 catch {db close}
625 sqlite3_reset_auto_extension
626 sqlite3_shutdown
627 sqlite3_config_alt_pcache 0 0 0
628 sqlite3_config_lookaside 100 500
629 install_malloc_faultsim 1
630 sqlite3_initialize
631} -include ${perm-alt-pcache-testset}
632
633run_tests "pcache10" -description {
634 Alternative pcache implementation without 10% random discard
635} -initialize {
636 catch {db close}
637 sqlite3_reset_auto_extension
638 sqlite3_shutdown
639 sqlite3_config_alt_pcache 1 50 1
640 sqlite3_initialize
641 autoinstall_test_functions
642} -shutdown {
643 catch {db close}
644 sqlite3_reset_auto_extension
645 sqlite3_shutdown
646 sqlite3_config_alt_pcache 0 0 0
647 sqlite3_initialize
648} -include ${perm-alt-pcache-testset}
649
650run_tests "pcache50" -description {
651 Alternative pcache implementation without 50% random discard
652} -initialize {
653 catch {db close}
654 sqlite3_reset_auto_extension
655 sqlite3_shutdown
656 sqlite3_config_alt_pcache 1 50 1
657 sqlite3_initialize
658 autoinstall_test_functions
659} -shutdown {
660 catch {db close}
661 sqlite3_reset_auto_extension
662 sqlite3_shutdown
663 sqlite3_config_alt_pcache 0 0 0
664 sqlite3_initialize
665} -include ${perm-alt-pcache-testset}
666
667run_tests "pcache90" -description {
668 Alternative pcache implementation without 90% random discard
669} -initialize {
670 catch {db close}
671 sqlite3_reset_auto_extension
672 sqlite3_shutdown
673 sqlite3_config_alt_pcache 1 50 1
674 sqlite3_initialize
675 autoinstall_test_functions
676} -shutdown {
677 catch {db close}
678 sqlite3_reset_auto_extension
679 sqlite3_shutdown
680 sqlite3_config_alt_pcache 0 0 0
681 sqlite3_initialize
682} -include ${perm-alt-pcache-testset}
683
684run_tests "pcache100" -description {
685 Alternative pcache implementation that always discards when unpinning
686} -initialize {
687 catch {db close}
688 sqlite3_reset_auto_extension
689 sqlite3_shutdown
690 sqlite3_config_alt_pcache 1 100 1
691 sqlite3_initialize
692 autoinstall_test_functions
693} -shutdown {
694 catch {db close}
695 sqlite3_reset_auto_extension
696 sqlite3_shutdown
697 sqlite3_config_alt_pcache 0 0 0
698 sqlite3_initialize
699} -include ${perm-alt-pcache-testset}
danielk1977b13dee92008-06-23 15:55:52 +0000700
danielk1977f3107512008-12-22 10:58:46 +0000701run_tests "journaltest" -description {
702 Check that pages are synced before being written (test_journal.c).
703} -initialize {
704 set ISQUICK 1
705 catch {db close}
706 register_jt_vfs -default ""
danielk1977f2c31ad2009-01-06 13:40:08 +0000707 #sqlite3_instvfs binarylog -default binarylog ostrace.bin
danielk1977f3107512008-12-22 10:58:46 +0000708} -shutdown {
danielk1977f2c31ad2009-01-06 13:40:08 +0000709 #sqlite3_instvfs destroy binarylog
danielk1977f3107512008-12-22 10:58:46 +0000710 unregister_jt_vfs
danielk19777e445fb2009-01-03 15:06:38 +0000711} -include [concat $::ALLTESTS savepoint6.test
712] -exclude {
danielk1977f3107512008-12-22 10:58:46 +0000713 incrvacuum.test
714 ioerr.test
715 corrupt4.test
716 io.test
danielk197793934972009-01-10 18:51:40 +0000717 crash8.test
danielk19777e445fb2009-01-03 15:06:38 +0000718}
danielk1977f3107512008-12-22 10:58:46 +0000719
danielk19771077e3f2008-06-21 18:07:37 +0000720# End of tests
721#############################################################################
722
drh0a846f92008-08-25 17:23:29 +0000723if {$::perm::testmode eq "targets"} { puts "" ; exit }
danielk19771077e3f2008-06-21 18:07:37 +0000724
725# Restore the [sqlite3] command.
726#
727rename sqlite3 {}
728rename really_sqlite3 sqlite3
729
730# Restore the [finish_test] command.
731#
732rename finish_test ""
733rename really_finish_test2 finish_test
734
735# Restore the [do_test] command.
736#
737rename do_test ""
738rename really_do_test do_test
739
740finish_test