blob: 2ae739fbbce24a42636d4b27a530f115a7a7b588 [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
dan13a3cb82010-06-11 19:04:21 +000016db close
danielk19771077e3f2008-06-21 18:07:37 +000017
dan0626dfc2010-06-15 06:56:37 +000018#-------------------------------------------------------------------------
19# test_suite NAME OPTIONS
danielk19771077e3f2008-06-21 18:07:37 +000020#
21# where available options are:
22#
dan430e74c2010-06-07 17:47:26 +000023# -description TITLE (default "")
danielk19771077e3f2008-06-21 18:07:37 +000024# -initialize SCRIPT (default "")
25# -shutdown SCRIPT (default "")
danielk19771077e3f2008-06-21 18:07:37 +000026# -presql SQL (default "")
dan0626dfc2010-06-15 06:56:37 +000027# -files LIST-OF-FILES (default $::ALLTESTS)
danielk19771077e3f2008-06-21 18:07:37 +000028#
dan0626dfc2010-06-15 06:56:37 +000029#
30proc test_suite {name args} {
dan430e74c2010-06-07 17:47:26 +000031
dan0626dfc2010-06-15 06:56:37 +000032 set default(-shutdown) ""
33 set default(-initialize) ""
34 set default(-presql) ""
dan430e74c2010-06-07 17:47:26 +000035 set default(-description) "no description supplied (fixme)"
dan0626dfc2010-06-15 06:56:37 +000036 set default(-files) ""
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
51}
dan430e74c2010-06-07 17:47:26 +000052
dan0626dfc2010-06-15 06:56:37 +000053#-------------------------------------------------------------------------
54# test_set ARGS...
55#
56proc test_set {args} {
57 set isExclude 0
58 foreach a $args {
59 if {[string match -* $a]} {
60 switch -- $a {
61 -include { set isExclude 0 }
62 -exclude { set isExclude 1 }
63 default {
64 error "Unknown switch: $a"
65 }
danielk1977c1def3e2008-08-30 13:25:10 +000066 }
dan0626dfc2010-06-15 06:56:37 +000067 } elseif {$isExclude == 0} {
68 foreach f $a { set t($f) 1 }
drh0a846f92008-08-25 17:23:29 +000069 } else {
dan0626dfc2010-06-15 06:56:37 +000070 foreach f $a { array unset t $f }
danielk19771077e3f2008-06-21 18:07:37 +000071 }
72 }
73
dan0626dfc2010-06-15 06:56:37 +000074 return [array names t]
danielk19771077e3f2008-06-21 18:07:37 +000075}
76
dan0626dfc2010-06-15 06:56:37 +000077#-------------------------------------------------------------------------
78# Set up the following global list variables containing the names of
79# various test scripts:
80#
81# $alltests
82# $slowtests
83#
84
85set 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
101 misc7.test mutex2.test notify2.test onefile.test
102 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
108 walthread.test
109}]
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#
123
124test_suite "veryquick" -description {
125 "Very" quick test suite. Runs in less than 5 minutes on a workstation.
126 This test suite is the same as the "quick" tests, except that some files
127 that test malloc and IO errors are omitted.
128} -files [
129 test_set $allquicktests -exclude *malloc* *ioerr* *fault*
130]
131
132test_suite "quick" -description {
133 Quick test suite. Runs in around 10 minutes on a workstation.
134} -files [
135 test_set $allquicktests
136]
137
138test_suite "veryquick_plus_notify2" -description {
139 Very quick test suite + file notify2.test. This is used by one of the
140 sqlite.org release test configurations.
141} -files [
142 test_set $allquicktests notify2.test -exclude *malloc* *ioerr* *fault*
143]
144
145test_suite "full" -description {
146 Full test suite. Takes a long time.
147} -files [
148 test_set $alltests
149] -initialize {
150 unset -nocomplain ::G(isquick)
151}
152
153#-------------------------------------------------------------------------
154# Define the coverage related test suites:
155#
156# coverage-wal
157# coverage-fkey
158#
159test_suite "coverage-wal" -description {
160 Coverage tests for file wal.c.
161} -files {
162 wal.test wal2.test wal3.test walmode.test
163 walbak.test walhook.test walcrash2.test walcksum.test
164 walfault.test
165}
166
167
168
169#-------------------------------------------------------------------------
170# Define the permutation test suites:
171#
danielk19771077e3f2008-06-21 18:07:37 +0000172
173# Run some tests using pre-allocated page and scratch blocks.
174#
dan0626dfc2010-06-15 06:56:37 +0000175test_suite "memsubsys1" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000176 Tests using pre-allocated page and scratch blocks
dan0626dfc2010-06-15 06:56:37 +0000177} -files [
178 test_set $::allquicktests -exclude ioerr5.test malloc5.test
179] -initialize {
drhd63bd752008-07-30 13:15:46 +0000180 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000181 sqlite3_shutdown
182 sqlite3_config_pagecache 4096 24
183 sqlite3_config_scratch 25000 1
184 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000185 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000186} -shutdown {
187 catch {db close}
188 sqlite3_shutdown
189 sqlite3_config_pagecache 0 0
190 sqlite3_config_scratch 0 0
191 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000192 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000193}
194
195# Run some tests using pre-allocated page and scratch blocks. This time
196# the allocations are too small to use in most cases.
197#
danielk197734c61e62008-08-29 12:00:20 +0000198# Both ioerr5.test and malloc5.test are excluded because they test the
199# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
200# This functionality is disabled if a pre-allocated page block is provided.
201#
dan0626dfc2010-06-15 06:56:37 +0000202test_suite "memsubsys2" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000203 Tests using small pre-allocated page and scratch blocks
dan0626dfc2010-06-15 06:56:37 +0000204} -files [
205 test_set $::allquicktests -exclude ioerr5.test malloc5.test
206] -initialize {
drhd63bd752008-07-30 13:15:46 +0000207 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000208 sqlite3_shutdown
209 sqlite3_config_pagecache 512 5
210 sqlite3_config_scratch 1000 1
211 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000212 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000213} -shutdown {
214 catch {db close}
215 sqlite3_shutdown
216 sqlite3_config_pagecache 0 0
217 sqlite3_config_scratch 0 0
218 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000219 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000220}
221
drhe2a7c6e2008-08-01 15:06:30 +0000222# Run all tests with the lookaside allocator disabled.
223#
dan0626dfc2010-06-15 06:56:37 +0000224test_suite "nolookaside" -description {
drhe2a7c6e2008-08-01 15:06:30 +0000225 OOM tests with lookaside disabled
drhe2a7c6e2008-08-01 15:06:30 +0000226} -initialize {
227 catch {db close}
228 sqlite3_shutdown
229 sqlite3_config_lookaside 0 0
230 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000231 autoinstall_test_functions
drhe2a7c6e2008-08-01 15:06:30 +0000232} -shutdown {
233 catch {db close}
234 sqlite3_shutdown
235 sqlite3_config_lookaside 100 500
236 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000237 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000238} -files $::allquicktests
drhe2a7c6e2008-08-01 15:06:30 +0000239
danielk19771077e3f2008-06-21 18:07:37 +0000240# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
241#
dan0626dfc2010-06-15 06:56:37 +0000242test_suite "singlethread" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000243 Tests run in SQLITE_CONFIG_SINGLETHREAD mode
244} -initialize {
drh04df18d2009-01-06 14:50:11 +0000245 catch {db close}
246 sqlite3_shutdown
247 catch {sqlite3_config singlethread}
drhbb77b752009-04-09 01:23:49 +0000248 sqlite3_initialize
249 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000250} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000251 delete.test delete2.test insert.test rollback.test select1.test
252 select2.test trans.test update.test vacuum.test types.test
253 types2.test types3.test
254} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000255 catch {db close}
256 sqlite3_shutdown
257 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000258 sqlite3_initialize
259 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000260}
261
dan0626dfc2010-06-15 06:56:37 +0000262test_suite "nomutex" -description {
drh039963a2008-09-03 00:43:15 +0000263 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
danielk19779a6284c2008-07-10 17:52:49 +0000264} -initialize {
265 rename sqlite3 sqlite3_nomutex
266 proc sqlite3 {args} {
267 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000268 lappend args -fullmutex 0 -nomutex 1
danielk19779a6284c2008-07-10 17:52:49 +0000269 }
270 uplevel [concat sqlite3_nomutex $args]
271 }
dan0626dfc2010-06-15 06:56:37 +0000272} -files {
danielk19779a6284c2008-07-10 17:52:49 +0000273 delete.test delete2.test insert.test rollback.test select1.test
274 select2.test trans.test update.test vacuum.test types.test
275 types2.test types3.test
276} -shutdown {
277 rename sqlite3 {}
278 rename sqlite3_nomutex sqlite3
279}
280
danielk19771077e3f2008-06-21 18:07:37 +0000281# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
282#
dan0626dfc2010-06-15 06:56:37 +0000283test_suite "multithread" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000284 Tests run in SQLITE_CONFIG_MULTITHREAD mode
285} -initialize {
drh04df18d2009-01-06 14:50:11 +0000286 catch {db close}
287 sqlite3_shutdown
288 catch {sqlite3_config multithread}
drhbb77b752009-04-09 01:23:49 +0000289 sqlite3_initialize
290 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000291} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000292 delete.test delete2.test insert.test rollback.test select1.test
293 select2.test trans.test update.test vacuum.test types.test
294 types2.test types3.test
295} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000296 catch {db close}
297 sqlite3_shutdown
298 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000299 sqlite3_initialize
300 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000301}
302
drh039963a2008-09-03 00:43:15 +0000303# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
304#
dan0626dfc2010-06-15 06:56:37 +0000305test_suite "fullmutex" -description {
drh039963a2008-09-03 00:43:15 +0000306 Tests run in SQLITE_OPEN_FULLMUTEX mode
307} -initialize {
308 rename sqlite3 sqlite3_fullmutex
309 proc sqlite3 {args} {
310 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000311 lappend args -nomutex 0 -fullmutex 1
drh039963a2008-09-03 00:43:15 +0000312 }
313 uplevel [concat sqlite3_fullmutex $args]
314 }
dan0626dfc2010-06-15 06:56:37 +0000315} -files {
drh039963a2008-09-03 00:43:15 +0000316 delete.test delete2.test insert.test rollback.test select1.test
317 select2.test trans.test update.test vacuum.test types.test
318 types2.test types3.test
319} -shutdown {
320 rename sqlite3 {}
321 rename sqlite3_fullmutex sqlite3
322}
323
danielk19771077e3f2008-06-21 18:07:37 +0000324# Run some tests using the "onefile" demo.
325#
dan0626dfc2010-06-15 06:56:37 +0000326test_suite "onefile" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000327 Run some tests using the "test_onefile.c" demo
328} -initialize {
329 rename sqlite3 sqlite3_onefile
330 proc sqlite3 {args} {
331 if {[string range [lindex $args 0] 0 0] ne "-"} {
332 lappend args -vfs fs
333 }
334 uplevel [concat sqlite3_onefile $args]
335 }
dan0626dfc2010-06-15 06:56:37 +0000336} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000337 conflict.test insert.test insert2.test insert3.test
338 rollback.test select1.test select2.test select3.test
danielk19771077e3f2008-06-21 18:07:37 +0000339} -shutdown {
340 rename sqlite3 {}
341 rename sqlite3_onefile sqlite3
342}
343
344# Run some tests using UTF-16 databases.
345#
dan0626dfc2010-06-15 06:56:37 +0000346test_suite "utf16" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000347 Run tests using UTF-16 databases
danielk19772dd6d802008-06-21 19:10:27 +0000348} -presql {
danielk19771077e3f2008-06-21 18:07:37 +0000349 pragma encoding = 'UTF-16'
dan0626dfc2010-06-15 06:56:37 +0000350} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000351 alter.test alter3.test
352 auth.test bind.test blob.test capi2.test capi3.test collate1.test
353 collate2.test collate3.test collate4.test collate5.test collate6.test
354 conflict.test date.test delete.test expr.test fkey1.test func.test
355 hook.test index.test insert2.test insert.test interrupt.test in.test
356 intpkey.test ioerr.test join2.test join.test lastinsert.test
357 laststmtchanges.test limit.test lock2.test lock.test main.test
358 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
359 null.test progress.test quote.test rowid.test select1.test select2.test
360 select3.test select4.test select5.test select6.test sort.test
361 subselect.test tableapi.test table.test temptable.test
362 trace.test trigger1.test trigger2.test trigger3.test
363 trigger4.test types2.test types.test unique.test update.test
364 vacuum.test view.test where.test
365}
366
367# Run some tests in exclusive locking mode.
368#
dan0626dfc2010-06-15 06:56:37 +0000369test_suite "exclusive" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000370 Run tests in exclusive locking mode.
371} -presql {
372 pragma locking_mode = 'exclusive'
dan0626dfc2010-06-15 06:56:37 +0000373} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000374 rollback.test select1.test select2.test
375 malloc.test ioerr.test
376}
377
drh04335882008-09-26 21:08:08 +0000378# Run some tests in exclusive locking mode with truncated journals.
379#
dan0626dfc2010-06-15 06:56:37 +0000380test_suite "exclusive-truncate" -description {
drh04335882008-09-26 21:08:08 +0000381 Run tests in exclusive locking mode and truncate journal mode.
382} -presql {
383 pragma locking_mode = 'exclusive';
384 pragma journal_mode = TRUNCATE;
dan0626dfc2010-06-15 06:56:37 +0000385} -files {
drh04335882008-09-26 21:08:08 +0000386 delete.test delete2.test insert.test rollback.test select1.test
387 select2.test update.test malloc.test ioerr.test
388}
389
danielk19771077e3f2008-06-21 18:07:37 +0000390# Run some tests in persistent journal mode.
391#
dan0626dfc2010-06-15 06:56:37 +0000392test_suite "persistent_journal" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000393 Run tests in persistent-journal mode.
394} -presql {
395 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000396} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000397 delete.test delete2.test insert.test rollback.test select1.test
398 select2.test trans.test update.test vacuum.test
399}
400
drh04335882008-09-26 21:08:08 +0000401# Run some tests in truncating journal mode.
402#
dan0626dfc2010-06-15 06:56:37 +0000403test_suite "truncate_journal" -description {
drh04335882008-09-26 21:08:08 +0000404 Run tests in persistent-journal mode.
405} -presql {
406 pragma journal_mode = truncate
dan0626dfc2010-06-15 06:56:37 +0000407} -files {
drh04335882008-09-26 21:08:08 +0000408 delete.test delete2.test insert.test rollback.test select1.test
409 select2.test trans.test update.test vacuum.test
410 malloc.test ioerr.test
411}
412
danielk19771077e3f2008-06-21 18:07:37 +0000413# Run some error tests in persistent journal mode.
414#
dan0626dfc2010-06-15 06:56:37 +0000415test_suite "persistent_journal_error" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000416 Run malloc.test and ioerr.test in persistent-journal mode.
417} -presql {
418 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000419} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000420 malloc.test ioerr.test
421}
422
423# Run some tests in no journal mode.
424#
dan0626dfc2010-06-15 06:56:37 +0000425test_suite "no_journal" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000426 Run tests in no-journal mode.
427} -presql {
428 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000429} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000430 delete.test delete2.test insert.test rollback.test select1.test
431 select2.test trans.test update.test vacuum.test
432}
433
434# Run some error tests in no journal mode.
435#
dan0626dfc2010-06-15 06:56:37 +0000436test_suite "no_journal_error" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000437 Run malloc.test and ioerr.test in no-journal mode.
438} -presql {
439 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000440} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000441 malloc.test ioerr.test
442}
443
444# Run some crash-tests in autovacuum mode.
445#
dan0626dfc2010-06-15 06:56:37 +0000446test_suite "autovacuum_crash" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000447 Run crash.test in autovacuum mode.
448} -presql {
449 pragma auto_vacuum = 1
dan0626dfc2010-06-15 06:56:37 +0000450} -files crash.test
danielk19771077e3f2008-06-21 18:07:37 +0000451
452# Run some ioerr-tests in autovacuum mode.
453#
dan0626dfc2010-06-15 06:56:37 +0000454test_suite "autovacuum_ioerr" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000455 Run ioerr.test in autovacuum mode.
456} -presql {
457 pragma auto_vacuum = 1
dan0626dfc2010-06-15 06:56:37 +0000458} -files ioerr.test
danielk19771077e3f2008-06-21 18:07:37 +0000459
danielk1977b3175382008-10-17 18:51:52 +0000460# Run tests with an in-memory journal.
461#
dan0626dfc2010-06-15 06:56:37 +0000462test_suite "inmemory_journal" -description {
danielk1977b3175382008-10-17 18:51:52 +0000463 Run tests with an in-memory journal file.
464} -presql {
465 pragma journal_mode = 'memory'
dan0626dfc2010-06-15 06:56:37 +0000466} -files [test_set $::allquicktests -exclude {
danielk1977b3175382008-10-17 18:51:52 +0000467 # Exclude all tests that simulate IO errors.
468 autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test
469 ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test
drh2206a2b2009-04-01 23:09:43 +0000470 vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test
drh08ede1d2010-04-12 20:54:13 +0000471 e_fts3.test
danielk1977b3175382008-10-17 18:51:52 +0000472
473 # Exclude test scripts that use tcl IO to access journal files or count
474 # the number of fsync() calls.
475 pager.test exclusive.test jrnlmode.test sync.test misc1.test
danielk1977cb257902009-04-10 18:32:29 +0000476 journal1.test conflict.test crash8.test tkt3457.test io.test
dan01d38562010-03-08 10:32:38 +0000477
478 # Exclude stmt.test, which expects sub-journals to use temporary files.
479 stmt.test
drh0b944132010-05-24 20:24:38 +0000480
481 # WAL mode is different.
dan0626dfc2010-06-15 06:56:37 +0000482 wal*
483}]
danielk1977b3175382008-10-17 18:51:52 +0000484
danielk19776b39c2e2008-06-25 14:57:53 +0000485ifcapable mem3 {
dan0626dfc2010-06-15 06:56:37 +0000486 test_suite "memsys3" -description {
danielk19776b39c2e2008-06-25 14:57:53 +0000487 Run tests using the allocator in mem3.c.
dan0626dfc2010-06-15 06:56:37 +0000488 } [test_set $::allquicktests -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000489 autovacuum.test delete3.test manydb.test
490 bigrow.test incrblob2.test memdb.test
491 bitvec.test index2.test memsubsys1.test
492 capi3c.test ioerr.test memsubsys2.test
493 capi3.test join3.test pagesize.test
danielk19778b322822009-07-01 18:09:01 +0000494 collate5.test limit.test backup_ioerr.test
495 backup_malloc.test
dan0626dfc2010-06-15 06:56:37 +0000496 }] -initialize {
danielk19776b39c2e2008-06-25 14:57:53 +0000497 catch {db close}
498 sqlite3_reset_auto_extension
499 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000500 sqlite3_config_heap 25000000 0
drhe2a7c6e2008-08-01 15:06:30 +0000501 sqlite3_config_lookaside 0 0
danielk19778b322822009-07-01 18:09:01 +0000502 ifcapable mem5 {
503 # If both memsys3 and memsys5 are enabled in the build, the call to
504 # [sqlite3_config_heap] will initialize the system to use memsys5.
505 # The following overrides this preference and installs the memsys3
506 # allocator.
507 sqlite3_install_memsys3
508 }
danielk19776b39c2e2008-06-25 14:57:53 +0000509 install_malloc_faultsim 1
510 sqlite3_initialize
511 autoinstall_test_functions
512 } -shutdown {
513 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000514 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000515 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000516 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000517 install_malloc_faultsim 1
518 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000519 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000520 }
danielk197757e5ea92008-06-24 19:02:55 +0000521}
522
danielk19776b39c2e2008-06-25 14:57:53 +0000523ifcapable mem5 {
dan0626dfc2010-06-15 06:56:37 +0000524 test_suite "memsys5" -description {
danielk19776b39c2e2008-06-25 14:57:53 +0000525 Run tests using the allocator in mem5.c.
dan0626dfc2010-06-15 06:56:37 +0000526 } [test_set $::allquicktests -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000527 autovacuum.test delete3.test manydb.test
528 bigrow.test incrblob2.test memdb.test
529 bitvec.test index2.test memsubsys1.test
530 capi3c.test ioerr.test memsubsys2.test
531 capi3.test join3.test pagesize.test
danielk1977ac8d7b32008-11-13 16:21:50 +0000532 collate5.test limit.test zeroblob.test
dan0626dfc2010-06-15 06:56:37 +0000533 }] -initialize {
danielk19776b39c2e2008-06-25 14:57:53 +0000534 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000535 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000536 sqlite3_config_heap 25000000 64
drhe2a7c6e2008-08-01 15:06:30 +0000537 sqlite3_config_lookaside 0 0
danielk19775099be52008-06-27 13:27:03 +0000538 install_malloc_faultsim 1
539 sqlite3_initialize
540 autoinstall_test_functions
541 } -shutdown {
542 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000543 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000544 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000545 sqlite3_config_lookaside 100 500
danielk19775099be52008-06-27 13:27:03 +0000546 install_malloc_faultsim 1
547 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000548 autoinstall_test_functions
danielk19775099be52008-06-27 13:27:03 +0000549 }
550
dan0626dfc2010-06-15 06:56:37 +0000551 test_suite "memsys5-2" -description {
danielk19775099be52008-06-27 13:27:03 +0000552 Run tests using the allocator in mem5.c in a different configuration.
dan0626dfc2010-06-15 06:56:37 +0000553 } -files {
drh8a42cbd2008-07-10 18:13:42 +0000554 select1.test
danielk19775099be52008-06-27 13:27:03 +0000555 } -initialize {
556 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000557 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000558 sqlite3_config_heap 40000000 16
drhe2a7c6e2008-08-01 15:06:30 +0000559 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000560 install_malloc_faultsim 1
561 sqlite3_initialize
562 autoinstall_test_functions
563 } -shutdown {
564 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000565 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000566 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000567 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000568 install_malloc_faultsim 1
569 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000570 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000571 }
danielk1977c66c0e12008-06-25 14:26:07 +0000572}
573
drh8a42cbd2008-07-10 18:13:42 +0000574ifcapable threadsafe {
dan0626dfc2010-06-15 06:56:37 +0000575 test_suite "no_mutex_try" -description {
drh8a42cbd2008-07-10 18:13:42 +0000576 The sqlite3_mutex_try() interface always fails
dan0626dfc2010-06-15 06:56:37 +0000577 } -files [
578 test_set $::allquicktests -exclude mutex1.test mutex2.test
579 ] -initialize {
drh8a42cbd2008-07-10 18:13:42 +0000580 catch {db close}
581 sqlite3_shutdown
582 install_mutex_counters 1
583 set ::disable_mutex_try 1
drhbb77b752009-04-09 01:23:49 +0000584 sqlite3_initialize
585 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000586 } -shutdown {
587 catch {db close}
588 sqlite3_shutdown
589 install_mutex_counters 0
drhbb77b752009-04-09 01:23:49 +0000590 sqlite3_initialize
591 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000592 }
593}
594
danielk1977b13dee92008-06-23 15:55:52 +0000595# run_tests "crash_safe_append" -description {
596# Run crash.test with persistent journals on a SAFE_APPEND file-system.
597# } -initialize {
598# rename crashsql sa_crashsql
599# proc crashsql {args} {
600# set options [lrange $args 0 [expr {[llength $args]-2}]]
601# lappend options -char safe_append
602# set sql [lindex $args end]
603# lappend options "
604# PRAGMA journal_mode=persistent;
605# $sql
606# "
607# set fd [open test.db-journal w]
608# puts $fd [string repeat 1234567890 100000]
609# close $fd
610# eval sa_crashsql $options
611# }
612# } -shutdown {
613# rename crashsql {}
614# rename sa_crashsql crashsql
dan0626dfc2010-06-15 06:56:37 +0000615# } -files crash.test
danielk1977b13dee92008-06-23 15:55:52 +0000616
dan0626dfc2010-06-15 06:56:37 +0000617test_suite "safe_append" -description {
danielk1977755339e2008-09-12 10:22:40 +0000618 Run some tests on a SAFE_APPEND file-system.
619} -initialize {
620 rename sqlite3 sqlite3_safeappend
621 proc sqlite3 {args} {
622 if {[string range [lindex $args 0] 0 0] ne "-"} {
623 lappend args -vfs devsym
624 }
625 uplevel [concat sqlite3_safeappend $args]
626 }
627 sqlite3_simulate_device -char safe_append
628} -shutdown {
629 rename sqlite3 {}
630 rename sqlite3_shutdown sqlite3
dan0626dfc2010-06-15 06:56:37 +0000631} -files [
632 test_set $::allquicktests shared_err.test -exclude async3.test
633]
danielk1977755339e2008-09-12 10:22:40 +0000634
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
dan0626dfc2010-06-15 06:56:37 +0000649test_suite "pcache0" -description {
drhb232c232008-11-19 01:20:26 +0000650 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
dan0626dfc2010-06-15 06:56:37 +0000665} -files ${perm-alt-pcache-testset}
drhb232c232008-11-19 01:20:26 +0000666
dan0626dfc2010-06-15 06:56:37 +0000667test_suite "pcache10" -description {
drhb232c232008-11-19 01:20:26 +0000668 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
dan0626dfc2010-06-15 06:56:37 +0000681} -files ${perm-alt-pcache-testset}
drhb232c232008-11-19 01:20:26 +0000682
dan0626dfc2010-06-15 06:56:37 +0000683test_suite "pcache50" -description {
drhb232c232008-11-19 01:20:26 +0000684 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
dan0626dfc2010-06-15 06:56:37 +0000697} -files ${perm-alt-pcache-testset}
drhb232c232008-11-19 01:20:26 +0000698
dan0626dfc2010-06-15 06:56:37 +0000699test_suite "pcache90" -description {
drhb232c232008-11-19 01:20:26 +0000700 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
dan0626dfc2010-06-15 06:56:37 +0000713} -files ${perm-alt-pcache-testset}
drhb232c232008-11-19 01:20:26 +0000714
dan0626dfc2010-06-15 06:56:37 +0000715test_suite "pcache100" -description {
drhb232c232008-11-19 01:20:26 +0000716 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
dan0626dfc2010-06-15 06:56:37 +0000729} -files ${perm-alt-pcache-testset}
danielk1977b13dee92008-06-23 15:55:52 +0000730
dan0626dfc2010-06-15 06:56:37 +0000731test_suite "journaltest" -description {
danielk1977f3107512008-12-22 10:58:46 +0000732 Check that pages are synced before being written (test_journal.c).
733} -initialize {
danielk1977f3107512008-12-22 10:58:46 +0000734 catch {db close}
735 register_jt_vfs -default ""
736} -shutdown {
737 unregister_jt_vfs
dan0626dfc2010-06-15 06:56:37 +0000738} -files [test_set $::allquicktests -exclude {
739 wal* incrvacuum.test ioerr.test corrupt4.test io.test crash8.test
740 async4.test bigfile.test
drhfb4a6262010-05-06 19:55:57 +0000741}]
danielk1977f3107512008-12-22 10:58:46 +0000742
dan0a7a9152010-04-07 07:57:38 +0000743if {[info commands register_demovfs] != ""} {
dan0626dfc2010-06-15 06:56:37 +0000744 test_suite "demovfs" -description {
dan430e74c2010-06-07 17:47:26 +0000745 Check that the demovfs (code in test_demovfs.c) more or less works.
dan0a7a9152010-04-07 07:57:38 +0000746 } -initialize {
747 register_demovfs
748 } -shutdown {
749 unregister_demovfs
dan0626dfc2010-06-15 06:56:37 +0000750 } -files {
dan0a7a9152010-04-07 07:57:38 +0000751 insert.test insert2.test insert3.test rollback.test
752 select1.test select2.test select3.test
753 }
754}
755
dan0626dfc2010-06-15 06:56:37 +0000756test_suite "wal" -description {
dan71cb5182010-04-26 12:39:03 +0000757 Run tests with journal_mode=WAL
dan31f98fc2010-04-27 05:42:32 +0000758} -initialize {
dan430e74c2010-06-07 17:47:26 +0000759 set ::G(savepoint6_iterations) 100
dan31f98fc2010-04-27 05:42:32 +0000760} -shutdown {
dan430e74c2010-06-07 17:47:26 +0000761 unset -nocomplain ::G(savepoint6_iterations)
dan0626dfc2010-06-15 06:56:37 +0000762} -files {
dane106de62010-04-27 06:49:34 +0000763 savepoint.test savepoint2.test savepoint6.test
764 trans.test avtrans.test
dan71cb5182010-04-26 12:39:03 +0000765}
danielk19771077e3f2008-06-21 18:07:37 +0000766# End of tests
767#############################################################################
768
dan0626dfc2010-06-15 06:56:37 +0000769# run_tests NAME OPTIONS
770#
771# where available options are:
772#
773# -description TITLE (default "")
774# -initialize SCRIPT (default "")
775# -shutdown SCRIPT (default "")
776# -presql SQL (default "")
777# -files LIST-OF-FILES (default "")
778#
779proc run_tests {name args} {
780 array set options $args
danielk19771077e3f2008-06-21 18:07:37 +0000781
dan0626dfc2010-06-15 06:56:37 +0000782 set ::G(perm:name) $name
783 set ::G(perm:presql) $options(-presql)
784 set ::G(isquick) 1
785
786 uplevel $options(-initialize)
787
788 foreach file [lsort $options(-files)] {
789 slave_test_file $::testdir/$file
790 }
791
792 uplevel $options(-shutdown)
793
794 unset ::G(perm:name)
795 unset ::G(perm:presql)
796}
797
798proc run_test_suite {name} {
799 if {[info exists ::testspec($name)]==0} {
800 error "No such test suite: $name"
801 }
802 uplevel run_tests $name $::testspec($name)
803}
804
805proc help {} {
806 foreach k $::testsuitelist {
807 array set o $::testspec($k)
808 puts "Test suite: \"$k\""
809 set d [string trim $o(-description)]
810 set d [regsub {\n *} $d "\n "]
811 puts " $d"
812 puts ""
813 }
814 exit -1
815}
816
817if {[info script] == $argv0} {
818 proc main {argv} {
819 if {[llength $argv]==0} {
820 help
821 } else {
822 set suite [lindex $argv 0]
823 if {[info exists ::testspec($suite)]==0} help
824 set extra ""
825 if {[llength $argv]>1} { set extra [list -files [lrange $argv 1 end]] }
826 eval run_tests $suite $::testspec($suite) $extra
827 }
828 }
829 main $argv
830 finish_test
831}
832