blob: 8aee99f19ed18fd0b02e501ef1fee0618e52f12b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
|
# 2008 June 21
#
# The author disclaims copyright to this source code. In place of
# a legal notice, here is a blessing:
#
# May you do good and not evil.
# May you find forgiveness for yourself and forgive others.
# May you share freely, never taking more than you give.
#
#***********************************************************************
#
# $Id: permutations.test,v 1.20 2008/08/01 18:47:02 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
# Argument processing.
#
set ::testmode [lindex $argv 0]
set ::testfile [lindex $argv 1]
set argv [lrange $argv 2 end]
set ::permutations_presql ""
set ::permutations_test_prefix ""
if {$::testmode eq "veryquick"} {
set ::testmode [list persistent_journal no_journal]
set ISQUICK 1
}
if {$::testmode eq "quick"} {
set ::testmode [list persistent_journal no_journal autovacuum_ioerr]
set ISQUICK 1
}
if {$::testmode eq "all"} {
set ::testmode {
memsubsys1 memsubsys2 singlethread multithread onefile utf16 exclusive
persistent_journal persistent_journal_error no_journal no_journal_error
autovacuum_ioerr no_mutex_try
}
}
if {$::testmode eq "targets"} {
puts ""
puts -nonewline "veryquick "
puts "Same as persistent_journal and no_journal"
puts -nonewline "quick "
puts "Same as persistent_journal, no_journal and autovacuum_ioerr"
puts -nonewline "all "
puts "Everything except autovacuum_crash"
}
set EXCLUDE {
all.test in2.test onefile.test
async2.test incrvacuum_ioerr.test permutations.test
async.test jrnlmode2.test quick.test
autovacuum_crash.test jrnlmode3.test shared_err.test
autovacuum_ioerr.test jrnlmode4.test soak.test
btree8.test loadext.test speed1p.test
corrupt.test malloc2.test speed1.test
crash2.test malloc3.test speed2.test
crash3.test malloc4.test speed3.test
crash4.test mallocAll.test speed4p.test
crash6.test malloc.test speed4.test
crash7.test memleak.test sqllimits1.test
crash.test memsubsys1.test thread001.test
exclusive3.test memsubsys2.test thread002.test
fts3.test misc7.test utf16.test
fuzz_malloc.test misuse.test veryquick.test
fuzz.test mutex2.test vtab_err.test
lookaside.test
}
set ALLTESTS [list]
foreach filename [glob $testdir/*.test] {
set filename [file tail $filename]
if {[lsearch $EXCLUDE $filename] < 0} { lappend ALLTESTS $filename }
}
rename finish_test really_finish_test2
proc finish_test {} {}
rename do_test really_do_test
proc do_test {name args} {
eval really_do_test [list "perm-$::permutations_test_prefix.$name"] $args
}
# Overload the [sqlite3] command
rename sqlite3 really_sqlite3
proc sqlite3 {args} {
set r [eval really_sqlite3 $args]
if { [llength $args] == 2 && $::permutations_presql ne "" } {
[lindex $args 0] eval $::permutations_presql
}
set r
}
# run_tests OPTIONS
#
# where available options are:
#
# -initialize SCRIPT (default "")
# -shutdown SCRIPT (default "")
# -include LIST-OF-FILES (default $::ALLTESTS)
# -exclude LIST-OF-FILES (default "")
# -presql SQL (default "")
# -description TITLE (default "")
#
proc run_tests {name args} {
set ::permutations_test_prefix $name
set options(-shutdown) ""
set options(-initialize) ""
set options(-exclude) ""
set options(-include) $::ALLTESTS
set options(-presql) ""
set options(-description) "no description supplied (fixme)"
array set options $args
if {$::testmode eq "targets"} {
puts [format "% -20s %s" $name [string trim $options(-description)]]
return
}
if {$::testmode ne "" && [lsearch $::testmode $name]<0} return
uplevel $options(-initialize)
set ::permutations_presql $options(-presql)
foreach file $options(-include) {
if {[lsearch $options(-exclude) $file] < 0 && (
$::testfile eq "" || $::testfile eq $file || "$::testfile.test" eq $file
) } {
uplevel source $::testdir/$file
}
}
uplevel $options(-shutdown)
}
#############################################################################
# Start of tests
# Run some tests using pre-allocated page and scratch blocks.
#
run_tests "memsubsys1" -description {
Tests using pre-allocated page and scratch blocks
} -initialize {
catch {db close}
sqlite3_shutdown
sqlite3_config_pagecache 4096 24
sqlite3_config_scratch 25000 1
sqlite3_initialize
} -shutdown {
catch {db close}
sqlite3_shutdown
sqlite3_config_pagecache 0 0
sqlite3_config_scratch 0 0
sqlite3_initialize
}
# Run some tests using pre-allocated page and scratch blocks. This time
# the allocations are too small to use in most cases.
#
run_tests "memsubsys2" -description {
Tests using small pre-allocated page and scratch blocks
} -initialize {
catch {db close}
sqlite3_shutdown
sqlite3_config_pagecache 512 5
sqlite3_config_scratch 1000 1
sqlite3_initialize
} -shutdown {
catch {db close}
sqlite3_shutdown
sqlite3_config_pagecache 0 0
sqlite3_config_scratch 0 0
sqlite3_initialize
}
# Run all tests with the lookaside allocator disabled.
#
run_tests "memsubsys3" -description {
OOM tests with lookaside disabled
} -include {
malloc.test
malloc3.test
malloc4.test
malloc5.test
malloc6.test
malloc7.test
malloc8.test
malloc9.test
mallocA.test
mallocB.test
mallocC.test
mallocD.test
mallocE.test
mallocF.test
mallocG.test
} -initialize {
catch {db close}
sqlite3_shutdown
sqlite3_config_lookaside 0 0
sqlite3_initialize
} -shutdown {
catch {db close}
sqlite3_shutdown
sqlite3_config_lookaside 100 500
sqlite3_initialize
}
# Run some tests in SQLITE_CONFIG_SINGLETHREAD mode.
#
run_tests "singlethread" -description {
Tests run in SQLITE_CONFIG_SINGLETHREAD mode
} -initialize {
do_test mutex2-singlethread.0 {
catch {db close}
sqlite3_shutdown
sqlite3_config singlethread
} SQLITE_OK
} -include {
delete.test delete2.test insert.test rollback.test select1.test
select2.test trans.test update.test vacuum.test types.test
types2.test types3.test
} -shutdown {
do_test mutex2-X {
catch {db close}
sqlite3_shutdown
sqlite3_config serialized
} SQLITE_OK
}
run_tests "nomutex" -description {
Tests run with the SQLITE_OPEN_SINGLETHREADED flag passed to sqlite3_open().
} -initialize {
rename sqlite3 sqlite3_nomutex
proc sqlite3 {args} {
if {[string range [lindex $args 0] 0 0] ne "-"} {
lappend args -nomutex 1
}
uplevel [concat sqlite3_nomutex $args]
}
} -include {
delete.test delete2.test insert.test rollback.test select1.test
select2.test trans.test update.test vacuum.test types.test
types2.test types3.test
} -shutdown {
rename sqlite3 {}
rename sqlite3_nomutex sqlite3
}
# Run some tests in SQLITE_CONFIG_MULTITHREAD mode.
#
run_tests "multithread" -description {
Tests run in SQLITE_CONFIG_MULTITHREAD mode
} -initialize {
do_test mutex2-multithread.0 {
catch {db close}
sqlite3_shutdown
sqlite3_config multithread
} SQLITE_OK
} -include {
delete.test delete2.test insert.test rollback.test select1.test
select2.test trans.test update.test vacuum.test types.test
types2.test types3.test
} -shutdown {
do_test mutex2-X {
catch {db close}
sqlite3_shutdown
sqlite3_config serialized
} SQLITE_OK
}
# Run some tests using the "onefile" demo.
#
run_tests "onefile" -description {
Run some tests using the "test_onefile.c" demo
} -initialize {
rename sqlite3 sqlite3_onefile
proc sqlite3 {args} {
if {[string range [lindex $args 0] 0 0] ne "-"} {
lappend args -vfs fs
}
uplevel [concat sqlite3_onefile $args]
}
} -include {
conflict.test insert.test insert2.test insert3.test
rollback.test select1.test select2.test select3.test
temptable.test
} -shutdown {
rename sqlite3 {}
rename sqlite3_onefile sqlite3
}
# Run some tests using UTF-16 databases.
#
run_tests "utf16" -description {
Run tests using UTF-16 databases
} -presql {
pragma encoding = 'UTF-16'
} -include {
alter.test alter3.test
auth.test bind.test blob.test capi2.test capi3.test collate1.test
collate2.test collate3.test collate4.test collate5.test collate6.test
conflict.test date.test delete.test expr.test fkey1.test func.test
hook.test index.test insert2.test insert.test interrupt.test in.test
intpkey.test ioerr.test join2.test join.test lastinsert.test
laststmtchanges.test limit.test lock2.test lock.test main.test
memdb.test minmax.test misc1.test misc2.test misc3.test notnull.test
null.test progress.test quote.test rowid.test select1.test select2.test
select3.test select4.test select5.test select6.test sort.test
subselect.test tableapi.test table.test temptable.test
trace.test trigger1.test trigger2.test trigger3.test
trigger4.test types2.test types.test unique.test update.test
vacuum.test view.test where.test
}
# Run some tests in exclusive locking mode.
#
run_tests "exclusive" -description {
Run tests in exclusive locking mode.
} -presql {
pragma locking_mode = 'exclusive'
} -include {
rollback.test select1.test select2.test
malloc.test ioerr.test
}
# Run some tests in persistent journal mode.
#
run_tests "persistent_journal" -description {
Run tests in persistent-journal mode.
} -presql {
pragma journal_mode = persist
} -include {
delete.test delete2.test insert.test rollback.test select1.test
select2.test trans.test update.test vacuum.test
}
# Run some error tests in persistent journal mode.
#
run_tests "persistent_journal_error" -description {
Run malloc.test and ioerr.test in persistent-journal mode.
} -presql {
pragma journal_mode = persist
} -include {
malloc.test ioerr.test
}
# Run some tests in no journal mode.
#
run_tests "no_journal" -description {
Run tests in no-journal mode.
} -presql {
pragma journal_mode = persist
} -include {
delete.test delete2.test insert.test rollback.test select1.test
select2.test trans.test update.test vacuum.test
}
# Run some error tests in no journal mode.
#
run_tests "no_journal_error" -description {
Run malloc.test and ioerr.test in no-journal mode.
} -presql {
pragma journal_mode = persist
} -include {
malloc.test ioerr.test
}
# Run some crash-tests in autovacuum mode.
#
run_tests "autovacuum_crash" -description {
Run crash.test in autovacuum mode.
} -presql {
pragma auto_vacuum = 1
} -include crash.test
# Run some ioerr-tests in autovacuum mode.
#
run_tests "autovacuum_ioerr" -description {
Run ioerr.test in autovacuum mode.
} -presql {
pragma auto_vacuum = 1
} -include ioerr.test
ifcapable mem3 {
run_tests "memsys3" -description {
Run tests using the allocator in mem3.c.
} -exclude {
autovacuum.test delete3.test manydb.test
bigrow.test incrblob2.test memdb.test
bitvec.test index2.test memsubsys1.test
capi3c.test ioerr.test memsubsys2.test
capi3.test join3.test pagesize.test
collate5.test limit.test
} -initialize {
catch {db close}
sqlite3_reset_auto_extension
sqlite3_shutdown
sqlite3_config_heap 25000000 0
sqlite3_config_lookaside 0 0
install_malloc_faultsim 1
sqlite3_initialize
autoinstall_test_functions
} -shutdown {
catch {db close}
sqlite3_reset_auto_extension
sqlite3_shutdown
sqlite3_config_heap 0 0
sqlite3_config_lookaside 100 500
install_malloc_faultsim 1
sqlite3_initialize
}
}
ifcapable mem5 {
run_tests "memsys5" -description {
Run tests using the allocator in mem5.c.
} -exclude {
autovacuum.test delete3.test manydb.test
bigrow.test incrblob2.test memdb.test
bitvec.test index2.test memsubsys1.test
capi3c.test ioerr.test memsubsys2.test
capi3.test join3.test pagesize.test
collate5.test limit.test
} -initialize {
catch {db close}
sqlite3_reset_auto_extension
sqlite3_shutdown
sqlite3_config_heap 25000000 64
sqlite3_config_lookaside 0 0
install_malloc_faultsim 1
sqlite3_initialize
autoinstall_test_functions
} -shutdown {
catch {db close}
sqlite3_reset_auto_extension
sqlite3_shutdown
sqlite3_config_heap 0 0
sqlite3_config_lookaside 100 500
install_malloc_faultsim 1
sqlite3_initialize
}
run_tests "memsys5-2" -description {
Run tests using the allocator in mem5.c in a different configuration.
} -include {
select1.test
} -initialize {
catch {db close}
sqlite3_reset_auto_extension
sqlite3_shutdown
sqlite3_config_heap 40000000 16
sqlite3_config_lookaside 0 0
install_malloc_faultsim 1
sqlite3_initialize
autoinstall_test_functions
} -shutdown {
catch {db close}
sqlite3_reset_auto_extension
sqlite3_shutdown
sqlite3_config_heap 0 0
sqlite3_config_lookaside 100 500
install_malloc_faultsim 1
sqlite3_initialize
}
}
ifcapable threadsafe {
run_tests "no_mutex_try" -description {
The sqlite3_mutex_try() interface always fails
} -initialize {
catch {db close}
sqlite3_shutdown
install_mutex_counters 1
set ::disable_mutex_try 1
} -shutdown {
catch {db close}
sqlite3_shutdown
install_mutex_counters 0
}
}
run_tests "memsys6" -description {
Run tests using the allocator in mem6.c.
} -exclude {
capi3.test capi3c.test
} -initialize {
catch {db close}
sqlite3_reset_auto_extension
sqlite3_shutdown
sqlite3_config_chunkalloc 0
install_malloc_faultsim 1
sqlite3_initialize
autoinstall_test_functions
} -shutdown {
catch {db close}
sqlite3_reset_auto_extension
sqlite3_shutdown
sqlite3_config_heap 0 0
install_malloc_faultsim 1
sqlite3_initialize
}
# run_tests "crash_safe_append" -description {
# Run crash.test with persistent journals on a SAFE_APPEND file-system.
# } -initialize {
# rename crashsql sa_crashsql
# proc crashsql {args} {
# set options [lrange $args 0 [expr {[llength $args]-2}]]
# lappend options -char safe_append
# set sql [lindex $args end]
# lappend options "
# PRAGMA journal_mode=persistent;
# $sql
# "
# set fd [open test.db-journal w]
# puts $fd [string repeat 1234567890 100000]
# close $fd
# eval sa_crashsql $options
# }
# } -shutdown {
# rename crashsql {}
# rename sa_crashsql crashsql
# } -include crash.test
# End of tests
#############################################################################
if {$::testmode eq "targets"} { puts "" ; exit }
# Restore the [sqlite3] command.
#
rename sqlite3 {}
rename really_sqlite3 sqlite3
# Restore the [finish_test] command.
#
rename finish_test ""
rename really_finish_test2 finish_test
# Restore the [do_test] command.
#
rename do_test ""
rename really_do_test do_test
finish_test
|