blob: 7e336b16aaf1d8803c60fdc31c12c62180d786f0 [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.")
dan1ce1b4a2010-12-07 14:32:28 +000028# -dbconfig SCRIPT (default "")
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)"
dan2fce9ab2010-06-15 18:00:06 +000036 set default(-files) ""
37 set default(-prefix) "${name}."
dan1ce1b4a2010-12-07 14:32:28 +000038 set default(-dbconfig) ""
dan430e74c2010-06-07 17:47:26 +000039
40 array set options [array get default]
dan0626dfc2010-06-15 06:56:37 +000041 if {[llength $args]%2} {
42 error "uneven number of options/switches passed to test_suite"
dan430e74c2010-06-07 17:47:26 +000043 }
dan0626dfc2010-06-15 06:56:37 +000044 foreach {k v} $args {
45 set o [array names options ${k}*]
46 if {[llength $o]>1} { error "ambiguous option: $k" }
47 if {[llength $o]==0} { error "unknown option: $k" }
48 set options([lindex $o 0]) $v
drh0a846f92008-08-25 17:23:29 +000049 }
danielk19771077e3f2008-06-21 18:07:37 +000050
dan0626dfc2010-06-15 06:56:37 +000051 set ::testspec($name) [array get options]
52 lappend ::testsuitelist $name
53}
dan430e74c2010-06-07 17:47:26 +000054
dan0626dfc2010-06-15 06:56:37 +000055#-------------------------------------------------------------------------
56# test_set ARGS...
57#
58proc test_set {args} {
59 set isExclude 0
60 foreach a $args {
61 if {[string match -* $a]} {
62 switch -- $a {
63 -include { set isExclude 0 }
64 -exclude { set isExclude 1 }
65 default {
66 error "Unknown switch: $a"
67 }
danielk1977c1def3e2008-08-30 13:25:10 +000068 }
dan0626dfc2010-06-15 06:56:37 +000069 } elseif {$isExclude == 0} {
70 foreach f $a { set t($f) 1 }
drh0a846f92008-08-25 17:23:29 +000071 } else {
dan0626dfc2010-06-15 06:56:37 +000072 foreach f $a { array unset t $f }
dan897230e2010-08-26 14:15:37 +000073 foreach f $a { array unset t */$f }
danielk19771077e3f2008-06-21 18:07:37 +000074 }
75 }
76
dan0626dfc2010-06-15 06:56:37 +000077 return [array names t]
danielk19771077e3f2008-06-21 18:07:37 +000078}
79
dan0626dfc2010-06-15 06:56:37 +000080#-------------------------------------------------------------------------
81# Set up the following global list variables containing the names of
82# various test scripts:
83#
84# $alltests
dan2fce9ab2010-06-15 18:00:06 +000085# $allquicktests
dan0626dfc2010-06-15 06:56:37 +000086#
dan0626dfc2010-06-15 06:56:37 +000087set alltests [list]
88foreach f [glob $testdir/*.test] { lappend alltests [file tail $f] }
dan897230e2010-08-26 14:15:37 +000089foreach f [glob -nocomplain $testdir/../ext/rtree/*.test] {
90 lappend alltests $f
91}
dan7cf7df72011-03-19 15:37:02 +000092foreach f [glob -nocomplain $testdir/../ext/session/*.test] {
93 lappend alltests $f
94}
dan897230e2010-08-26 14:15:37 +000095
dan0626dfc2010-06-15 06:56:37 +000096if {$::tcl_platform(platform)!="unix"} {
97 set alltests [test_set $alltests -exclude crash.test crash2.test]
danielk1977c1def3e2008-08-30 13:25:10 +000098}
dan0626dfc2010-06-15 06:56:37 +000099set alltests [test_set $alltests -exclude {
100 all.test async.test quick.test veryquick.test
101 memleak.test permutations.test soak.test fts3.test
dan7cf7df72011-03-19 15:37:02 +0000102 mallocAll.test rtree.test session.test
dan0626dfc2010-06-15 06:56:37 +0000103}]
104
105set allquicktests [test_set $alltests -exclude {
106 async2.test async3.test backup_ioerr.test corrupt.test
107 corruptC.test crash.test crash2.test crash3.test crash4.test crash5.test
108 crash6.test crash7.test delete3.test e_fts3.test fts3rnd.test
109 fkey_malloc.test fuzz.test fuzz3.test fuzz_malloc.test in2.test loadext.test
dan273f3f02010-06-26 15:42:33 +0000110 misc7.test mutex2.test notify2.test onefile.test pagerfault2.test
dan0626dfc2010-06-15 06:56:37 +0000111 savepoint4.test savepoint6.test select9.test
112 speed1.test speed1p.test speed2.test speed3.test speed4.test
113 speed4p.test sqllimits1.test tkt2686.test thread001.test thread002.test
114 thread003.test thread004.test thread005.test trans2.test vacuum3.test
115 incrvacuum_ioerr.test autovacuum_crash.test btree8.test shared_err.test
116 vtab_err.test walslow.test walcrash.test
dan897230e2010-08-26 14:15:37 +0000117 walthread.test rtree3.test
dan0626dfc2010-06-15 06:56:37 +0000118}]
dan63109902010-07-05 05:54:55 +0000119if {[info exists ::env(QUICKTEST_INCLUDE)]} {
120 set allquicktests [concat $allquicktests $::env(QUICKTEST_INCLUDE)]
121}
danielk1977c1def3e2008-08-30 13:25:10 +0000122
danielk19771077e3f2008-06-21 18:07:37 +0000123#############################################################################
124# Start of tests
dan0626dfc2010-06-15 06:56:37 +0000125#
126
127#-------------------------------------------------------------------------
128# Define the generic test suites:
129#
130# veryquick
131# quick
132# full
dan0626dfc2010-06-15 06:56:37 +0000133#
dane91a54e2010-06-15 17:44:47 +0000134lappend ::testsuitelist xxx
dan0626dfc2010-06-15 06:56:37 +0000135
dan2fce9ab2010-06-15 18:00:06 +0000136test_suite "veryquick" -prefix "" -description {
dan0626dfc2010-06-15 06:56:37 +0000137 "Very" quick test suite. Runs in less than 5 minutes on a workstation.
138 This test suite is the same as the "quick" tests, except that some files
139 that test malloc and IO errors are omitted.
140} -files [
dan763afe62010-08-03 06:42:39 +0000141 test_set $allquicktests -exclude *malloc* *ioerr* *fault*
dan0626dfc2010-06-15 06:56:37 +0000142]
143
dan25568442010-12-03 10:32:06 +0000144test_suite "valgrind" -prefix "" -description {
145 Run the "veryquick" test suite with a couple of multi-process tests (that
146 fail under valgrind) omitted.
147} -files [
148 test_set $allquicktests -exclude *malloc* *ioerr* *fault*
149] -initialize {
150 set ::G(valgrind) 1
151} -shutdown {
152 unset -nocomplain ::G(valgrind)
153}
154
dan2fce9ab2010-06-15 18:00:06 +0000155test_suite "quick" -prefix "" -description {
dan0626dfc2010-06-15 06:56:37 +0000156 Quick test suite. Runs in around 10 minutes on a workstation.
157} -files [
158 test_set $allquicktests
159]
160
dan2fce9ab2010-06-15 18:00:06 +0000161test_suite "full" -prefix "" -description {
dan0626dfc2010-06-15 06:56:37 +0000162 Full test suite. Takes a long time.
163} -files [
164 test_set $alltests
165] -initialize {
166 unset -nocomplain ::G(isquick)
167}
168
danea5542d2010-07-06 11:26:15 +0000169test_suite "threads" -prefix "" -description {
170 All multi-threaded tests.
171} -files {
172 notify2.test thread001.test thread002.test thread003.test
173 thread004.test thread005.test walthread.test
174}
175
dana69f7d52010-07-19 11:16:36 +0000176test_suite "fts3" -prefix "" -description {
danddf80eb2010-10-25 12:47:43 +0000177 All FTS3 tests except fts3rnd.test.
dana69f7d52010-07-19 11:16:36 +0000178} -files {
179 fts3aa.test fts3ab.test fts3ac.test fts3ad.test fts3ae.test
180 fts3af.test fts3ag.test fts3ah.test fts3ai.test fts3aj.test
181 fts3ak.test fts3al.test fts3am.test fts3an.test fts3ao.test
182 fts3atoken.test fts3b.test fts3c.test fts3cov.test fts3d.test
danddf80eb2010-10-25 12:47:43 +0000183 fts3defer.test fts3defer2.test fts3e.test fts3expr.test fts3expr2.test
184 fts3near.test fts3query.test fts3shared.test fts3snippet.test
185
danaf4c2142010-11-02 17:41:52 +0000186 fts3fault.test fts3malloc.test fts3matchinfo.test
dana240fd02011-02-01 16:34:32 +0000187
188 fts3aux1.test fts3comp1.test
dana69f7d52010-07-19 11:16:36 +0000189}
190
danea5542d2010-07-06 11:26:15 +0000191
dane91a54e2010-06-15 17:44:47 +0000192lappend ::testsuitelist xxx
dan0626dfc2010-06-15 06:56:37 +0000193#-------------------------------------------------------------------------
194# Define the coverage related test suites:
195#
196# coverage-wal
dan0626dfc2010-06-15 06:56:37 +0000197#
198test_suite "coverage-wal" -description {
199 Coverage tests for file wal.c.
200} -files {
danf43d7fc2010-07-03 10:00:00 +0000201 wal.test wal2.test wal3.test walmode.test
202 walbak.test walhook.test walcrash2.test walcksum.test
dan8c408002010-11-01 17:38:24 +0000203 walfault.test walbig.test walnoshm.test
dan28f9b0b2011-02-07 16:24:39 +0000204 wal5.test
dan0626dfc2010-06-15 06:56:37 +0000205}
206
dane91a54e2010-06-15 17:44:47 +0000207test_suite "coverage-pager" -description {
208 Coverage tests for file pager.c.
209} -files {
danf43d7fc2010-07-03 10:00:00 +0000210 pager1.test pager2.test pagerfault.test pagerfault2.test
211 walfault.test walbak.test journal2.test tkt-9d68c883.test
dane91a54e2010-06-15 17:44:47 +0000212}
dan0626dfc2010-06-15 06:56:37 +0000213
214
dane91a54e2010-06-15 17:44:47 +0000215lappend ::testsuitelist xxx
dan0626dfc2010-06-15 06:56:37 +0000216#-------------------------------------------------------------------------
217# Define the permutation test suites:
218#
danielk19771077e3f2008-06-21 18:07:37 +0000219
220# Run some tests using pre-allocated page and scratch blocks.
221#
dan0626dfc2010-06-15 06:56:37 +0000222test_suite "memsubsys1" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000223 Tests using pre-allocated page and scratch blocks
dan0626dfc2010-06-15 06:56:37 +0000224} -files [
225 test_set $::allquicktests -exclude ioerr5.test malloc5.test
226] -initialize {
drhd63bd752008-07-30 13:15:46 +0000227 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000228 sqlite3_shutdown
229 sqlite3_config_pagecache 4096 24
230 sqlite3_config_scratch 25000 1
231 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000232 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000233} -shutdown {
234 catch {db close}
235 sqlite3_shutdown
236 sqlite3_config_pagecache 0 0
237 sqlite3_config_scratch 0 0
238 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000239 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000240}
241
242# Run some tests using pre-allocated page and scratch blocks. This time
243# the allocations are too small to use in most cases.
244#
danielk197734c61e62008-08-29 12:00:20 +0000245# Both ioerr5.test and malloc5.test are excluded because they test the
246# sqlite3_soft_heap_limit() and sqlite3_release_memory() functionality.
247# This functionality is disabled if a pre-allocated page block is provided.
248#
dan0626dfc2010-06-15 06:56:37 +0000249test_suite "memsubsys2" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000250 Tests using small pre-allocated page and scratch blocks
dan0626dfc2010-06-15 06:56:37 +0000251} -files [
252 test_set $::allquicktests -exclude ioerr5.test malloc5.test
253] -initialize {
drhd63bd752008-07-30 13:15:46 +0000254 catch {db close}
danielk19771077e3f2008-06-21 18:07:37 +0000255 sqlite3_shutdown
256 sqlite3_config_pagecache 512 5
257 sqlite3_config_scratch 1000 1
258 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000259 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000260} -shutdown {
261 catch {db close}
262 sqlite3_shutdown
263 sqlite3_config_pagecache 0 0
264 sqlite3_config_scratch 0 0
265 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000266 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000267}
268
drhe2a7c6e2008-08-01 15:06:30 +0000269# Run all tests with the lookaside allocator disabled.
270#
dan0626dfc2010-06-15 06:56:37 +0000271test_suite "nolookaside" -description {
drhe2a7c6e2008-08-01 15:06:30 +0000272 OOM tests with lookaside disabled
drhe2a7c6e2008-08-01 15:06:30 +0000273} -initialize {
274 catch {db close}
275 sqlite3_shutdown
276 sqlite3_config_lookaside 0 0
277 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000278 autoinstall_test_functions
drhe2a7c6e2008-08-01 15:06:30 +0000279} -shutdown {
280 catch {db close}
281 sqlite3_shutdown
282 sqlite3_config_lookaside 100 500
283 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000284 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000285} -files $::allquicktests
drhe2a7c6e2008-08-01 15:06:30 +0000286
danielk19771077e3f2008-06-21 18:07:37 +0000287# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
288#
dan0626dfc2010-06-15 06:56:37 +0000289test_suite "singlethread" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000290 Tests run in SQLITE_CONFIG_SINGLETHREAD mode
291} -initialize {
drh04df18d2009-01-06 14:50:11 +0000292 catch {db close}
293 sqlite3_shutdown
294 catch {sqlite3_config singlethread}
drhbb77b752009-04-09 01:23:49 +0000295 sqlite3_initialize
296 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000297} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000298 delete.test delete2.test insert.test rollback.test select1.test
299 select2.test trans.test update.test vacuum.test types.test
300 types2.test types3.test
301} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000302 catch {db close}
303 sqlite3_shutdown
304 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000305 sqlite3_initialize
306 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000307}
308
dan0626dfc2010-06-15 06:56:37 +0000309test_suite "nomutex" -description {
drh039963a2008-09-03 00:43:15 +0000310 Tests run with the SQLITE_OPEN_MULTITHREADED flag passed to sqlite3_open().
danielk19779a6284c2008-07-10 17:52:49 +0000311} -initialize {
312 rename sqlite3 sqlite3_nomutex
313 proc sqlite3 {args} {
314 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000315 lappend args -fullmutex 0 -nomutex 1
danielk19779a6284c2008-07-10 17:52:49 +0000316 }
317 uplevel [concat sqlite3_nomutex $args]
318 }
dan0626dfc2010-06-15 06:56:37 +0000319} -files {
danielk19779a6284c2008-07-10 17:52:49 +0000320 delete.test delete2.test insert.test rollback.test select1.test
321 select2.test trans.test update.test vacuum.test types.test
322 types2.test types3.test
323} -shutdown {
324 rename sqlite3 {}
325 rename sqlite3_nomutex sqlite3
326}
327
danielk19771077e3f2008-06-21 18:07:37 +0000328# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
329#
dan0626dfc2010-06-15 06:56:37 +0000330test_suite "multithread" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000331 Tests run in SQLITE_CONFIG_MULTITHREAD mode
332} -initialize {
drh04df18d2009-01-06 14:50:11 +0000333 catch {db close}
334 sqlite3_shutdown
335 catch {sqlite3_config multithread}
drhbb77b752009-04-09 01:23:49 +0000336 sqlite3_initialize
337 autoinstall_test_functions
dan0626dfc2010-06-15 06:56:37 +0000338} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000339 delete.test delete2.test insert.test rollback.test select1.test
340 select2.test trans.test update.test vacuum.test types.test
341 types2.test types3.test
342} -shutdown {
drh04df18d2009-01-06 14:50:11 +0000343 catch {db close}
344 sqlite3_shutdown
345 catch {sqlite3_config serialized}
drhbb77b752009-04-09 01:23:49 +0000346 sqlite3_initialize
347 autoinstall_test_functions
danielk19771077e3f2008-06-21 18:07:37 +0000348}
349
drh039963a2008-09-03 00:43:15 +0000350# Run some tests in SQLITE_OPEN_FULLMUTEX mode.
351#
dan0626dfc2010-06-15 06:56:37 +0000352test_suite "fullmutex" -description {
drh039963a2008-09-03 00:43:15 +0000353 Tests run in SQLITE_OPEN_FULLMUTEX mode
354} -initialize {
355 rename sqlite3 sqlite3_fullmutex
356 proc sqlite3 {args} {
357 if {[string range [lindex $args 0] 0 0] ne "-"} {
drhcc91e7f2008-09-03 01:08:00 +0000358 lappend args -nomutex 0 -fullmutex 1
drh039963a2008-09-03 00:43:15 +0000359 }
360 uplevel [concat sqlite3_fullmutex $args]
361 }
dan0626dfc2010-06-15 06:56:37 +0000362} -files {
drh039963a2008-09-03 00:43:15 +0000363 delete.test delete2.test insert.test rollback.test select1.test
364 select2.test trans.test update.test vacuum.test types.test
365 types2.test types3.test
366} -shutdown {
367 rename sqlite3 {}
368 rename sqlite3_fullmutex sqlite3
369}
370
danielk19771077e3f2008-06-21 18:07:37 +0000371# Run some tests using the "onefile" demo.
372#
dan0626dfc2010-06-15 06:56:37 +0000373test_suite "onefile" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000374 Run some tests using the "test_onefile.c" demo
375} -initialize {
376 rename sqlite3 sqlite3_onefile
377 proc sqlite3 {args} {
378 if {[string range [lindex $args 0] 0 0] ne "-"} {
379 lappend args -vfs fs
380 }
381 uplevel [concat sqlite3_onefile $args]
382 }
dan0626dfc2010-06-15 06:56:37 +0000383} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000384 conflict.test insert.test insert2.test insert3.test
385 rollback.test select1.test select2.test select3.test
danielk19771077e3f2008-06-21 18:07:37 +0000386} -shutdown {
387 rename sqlite3 {}
388 rename sqlite3_onefile sqlite3
389}
390
391# Run some tests using UTF-16 databases.
392#
dan0626dfc2010-06-15 06:56:37 +0000393test_suite "utf16" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000394 Run tests using UTF-16 databases
danielk19772dd6d802008-06-21 19:10:27 +0000395} -presql {
danielk19771077e3f2008-06-21 18:07:37 +0000396 pragma encoding = 'UTF-16'
dan0626dfc2010-06-15 06:56:37 +0000397} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000398 alter.test alter3.test
399 auth.test bind.test blob.test capi2.test capi3.test collate1.test
400 collate2.test collate3.test collate4.test collate5.test collate6.test
401 conflict.test date.test delete.test expr.test fkey1.test func.test
402 hook.test index.test insert2.test insert.test interrupt.test in.test
403 intpkey.test ioerr.test join2.test join.test lastinsert.test
404 laststmtchanges.test limit.test lock2.test lock.test main.test
405 memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
406 null.test progress.test quote.test rowid.test select1.test select2.test
407 select3.test select4.test select5.test select6.test sort.test
408 subselect.test tableapi.test table.test temptable.test
409 trace.test trigger1.test trigger2.test trigger3.test
410 trigger4.test types2.test types.test unique.test update.test
411 vacuum.test view.test where.test
412}
413
414# Run some tests in exclusive locking mode.
415#
dan0626dfc2010-06-15 06:56:37 +0000416test_suite "exclusive" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000417 Run tests in exclusive locking mode.
418} -presql {
419 pragma locking_mode = 'exclusive'
dan0626dfc2010-06-15 06:56:37 +0000420} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000421 rollback.test select1.test select2.test
422 malloc.test ioerr.test
423}
424
drh04335882008-09-26 21:08:08 +0000425# Run some tests in exclusive locking mode with truncated journals.
426#
dan0626dfc2010-06-15 06:56:37 +0000427test_suite "exclusive-truncate" -description {
drh04335882008-09-26 21:08:08 +0000428 Run tests in exclusive locking mode and truncate journal mode.
429} -presql {
430 pragma locking_mode = 'exclusive';
431 pragma journal_mode = TRUNCATE;
dan0626dfc2010-06-15 06:56:37 +0000432} -files {
drh04335882008-09-26 21:08:08 +0000433 delete.test delete2.test insert.test rollback.test select1.test
434 select2.test update.test malloc.test ioerr.test
435}
436
danielk19771077e3f2008-06-21 18:07:37 +0000437# Run some tests in persistent journal mode.
438#
dan0626dfc2010-06-15 06:56:37 +0000439test_suite "persistent_journal" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000440 Run tests in persistent-journal mode.
441} -presql {
442 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000443} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000444 delete.test delete2.test insert.test rollback.test select1.test
445 select2.test trans.test update.test vacuum.test
446}
447
drh04335882008-09-26 21:08:08 +0000448# Run some tests in truncating journal mode.
449#
dan0626dfc2010-06-15 06:56:37 +0000450test_suite "truncate_journal" -description {
drh04335882008-09-26 21:08:08 +0000451 Run tests in persistent-journal mode.
452} -presql {
453 pragma journal_mode = truncate
dan0626dfc2010-06-15 06:56:37 +0000454} -files {
drh04335882008-09-26 21:08:08 +0000455 delete.test delete2.test insert.test rollback.test select1.test
456 select2.test trans.test update.test vacuum.test
457 malloc.test ioerr.test
458}
459
danielk19771077e3f2008-06-21 18:07:37 +0000460# Run some error tests in persistent journal mode.
461#
dan0626dfc2010-06-15 06:56:37 +0000462test_suite "persistent_journal_error" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000463 Run malloc.test and ioerr.test in persistent-journal mode.
464} -presql {
465 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000466} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000467 malloc.test ioerr.test
468}
469
470# Run some tests in no journal mode.
471#
dan0626dfc2010-06-15 06:56:37 +0000472test_suite "no_journal" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000473 Run tests in no-journal mode.
474} -presql {
475 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000476} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000477 delete.test delete2.test insert.test rollback.test select1.test
478 select2.test trans.test update.test vacuum.test
479}
480
481# Run some error tests in no journal mode.
482#
dan0626dfc2010-06-15 06:56:37 +0000483test_suite "no_journal_error" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000484 Run malloc.test and ioerr.test in no-journal mode.
485} -presql {
486 pragma journal_mode = persist
dan0626dfc2010-06-15 06:56:37 +0000487} -files {
danielk19771077e3f2008-06-21 18:07:37 +0000488 malloc.test ioerr.test
489}
490
491# Run some crash-tests in autovacuum mode.
492#
dan0626dfc2010-06-15 06:56:37 +0000493test_suite "autovacuum_crash" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000494 Run crash.test in autovacuum mode.
495} -presql {
496 pragma auto_vacuum = 1
dan0626dfc2010-06-15 06:56:37 +0000497} -files crash.test
danielk19771077e3f2008-06-21 18:07:37 +0000498
499# Run some ioerr-tests in autovacuum mode.
500#
dan0626dfc2010-06-15 06:56:37 +0000501test_suite "autovacuum_ioerr" -description {
danielk19771077e3f2008-06-21 18:07:37 +0000502 Run ioerr.test in autovacuum mode.
503} -presql {
504 pragma auto_vacuum = 1
dan0626dfc2010-06-15 06:56:37 +0000505} -files ioerr.test
danielk19771077e3f2008-06-21 18:07:37 +0000506
danielk1977b3175382008-10-17 18:51:52 +0000507# Run tests with an in-memory journal.
508#
dan0626dfc2010-06-15 06:56:37 +0000509test_suite "inmemory_journal" -description {
danielk1977b3175382008-10-17 18:51:52 +0000510 Run tests with an in-memory journal file.
511} -presql {
512 pragma journal_mode = 'memory'
dan0626dfc2010-06-15 06:56:37 +0000513} -files [test_set $::allquicktests -exclude {
danielk1977b3175382008-10-17 18:51:52 +0000514 # Exclude all tests that simulate IO errors.
515 autovacuum_ioerr2.test incrvacuum_ioerr.test ioerr.test
516 ioerr.test ioerr2.test ioerr3.test ioerr4.test ioerr5.test
drh2206a2b2009-04-01 23:09:43 +0000517 vacuum3.test incrblob_err.test diskfull.test backup_ioerr.test
shanehc3b84832010-07-09 19:32:28 +0000518 e_fts3.test fts3cov.test fts3malloc.test fts3rnd.test
519 fts3snippet.test
danielk1977b3175382008-10-17 18:51:52 +0000520
521 # Exclude test scripts that use tcl IO to access journal files or count
522 # the number of fsync() calls.
523 pager.test exclusive.test jrnlmode.test sync.test misc1.test
danielk1977cb257902009-04-10 18:32:29 +0000524 journal1.test conflict.test crash8.test tkt3457.test io.test
dan37575562010-07-17 09:27:31 +0000525 journal3.test
dan01d38562010-03-08 10:32:38 +0000526
dancb354602010-07-08 09:44:42 +0000527 pager1.test async4.test corrupt.test filefmt.test pager2.test
528 corrupt5.test corruptA.test pageropt.test
529
dan01d38562010-03-08 10:32:38 +0000530 # Exclude stmt.test, which expects sub-journals to use temporary files.
531 stmt.test
drh0b944132010-05-24 20:24:38 +0000532
533 # WAL mode is different.
dan0626dfc2010-06-15 06:56:37 +0000534 wal*
535}]
danielk1977b3175382008-10-17 18:51:52 +0000536
danielk19776b39c2e2008-06-25 14:57:53 +0000537ifcapable mem3 {
dan0626dfc2010-06-15 06:56:37 +0000538 test_suite "memsys3" -description {
danielk19776b39c2e2008-06-25 14:57:53 +0000539 Run tests using the allocator in mem3.c.
daneace5272010-07-05 05:31:48 +0000540 } -files [test_set $::allquicktests -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000541 autovacuum.test delete3.test manydb.test
542 bigrow.test incrblob2.test memdb.test
543 bitvec.test index2.test memsubsys1.test
544 capi3c.test ioerr.test memsubsys2.test
545 capi3.test join3.test pagesize.test
danielk19778b322822009-07-01 18:09:01 +0000546 collate5.test limit.test backup_ioerr.test
547 backup_malloc.test
dan0626dfc2010-06-15 06:56:37 +0000548 }] -initialize {
danielk19776b39c2e2008-06-25 14:57:53 +0000549 catch {db close}
550 sqlite3_reset_auto_extension
551 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000552 sqlite3_config_heap 25000000 0
drhe2a7c6e2008-08-01 15:06:30 +0000553 sqlite3_config_lookaside 0 0
danielk19778b322822009-07-01 18:09:01 +0000554 ifcapable mem5 {
555 # If both memsys3 and memsys5 are enabled in the build, the call to
556 # [sqlite3_config_heap] will initialize the system to use memsys5.
557 # The following overrides this preference and installs the memsys3
558 # allocator.
559 sqlite3_install_memsys3
560 }
danielk19776b39c2e2008-06-25 14:57:53 +0000561 install_malloc_faultsim 1
562 sqlite3_initialize
563 autoinstall_test_functions
564 } -shutdown {
565 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000566 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000567 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000568 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000569 install_malloc_faultsim 1
570 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000571 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000572 }
danielk197757e5ea92008-06-24 19:02:55 +0000573}
574
danielk19776b39c2e2008-06-25 14:57:53 +0000575ifcapable mem5 {
dan0626dfc2010-06-15 06:56:37 +0000576 test_suite "memsys5" -description {
danielk19776b39c2e2008-06-25 14:57:53 +0000577 Run tests using the allocator in mem5.c.
daneace5272010-07-05 05:31:48 +0000578 } -files [test_set $::allquicktests -exclude {
drh8a42cbd2008-07-10 18:13:42 +0000579 autovacuum.test delete3.test manydb.test
580 bigrow.test incrblob2.test memdb.test
581 bitvec.test index2.test memsubsys1.test
582 capi3c.test ioerr.test memsubsys2.test
583 capi3.test join3.test pagesize.test
danielk1977ac8d7b32008-11-13 16:21:50 +0000584 collate5.test limit.test zeroblob.test
dan0626dfc2010-06-15 06:56:37 +0000585 }] -initialize {
danielk19776b39c2e2008-06-25 14:57:53 +0000586 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000587 sqlite3_shutdown
drh7830cd42008-07-16 12:25:32 +0000588 sqlite3_config_heap 25000000 64
drhe2a7c6e2008-08-01 15:06:30 +0000589 sqlite3_config_lookaside 0 0
danielk19775099be52008-06-27 13:27:03 +0000590 install_malloc_faultsim 1
591 sqlite3_initialize
592 autoinstall_test_functions
593 } -shutdown {
594 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000595 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000596 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000597 sqlite3_config_lookaside 100 500
danielk19775099be52008-06-27 13:27:03 +0000598 install_malloc_faultsim 1
599 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000600 autoinstall_test_functions
danielk19775099be52008-06-27 13:27:03 +0000601 }
602
dan0626dfc2010-06-15 06:56:37 +0000603 test_suite "memsys5-2" -description {
danielk19775099be52008-06-27 13:27:03 +0000604 Run tests using the allocator in mem5.c in a different configuration.
dan0626dfc2010-06-15 06:56:37 +0000605 } -files {
drh8a42cbd2008-07-10 18:13:42 +0000606 select1.test
danielk19775099be52008-06-27 13:27:03 +0000607 } -initialize {
608 catch {db close}
danielk19775099be52008-06-27 13:27:03 +0000609 sqlite3_shutdown
danb0c6a882010-09-02 10:08:41 +0000610 sqlite3_config_memstatus 0
drh7830cd42008-07-16 12:25:32 +0000611 sqlite3_config_heap 40000000 16
drhe2a7c6e2008-08-01 15:06:30 +0000612 sqlite3_config_lookaside 0 0
danielk19776b39c2e2008-06-25 14:57:53 +0000613 install_malloc_faultsim 1
614 sqlite3_initialize
615 autoinstall_test_functions
616 } -shutdown {
617 catch {db close}
danielk19776b39c2e2008-06-25 14:57:53 +0000618 sqlite3_shutdown
danielk19770d84e5b2008-06-27 14:05:24 +0000619 sqlite3_config_heap 0 0
drhe2a7c6e2008-08-01 15:06:30 +0000620 sqlite3_config_lookaside 100 500
danielk19776b39c2e2008-06-25 14:57:53 +0000621 install_malloc_faultsim 1
622 sqlite3_initialize
drhbb77b752009-04-09 01:23:49 +0000623 autoinstall_test_functions
danielk19776b39c2e2008-06-25 14:57:53 +0000624 }
danielk1977c66c0e12008-06-25 14:26:07 +0000625}
626
drh8a42cbd2008-07-10 18:13:42 +0000627ifcapable threadsafe {
dan0626dfc2010-06-15 06:56:37 +0000628 test_suite "no_mutex_try" -description {
drh8a42cbd2008-07-10 18:13:42 +0000629 The sqlite3_mutex_try() interface always fails
dan0626dfc2010-06-15 06:56:37 +0000630 } -files [
631 test_set $::allquicktests -exclude mutex1.test mutex2.test
632 ] -initialize {
drh8a42cbd2008-07-10 18:13:42 +0000633 catch {db close}
634 sqlite3_shutdown
635 install_mutex_counters 1
636 set ::disable_mutex_try 1
drhbb77b752009-04-09 01:23:49 +0000637 sqlite3_initialize
638 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000639 } -shutdown {
640 catch {db close}
641 sqlite3_shutdown
642 install_mutex_counters 0
drhbb77b752009-04-09 01:23:49 +0000643 sqlite3_initialize
644 autoinstall_test_functions
drh8a42cbd2008-07-10 18:13:42 +0000645 }
646}
647
danielk1977b13dee92008-06-23 15:55:52 +0000648# run_tests "crash_safe_append" -description {
649# Run crash.test with persistent journals on a SAFE_APPEND file-system.
650# } -initialize {
651# rename crashsql sa_crashsql
652# proc crashsql {args} {
653# set options [lrange $args 0 [expr {[llength $args]-2}]]
654# lappend options -char safe_append
655# set sql [lindex $args end]
656# lappend options "
657# PRAGMA journal_mode=persistent;
658# $sql
659# "
660# set fd [open test.db-journal w]
661# puts $fd [string repeat 1234567890 100000]
662# close $fd
663# eval sa_crashsql $options
664# }
665# } -shutdown {
666# rename crashsql {}
667# rename sa_crashsql crashsql
dan0626dfc2010-06-15 06:56:37 +0000668# } -files crash.test
danielk1977b13dee92008-06-23 15:55:52 +0000669
dan0626dfc2010-06-15 06:56:37 +0000670test_suite "safe_append" -description {
danielk1977755339e2008-09-12 10:22:40 +0000671 Run some tests on a SAFE_APPEND file-system.
672} -initialize {
673 rename sqlite3 sqlite3_safeappend
674 proc sqlite3 {args} {
675 if {[string range [lindex $args 0] 0 0] ne "-"} {
676 lappend args -vfs devsym
677 }
678 uplevel [concat sqlite3_safeappend $args]
679 }
680 sqlite3_simulate_device -char safe_append
681} -shutdown {
682 rename sqlite3 {}
683 rename sqlite3_shutdown sqlite3
dan0626dfc2010-06-15 06:56:37 +0000684} -files [
685 test_set $::allquicktests shared_err.test -exclude async3.test
686]
danielk1977755339e2008-09-12 10:22:40 +0000687
drhb232c232008-11-19 01:20:26 +0000688# The set of tests to run on the alternative-pcache
689set perm-alt-pcache-testset {
690 async.test
691 attach.test
692 delete.test delete2.test
693 index.test
694 insert.test insert2.test
695 join.test join2.test
696 rollback.test
697 select1.test select2.test
698 trans.test
699 update.test
700}
701
dan2acd4c62010-07-13 14:22:39 +0000702foreach discard_rate {0 10 50 90 100} {
703 test_suite "pcache${discard_rate}" -description "
704 Alternative pcache implementation with ${discard_rate}% random discard
705 " -initialize "
706 catch {db close}
707 sqlite3_shutdown
708 sqlite3_config_alt_pcache 1 $discard_rate 1
709 sqlite3_initialize
710 autoinstall_test_functions
711 " -shutdown {
712 catch {db close}
713 sqlite3_shutdown
714 sqlite3_config_alt_pcache 0 0 0
715 sqlite3_config_lookaside 100 500
716 install_malloc_faultsim 1
717 sqlite3_initialize
718 autoinstall_test_functions
719 } -files ${perm-alt-pcache-testset}
720}
danielk1977b13dee92008-06-23 15:55:52 +0000721
dan0626dfc2010-06-15 06:56:37 +0000722test_suite "journaltest" -description {
danielk1977f3107512008-12-22 10:58:46 +0000723 Check that pages are synced before being written (test_journal.c).
724} -initialize {
danielk1977f3107512008-12-22 10:58:46 +0000725 catch {db close}
726 register_jt_vfs -default ""
727} -shutdown {
728 unregister_jt_vfs
dan0626dfc2010-06-15 06:56:37 +0000729} -files [test_set $::allquicktests -exclude {
730 wal* incrvacuum.test ioerr.test corrupt4.test io.test crash8.test
731 async4.test bigfile.test
drhfb4a6262010-05-06 19:55:57 +0000732}]
danielk1977f3107512008-12-22 10:58:46 +0000733
dan0a7a9152010-04-07 07:57:38 +0000734if {[info commands register_demovfs] != ""} {
dan0626dfc2010-06-15 06:56:37 +0000735 test_suite "demovfs" -description {
dan430e74c2010-06-07 17:47:26 +0000736 Check that the demovfs (code in test_demovfs.c) more or less works.
dan0a7a9152010-04-07 07:57:38 +0000737 } -initialize {
738 register_demovfs
739 } -shutdown {
740 unregister_demovfs
dan0626dfc2010-06-15 06:56:37 +0000741 } -files {
dan0a7a9152010-04-07 07:57:38 +0000742 insert.test insert2.test insert3.test rollback.test
743 select1.test select2.test select3.test
744 }
745}
746
dan0626dfc2010-06-15 06:56:37 +0000747test_suite "wal" -description {
dan71cb5182010-04-26 12:39:03 +0000748 Run tests with journal_mode=WAL
dan31f98fc2010-04-27 05:42:32 +0000749} -initialize {
dan430e74c2010-06-07 17:47:26 +0000750 set ::G(savepoint6_iterations) 100
dan31f98fc2010-04-27 05:42:32 +0000751} -shutdown {
dan430e74c2010-06-07 17:47:26 +0000752 unset -nocomplain ::G(savepoint6_iterations)
dan0626dfc2010-06-15 06:56:37 +0000753} -files {
dane106de62010-04-27 06:49:34 +0000754 savepoint.test savepoint2.test savepoint6.test
755 trans.test avtrans.test
dan60f9da72010-07-07 11:42:59 +0000756
757 fts3aa.test fts3ab.test fts3ac.test fts3ad.test
758 fts3ae.test fts3af.test fts3ag.test fts3ah.test
759 fts3ai.test fts3aj.test fts3ak.test fts3al.test
760 fts3am.test fts3an.test fts3ao.test fts3b.test
761 fts3c.test fts3d.test fts3e.test fts3query.test
dan71cb5182010-04-26 12:39:03 +0000762}
dan897230e2010-08-26 14:15:37 +0000763
764test_suite "rtree" -description {
765 All R-tree related tests. Provides coverage of source file rtree.c.
766} -files [glob -nocomplain $::testdir/../ext/rtree/*.test]
767
dan7cf7df72011-03-19 15:37:02 +0000768test_suite "session" -description {
769 All session module related tests.
770} -files [glob -nocomplain $::testdir/../ext/session/*.test]
771
dan1ce1b4a2010-12-07 14:32:28 +0000772test_suite "no_optimization" -description {
773 Run test scripts with optimizations disabled using the
774 sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS) interface.
775} -files {
776 where.test where2.test where3.test where4.test where5.test
777 where6.test where7.test where8.test where9.test
778 whereA.test whereB.test wherelimit.test
779 select1.test select2.test select3.test select4.test select5.test
780 select7.test select8.test selectA.test selectC.test
781} -dbconfig {
782 optimization_control $::dbhandle all 0
783}
784
danielk19771077e3f2008-06-21 18:07:37 +0000785# End of tests
786#############################################################################
787
dan0626dfc2010-06-15 06:56:37 +0000788# run_tests NAME OPTIONS
789#
790# where available options are:
791#
dan2fce9ab2010-06-15 18:00:06 +0000792# -description TITLE
793# -initialize SCRIPT
794# -shutdown SCRIPT
795# -presql SQL
796# -files LIST-OF-FILES
797# -prefix NAME
dan0626dfc2010-06-15 06:56:37 +0000798#
799proc run_tests {name args} {
800 array set options $args
danielk19771077e3f2008-06-21 18:07:37 +0000801
dand506de02010-07-03 13:59:01 +0000802 set ::G(perm:name) $name
803 set ::G(perm:prefix) $options(-prefix)
dan0626dfc2010-06-15 06:56:37 +0000804 set ::G(perm:presql) $options(-presql)
805 set ::G(isquick) 1
dan1ce1b4a2010-12-07 14:32:28 +0000806 set ::G(perm:dbconfig) $options(-dbconfig)
dan0626dfc2010-06-15 06:56:37 +0000807
808 uplevel $options(-initialize)
809
810 foreach file [lsort $options(-files)] {
dan897230e2010-08-26 14:15:37 +0000811 if {[file tail $file] == $file} { set file [file join $::testdir $file] }
812 slave_test_file $file
dan0626dfc2010-06-15 06:56:37 +0000813 }
814
815 uplevel $options(-shutdown)
816
817 unset ::G(perm:name)
dand506de02010-07-03 13:59:01 +0000818 unset ::G(perm:prefix)
dan0626dfc2010-06-15 06:56:37 +0000819 unset ::G(perm:presql)
dan1ce1b4a2010-12-07 14:32:28 +0000820 unset ::G(perm:dbconfig)
dan0626dfc2010-06-15 06:56:37 +0000821}
822
823proc run_test_suite {name} {
824 if {[info exists ::testspec($name)]==0} {
825 error "No such test suite: $name"
826 }
827 uplevel run_tests $name $::testspec($name)
828}
829
830proc help {} {
dane91a54e2010-06-15 17:44:47 +0000831 puts "Usage: $::argv0 TESTSUITE ?TESTFILE?"
832 puts ""
833 puts "Available test-suites are:"
dan0626dfc2010-06-15 06:56:37 +0000834 foreach k $::testsuitelist {
dane91a54e2010-06-15 17:44:47 +0000835 if {[info exists ::testspec($k)]==0} {
836 puts " ----------------------------------------"
837 puts ""
838 } else {
839 array set o $::testspec($k)
840 puts "Test suite: \"$k\""
841 set d [string trim $o(-description)]
842 set d [regsub {\n *} $d "\n "]
843 puts " $d"
844 puts ""
845 }
dan0626dfc2010-06-15 06:56:37 +0000846 }
847 exit -1
848}
849
850if {[info script] == $argv0} {
851 proc main {argv} {
852 if {[llength $argv]==0} {
853 help
854 } else {
855 set suite [lindex $argv 0]
856 if {[info exists ::testspec($suite)]==0} help
857 set extra ""
858 if {[llength $argv]>1} { set extra [list -files [lrange $argv 1 end]] }
859 eval run_tests $suite $::testspec($suite) $extra
860 }
861 }
862 main $argv
863 finish_test
864}
865