blob: ffd14c6616a90a83200b6cc1a9d2a22fd9c32771 [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#
danielk19771077e3f2008-06-21 18:07:37 +000012
13set testdir [file dirname $argv0]
14source $testdir/tester.tcl
dan13a3cb82010-06-11 19:04:21 +000015db close
danielk19771077e3f2008-06-21 18:07:37 +000016
dan0626dfc2010-06-15 06:56:37 +000017#-------------------------------------------------------------------------
18# test_suite NAME OPTIONS
danielk19771077e3f2008-06-21 18:07:37 +000019#
20# where available options are:
21#
dan430e74c2010-06-07 17:47:26 +000022# -description TITLE (default "")
danielk19771077e3f2008-06-21 18:07:37 +000023# -initialize SCRIPT (default "")
24# -shutdown SCRIPT (default "")
danielk19771077e3f2008-06-21 18:07:37 +000025# -presql SQL (default "")
dan0626dfc2010-06-15 06:56:37 +000026# -files LIST-OF-FILES (default $::ALLTESTS)
dan2fce9ab2010-06-15 18:00:06 +000027# -prefix NAME (default "$::NAME.")
dan0626dfc2010-06-15 06:56:37 +000028#
29proc test_suite {name args} {
dan430e74c2010-06-07 17:47:26 +000030
dan0626dfc2010-06-15 06:56:37 +000031 set default(-shutdown) ""
32 set default(-initialize) ""
33 set default(-presql) ""
dan430e74c2010-06-07 17:47:26 +000034 set default(-description) "no description supplied (fixme)"
dan2fce9ab2010-06-15 18:00:06 +000035 set default(-files) ""
36 set default(-prefix) "${name}."
dan430e74c2010-06-07 17:47:26 +000037
38 array set options [array get default]
dan0626dfc2010-06-15 06:56:37 +000039 if {[llength $args]%2} {
40 error "uneven number of options/switches passed to test_suite"
dan430e74c2010-06-07 17:47:26 +000041 }
dan0626dfc2010-06-15 06:56:37 +000042 foreach {k v} $args {
43 set o [array names options ${k}*]
44 if {[llength $o]>1} { error "ambiguous option: $k" }
45 if {[llength $o]==0} { error "unknown option: $k" }
46 set options([lindex $o 0]) $v
drh0a846f92008-08-25 17:23:29 +000047 }
danielk19771077e3f2008-06-21 18:07:37 +000048
dan0626dfc2010-06-15 06:56:37 +000049 set ::testspec($name) [array get options]
50 lappend ::testsuitelist $name
dane91a54e2010-06-15 17:44:47 +000051
dan0626dfc2010-06-15 06:56:37 +000052}
dan430e74c2010-06-07 17:47:26 +000053
dan0626dfc2010-06-15 06:56:37 +000054#-------------------------------------------------------------------------
55# test_set ARGS...
56#
57proc test_set {args} {
58 set isExclude 0
59 foreach a $args {
60 if {[string match -* $a]} {
61 switch -- $a {
62 -include { set isExclude 0 }
63 -exclude { set isExclude 1 }
64 default {
65 error "Unknown switch: $a"
66 }
danielk1977c1def3e2008-08-30 13:25:10 +000067 }
dan0626dfc2010-06-15 06:56:37 +000068 } elseif {$isExclude == 0} {
69 foreach f $a { set t($f) 1 }
drh0a846f92008-08-25 17:23:29 +000070 } else {
dan0626dfc2010-06-15 06:56:37 +000071 foreach f $a { array unset t $f }
danielk19771077e3f2008-06-21 18:07:37 +000072 }
73 }
74
dan0626dfc2010-06-15 06:56:37 +000075 return [array names t]
danielk19771077e3f2008-06-21 18:07:37 +000076}
77
dan0626dfc2010-06-15 06:56:37 +000078#-------------------------------------------------------------------------
79# Set up the following global list variables containing the names of
80# various test scripts:
81#
82# $alltests
dan2fce9ab2010-06-15 18:00:06 +000083# $allquicktests
dan0626dfc2010-06-15 06:56:37 +000084#
dan0626dfc2010-06-15 06:56:37 +000085set alltests [list]
86foreach f [glob $testdir/*.test] { lappend alltests [file tail $f] }
87if {$::tcl_platform(platform)!="unix"} {
88 set alltests [test_set $alltests -exclude crash.test crash2.test]
danielk1977c1def3e2008-08-30 13:25:10 +000089}
dan0626dfc2010-06-15 06:56:37 +000090set alltests [test_set $alltests -exclude {
91 all.test async.test quick.test veryquick.test
92 memleak.test permutations.test soak.test fts3.test
93 mallocAll.test
94}]
95
96set allquicktests [test_set $alltests -exclude {
97 async2.test async3.test backup_ioerr.test corrupt.test
98 corruptC.test crash.test crash2.test crash3.test crash4.test crash5.test
99 crash6.test crash7.test delete3.test e_fts3.test fts3rnd.test
100 fkey_malloc.test fuzz.test fuzz3.test fuzz_malloc.test in2.test loadext.test
dan273f3f02010-06-26 15:42:33 +0000101 misc7.test mutex2.test notify2.test onefile.test pagerfault2.test
dan0626dfc2010-06-15 06:56:37 +0000102 savepoint4.test savepoint6.test select9.test
103 speed1.test speed1p.test speed2.test speed3.test speed4.test
104 speed4p.test sqllimits1.test tkt2686.test thread001.test thread002.test
105 thread003.test thread004.test thread005.test trans2.test vacuum3.test
106 incrvacuum_ioerr.test autovacuum_crash.test btree8.test shared_err.test
107 vtab_err.test walslow.test walcrash.test
dan273f3f02010-06-26 15:42:33 +0000108 walthread.test
dan0626dfc2010-06-15 06:56:37 +0000109}]
danielk1977c1def3e2008-08-30 13:25:10 +0000110
danielk19771077e3f2008-06-21 18:07:37 +0000111#############################################################################
112# Start of tests
dan0626dfc2010-06-15 06:56:37 +0000113#
114
115#-------------------------------------------------------------------------
116# Define the generic test suites:
117#
118# veryquick
119# quick
120# full
121# veryquick_plus_notify2
122#
dane91a54e2010-06-15 17:44:47 +0000123lappend ::testsuitelist xxx
dan0626dfc2010-06-15 06:56:37 +0000124
dan2fce9ab2010-06-15 18:00:06 +0000125test_suite "veryquick" -prefix "" -description {
dan0626dfc2010-06-15 06:56:37 +0000126 "Very" quick test suite. Runs in less than 5 minutes on a workstation.
127 This test suite is the same as the "quick" tests, except that some files
128 that test malloc and IO errors are omitted.
129} -files [
dan68928b62010-06-22 13:46:43 +0000130 test_set $allquicktests -exclude *malloc* *ioerr* *fault*
dan0626dfc2010-06-15 06:56:37 +0000131]
132
dan2fce9ab2010-06-15 18:00:06 +0000133test_suite "quick" -prefix "" -description {
dan0626dfc2010-06-15 06:56:37 +0000134 Quick test suite. Runs in around 10 minutes on a workstation.
135} -files [
136 test_set $allquicktests
137]
138
dan2fce9ab2010-06-15 18:00:06 +0000139test_suite "veryquick_plus_notify2" -prefix "" -description {
dan0626dfc2010-06-15 06:56:37 +0000140 Very quick test suite + file notify2.test. This is used by one of the
141 sqlite.org release test configurations.
142} -files [
143 test_set $allquicktests notify2.test -exclude *malloc* *ioerr* *fault*
144]
145
dan2fce9ab2010-06-15 18:00:06 +0000146test_suite "full" -prefix "" -description {
dan0626dfc2010-06-15 06:56:37 +0000147 Full test suite. Takes a long time.
148} -files [
149 test_set $alltests
150] -initialize {
151 unset -nocomplain ::G(isquick)
152}
153
dane91a54e2010-06-15 17:44:47 +0000154lappend ::testsuitelist xxx
dan0626dfc2010-06-15 06:56:37 +0000155#-------------------------------------------------------------------------
156# Define the coverage related test suites:
157#
158# coverage-wal
dan0626dfc2010-06-15 06:56:37 +0000159#
160test_suite "coverage-wal" -description {
161 Coverage tests for file wal.c.
162} -files {
danf43d7fc2010-07-03 10:00:00 +0000163 wal.test wal2.test wal3.test walmode.test
164 walbak.test walhook.test walcrash2.test walcksum.test
dan0626dfc2010-06-15 06:56:37 +0000165 walfault.test
166}
167
dane91a54e2010-06-15 17:44:47 +0000168test_suite "coverage-pager" -description {
169 Coverage tests for file pager.c.
170} -files {
danf43d7fc2010-07-03 10:00:00 +0000171 pager1.test pager2.test pagerfault.test pagerfault2.test
172 walfault.test walbak.test journal2.test tkt-9d68c883.test
dane91a54e2010-06-15 17:44:47 +0000173}
dan0626dfc2010-06-15 06:56:37 +0000174
175
dane91a54e2010-06-15 17:44:47 +0000176lappend ::testsuitelist xxx
dan0626dfc2010-06-15 06:56:37 +0000177#-------------------------------------------------------------------------
178# Define the permutation test suites:
179#
danielk19771077e3f2008-06-21 18:07:37 +0000180
181# Run some tests using pre-allocated page and scratch blocks.
182#
dan0626dfc2010-06-15 06:56:37 +0000183test_suite "memsubsys1" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000184 Tests using pre-allocated page and scratch blocks
dan0626dfc2010-06-15 06:56:37 +0000185} -files [
186 test_set $::allquicktests -exclude ioerr5.test malloc5.test
187] -initialize {
drhd63bd752008-07-30 13:15:46 +0000188 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000189 sqlite3_shutdown
190 sqlite3_config_pagecache 4096 24
191 sqlite3_config_scratch 25000 1
192 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000193 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000194} -shutdown {
195 catch {db close}
196 sqlite3_shutdown
197 sqlite3_config_pagecache 0 0
198 sqlite3_config_scratch 0 0
199 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000200 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000201}
202
203# Run some tests using pre-allocated page and scratch blocks. This time
204# the allocations are too small to use in most cases.
205#
danielk197734c61e62008-08-29 12:00:20 +0000206# Both ioerr5.test and malloc5.test are excluded because they test the
207# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
208# This functionality is disabled if a pre-allocated page block is provided.
209#
dan0626dfc2010-06-15 06:56:37 +0000210test_suite "memsubsys2" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000211 Tests using small pre-allocated page and scratch blocks
dan0626dfc2010-06-15 06:56:37 +0000212} -files [
213 test_set $::allquicktests -exclude ioerr5.test malloc5.test
214] -initialize {
drhd63bd752008-07-30 13:15:46 +0000215 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000216 sqlite3_shutdown
217 sqlite3_config_pagecache 512 5
218 sqlite3_config_scratch 1000 1
219 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000220 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000221} -shutdown {
222 catch {db close}
223 sqlite3_shutdown
224 sqlite3_config_pagecache 0 0
225 sqlite3_config_scratch 0 0
226 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000227 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000228}
229
drhe2a7c6e2008-08-01 15:06:30 +0000230# Run all tests with the lookaside allocator disabled.
231#
dan0626dfc2010-06-15 06:56:37 +0000232test_suite "nolookaside" -description {
drhe2a7c6e2008-08-01 15:06:30 +0000233 OOM tests with lookaside disabled
drhe2a7c6e2008-08-01 15:06:30 +0000234} -initialize {
235 catch {db close}
236 sqlite3_shutdown
237 sqlite3_config_lookaside 0 0
238 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000239 autoinstall_test_functions
drhe2a7c6e2008-08-01 15:06:30 +0000240} -shutdown {
241 catch {db close}
242 sqlite3_shutdown
243 sqlite3_config_lookaside 100 500
244 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000245 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000246} -files $::allquicktests
drhe2a7c6e2008-08-01 15:06:30 +0000247
danielk19771077e3f2008-06-21 18:07:37 +0000248# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
249#
dan0626dfc2010-06-15 06:56:37 +0000250test_suite "singlethread" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000251 Tests run in SQLITE_CONFIG_SINGLETHREAD mode
252} -initialize {
drh04df18d2009-01-06 14:50:11 +0000253 catch {db close}
254 sqlite3_shutdown
255 catch {sqlite3_config singlethread}
drhbb77b752009-04-09 01:23:49 +0000256 sqlite3_initialize
257 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000258} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000259 delete.test delete2.test insert.test rollback.test select1.test
260 select2.test trans.test update.test vacuum.test types.test
261 types2.test types3.test
262} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000263 catch {db close}
264 sqlite3_shutdown
265 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000266 sqlite3_initialize
267 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000268}
269
dan0626dfc2010-06-15 06:56:37 +0000270test_suite "nomutex" -description {
drh039963a2008-09-03 00:43:15 +0000271 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
danielk19779a6284c2008-07-10 17:52:49 +0000272} -initialize {
273 rename sqlite3 sqlite3_nomutex
274 proc sqlite3 {args} {
275 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000276 lappend args -fullmutex 0 -nomutex 1
danielk19779a6284c2008-07-10 17:52:49 +0000277 }
278 uplevel [concat sqlite3_nomutex $args]
279 }
dan0626dfc2010-06-15 06:56:37 +0000280} -files {
danielk19779a6284c2008-07-10 17:52:49 +0000281 delete.test delete2.test insert.test rollback.test select1.test
282 select2.test trans.test update.test vacuum.test types.test
283 types2.test types3.test
284} -shutdown {
285 rename sqlite3 {}
286 rename sqlite3_nomutex sqlite3
287}
288
danielk19771077e3f2008-06-21 18:07:37 +0000289# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
290#
dan0626dfc2010-06-15 06:56:37 +0000291test_suite "multithread" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000292 Tests run in SQLITE_CONFIG_MULTITHREAD mode
293} -initialize {
drh04df18d2009-01-06 14:50:11 +0000294 catch {db close}
295 sqlite3_shutdown
296 catch {sqlite3_config multithread}
drhbb77b752009-04-09 01:23:49 +0000297 sqlite3_initialize
298 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000299} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000300 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 {
drh04df18d2009-01-06 14:50:11 +0000304 catch {db close}
305 sqlite3_shutdown
306 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000307 sqlite3_initialize
308 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000309}
310
drh039963a2008-09-03 00:43:15 +0000311# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
312#
dan0626dfc2010-06-15 06:56:37 +0000313test_suite "fullmutex" -description {
drh039963a2008-09-03 00:43:15 +0000314 Tests run in SQLITE_OPEN_FULLMUTEX mode
315} -initialize {
316 rename sqlite3 sqlite3_fullmutex
317 proc sqlite3 {args} {
318 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000319 lappend args -nomutex 0 -fullmutex 1
drh039963a2008-09-03 00:43:15 +0000320 }
321 uplevel [concat sqlite3_fullmutex $args]
322 }
dan0626dfc2010-06-15 06:56:37 +0000323} -files {
drh039963a2008-09-03 00:43:15 +0000324 delete.test delete2.test insert.test rollback.test select1.test
325 select2.test trans.test update.test vacuum.test types.test
326 types2.test types3.test
327} -shutdown {
328 rename sqlite3 {}
329 rename sqlite3_fullmutex sqlite3
330}
331
danielk19771077e3f2008-06-21 18:07:37 +0000332# Run some tests using the "onefile" demo.
333#
dan0626dfc2010-06-15 06:56:37 +0000334test_suite "onefile" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000335 Run some tests using the "test_onefile.c" demo
336} -initialize {
337 rename sqlite3 sqlite3_onefile
338 proc sqlite3 {args} {
339 if {[string range [lindex $args 0] 0 0] ne "-"} {
340 lappend args -vfs fs
341 }
342 uplevel [concat sqlite3_onefile $args]
343 }
dan0626dfc2010-06-15 06:56:37 +0000344} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000345 conflict.test insert.test insert2.test insert3.test
346 rollback.test select1.test select2.test select3.test
danielk19771077e3f2008-06-21 18:07:37 +0000347} -shutdown {
348 rename sqlite3 {}
349 rename sqlite3_onefile sqlite3
350}
351
352# Run some tests using UTF-16 databases.
353#
dan0626dfc2010-06-15 06:56:37 +0000354test_suite "utf16" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000355 Run tests using UTF-16 databases
danielk19772dd6d802008-06-21 19:10:27 +0000356} -presql {
danielk19771077e3f2008-06-21 18:07:37 +0000357 pragma encoding = 'UTF-16'
dan0626dfc2010-06-15 06:56:37 +0000358} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000359 alter.test alter3.test
360 auth.test bind.test blob.test capi2.test capi3.test collate1.test
361 collate2.test collate3.test collate4.test collate5.test collate6.test
362 conflict.test date.test delete.test expr.test fkey1.test func.test
363 hook.test index.test insert2.test insert.test interrupt.test in.test
364 intpkey.test ioerr.test join2.test join.test lastinsert.test
365 laststmtchanges.test limit.test lock2.test lock.test main.test
366 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
367 null.test progress.test quote.test rowid.test select1.test select2.test
368 select3.test select4.test select5.test select6.test sort.test
369 subselect.test tableapi.test table.test temptable.test
370 trace.test trigger1.test trigger2.test trigger3.test
371 trigger4.test types2.test types.test unique.test update.test
372 vacuum.test view.test where.test
373}
374
375# Run some tests in exclusive locking mode.
376#
dan0626dfc2010-06-15 06:56:37 +0000377test_suite "exclusive" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000378 Run tests in exclusive locking mode.
379} -presql {
380 pragma locking_mode = 'exclusive'
dan0626dfc2010-06-15 06:56:37 +0000381} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000382 rollback.test select1.test select2.test
383 malloc.test ioerr.test
384}
385
drh04335882008-09-26 21:08:08 +0000386# Run some tests in exclusive locking mode with truncated journals.
387#
dan0626dfc2010-06-15 06:56:37 +0000388test_suite "exclusive-truncate" -description {
drh04335882008-09-26 21:08:08 +0000389 Run tests in exclusive locking mode and truncate journal mode.
390} -presql {
391 pragma locking_mode = 'exclusive';
392 pragma journal_mode = TRUNCATE;
dan0626dfc2010-06-15 06:56:37 +0000393} -files {
drh04335882008-09-26 21:08:08 +0000394 delete.test delete2.test insert.test rollback.test select1.test
395 select2.test update.test malloc.test ioerr.test
396}
397
danielk19771077e3f2008-06-21 18:07:37 +0000398# Run some tests in persistent journal mode.
399#
dan0626dfc2010-06-15 06:56:37 +0000400test_suite "persistent_journal" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000401 Run tests in persistent-journal mode.
402} -presql {
403 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000404} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000405 delete.test delete2.test insert.test rollback.test select1.test
406 select2.test trans.test update.test vacuum.test
407}
408
drh04335882008-09-26 21:08:08 +0000409# Run some tests in truncating journal mode.
410#
dan0626dfc2010-06-15 06:56:37 +0000411test_suite "truncate_journal" -description {
drh04335882008-09-26 21:08:08 +0000412 Run tests in persistent-journal mode.
413} -presql {
414 pragma journal_mode = truncate
dan0626dfc2010-06-15 06:56:37 +0000415} -files {
drh04335882008-09-26 21:08:08 +0000416 delete.test delete2.test insert.test rollback.test select1.test
417 select2.test trans.test update.test vacuum.test
418 malloc.test ioerr.test
419}
420
danielk19771077e3f2008-06-21 18:07:37 +0000421# Run some error tests in persistent journal mode.
422#
dan0626dfc2010-06-15 06:56:37 +0000423test_suite "persistent_journal_error" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000424 Run malloc.test and ioerr.test in persistent-journal mode.
425} -presql {
426 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000427} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000428 malloc.test ioerr.test
429}
430
431# Run some tests in no journal mode.
432#
dan0626dfc2010-06-15 06:56:37 +0000433test_suite "no_journal" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000434 Run tests in no-journal mode.
435} -presql {
436 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000437} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000438 delete.test delete2.test insert.test rollback.test select1.test
439 select2.test trans.test update.test vacuum.test
440}
441
442# Run some error tests in no journal mode.
443#
dan0626dfc2010-06-15 06:56:37 +0000444test_suite "no_journal_error" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000445 Run malloc.test and ioerr.test in no-journal mode.
446} -presql {
447 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000448} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000449 malloc.test ioerr.test
450}
451
452# Run some crash-tests in autovacuum mode.
453#
dan0626dfc2010-06-15 06:56:37 +0000454test_suite "autovacuum_crash" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000455 Run crash.test in autovacuum mode.
456} -presql {
457 pragma auto_vacuum = 1
dan0626dfc2010-06-15 06:56:37 +0000458} -files crash.test
danielk19771077e3f2008-06-21 18:07:37 +0000459
460# Run some ioerr-tests in autovacuum mode.
461#
dan0626dfc2010-06-15 06:56:37 +0000462test_suite "autovacuum_ioerr" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000463 Run ioerr.test in autovacuum mode.
464} -presql {
465 pragma auto_vacuum = 1
dan0626dfc2010-06-15 06:56:37 +0000466} -files ioerr.test
danielk19771077e3f2008-06-21 18:07:37 +0000467
danielk1977b3175382008-10-17 18:51:52 +0000468# Run tests with an in-memory journal.
469#
dan0626dfc2010-06-15 06:56:37 +0000470test_suite "inmemory_journal" -description {
danielk1977b3175382008-10-17 18:51:52 +0000471 Run tests with an in-memory journal file.
472} -presql {
473 pragma journal_mode = 'memory'
dan0626dfc2010-06-15 06:56:37 +0000474} -files [test_set $::allquicktests -exclude {
danielk1977b3175382008-10-17 18:51:52 +0000475 # Exclude all tests that simulate IO errors.
476 autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test
477 ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test
drh2206a2b2009-04-01 23:09:43 +0000478 vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test
drh08ede1d2010-04-12 20:54:13 +0000479 e_fts3.test
danielk1977b3175382008-10-17 18:51:52 +0000480
481 # Exclude test scripts that use tcl IO to access journal files or count
482 # the number of fsync() calls.
483 pager.test exclusive.test jrnlmode.test sync.test misc1.test
danielk1977cb257902009-04-10 18:32:29 +0000484 journal1.test conflict.test crash8.test tkt3457.test io.test
dan01d38562010-03-08 10:32:38 +0000485
486 # Exclude stmt.test, which expects sub-journals to use temporary files.
487 stmt.test
drh0b944132010-05-24 20:24:38 +0000488
489 # WAL mode is different.
dan0626dfc2010-06-15 06:56:37 +0000490 wal*
491}]
danielk1977b3175382008-10-17 18:51:52 +0000492
danielk19776b39c2e2008-06-25 14:57:53 +0000493ifcapable mem3 {
dan0626dfc2010-06-15 06:56:37 +0000494 test_suite "memsys3" -description {
danielk19776b39c2e2008-06-25 14:57:53 +0000495 Run tests using the allocator in mem3.c.
dan0626dfc2010-06-15 06:56:37 +0000496 } [test_set $::allquicktests -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000497 autovacuum.test delete3.test manydb.test
498 bigrow.test incrblob2.test memdb.test
499 bitvec.test index2.test memsubsys1.test
500 capi3c.test ioerr.test memsubsys2.test
501 capi3.test join3.test pagesize.test
danielk19778b322822009-07-01 18:09:01 +0000502 collate5.test limit.test backup_ioerr.test
503 backup_malloc.test
dan0626dfc2010-06-15 06:56:37 +0000504 }] -initialize {
danielk19776b39c2e2008-06-25 14:57:53 +0000505 catch {db close}
506 sqlite3_reset_auto_extension
507 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000508 sqlite3_config_heap 25000000 0
drhe2a7c6e2008-08-01 15:06:30 +0000509 sqlite3_config_lookaside 0 0
danielk19778b322822009-07-01 18:09:01 +0000510 ifcapable mem5 {
511 # If both memsys3 and memsys5 are enabled in the build, the call to
512 # [sqlite3_config_heap] will initialize the system to use memsys5.
513 # The following overrides this preference and installs the memsys3
514 # allocator.
515 sqlite3_install_memsys3
516 }
danielk19776b39c2e2008-06-25 14:57:53 +0000517 install_malloc_faultsim 1
518 sqlite3_initialize
519 autoinstall_test_functions
520 } -shutdown {
521 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000522 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000523 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000524 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000525 install_malloc_faultsim 1
526 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000527 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000528 }
danielk197757e5ea92008-06-24 19:02:55 +0000529}
530
danielk19776b39c2e2008-06-25 14:57:53 +0000531ifcapable mem5 {
dan0626dfc2010-06-15 06:56:37 +0000532 test_suite "memsys5" -description {
danielk19776b39c2e2008-06-25 14:57:53 +0000533 Run tests using the allocator in mem5.c.
dan0626dfc2010-06-15 06:56:37 +0000534 } [test_set $::allquicktests -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000535 autovacuum.test delete3.test manydb.test
536 bigrow.test incrblob2.test memdb.test
537 bitvec.test index2.test memsubsys1.test
538 capi3c.test ioerr.test memsubsys2.test
539 capi3.test join3.test pagesize.test
danielk1977ac8d7b32008-11-13 16:21:50 +0000540 collate5.test limit.test zeroblob.test
dan0626dfc2010-06-15 06:56:37 +0000541 }] -initialize {
danielk19776b39c2e2008-06-25 14:57:53 +0000542 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000543 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000544 sqlite3_config_heap 25000000 64
drhe2a7c6e2008-08-01 15:06:30 +0000545 sqlite3_config_lookaside 0 0
danielk19775099be52008-06-27 13:27:03 +0000546 install_malloc_faultsim 1
547 sqlite3_initialize
548 autoinstall_test_functions
549 } -shutdown {
550 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000551 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000552 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000553 sqlite3_config_lookaside 100 500
danielk19775099be52008-06-27 13:27:03 +0000554 install_malloc_faultsim 1
555 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000556 autoinstall_test_functions
danielk19775099be52008-06-27 13:27:03 +0000557 }
558
dan0626dfc2010-06-15 06:56:37 +0000559 test_suite "memsys5-2" -description {
danielk19775099be52008-06-27 13:27:03 +0000560 Run tests using the allocator in mem5.c in a different configuration.
dan0626dfc2010-06-15 06:56:37 +0000561 } -files {
drh8a42cbd2008-07-10 18:13:42 +0000562 select1.test
danielk19775099be52008-06-27 13:27:03 +0000563 } -initialize {
564 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000565 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000566 sqlite3_config_heap 40000000 16
drhe2a7c6e2008-08-01 15:06:30 +0000567 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000568 install_malloc_faultsim 1
569 sqlite3_initialize
570 autoinstall_test_functions
571 } -shutdown {
572 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000573 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000574 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000575 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000576 install_malloc_faultsim 1
577 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000578 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000579 }
danielk1977c66c0e12008-06-25 14:26:07 +0000580}
581
drh8a42cbd2008-07-10 18:13:42 +0000582ifcapable threadsafe {
dan0626dfc2010-06-15 06:56:37 +0000583 test_suite "no_mutex_try" -description {
drh8a42cbd2008-07-10 18:13:42 +0000584 The sqlite3_mutex_try() interface always fails
dan0626dfc2010-06-15 06:56:37 +0000585 } -files [
586 test_set $::allquicktests -exclude mutex1.test mutex2.test
587 ] -initialize {
drh8a42cbd2008-07-10 18:13:42 +0000588 catch {db close}
589 sqlite3_shutdown
590 install_mutex_counters 1
591 set ::disable_mutex_try 1
drhbb77b752009-04-09 01:23:49 +0000592 sqlite3_initialize
593 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000594 } -shutdown {
595 catch {db close}
596 sqlite3_shutdown
597 install_mutex_counters 0
drhbb77b752009-04-09 01:23:49 +0000598 sqlite3_initialize
599 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000600 }
601}
602
danielk1977b13dee92008-06-23 15:55:52 +0000603# run_tests "crash_safe_append" -description {
604# Run crash.test with persistent journals on a SAFE_APPEND file-system.
605# } -initialize {
606# rename crashsql sa_crashsql
607# proc crashsql {args} {
608# set options [lrange $args 0 [expr {[llength $args]-2}]]
609# lappend options -char safe_append
610# set sql [lindex $args end]
611# lappend options "
612# PRAGMA journal_mode=persistent;
613# $sql
614# "
615# set fd [open test.db-journal w]
616# puts $fd [string repeat 1234567890 100000]
617# close $fd
618# eval sa_crashsql $options
619# }
620# } -shutdown {
621# rename crashsql {}
622# rename sa_crashsql crashsql
dan0626dfc2010-06-15 06:56:37 +0000623# } -files crash.test
danielk1977b13dee92008-06-23 15:55:52 +0000624
dan0626dfc2010-06-15 06:56:37 +0000625test_suite "safe_append" -description {
danielk1977755339e2008-09-12 10:22:40 +0000626 Run some tests on a SAFE_APPEND file-system.
627} -initialize {
628 rename sqlite3 sqlite3_safeappend
629 proc sqlite3 {args} {
630 if {[string range [lindex $args 0] 0 0] ne "-"} {
631 lappend args -vfs devsym
632 }
633 uplevel [concat sqlite3_safeappend $args]
634 }
635 sqlite3_simulate_device -char safe_append
636} -shutdown {
637 rename sqlite3 {}
638 rename sqlite3_shutdown sqlite3
dan0626dfc2010-06-15 06:56:37 +0000639} -files [
640 test_set $::allquicktests shared_err.test -exclude async3.test
641]
danielk1977755339e2008-09-12 10:22:40 +0000642
drhb232c232008-11-19 01:20:26 +0000643# The set of tests to run on the alternative-pcache
644set perm-alt-pcache-testset {
645 async.test
646 attach.test
647 delete.test delete2.test
648 index.test
649 insert.test insert2.test
650 join.test join2.test
651 rollback.test
652 select1.test select2.test
653 trans.test
654 update.test
655}
656
dan0626dfc2010-06-15 06:56:37 +0000657test_suite "pcache0" -description {
drhb232c232008-11-19 01:20:26 +0000658 Alternative pcache implementation without random discard
659} -initialize {
660 catch {db close}
drhb232c232008-11-19 01:20:26 +0000661 sqlite3_shutdown
662 sqlite3_config_alt_pcache 1 0 1
663 sqlite3_initialize
664 autoinstall_test_functions
665} -shutdown {
666 catch {db close}
drhb232c232008-11-19 01:20:26 +0000667 sqlite3_shutdown
668 sqlite3_config_alt_pcache 0 0 0
669 sqlite3_config_lookaside 100 500
670 install_malloc_faultsim 1
671 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000672 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000673} -files ${perm-alt-pcache-testset}
drhb232c232008-11-19 01:20:26 +0000674
dan0626dfc2010-06-15 06:56:37 +0000675test_suite "pcache10" -description {
drhb232c232008-11-19 01:20:26 +0000676 Alternative pcache implementation without 10% random discard
677} -initialize {
678 catch {db close}
drhb232c232008-11-19 01:20:26 +0000679 sqlite3_shutdown
680 sqlite3_config_alt_pcache 1 50 1
681 sqlite3_initialize
682 autoinstall_test_functions
683} -shutdown {
684 catch {db close}
drhb232c232008-11-19 01:20:26 +0000685 sqlite3_shutdown
686 sqlite3_config_alt_pcache 0 0 0
687 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000688 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000689} -files ${perm-alt-pcache-testset}
drhb232c232008-11-19 01:20:26 +0000690
dan0626dfc2010-06-15 06:56:37 +0000691test_suite "pcache50" -description {
drhb232c232008-11-19 01:20:26 +0000692 Alternative pcache implementation without 50% random discard
693} -initialize {
694 catch {db close}
drhb232c232008-11-19 01:20:26 +0000695 sqlite3_shutdown
696 sqlite3_config_alt_pcache 1 50 1
697 sqlite3_initialize
698 autoinstall_test_functions
699} -shutdown {
700 catch {db close}
drhb232c232008-11-19 01:20:26 +0000701 sqlite3_shutdown
702 sqlite3_config_alt_pcache 0 0 0
703 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000704 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000705} -files ${perm-alt-pcache-testset}
drhb232c232008-11-19 01:20:26 +0000706
dan0626dfc2010-06-15 06:56:37 +0000707test_suite "pcache90" -description {
drhb232c232008-11-19 01:20:26 +0000708 Alternative pcache implementation without 90% random discard
709} -initialize {
710 catch {db close}
drhb232c232008-11-19 01:20:26 +0000711 sqlite3_shutdown
712 sqlite3_config_alt_pcache 1 50 1
713 sqlite3_initialize
714 autoinstall_test_functions
715} -shutdown {
716 catch {db close}
drhb232c232008-11-19 01:20:26 +0000717 sqlite3_shutdown
718 sqlite3_config_alt_pcache 0 0 0
719 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000720 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000721} -files ${perm-alt-pcache-testset}
drhb232c232008-11-19 01:20:26 +0000722
dan0626dfc2010-06-15 06:56:37 +0000723test_suite "pcache100" -description {
drhb232c232008-11-19 01:20:26 +0000724 Alternative pcache implementation that always discards when unpinning
725} -initialize {
726 catch {db close}
drhb232c232008-11-19 01:20:26 +0000727 sqlite3_shutdown
728 sqlite3_config_alt_pcache 1 100 1
729 sqlite3_initialize
730 autoinstall_test_functions
731} -shutdown {
732 catch {db close}
drhb232c232008-11-19 01:20:26 +0000733 sqlite3_shutdown
734 sqlite3_config_alt_pcache 0 0 0
735 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000736 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000737} -files ${perm-alt-pcache-testset}
danielk1977b13dee92008-06-23 15:55:52 +0000738
dan0626dfc2010-06-15 06:56:37 +0000739test_suite "journaltest" -description {
danielk1977f3107512008-12-22 10:58:46 +0000740 Check that pages are synced before being written (test_journal.c).
741} -initialize {
danielk1977f3107512008-12-22 10:58:46 +0000742 catch {db close}
743 register_jt_vfs -default ""
744} -shutdown {
745 unregister_jt_vfs
dan0626dfc2010-06-15 06:56:37 +0000746} -files [test_set $::allquicktests -exclude {
747 wal* incrvacuum.test ioerr.test corrupt4.test io.test crash8.test
748 async4.test 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] != ""} {
dan0626dfc2010-06-15 06:56:37 +0000752 test_suite "demovfs" -description {
dan430e74c2010-06-07 17:47:26 +0000753 Check that the demovfs (code in test_demovfs.c) more or less works.
dan0a7a9152010-04-07 07:57:38 +0000754 } -initialize {
755 register_demovfs
756 } -shutdown {
757 unregister_demovfs
dan0626dfc2010-06-15 06:56:37 +0000758 } -files {
dan0a7a9152010-04-07 07:57:38 +0000759 insert.test insert2.test insert3.test rollback.test
760 select1.test select2.test select3.test
761 }
762}
763
dan0626dfc2010-06-15 06:56:37 +0000764test_suite "wal" -description {
dan71cb5182010-04-26 12:39:03 +0000765 Run tests with journal_mode=WAL
dan31f98fc2010-04-27 05:42:32 +0000766} -initialize {
dan430e74c2010-06-07 17:47:26 +0000767 set ::G(savepoint6_iterations) 100
dan31f98fc2010-04-27 05:42:32 +0000768} -shutdown {
dan430e74c2010-06-07 17:47:26 +0000769 unset -nocomplain ::G(savepoint6_iterations)
dan0626dfc2010-06-15 06:56:37 +0000770} -files {
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}
danielk19771077e3f2008-06-21 18:07:37 +0000774# End of tests
775#############################################################################
776
dan0626dfc2010-06-15 06:56:37 +0000777# run_tests NAME OPTIONS
778#
779# where available options are:
780#
dan2fce9ab2010-06-15 18:00:06 +0000781# -description TITLE
782# -initialize SCRIPT
783# -shutdown SCRIPT
784# -presql SQL
785# -files LIST-OF-FILES
786# -prefix NAME
dan0626dfc2010-06-15 06:56:37 +0000787#
788proc run_tests {name args} {
789 array set options $args
danielk19771077e3f2008-06-21 18:07:37 +0000790
dand506de02010-07-03 13:59:01 +0000791 set ::G(perm:name) $name
792 set ::G(perm:prefix) $options(-prefix)
dan0626dfc2010-06-15 06:56:37 +0000793 set ::G(perm:presql) $options(-presql)
794 set ::G(isquick) 1
795
796 uplevel $options(-initialize)
797
798 foreach file [lsort $options(-files)] {
799 slave_test_file $::testdir/$file
800 }
801
802 uplevel $options(-shutdown)
803
804 unset ::G(perm:name)
dand506de02010-07-03 13:59:01 +0000805 unset ::G(perm:prefix)
dan0626dfc2010-06-15 06:56:37 +0000806 unset ::G(perm:presql)
807}
808
809proc run_test_suite {name} {
810 if {[info exists ::testspec($name)]==0} {
811 error "No such test suite: $name"
812 }
813 uplevel run_tests $name $::testspec($name)
814}
815
816proc help {} {
dane91a54e2010-06-15 17:44:47 +0000817 puts "Usage: $::argv0 TESTSUITE ?TESTFILE?"
818 puts ""
819 puts "Available test-suites are:"
dan0626dfc2010-06-15 06:56:37 +0000820 foreach k $::testsuitelist {
dane91a54e2010-06-15 17:44:47 +0000821 if {[info exists ::testspec($k)]==0} {
822 puts " ----------------------------------------"
823 puts ""
824 } else {
825 array set o $::testspec($k)
826 puts "Test suite: \"$k\""
827 set d [string trim $o(-description)]
828 set d [regsub {\n *} $d "\n "]
829 puts " $d"
830 puts ""
831 }
dan0626dfc2010-06-15 06:56:37 +0000832 }
833 exit -1
834}
835
836if {[info script] == $argv0} {
837 proc main {argv} {
838 if {[llength $argv]==0} {
839 help
840 } else {
841 set suite [lindex $argv 0]
842 if {[info exists ::testspec($suite)]==0} help
843 set extra ""
844 if {[llength $argv]>1} { set extra [list -files [lrange $argv 1 end]] }
845 eval run_tests $suite $::testspec($suite) $extra
846 }
847 }
848 main $argv
849 finish_test
850}
851