blob: 87a9b8a6c9272b274ba4efcb288592149ae9ff57 [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
drh0a846f92008-08-25 17:23:29 +000027if {$::perm::testmode eq "veryquick"} {
28 set ::perm::testmode [list persistent_journal no_journal]
dan430e74c2010-06-07 17:47:26 +000029 set G(isquick) 1
danielk19771077e3f2008-06-21 18:07:37 +000030}
drh0a846f92008-08-25 17:23:29 +000031if {$::perm::testmode eq "quick"} {
32 set ::perm::testmode [list persistent_journal no_journal autovacuum_ioerr]
dan430e74c2010-06-07 17:47:26 +000033 set G(isquick) 1
danielk19771077e3f2008-06-21 18:07:37 +000034}
drhdf81a252008-08-25 19:09:01 +000035if {$::perm::testmode eq "all" || $::perm::testmode eq ""} {
drh0a846f92008-08-25 17:23:29 +000036 set ::perm::testmode {
danielk19771077e3f2008-06-21 18:07:37 +000037 memsubsys1 memsubsys2 singlethread multithread onefile utf16 exclusive
38 persistent_journal persistent_journal_error no_journal no_journal_error
drh2206a2b2009-04-01 23:09:43 +000039 autovacuum_ioerr no_mutex_try fullmutex journaltest inmemory_journal
drhfe53f2e2009-04-10 18:21:29 +000040 pcache0 pcache10 pcache50 pcache90 pcache100
danielk19771077e3f2008-06-21 18:07:37 +000041 }
42}
drh0a846f92008-08-25 17:23:29 +000043if {$::perm::testmode eq "targets"} {
danielk19771077e3f2008-06-21 18:07:37 +000044 puts ""
45 puts -nonewline "veryquick "
46 puts "Same as persistent_journal and no_journal"
47 puts -nonewline "quick "
48 puts "Same as persistent_journal, no_journal and autovacuum_ioerr"
49 puts -nonewline "all "
50 puts "Everything except autovacuum_crash"
51}
drhdf81a252008-08-25 19:09:01 +000052#puts "PERM-DEBUG: testmode=$::perm::testmode"
danielk19771077e3f2008-06-21 18:07:37 +000053
54set EXCLUDE {
drh8a42cbd2008-07-10 18:13:42 +000055 all.test in2.test onefile.test
56 async2.test incrvacuum_ioerr.test permutations.test
57 async.test jrnlmode2.test quick.test
58 autovacuum_crash.test jrnlmode3.test shared_err.test
59 autovacuum_ioerr.test jrnlmode4.test soak.test
60 btree8.test loadext.test speed1p.test
61 corrupt.test malloc2.test speed1.test
62 crash2.test malloc3.test speed2.test
63 crash3.test malloc4.test speed3.test
64 crash4.test mallocAll.test speed4p.test
65 crash6.test malloc.test speed4.test
66 crash7.test memleak.test sqllimits1.test
67 crash.test memsubsys1.test thread001.test
68 exclusive3.test memsubsys2.test thread002.test
69 fts3.test misc7.test utf16.test
70 fuzz_malloc.test misuse.test veryquick.test
71 fuzz.test mutex2.test vtab_err.test
danielk19776e10b392008-12-30 13:21:50 +000072 lookaside.test fuzz3.test savepoint4.test
danielk19771077e3f2008-06-21 18:07:37 +000073}
74set ALLTESTS [list]
75foreach filename [glob $testdir/*.test] {
76 set filename [file tail $filename]
77 if {[lsearch $EXCLUDE $filename] < 0} { lappend ALLTESTS $filename }
78}
drh5393b652008-08-30 16:07:03 +000079set ALLTESTS [lsort $ALLTESTS]
drhfb4a6262010-05-06 19:55:57 +000080set WALTESTS [list]
81foreach filename $ALLTESTS {
drh2c47d192010-05-07 00:28:41 +000082 if {[regexp {^wal} $filename]} {lappend WALTESTS $filename}
drhfb4a6262010-05-06 19:55:57 +000083}
danielk19771077e3f2008-06-21 18:07:37 +000084
dan430e74c2010-06-07 17:47:26 +000085# run_tests NAME OPTIONS
danielk19771077e3f2008-06-21 18:07:37 +000086#
87# where available options are:
88#
dan430e74c2010-06-07 17:47:26 +000089# -description TITLE (default "")
danielk19771077e3f2008-06-21 18:07:37 +000090# -initialize SCRIPT (default "")
91# -shutdown SCRIPT (default "")
92# -include LIST-OF-FILES (default $::ALLTESTS)
93# -exclude LIST-OF-FILES (default "")
94# -presql SQL (default "")
dan430e74c2010-06-07 17:47:26 +000095# -options LIST (default "")
danielk19771077e3f2008-06-21 18:07:37 +000096#
97proc run_tests {name args} {
dan430e74c2010-06-07 17:47:26 +000098
99 set default(-shutdown) ""
100 set default(-initialize) ""
101 set default(-exclude) ""
102 set default(-include) $::ALLTESTS
103 set default(-presql) ""
104 set default(-description) "no description supplied (fixme)"
105 set default(-options) ""
106
107 array set options [array get default]
danielk19771077e3f2008-06-21 18:07:37 +0000108 array set options $args
dan430e74c2010-06-07 17:47:26 +0000109 foreach k [array names options] {
110 if {[info exists default($k)]==0} {
111 error "Unknown option: $k"
112 }
113 }
drh0a846f92008-08-25 17:23:29 +0000114 #puts "PERM-DEBUG: name=$name testfile=$::perm::testfile"
115 #puts "PERM-DEBUG: [array get options]"
danielk19771077e3f2008-06-21 18:07:37 +0000116
drh0a846f92008-08-25 17:23:29 +0000117 if {$::perm::testmode eq "targets"} {
danielk19771077e3f2008-06-21 18:07:37 +0000118 puts [format "% -20s %s" $name [string trim $options(-description)]]
119 return
120 }
drh0a846f92008-08-25 17:23:29 +0000121 if {$::perm::testmode ne "" && [lsearch $::perm::testmode $name]<0} {
122 puts "skipping permutation test $name..."
123 return
124 }
danielk19771077e3f2008-06-21 18:07:37 +0000125
dan430e74c2010-06-07 17:47:26 +0000126
127 set ::G(perm:name) $name
128 set ::G(perm:presql) $options(-presql)
129 set ::G(perm:sqlite3_args) $options(-options)
130
danielk19771077e3f2008-06-21 18:07:37 +0000131 uplevel $options(-initialize)
danielk19771077e3f2008-06-21 18:07:37 +0000132
danielk1977c1def3e2008-08-30 13:25:10 +0000133 foreach file [lsort $options(-include)] {
drh0a846f92008-08-25 17:23:29 +0000134 if {[lsearch $options(-exclude) $file] < 0 &&
135 ( $::perm::testfile eq "" ||
136 $::perm::testfile eq $file ||
137 "$::perm::testfile.test" eq $file )
138 } {
danielk1977c1def3e2008-08-30 13:25:10 +0000139 set ::perm::shared_cache_setting [shared_cache_setting]
dan430e74c2010-06-07 17:47:26 +0000140
141 slave_test_file $::testdir/$file
142
danielk1977c1def3e2008-08-30 13:25:10 +0000143 if {$::perm::shared_cache_setting ne [shared_cache_setting]} {
144 error "File $::testdir/$file changed the shared cache setting from $::perm::shared_cache_setting to [shared_cache_setting]"
145 }
drh0a846f92008-08-25 17:23:29 +0000146 } else {
147 # puts "skipping file $file"
danielk19771077e3f2008-06-21 18:07:37 +0000148 }
149 }
150
dan430e74c2010-06-07 17:47:26 +0000151
danielk19771077e3f2008-06-21 18:07:37 +0000152 uplevel $options(-shutdown)
dan430e74c2010-06-07 17:47:26 +0000153
154 unset ::G(perm:name)
155 unset ::G(perm:presql)
156 unset ::G(perm:sqlite3_args)
danielk19771077e3f2008-06-21 18:07:37 +0000157}
158
danielk1977c1def3e2008-08-30 13:25:10 +0000159proc shared_cache_setting {} {
160 set ret 0
161 catch {
162 set ret [sqlite3_enable_shared_cache]
163 }
164 return $ret
165}
166
danielk19771077e3f2008-06-21 18:07:37 +0000167#############################################################################
168# Start of tests
169
170# Run some tests using pre-allocated page and scratch blocks.
171#
172run_tests "memsubsys1" -description {
173 Tests using pre-allocated page and scratch blocks
danielk1977801880f2008-08-21 15:54:01 +0000174} -exclude {
175 ioerr5.test
176 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000177} -initialize {
drhd63bd752008-07-30 13:15:46 +0000178 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000179 sqlite3_shutdown
180 sqlite3_config_pagecache 4096 24
181 sqlite3_config_scratch 25000 1
182 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000183 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000184} -shutdown {
185 catch {db close}
186 sqlite3_shutdown
187 sqlite3_config_pagecache 0 0
188 sqlite3_config_scratch 0 0
189 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000190 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000191}
192
193# Run some tests using pre-allocated page and scratch blocks. This time
194# the allocations are too small to use in most cases.
195#
danielk197734c61e62008-08-29 12:00:20 +0000196# Both ioerr5.test and malloc5.test are excluded because they test the
197# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
198# This functionality is disabled if a pre-allocated page block is provided.
199#
danielk19771077e3f2008-06-21 18:07:37 +0000200run_tests "memsubsys2" -description {
201 Tests using small pre-allocated page and scratch blocks
danielk197734c61e62008-08-29 12:00:20 +0000202} -exclude {
203 ioerr5.test
204 malloc5.test
danielk19771077e3f2008-06-21 18:07:37 +0000205} -initialize {
drhd63bd752008-07-30 13:15:46 +0000206 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000207 sqlite3_shutdown
208 sqlite3_config_pagecache 512 5
209 sqlite3_config_scratch 1000 1
210 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000211 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000212} -shutdown {
213 catch {db close}
214 sqlite3_shutdown
215 sqlite3_config_pagecache 0 0
216 sqlite3_config_scratch 0 0
217 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000218 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000219}
220
drhe2a7c6e2008-08-01 15:06:30 +0000221# Run all tests with the lookaside allocator disabled.
222#
danielk1977435f29d2008-10-11 17:04:04 +0000223run_tests "nolookaside" -description {
drhe2a7c6e2008-08-01 15:06:30 +0000224 OOM tests with lookaside disabled
drhe2a7c6e2008-08-01 15:06:30 +0000225} -initialize {
226 catch {db close}
227 sqlite3_shutdown
228 sqlite3_config_lookaside 0 0
229 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000230 autoinstall_test_functions
drhe2a7c6e2008-08-01 15:06:30 +0000231} -shutdown {
232 catch {db close}
233 sqlite3_shutdown
234 sqlite3_config_lookaside 100 500
235 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000236 autoinstall_test_functions
drhe2a7c6e2008-08-01 15:06:30 +0000237}
238
danielk19771077e3f2008-06-21 18:07:37 +0000239# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
240#
241run_tests "singlethread" -description {
242 Tests run in SQLITE_CONFIG_SINGLETHREAD mode
243} -initialize {
drh04df18d2009-01-06 14:50:11 +0000244 catch {db close}
245 sqlite3_shutdown
246 catch {sqlite3_config singlethread}
drhbb77b752009-04-09 01:23:49 +0000247 sqlite3_initialize
248 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000249} -include {
250 delete.test delete2.test insert.test rollback.test select1.test
251 select2.test trans.test update.test vacuum.test types.test
252 types2.test types3.test
253} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000254 catch {db close}
255 sqlite3_shutdown
256 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000257 sqlite3_initialize
258 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000259}
260
danielk19779a6284c2008-07-10 17:52:49 +0000261run_tests "nomutex" -description {
drh039963a2008-09-03 00:43:15 +0000262 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
danielk19779a6284c2008-07-10 17:52:49 +0000263} -initialize {
264 rename sqlite3 sqlite3_nomutex
265 proc sqlite3 {args} {
266 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000267 lappend args -fullmutex 0 -nomutex 1
danielk19779a6284c2008-07-10 17:52:49 +0000268 }
269 uplevel [concat sqlite3_nomutex $args]
270 }
271} -include {
272 delete.test delete2.test insert.test rollback.test select1.test
273 select2.test trans.test update.test vacuum.test types.test
274 types2.test types3.test
275} -shutdown {
276 rename sqlite3 {}
277 rename sqlite3_nomutex sqlite3
278}
279
danielk19771077e3f2008-06-21 18:07:37 +0000280# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
281#
282run_tests "multithread" -description {
283 Tests run in SQLITE_CONFIG_MULTITHREAD mode
284} -initialize {
drh04df18d2009-01-06 14:50:11 +0000285 catch {db close}
286 sqlite3_shutdown
287 catch {sqlite3_config multithread}
drhbb77b752009-04-09 01:23:49 +0000288 sqlite3_initialize
289 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000290} -include {
291 delete.test delete2.test insert.test rollback.test select1.test
292 select2.test trans.test update.test vacuum.test types.test
293 types2.test types3.test
294} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000295 catch {db close}
296 sqlite3_shutdown
297 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000298 sqlite3_initialize
299 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000300}
301
drh039963a2008-09-03 00:43:15 +0000302# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
303#
304run_tests "fullmutex" -description {
305 Tests run in SQLITE_OPEN_FULLMUTEX mode
306} -initialize {
307 rename sqlite3 sqlite3_fullmutex
308 proc sqlite3 {args} {
309 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000310 lappend args -nomutex 0 -fullmutex 1
drh039963a2008-09-03 00:43:15 +0000311 }
312 uplevel [concat sqlite3_fullmutex $args]
313 }
314} -include {
315 delete.test delete2.test insert.test rollback.test select1.test
316 select2.test trans.test update.test vacuum.test types.test
317 types2.test types3.test
318} -shutdown {
319 rename sqlite3 {}
320 rename sqlite3_fullmutex sqlite3
321}
322
danielk19771077e3f2008-06-21 18:07:37 +0000323# Run some tests using the "onefile" demo.
324#
325run_tests "onefile" -description {
326 Run some tests using the "test_onefile.c" demo
327} -initialize {
328 rename sqlite3 sqlite3_onefile
329 proc sqlite3 {args} {
330 if {[string range [lindex $args 0] 0 0] ne "-"} {
331 lappend args -vfs fs
332 }
333 uplevel [concat sqlite3_onefile $args]
334 }
335} -include {
336 conflict.test insert.test insert2.test insert3.test
337 rollback.test select1.test select2.test select3.test
danielk19771077e3f2008-06-21 18:07:37 +0000338} -shutdown {
339 rename sqlite3 {}
340 rename sqlite3_onefile sqlite3
341}
342
343# Run some tests using UTF-16 databases.
344#
345run_tests "utf16" -description {
346 Run tests using UTF-16 databases
danielk19772dd6d802008-06-21 19:10:27 +0000347} -presql {
danielk19771077e3f2008-06-21 18:07:37 +0000348 pragma encoding = 'UTF-16'
349} -include {
350 alter.test alter3.test
351 auth.test bind.test blob.test capi2.test capi3.test collate1.test
352 collate2.test collate3.test collate4.test collate5.test collate6.test
353 conflict.test date.test delete.test expr.test fkey1.test func.test
354 hook.test index.test insert2.test insert.test interrupt.test in.test
355 intpkey.test ioerr.test join2.test join.test lastinsert.test
356 laststmtchanges.test limit.test lock2.test lock.test main.test
357 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
358 null.test progress.test quote.test rowid.test select1.test select2.test
359 select3.test select4.test select5.test select6.test sort.test
360 subselect.test tableapi.test table.test temptable.test
361 trace.test trigger1.test trigger2.test trigger3.test
362 trigger4.test types2.test types.test unique.test update.test
363 vacuum.test view.test where.test
364}
365
366# Run some tests in exclusive locking mode.
367#
368run_tests "exclusive" -description {
369 Run tests in exclusive locking mode.
370} -presql {
371 pragma locking_mode = 'exclusive'
372} -include {
373 rollback.test select1.test select2.test
374 malloc.test ioerr.test
375}
376
drh04335882008-09-26 21:08:08 +0000377# Run some tests in exclusive locking mode with truncated journals.
378#
379run_tests "exclusive-truncate" -description {
380 Run tests in exclusive locking mode and truncate journal mode.
381} -presql {
382 pragma locking_mode = 'exclusive';
383 pragma journal_mode = TRUNCATE;
384} -include {
385 delete.test delete2.test insert.test rollback.test select1.test
386 select2.test update.test malloc.test ioerr.test
387}
388
danielk19771077e3f2008-06-21 18:07:37 +0000389# Run some tests in persistent journal mode.
390#
391run_tests "persistent_journal" -description {
392 Run tests in persistent-journal mode.
393} -presql {
394 pragma journal_mode = persist
395} -include {
396 delete.test delete2.test insert.test rollback.test select1.test
397 select2.test trans.test update.test vacuum.test
398}
399
drh04335882008-09-26 21:08:08 +0000400# Run some tests in truncating journal mode.
401#
402run_tests "truncate_journal" -description {
403 Run tests in persistent-journal mode.
404} -presql {
405 pragma journal_mode = truncate
406} -include {
407 delete.test delete2.test insert.test rollback.test select1.test
408 select2.test trans.test update.test vacuum.test
409 malloc.test ioerr.test
410}
411
danielk19771077e3f2008-06-21 18:07:37 +0000412# Run some error tests in persistent journal mode.
413#
414run_tests "persistent_journal_error" -description {
415 Run malloc.test and ioerr.test in persistent-journal mode.
416} -presql {
417 pragma journal_mode = persist
418} -include {
419 malloc.test ioerr.test
420}
421
422# Run some tests in no journal mode.
423#
424run_tests "no_journal" -description {
425 Run tests in no-journal mode.
426} -presql {
427 pragma journal_mode = persist
428} -include {
429 delete.test delete2.test insert.test rollback.test select1.test
430 select2.test trans.test update.test vacuum.test
431}
432
433# Run some error tests in no journal mode.
434#
435run_tests "no_journal_error" -description {
436 Run malloc.test and ioerr.test in no-journal mode.
437} -presql {
438 pragma journal_mode = persist
439} -include {
440 malloc.test ioerr.test
441}
442
443# Run some crash-tests in autovacuum mode.
444#
445run_tests "autovacuum_crash" -description {
446 Run crash.test in autovacuum mode.
447} -presql {
448 pragma auto_vacuum = 1
449} -include crash.test
450
451# Run some ioerr-tests in autovacuum mode.
452#
453run_tests "autovacuum_ioerr" -description {
454 Run ioerr.test in autovacuum mode.
455} -presql {
456 pragma auto_vacuum = 1
457} -include ioerr.test
458
danielk1977b3175382008-10-17 18:51:52 +0000459# Run tests with an in-memory journal.
460#
461run_tests "inmemory_journal" -description {
462 Run tests with an in-memory journal file.
463} -presql {
464 pragma journal_mode = 'memory'
465} -exclude {
466 # Exclude all tests that simulate IO errors.
467 autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test
468 ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test
drh2206a2b2009-04-01 23:09:43 +0000469 vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test
drh08ede1d2010-04-12 20:54:13 +0000470 e_fts3.test
danielk1977b3175382008-10-17 18:51:52 +0000471
472 # Exclude test scripts that use tcl IO to access journal files or count
473 # the number of fsync() calls.
474 pager.test exclusive.test jrnlmode.test sync.test misc1.test
danielk1977cb257902009-04-10 18:32:29 +0000475 journal1.test conflict.test crash8.test tkt3457.test io.test
dan01d38562010-03-08 10:32:38 +0000476
477 # Exclude stmt.test, which expects sub-journals to use temporary files.
478 stmt.test
drh0b944132010-05-24 20:24:38 +0000479
480 # WAL mode is different.
481 walmode.test
danielk1977b3175382008-10-17 18:51:52 +0000482}
483
danielk19776b39c2e2008-06-25 14:57:53 +0000484ifcapable mem3 {
485 run_tests "memsys3" -description {
486 Run tests using the allocator in mem3.c.
487 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000488 autovacuum.test delete3.test manydb.test
489 bigrow.test incrblob2.test memdb.test
490 bitvec.test index2.test memsubsys1.test
491 capi3c.test ioerr.test memsubsys2.test
492 capi3.test join3.test pagesize.test
danielk19778b322822009-07-01 18:09:01 +0000493 collate5.test limit.test backup_ioerr.test
494 backup_malloc.test
danielk19776b39c2e2008-06-25 14:57:53 +0000495 } -initialize {
496 catch {db close}
497 sqlite3_reset_auto_extension
498 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000499 sqlite3_config_heap 25000000 0
drhe2a7c6e2008-08-01 15:06:30 +0000500 sqlite3_config_lookaside 0 0
danielk19778b322822009-07-01 18:09:01 +0000501 ifcapable mem5 {
502 # If both memsys3 and memsys5 are enabled in the build, the call to
503 # [sqlite3_config_heap] will initialize the system to use memsys5.
504 # The following overrides this preference and installs the memsys3
505 # allocator.
506 sqlite3_install_memsys3
507 }
danielk19776b39c2e2008-06-25 14:57:53 +0000508 install_malloc_faultsim 1
509 sqlite3_initialize
510 autoinstall_test_functions
511 } -shutdown {
512 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000513 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000514 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000515 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000516 install_malloc_faultsim 1
517 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000518 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000519 }
danielk197757e5ea92008-06-24 19:02:55 +0000520}
521
danielk19776b39c2e2008-06-25 14:57:53 +0000522ifcapable mem5 {
523 run_tests "memsys5" -description {
524 Run tests using the allocator in mem5.c.
525 } -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000526 autovacuum.test delete3.test manydb.test
527 bigrow.test incrblob2.test memdb.test
528 bitvec.test index2.test memsubsys1.test
529 capi3c.test ioerr.test memsubsys2.test
530 capi3.test join3.test pagesize.test
danielk1977ac8d7b32008-11-13 16:21:50 +0000531 collate5.test limit.test zeroblob.test
danielk19776b39c2e2008-06-25 14:57:53 +0000532 } -initialize {
533 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000534 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000535 sqlite3_config_heap 25000000 64
drhe2a7c6e2008-08-01 15:06:30 +0000536 sqlite3_config_lookaside 0 0
danielk19775099be52008-06-27 13:27:03 +0000537 install_malloc_faultsim 1
538 sqlite3_initialize
539 autoinstall_test_functions
540 } -shutdown {
541 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000542 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
danielk19775099be52008-06-27 13:27:03 +0000545 install_malloc_faultsim 1
546 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000547 autoinstall_test_functions
danielk19775099be52008-06-27 13:27:03 +0000548 }
549
550 run_tests "memsys5-2" -description {
551 Run tests using the allocator in mem5.c in a different configuration.
drh8a42cbd2008-07-10 18:13:42 +0000552 } -include {
553 select1.test
danielk19775099be52008-06-27 13:27:03 +0000554 } -initialize {
555 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000556 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000557 sqlite3_config_heap 40000000 16
drhe2a7c6e2008-08-01 15:06:30 +0000558 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000559 install_malloc_faultsim 1
560 sqlite3_initialize
561 autoinstall_test_functions
562 } -shutdown {
563 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000564 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000565 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000566 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000567 install_malloc_faultsim 1
568 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000569 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000570 }
danielk1977c66c0e12008-06-25 14:26:07 +0000571}
572
drh8a42cbd2008-07-10 18:13:42 +0000573ifcapable threadsafe {
574 run_tests "no_mutex_try" -description {
575 The sqlite3_mutex_try() interface always fails
drh0a846f92008-08-25 17:23:29 +0000576 } -exclude [concat $EXCLUDE mutex1.test mutex2.test] \
577 -initialize {
drh8a42cbd2008-07-10 18:13:42 +0000578 catch {db close}
579 sqlite3_shutdown
580 install_mutex_counters 1
581 set ::disable_mutex_try 1
drhbb77b752009-04-09 01:23:49 +0000582 sqlite3_initialize
583 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000584 } -shutdown {
585 catch {db close}
586 sqlite3_shutdown
587 install_mutex_counters 0
drhbb77b752009-04-09 01:23:49 +0000588 sqlite3_initialize
589 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000590 }
591}
592
danielk1977b13dee92008-06-23 15:55:52 +0000593# run_tests "crash_safe_append" -description {
594# Run crash.test with persistent journals on a SAFE_APPEND file-system.
595# } -initialize {
596# rename crashsql sa_crashsql
597# proc crashsql {args} {
598# set options [lrange $args 0 [expr {[llength $args]-2}]]
599# lappend options -char safe_append
600# set sql [lindex $args end]
601# lappend options "
602# PRAGMA journal_mode=persistent;
603# $sql
604# "
605# set fd [open test.db-journal w]
606# puts $fd [string repeat 1234567890 100000]
607# close $fd
608# eval sa_crashsql $options
609# }
610# } -shutdown {
611# rename crashsql {}
612# rename sa_crashsql crashsql
613# } -include crash.test
614
danielk1977755339e2008-09-12 10:22:40 +0000615run_tests "safe_append" -description {
616 Run some tests on a SAFE_APPEND file-system.
617} -initialize {
618 rename sqlite3 sqlite3_safeappend
619 proc sqlite3 {args} {
620 if {[string range [lindex $args 0] 0 0] ne "-"} {
621 lappend args -vfs devsym
622 }
623 uplevel [concat sqlite3_safeappend $args]
624 }
625 sqlite3_simulate_device -char safe_append
626} -shutdown {
627 rename sqlite3 {}
628 rename sqlite3_shutdown sqlite3
629} -include [lsort [concat shared_err.test $ALLTESTS]] \
630 -exclude async3.test
631
drhb232c232008-11-19 01:20:26 +0000632# The set of tests to run on the alternative-pcache
633set perm-alt-pcache-testset {
634 async.test
635 attach.test
636 delete.test delete2.test
637 index.test
638 insert.test insert2.test
639 join.test join2.test
640 rollback.test
641 select1.test select2.test
642 trans.test
643 update.test
644}
645
646run_tests "pcache0" -description {
647 Alternative pcache implementation without random discard
648} -initialize {
649 catch {db close}
drhb232c232008-11-19 01:20:26 +0000650 sqlite3_shutdown
651 sqlite3_config_alt_pcache 1 0 1
652 sqlite3_initialize
653 autoinstall_test_functions
654} -shutdown {
655 catch {db close}
drhb232c232008-11-19 01:20:26 +0000656 sqlite3_shutdown
657 sqlite3_config_alt_pcache 0 0 0
658 sqlite3_config_lookaside 100 500
659 install_malloc_faultsim 1
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 "pcache10" -description {
665 Alternative pcache implementation without 10% 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 "pcache50" -description {
681 Alternative pcache implementation without 50% 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 "pcache90" -description {
697 Alternative pcache implementation without 90% random discard
698} -initialize {
699 catch {db close}
drhb232c232008-11-19 01:20:26 +0000700 sqlite3_shutdown
701 sqlite3_config_alt_pcache 1 50 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}
711
712run_tests "pcache100" -description {
713 Alternative pcache implementation that always discards when unpinning
714} -initialize {
715 catch {db close}
drhb232c232008-11-19 01:20:26 +0000716 sqlite3_shutdown
717 sqlite3_config_alt_pcache 1 100 1
718 sqlite3_initialize
719 autoinstall_test_functions
720} -shutdown {
721 catch {db close}
drhb232c232008-11-19 01:20:26 +0000722 sqlite3_shutdown
723 sqlite3_config_alt_pcache 0 0 0
724 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000725 autoinstall_test_functions
drhb232c232008-11-19 01:20:26 +0000726} -include ${perm-alt-pcache-testset}
danielk1977b13dee92008-06-23 15:55:52 +0000727
danielk1977f3107512008-12-22 10:58:46 +0000728run_tests "journaltest" -description {
729 Check that pages are synced before being written (test_journal.c).
730} -initialize {
dan430e74c2010-06-07 17:47:26 +0000731 set G(isquick) 1
danielk1977f3107512008-12-22 10:58:46 +0000732 catch {db close}
733 register_jt_vfs -default ""
danielk1977f2c31ad2009-01-06 13:40:08 +0000734 #sqlite3_instvfs binarylog -default binarylog ostrace.bin
danielk1977f3107512008-12-22 10:58:46 +0000735} -shutdown {
danielk1977f2c31ad2009-01-06 13:40:08 +0000736 #sqlite3_instvfs destroy binarylog
danielk1977f3107512008-12-22 10:58:46 +0000737 unregister_jt_vfs
drh2c47d192010-05-07 00:28:41 +0000738} -include $::ALLTESTS -exclude [concat $::WALTESTS {
danielk1977f3107512008-12-22 10:58:46 +0000739 incrvacuum.test
740 ioerr.test
741 corrupt4.test
742 io.test
danielk197793934972009-01-10 18:51:40 +0000743 crash8.test
danielk197724d4b292009-05-13 14:46:09 +0000744 async4.test
drh43377f52010-04-01 16:15:56 +0000745 bigfile.test
drhfb4a6262010-05-06 19:55:57 +0000746}]
danielk1977f3107512008-12-22 10:58:46 +0000747
dan0a7a9152010-04-07 07:57:38 +0000748if {[info commands register_demovfs] != ""} {
749 run_tests "demovfs" -description {
dan430e74c2010-06-07 17:47:26 +0000750 Check that the demovfs (code in test_demovfs.c) more or less works.
dan0a7a9152010-04-07 07:57:38 +0000751 } -initialize {
752 register_demovfs
753 } -shutdown {
754 unregister_demovfs
755 } -include {
756 insert.test insert2.test insert3.test rollback.test
757 select1.test select2.test select3.test
758 }
759}
760
dan71cb5182010-04-26 12:39:03 +0000761run_tests "wal" -description {
762 Run tests with journal_mode=WAL
dan31f98fc2010-04-27 05:42:32 +0000763} -initialize {
dan430e74c2010-06-07 17:47:26 +0000764 set ::G(savepoint6_iterations) 100
dan31f98fc2010-04-27 05:42:32 +0000765} -shutdown {
dan430e74c2010-06-07 17:47:26 +0000766 unset -nocomplain ::G(savepoint6_iterations)
dan71cb5182010-04-26 12:39:03 +0000767} -include {
dane106de62010-04-27 06:49:34 +0000768 savepoint.test savepoint2.test savepoint6.test
769 trans.test avtrans.test
dan71cb5182010-04-26 12:39:03 +0000770}
771
danielk19771077e3f2008-06-21 18:07:37 +0000772# End of tests
773#############################################################################
774
drh0a846f92008-08-25 17:23:29 +0000775if {$::perm::testmode eq "targets"} { puts "" ; exit }
danielk19771077e3f2008-06-21 18:07:37 +0000776
danielk19771077e3f2008-06-21 18:07:37 +0000777finish_test