blob: fa5f903336920a225f70fae58edfab54b2a3d812 [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#
danielk19778b322822009-07-01 18:09:01 +000012# $Id: permutations.test,v 1.51 2009/07/01 18:09:02 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
drh2206a2b2009-04-01 23:09:43 +000042 autovacuum_ioerr no_mutex_try fullmutex journaltest inmemory_journal
drhfe53f2e2009-04-10 18:21:29 +000043 pcache0 pcache10 pcache50 pcache90 pcache100
danielk19771077e3f2008-06-21 18:07:37 +000044 }
45}
drh0a846f92008-08-25 17:23:29 +000046if {$::perm::testmode eq "targets"} {
danielk19771077e3f2008-06-21 18:07:37 +000047 puts ""
48 puts -nonewline "veryquick "
49 puts "Same as persistent_journal and no_journal"
50 puts -nonewline "quick "
51 puts "Same as persistent_journal, no_journal and autovacuum_ioerr"
52 puts -nonewline "all "
53 puts "Everything except autovacuum_crash"
54}
drhdf81a252008-08-25 19:09:01 +000055#puts "PERM-DEBUG: testmode=$::perm::testmode"
danielk19771077e3f2008-06-21 18:07:37 +000056
57set EXCLUDE {
drh8a42cbd2008-07-10 18:13:42 +000058 all.test in2.test onefile.test
59 async2.test incrvacuum_ioerr.test permutations.test
60 async.test jrnlmode2.test quick.test
61 autovacuum_crash.test jrnlmode3.test shared_err.test
62 autovacuum_ioerr.test jrnlmode4.test soak.test
63 btree8.test loadext.test speed1p.test
64 corrupt.test malloc2.test speed1.test
65 crash2.test malloc3.test speed2.test
66 crash3.test malloc4.test speed3.test
67 crash4.test mallocAll.test speed4p.test
68 crash6.test malloc.test speed4.test
69 crash7.test memleak.test sqllimits1.test
70 crash.test memsubsys1.test thread001.test
71 exclusive3.test memsubsys2.test thread002.test
72 fts3.test misc7.test utf16.test
73 fuzz_malloc.test misuse.test veryquick.test
74 fuzz.test mutex2.test vtab_err.test
danielk19776e10b392008-12-30 13:21:50 +000075 lookaside.test fuzz3.test savepoint4.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]
drhfb4a6262010-05-06 19:55:57 +000083set WALTESTS [list]
84foreach filename $ALLTESTS {
drh2c47d192010-05-07 00:28:41 +000085 if {[regexp {^wal} $filename]} {lappend WALTESTS $filename}
drhfb4a6262010-05-06 19:55:57 +000086}
danielk19771077e3f2008-06-21 18:07:37 +000087
88rename finish_test really_finish_test2
89proc finish_test {} {}
90
91rename do_test really_do_test
92
93proc do_test {name args} {
94 eval really_do_test [list "perm-$::permutations_test_prefix.$name"] $args
95}
96
97# Overload the [sqlite3] command
98rename sqlite3 really_sqlite3
99proc sqlite3 {args} {
100 set r [eval really_sqlite3 $args]
101 if { [llength $args] == 2 && $::permutations_presql ne "" } {
102 [lindex $args 0] eval $::permutations_presql
103 }
104 set r
105}
106
107# run_tests OPTIONS
108#
109# where available options are:
110#
111# -initialize SCRIPT (default "")
112# -shutdown SCRIPT (default "")
113# -include LIST-OF-FILES (default $::ALLTESTS)
114# -exclude LIST-OF-FILES (default "")
115# -presql SQL (default "")
116# -description TITLE (default "")
117#
118proc run_tests {name args} {
119 set ::permutations_test_prefix $name
120 set options(-shutdown) ""
121 set options(-initialize) ""
122 set options(-exclude) ""
123 set options(-include) $::ALLTESTS
124 set options(-presql) ""
125 set options(-description) "no description supplied (fixme)"
126 array set options $args
drh0a846f92008-08-25 17:23:29 +0000127 #puts "PERM-DEBUG: name=$name testfile=$::perm::testfile"
128 #puts "PERM-DEBUG: [array get options]"
danielk19771077e3f2008-06-21 18:07:37 +0000129
drh0a846f92008-08-25 17:23:29 +0000130 if {$::perm::testmode eq "targets"} {
danielk19771077e3f2008-06-21 18:07:37 +0000131 puts [format "% -20s %s" $name [string trim $options(-description)]]
132 return
133 }
drh0a846f92008-08-25 17:23:29 +0000134 if {$::perm::testmode ne "" && [lsearch $::perm::testmode $name]<0} {
135 puts "skipping permutation test $name..."
136 return
137 }
danielk19771077e3f2008-06-21 18:07:37 +0000138
danielk19771077e3f2008-06-21 18:07:37 +0000139 uplevel $options(-initialize)
140 set ::permutations_presql $options(-presql)
141
danielk1977c1def3e2008-08-30 13:25:10 +0000142 foreach file [lsort $options(-include)] {
drh0a846f92008-08-25 17:23:29 +0000143 if {[lsearch $options(-exclude) $file] < 0 &&
144 ( $::perm::testfile eq "" ||
145 $::perm::testfile eq $file ||
146 "$::perm::testfile.test" eq $file )
147 } {
danielk1977c1def3e2008-08-30 13:25:10 +0000148 set ::perm::shared_cache_setting [shared_cache_setting]
danielk19771077e3f2008-06-21 18:07:37 +0000149 uplevel source $::testdir/$file
danielk1977c1def3e2008-08-30 13:25:10 +0000150 if {$::perm::shared_cache_setting ne [shared_cache_setting]} {
151 error "File $::testdir/$file changed the shared cache setting from $::perm::shared_cache_setting to [shared_cache_setting]"
152 }
drh0a846f92008-08-25 17:23:29 +0000153 } else {
154 # puts "skipping file $file"
danielk19771077e3f2008-06-21 18:07:37 +0000155 }
156 }
157
158 uplevel $options(-shutdown)
danielk19773d9cf512008-10-07 15:00:08 +0000159 set ::permutations_test_prefix ""
danielk19771077e3f2008-06-21 18:07:37 +0000160}
161
danielk1977c1def3e2008-08-30 13:25:10 +0000162proc shared_cache_setting {} {
163 set ret 0
164 catch {
165 set ret [sqlite3_enable_shared_cache]
166 }
167 return $ret
168}
169
danielk19771077e3f2008-06-21 18:07:37 +0000170#############################################################################
171# Start of tests
172
173# Run some tests using pre-allocated page and scratch blocks.
174#
175run_tests "memsubsys1" -description {
176 Tests using pre-allocated page and scratch blocks
danielk1977801880f2008-08-21 15:54:01 +0000177} -exclude {
178 ioerr5.test
179 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000180} -initialize {
drhd63bd752008-07-30 13:15:46 +0000181 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000182 sqlite3_shutdown
183 sqlite3_config_pagecache 4096 24
184 sqlite3_config_scratch 25000 1
185 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000186 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000187} -shutdown {
188 catch {db close}
189 sqlite3_shutdown
190 sqlite3_config_pagecache 0 0
191 sqlite3_config_scratch 0 0
192 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000193 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000194}
195
196# Run some tests using pre-allocated page and scratch blocks. This time
197# the allocations are too small to use in most cases.
198#
danielk197734c61e62008-08-29 12:00:20 +0000199# Both ioerr5.test and malloc5.test are excluded because they test the
200# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
201# This functionality is disabled if a pre-allocated page block is provided.
202#
danielk19771077e3f2008-06-21 18:07:37 +0000203run_tests "memsubsys2" -description {
204 Tests using small pre-allocated page and scratch blocks
danielk197734c61e62008-08-29 12:00:20 +0000205} -exclude {
206 ioerr5.test
207 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000208} -initialize {
drhd63bd752008-07-30 13:15:46 +0000209 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000210 sqlite3_shutdown
211 sqlite3_config_pagecache 512 5
212 sqlite3_config_scratch 1000 1
213 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000214 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000215} -shutdown {
216 catch {db close}
217 sqlite3_shutdown
218 sqlite3_config_pagecache 0 0
219 sqlite3_config_scratch 0 0
220 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000221 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000222}
223
drhe2a7c6e2008-08-01 15:06:30 +0000224# Run all tests with the lookaside allocator disabled.
225#
danielk1977435f29d2008-10-11 17:04:04 +0000226run_tests "nolookaside" -description {
drhe2a7c6e2008-08-01 15:06:30 +0000227 OOM tests with lookaside disabled
drhe2a7c6e2008-08-01 15:06:30 +0000228} -initialize {
229 catch {db close}
230 sqlite3_shutdown
231 sqlite3_config_lookaside 0 0
232 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000233 autoinstall_test_functions
drhe2a7c6e2008-08-01 15:06:30 +0000234} -shutdown {
235 catch {db close}
236 sqlite3_shutdown
237 sqlite3_config_lookaside 100 500
238 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000239 autoinstall_test_functions
drhe2a7c6e2008-08-01 15:06:30 +0000240}
241
danielk19771077e3f2008-06-21 18:07:37 +0000242# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
243#
244run_tests "singlethread" -description {
245 Tests run in SQLITE_CONFIG_SINGLETHREAD mode
246} -initialize {
drh04df18d2009-01-06 14:50:11 +0000247 catch {db close}
248 sqlite3_shutdown
249 catch {sqlite3_config singlethread}
drhbb77b752009-04-09 01:23:49 +0000250 sqlite3_initialize
251 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000252} -include {
253 delete.test delete2.test insert.test rollback.test select1.test
254 select2.test trans.test update.test vacuum.test types.test
255 types2.test types3.test
256} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000257 catch {db close}
258 sqlite3_shutdown
259 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000260 sqlite3_initialize
261 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000262}
263
danielk19779a6284c2008-07-10 17:52:49 +0000264run_tests "nomutex" -description {
drh039963a2008-09-03 00:43:15 +0000265 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
danielk19779a6284c2008-07-10 17:52:49 +0000266} -initialize {
267 rename sqlite3 sqlite3_nomutex
268 proc sqlite3 {args} {
269 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000270 lappend args -fullmutex 0 -nomutex 1
danielk19779a6284c2008-07-10 17:52:49 +0000271 }
272 uplevel [concat sqlite3_nomutex $args]
273 }
274} -include {
275 delete.test delete2.test insert.test rollback.test select1.test
276 select2.test trans.test update.test vacuum.test types.test
277 types2.test types3.test
278} -shutdown {
279 rename sqlite3 {}
280 rename sqlite3_nomutex sqlite3
281}
282
danielk19771077e3f2008-06-21 18:07:37 +0000283# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
284#
285run_tests "multithread" -description {
286 Tests run in SQLITE_CONFIG_MULTITHREAD mode
287} -initialize {
drh04df18d2009-01-06 14:50:11 +0000288 catch {db close}
289 sqlite3_shutdown
290 catch {sqlite3_config multithread}
drhbb77b752009-04-09 01:23:49 +0000291 sqlite3_initialize
292 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000293} -include {
294 delete.test delete2.test insert.test rollback.test select1.test
295 select2.test trans.test update.test vacuum.test types.test
296 types2.test types3.test
297} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000298 catch {db close}
299 sqlite3_shutdown
300 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000301 sqlite3_initialize
302 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000303}
304
drh039963a2008-09-03 00:43:15 +0000305# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
306#
307run_tests "fullmutex" -description {
308 Tests run in SQLITE_OPEN_FULLMUTEX mode
309} -initialize {
310 rename sqlite3 sqlite3_fullmutex
311 proc sqlite3 {args} {
312 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000313 lappend args -nomutex 0 -fullmutex 1
drh039963a2008-09-03 00:43:15 +0000314 }
315 uplevel [concat sqlite3_fullmutex $args]
316 }
317} -include {
318 delete.test delete2.test insert.test rollback.test select1.test
319 select2.test trans.test update.test vacuum.test types.test
320 types2.test types3.test
321} -shutdown {
322 rename sqlite3 {}
323 rename sqlite3_fullmutex sqlite3
324}
325
danielk19771077e3f2008-06-21 18:07:37 +0000326# Run some tests using the "onefile" demo.
327#
328run_tests "onefile" -description {
329 Run some tests using the "test_onefile.c" demo
330} -initialize {
331 rename sqlite3 sqlite3_onefile
332 proc sqlite3 {args} {
333 if {[string range [lindex $args 0] 0 0] ne "-"} {
334 lappend args -vfs fs
335 }
336 uplevel [concat sqlite3_onefile $args]
337 }
338} -include {
339 conflict.test insert.test insert2.test insert3.test
340 rollback.test select1.test select2.test select3.test
danielk19771077e3f2008-06-21 18:07:37 +0000341} -shutdown {
342 rename sqlite3 {}
343 rename sqlite3_onefile sqlite3
344}
345
346# Run some tests using UTF-16 databases.
347#
348run_tests "utf16" -description {
349 Run tests using UTF-16 databases
danielk19772dd6d802008-06-21 19:10:27 +0000350} -presql {
danielk19771077e3f2008-06-21 18:07:37 +0000351 pragma encoding = 'UTF-16'
352} -include {
353 alter.test alter3.test
354 auth.test bind.test blob.test capi2.test capi3.test collate1.test
355 collate2.test collate3.test collate4.test collate5.test collate6.test
356 conflict.test date.test delete.test expr.test fkey1.test func.test
357 hook.test index.test insert2.test insert.test interrupt.test in.test
358 intpkey.test ioerr.test join2.test join.test lastinsert.test
359 laststmtchanges.test limit.test lock2.test lock.test main.test
360 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
361 null.test progress.test quote.test rowid.test select1.test select2.test
362 select3.test select4.test select5.test select6.test sort.test
363 subselect.test tableapi.test table.test temptable.test
364 trace.test trigger1.test trigger2.test trigger3.test
365 trigger4.test types2.test types.test unique.test update.test
366 vacuum.test view.test where.test
367}
368
369# Run some tests in exclusive locking mode.
370#
371run_tests "exclusive" -description {
372 Run tests in exclusive locking mode.
373} -presql {
374 pragma locking_mode = 'exclusive'
375} -include {
376 rollback.test select1.test select2.test
377 malloc.test ioerr.test
378}
379
drh04335882008-09-26 21:08:08 +0000380# Run some tests in exclusive locking mode with truncated journals.
381#
382run_tests "exclusive-truncate" -description {
383 Run tests in exclusive locking mode and truncate journal mode.
384} -presql {
385 pragma locking_mode = 'exclusive';
386 pragma journal_mode = TRUNCATE;
387} -include {
388 delete.test delete2.test insert.test rollback.test select1.test
389 select2.test update.test malloc.test ioerr.test
390}
391
danielk19771077e3f2008-06-21 18:07:37 +0000392# Run some tests in persistent journal mode.
393#
394run_tests "persistent_journal" -description {
395 Run tests in persistent-journal mode.
396} -presql {
397 pragma journal_mode = persist
398} -include {
399 delete.test delete2.test insert.test rollback.test select1.test
400 select2.test trans.test update.test vacuum.test
401}
402
drh04335882008-09-26 21:08:08 +0000403# Run some tests in truncating journal mode.
404#
405run_tests "truncate_journal" -description {
406 Run tests in persistent-journal mode.
407} -presql {
408 pragma journal_mode = truncate
409} -include {
410 delete.test delete2.test insert.test rollback.test select1.test
411 select2.test trans.test update.test vacuum.test
412 malloc.test ioerr.test
413}
414
danielk19771077e3f2008-06-21 18:07:37 +0000415# Run some error tests in persistent journal mode.
416#
417run_tests "persistent_journal_error" -description {
418 Run malloc.test and ioerr.test in persistent-journal mode.
419} -presql {
420 pragma journal_mode = persist
421} -include {
422 malloc.test ioerr.test
423}
424
425# Run some tests in no journal mode.
426#
427run_tests "no_journal" -description {
428 Run tests in no-journal mode.
429} -presql {
430 pragma journal_mode = persist
431} -include {
432 delete.test delete2.test insert.test rollback.test select1.test
433 select2.test trans.test update.test vacuum.test
434}
435
436# Run some error tests in no journal mode.
437#
438run_tests "no_journal_error" -description {
439 Run malloc.test and ioerr.test in no-journal mode.
440} -presql {
441 pragma journal_mode = persist
442} -include {
443 malloc.test ioerr.test
444}
445
446# Run some crash-tests in autovacuum mode.
447#
448run_tests "autovacuum_crash" -description {
449 Run crash.test in autovacuum mode.
450} -presql {
451 pragma auto_vacuum = 1
452} -include crash.test
453
454# Run some ioerr-tests in autovacuum mode.
455#
456run_tests "autovacuum_ioerr" -description {
457 Run ioerr.test in autovacuum mode.
458} -presql {
459 pragma auto_vacuum = 1
460} -include ioerr.test
461
danielk1977b3175382008-10-17 18:51:52 +0000462# Run tests with an in-memory journal.
463#
464run_tests "inmemory_journal" -description {
465 Run tests with an in-memory journal file.
466} -presql {
467 pragma journal_mode = 'memory'
468} -exclude {
469 # Exclude all tests that simulate IO errors.
470 autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test
471 ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test
drh2206a2b2009-04-01 23:09:43 +0000472 vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test
drh08ede1d2010-04-12 20:54:13 +0000473 e_fts3.test
danielk1977b3175382008-10-17 18:51:52 +0000474
475 # Exclude test scripts that use tcl IO to access journal files or count
476 # the number of fsync() calls.
477 pager.test exclusive.test jrnlmode.test sync.test misc1.test
danielk1977cb257902009-04-10 18:32:29 +0000478 journal1.test conflict.test crash8.test tkt3457.test io.test
dan01d38562010-03-08 10:32:38 +0000479
480 # Exclude stmt.test, which expects sub-journals to use temporary files.
481 stmt.test
drh0b944132010-05-24 20:24:38 +0000482
483 # WAL mode is different.
484 walmode.test
danielk1977b3175382008-10-17 18:51:52 +0000485}
486
danielk19776b39c2e2008-06-25 14:57:53 +0000487ifcapable mem3 {
488 run_tests "memsys3" -description {
489 Run tests using the allocator in mem3.c.
490 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000491 autovacuum.test delete3.test manydb.test
492 bigrow.test incrblob2.test memdb.test
493 bitvec.test index2.test memsubsys1.test
494 capi3c.test ioerr.test memsubsys2.test
495 capi3.test join3.test pagesize.test
danielk19778b322822009-07-01 18:09:01 +0000496 collate5.test limit.test backup_ioerr.test
497 backup_malloc.test
danielk19776b39c2e2008-06-25 14:57:53 +0000498 } -initialize {
499 catch {db close}
500 sqlite3_reset_auto_extension
501 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000502 sqlite3_config_heap 25000000 0
drhe2a7c6e2008-08-01 15:06:30 +0000503 sqlite3_config_lookaside 0 0
danielk19778b322822009-07-01 18:09:01 +0000504 ifcapable mem5 {
505 # If both memsys3 and memsys5 are enabled in the build, the call to
506 # [sqlite3_config_heap] will initialize the system to use memsys5.
507 # The following overrides this preference and installs the memsys3
508 # allocator.
509 sqlite3_install_memsys3
510 }
danielk19776b39c2e2008-06-25 14:57:53 +0000511 install_malloc_faultsim 1
512 sqlite3_initialize
513 autoinstall_test_functions
514 } -shutdown {
515 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000516 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000517 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000518 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000519 install_malloc_faultsim 1
520 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000521 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000522 }
danielk197757e5ea92008-06-24 19:02:55 +0000523}
524
danielk19776b39c2e2008-06-25 14:57:53 +0000525ifcapable mem5 {
526 run_tests "memsys5" -description {
527 Run tests using the allocator in mem5.c.
528 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000529 autovacuum.test delete3.test manydb.test
530 bigrow.test incrblob2.test memdb.test
531 bitvec.test index2.test memsubsys1.test
532 capi3c.test ioerr.test memsubsys2.test
533 capi3.test join3.test pagesize.test
danielk1977ac8d7b32008-11-13 16:21:50 +0000534 collate5.test limit.test zeroblob.test
danielk19776b39c2e2008-06-25 14:57:53 +0000535 } -initialize {
536 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000537 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000538 sqlite3_config_heap 25000000 64
drhe2a7c6e2008-08-01 15:06:30 +0000539 sqlite3_config_lookaside 0 0
danielk19775099be52008-06-27 13:27:03 +0000540 install_malloc_faultsim 1
541 sqlite3_initialize
542 autoinstall_test_functions
543 } -shutdown {
544 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000545 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000546 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000547 sqlite3_config_lookaside 100 500
danielk19775099be52008-06-27 13:27:03 +0000548 install_malloc_faultsim 1
549 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000550 autoinstall_test_functions
danielk19775099be52008-06-27 13:27:03 +0000551 }
552
553 run_tests "memsys5-2" -description {
554 Run tests using the allocator in mem5.c in a different configuration.
drh8a42cbd2008-07-10 18:13:42 +0000555 } -include {
556 select1.test
danielk19775099be52008-06-27 13:27:03 +0000557 } -initialize {
558 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000559 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000560 sqlite3_config_heap 40000000 16
drhe2a7c6e2008-08-01 15:06:30 +0000561 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000562 install_malloc_faultsim 1
563 sqlite3_initialize
564 autoinstall_test_functions
565 } -shutdown {
566 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000567 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000568 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000569 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000570 install_malloc_faultsim 1
571 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000572 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000573 }
danielk1977c66c0e12008-06-25 14:26:07 +0000574}
575
drh8a42cbd2008-07-10 18:13:42 +0000576ifcapable threadsafe {
577 run_tests "no_mutex_try" -description {
578 The sqlite3_mutex_try() interface always fails
drh0a846f92008-08-25 17:23:29 +0000579 } -exclude [concat $EXCLUDE mutex1.test mutex2.test] \
580 -initialize {
drh8a42cbd2008-07-10 18:13:42 +0000581 catch {db close}
582 sqlite3_shutdown
583 install_mutex_counters 1
584 set ::disable_mutex_try 1
drhbb77b752009-04-09 01:23:49 +0000585 sqlite3_initialize
586 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000587 } -shutdown {
588 catch {db close}
589 sqlite3_shutdown
590 install_mutex_counters 0
drhbb77b752009-04-09 01:23:49 +0000591 sqlite3_initialize
592 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000593 }
594}
595
danielk1977b13dee92008-06-23 15:55:52 +0000596# run_tests "crash_safe_append" -description {
597# Run crash.test with persistent journals on a SAFE_APPEND file-system.
598# } -initialize {
599# rename crashsql sa_crashsql
600# proc crashsql {args} {
601# set options [lrange $args 0 [expr {[llength $args]-2}]]
602# lappend options -char safe_append
603# set sql [lindex $args end]
604# lappend options "
605# PRAGMA journal_mode=persistent;
606# $sql
607# "
608# set fd [open test.db-journal w]
609# puts $fd [string repeat 1234567890 100000]
610# close $fd
611# eval sa_crashsql $options
612# }
613# } -shutdown {
614# rename crashsql {}
615# rename sa_crashsql crashsql
616# } -include crash.test
617
danielk1977755339e2008-09-12 10:22:40 +0000618run_tests "safe_append" -description {
619 Run some tests on a SAFE_APPEND file-system.
620} -initialize {
621 rename sqlite3 sqlite3_safeappend
622 proc sqlite3 {args} {
623 if {[string range [lindex $args 0] 0 0] ne "-"} {
624 lappend args -vfs devsym
625 }
626 uplevel [concat sqlite3_safeappend $args]
627 }
628 sqlite3_simulate_device -char safe_append
629} -shutdown {
630 rename sqlite3 {}
631 rename sqlite3_shutdown sqlite3
632} -include [lsort [concat shared_err.test $ALLTESTS]] \
633 -exclude async3.test
634
drhb232c232008-11-19 01:20:26 +0000635# The set of tests to run on the alternative-pcache
636set perm-alt-pcache-testset {
637 async.test
638 attach.test
639 delete.test delete2.test
640 index.test
641 insert.test insert2.test
642 join.test join2.test
643 rollback.test
644 select1.test select2.test
645 trans.test
646 update.test
647}
648
649run_tests "pcache0" -description {
650 Alternative pcache implementation without random discard
651} -initialize {
652 catch {db close}
drhb232c232008-11-19 01:20:26 +0000653 sqlite3_shutdown
654 sqlite3_config_alt_pcache 1 0 1
655 sqlite3_initialize
656 autoinstall_test_functions
657} -shutdown {
658 catch {db close}
drhb232c232008-11-19 01:20:26 +0000659 sqlite3_shutdown
660 sqlite3_config_alt_pcache 0 0 0
661 sqlite3_config_lookaside 100 500
662 install_malloc_faultsim 1
663 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000664 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000665} -include ${perm-alt-pcache-testset}
666
667run_tests "pcache10" -description {
668 Alternative pcache implementation without 10% random discard
669} -initialize {
670 catch {db close}
drhb232c232008-11-19 01:20:26 +0000671 sqlite3_shutdown
672 sqlite3_config_alt_pcache 1 50 1
673 sqlite3_initialize
674 autoinstall_test_functions
675} -shutdown {
676 catch {db close}
drhb232c232008-11-19 01:20:26 +0000677 sqlite3_shutdown
678 sqlite3_config_alt_pcache 0 0 0
679 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000680 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000681} -include ${perm-alt-pcache-testset}
682
683run_tests "pcache50" -description {
684 Alternative pcache implementation without 50% random discard
685} -initialize {
686 catch {db close}
drhb232c232008-11-19 01:20:26 +0000687 sqlite3_shutdown
688 sqlite3_config_alt_pcache 1 50 1
689 sqlite3_initialize
690 autoinstall_test_functions
691} -shutdown {
692 catch {db close}
drhb232c232008-11-19 01:20:26 +0000693 sqlite3_shutdown
694 sqlite3_config_alt_pcache 0 0 0
695 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000696 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000697} -include ${perm-alt-pcache-testset}
698
699run_tests "pcache90" -description {
700 Alternative pcache implementation without 90% random discard
701} -initialize {
702 catch {db close}
drhb232c232008-11-19 01:20:26 +0000703 sqlite3_shutdown
704 sqlite3_config_alt_pcache 1 50 1
705 sqlite3_initialize
706 autoinstall_test_functions
707} -shutdown {
708 catch {db close}
drhb232c232008-11-19 01:20:26 +0000709 sqlite3_shutdown
710 sqlite3_config_alt_pcache 0 0 0
711 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000712 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000713} -include ${perm-alt-pcache-testset}
714
715run_tests "pcache100" -description {
716 Alternative pcache implementation that always discards when unpinning
717} -initialize {
718 catch {db close}
drhb232c232008-11-19 01:20:26 +0000719 sqlite3_shutdown
720 sqlite3_config_alt_pcache 1 100 1
721 sqlite3_initialize
722 autoinstall_test_functions
723} -shutdown {
724 catch {db close}
drhb232c232008-11-19 01:20:26 +0000725 sqlite3_shutdown
726 sqlite3_config_alt_pcache 0 0 0
727 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000728 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000729} -include ${perm-alt-pcache-testset}
danielk1977b13dee92008-06-23 15:55:52 +0000730
danielk1977f3107512008-12-22 10:58:46 +0000731run_tests "journaltest" -description {
732 Check that pages are synced before being written (test_journal.c).
733} -initialize {
734 set ISQUICK 1
735 catch {db close}
736 register_jt_vfs -default ""
danielk1977f2c31ad2009-01-06 13:40:08 +0000737 #sqlite3_instvfs binarylog -default binarylog ostrace.bin
danielk1977f3107512008-12-22 10:58:46 +0000738} -shutdown {
danielk1977f2c31ad2009-01-06 13:40:08 +0000739 #sqlite3_instvfs destroy binarylog
danielk1977f3107512008-12-22 10:58:46 +0000740 unregister_jt_vfs
drh2c47d192010-05-07 00:28:41 +0000741} -include $::ALLTESTS -exclude [concat $::WALTESTS {
danielk1977f3107512008-12-22 10:58:46 +0000742 incrvacuum.test
743 ioerr.test
744 corrupt4.test
745 io.test
danielk197793934972009-01-10 18:51:40 +0000746 crash8.test
danielk197724d4b292009-05-13 14:46:09 +0000747 async4.test
drh43377f52010-04-01 16:15:56 +0000748 bigfile.test
drhfb4a6262010-05-06 19:55:57 +0000749}]
danielk1977f3107512008-12-22 10:58:46 +0000750
dan0a7a9152010-04-07 07:57:38 +0000751if {[info commands register_demovfs] != ""} {
752 run_tests "demovfs" -description {
753 Check that pages are synced before being written (test_journal.c).
754 } -initialize {
755 register_demovfs
756 } -shutdown {
757 unregister_demovfs
758 } -include {
759 insert.test insert2.test insert3.test rollback.test
760 select1.test select2.test select3.test
761 }
762}
763
dan71cb5182010-04-26 12:39:03 +0000764run_tests "wal" -description {
765 Run tests with journal_mode=WAL
dan31f98fc2010-04-27 05:42:32 +0000766} -initialize {
767 set ::savepoint6_iterations 100
768} -shutdown {
769 unset -nocomplain ::savepoint6_iterations
dan71cb5182010-04-26 12:39:03 +0000770} -include {
dane106de62010-04-27 06:49:34 +0000771 savepoint.test savepoint2.test savepoint6.test
772 trans.test avtrans.test
dan71cb5182010-04-26 12:39:03 +0000773}
774
danielk19771077e3f2008-06-21 18:07:37 +0000775# End of tests
776#############################################################################
777
drh0a846f92008-08-25 17:23:29 +0000778if {$::perm::testmode eq "targets"} { puts "" ; exit }
danielk19771077e3f2008-06-21 18:07:37 +0000779
780# Restore the [sqlite3] command.
781#
782rename sqlite3 {}
783rename really_sqlite3 sqlite3
784
785# Restore the [finish_test] command.
786#
787rename finish_test ""
788rename really_finish_test2 finish_test
789
790# Restore the [do_test] command.
791#
792rename do_test ""
793rename really_do_test do_test
794
795finish_test