Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Refactor some of the global variables and commands used by tester.tcl. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
c2edf8e17f874d0ca4e94b75575bf6e1 |
User & Date: | dan 2010-06-07 14:28:17.000 |
Context
2010-06-07
| ||
17:47 | Change all.test, quick.test and permutations.test so that they use a separate interpreter for each test file. (check-in: 7c33eb5a5a user: dan tags: trunk) | |
14:28 | Refactor some of the global variables and commands used by tester.tcl. (check-in: c2edf8e17f user: dan tags: trunk) | |
06:11 | Add a couple of extra coverage tests for wal.c. (check-in: cfe60254df user: dan tags: trunk) | |
Changes
Changes to src/tclsqlite.c.
︙ | ︙ | |||
3486 3487 3488 3489 3490 3491 3492 | "} else {\n" "append line \\n\n" "}\n" "}\n" ; #endif | | > > > > > > > | | > > > | | > > > > | | < > | > | > > > > > > > > > > > | > > | 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 | "} else {\n" "append line \\n\n" "}\n" "}\n" ; #endif #ifdef SQLITE_TEST static void init_all(Tcl_Interp *); static int init_all_cmd( ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ Tcl_Interp *slave; if( objc!=2 ){ Tcl_WrongNumArgs(interp, 1, objv, "SLAVE"); return TCL_ERROR; } slave = Tcl_GetSlave(interp, Tcl_GetString(objv[1])); if( !slave ){ return TCL_ERROR; } init_all(slave); return TCL_OK; } #endif /* ** Configure the interpreter passed as the first argument to have access ** to the commands and linked variables that make up: ** ** * the [sqlite3] extension itself, ** ** * If SQLITE_TCLMD5 or SQLITE_TEST is defined, the Md5 commands, and ** ** * If SQLITE_TEST is set, the various test interfaces used by the Tcl ** test suite. */ static void init_all(Tcl_Interp *interp){ Sqlite3_Init(interp); #if defined(SQLITE_TEST) || defined(SQLITE_TCLMD5) Md5_Init(interp); #endif #ifdef SQLITE_TEST { extern int Sqliteconfig_Init(Tcl_Interp*); extern int Sqlitetest1_Init(Tcl_Interp*); extern int Sqlitetest2_Init(Tcl_Interp*); extern int Sqlitetest3_Init(Tcl_Interp*); extern int Sqlitetest4_Init(Tcl_Interp*); |
︙ | ︙ | |||
3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 | SqlitetestThread_Init(interp); SqlitetestOnefile_Init(interp); SqlitetestOsinst_Init(interp); Sqlitetestbackup_Init(interp); Sqlitetestintarray_Init(interp); Sqlitetestvfs_Init(interp); #ifdef SQLITE_SSE Sqlitetestsse_Init(interp); #endif } #endif if( argc>=2 ){ int i; char zArgc[32]; sqlite3_snprintf(sizeof(zArgc), zArgc, "%d", argc-(3-TCLSH)); Tcl_SetVar(interp,"argc", zArgc, TCL_GLOBAL_ONLY); Tcl_SetVar(interp,"argv0",argv[1],TCL_GLOBAL_ONLY); Tcl_SetVar(interp,"argv", "", TCL_GLOBAL_ONLY); | > > > > > > > > > > > > > > > > > | 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 | SqlitetestThread_Init(interp); SqlitetestOnefile_Init(interp); SqlitetestOsinst_Init(interp); Sqlitetestbackup_Init(interp); Sqlitetestintarray_Init(interp); Sqlitetestvfs_Init(interp); Tcl_CreateObjCommand(interp,"load_testfixture_extensions",init_all_cmd,0,0); #ifdef SQLITE_SSE Sqlitetestsse_Init(interp); #endif } #endif } #define TCLSH_MAIN main /* Needed to fake out mktclapp */ int TCLSH_MAIN(int argc, char **argv){ Tcl_Interp *interp; /* Call sqlite3_shutdown() once before doing anything else. This is to ** test that sqlite3_shutdown() can be safely called by a process before ** sqlite3_initialize() is. */ sqlite3_shutdown(); Tcl_FindExecutable(argv[0]); interp = Tcl_CreateInterp(); init_all(interp); if( argc>=2 ){ int i; char zArgc[32]; sqlite3_snprintf(sizeof(zArgc), zArgc, "%d", argc-(3-TCLSH)); Tcl_SetVar(interp,"argc", zArgc, TCL_GLOBAL_ONLY); Tcl_SetVar(interp,"argv0",argv[1],TCL_GLOBAL_ONLY); Tcl_SetVar(interp,"argv", "", TCL_GLOBAL_ONLY); |
︙ | ︙ |
Changes to test/all.test.
︙ | ︙ | |||
52 53 54 55 56 57 58 | # grows, it may mean there is a memory leak in the library. # set LeakList {} set EXCLUDE {} lappend EXCLUDE all.test ;# This file lappend EXCLUDE async.test | | | | | | | < | > > | < | | 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 | # grows, it may mean there is a memory leak in the library. # set LeakList {} set EXCLUDE {} lappend EXCLUDE all.test ;# This file lappend EXCLUDE async.test lappend EXCLUDE crash.test ;# Run separately later. lappend EXCLUDE crash2.test ;# Run separately later. lappend EXCLUDE quick.test ;# Alternate test driver script lappend EXCLUDE veryquick.test ;# Alternate test driver script lappend EXCLUDE malloc.test ;# Run separately later. lappend EXCLUDE misuse.test ;# Run separately later. lappend EXCLUDE memleak.test ;# Alternate test driver script lappend EXCLUDE permutations.test ;# Run separately later. lappend EXCLUDE soak.test ;# Takes a very long time (default 1 hr) lappend EXCLUDE fts3.test ;# Wrapper for muliple fts3*.tests lappend EXCLUDE mallocAll.test ;# Wrapper for running all malloc tests # Files to include in the test. If this list is empty then everything # that is not in the EXCLUDE list is run. # set INCLUDE { } for {set Counter 0} {$Counter<$COUNT} {incr Counter} { foreach testfile [lsort -dictionary [glob $testdir/*.test]] { set tail [file tail $testfile] if {[lsearch -exact $EXCLUDE $tail]>=0} continue if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue reset_prng_state source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" fail_test $tail set sqlite_open_file_count 0 } } if {[info exists Leak]} { lappend LeakList $Leak } if {[set_test_counter errors]} break } set argv all source $testdir/permutations.test set argv "" # Do one last test to look for a memory leak in the library. This will # only work if SQLite is compiled with the -DSQLITE_DEBUG=1 flag. # if {$LeakList!=""} { puts -nonewline memory-leak-test... incr_ntest foreach x $LeakList { if {$x!=[lindex $LeakList 0]} { puts " failed!" puts "Expected: all values to be the same" puts " Got: $LeakList" fail_test memory-leak-test break } } puts " Ok" } # Run the crashtest only on unix and only once. If the library does not |
︙ | ︙ |
Changes to test/avtrans.test.
︙ | ︙ | |||
161 162 163 164 165 166 167 | } {0 {1 4 5 10}} do_test avtrans-3.14 { set v [catch {execsql { SELECT a FROM one ORDER BY a; } db} msg] lappend v $msg } {0 {1 2 3 4}} | | | 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | } {0 {1 4 5 10}} do_test avtrans-3.14 { set v [catch {execsql { SELECT a FROM one ORDER BY a; } db} msg] lappend v $msg } {0 {1 2 3 4}} sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) integrity_check avtrans-3.15 do_test avtrans-4.1 { set v [catch {execsql { COMMIT; } db} msg] lappend v $msg |
︙ | ︙ |
Changes to test/cache.test.
︙ | ︙ | |||
54 55 56 57 58 59 60 | do_test cache-1.3.$ii { execsql {SELECT * FROM abc} pager_cache_size db } $::cache_size } | | | 54 55 56 57 58 59 60 61 62 63 | do_test cache-1.3.$ii { execsql {SELECT * FROM abc} pager_cache_size db } $::cache_size } sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) finish_test |
Changes to test/capi3b.test.
︙ | ︙ | |||
137 138 139 140 141 142 143 | sqlite3_finalize $VM1 sqlite3_finalize $VM2 execsql {SELECT * FROM t1} } {1 2 3 4} catch {db2 close} | | | 137 138 139 140 141 142 143 144 145 | sqlite3_finalize $VM1 sqlite3_finalize $VM2 execsql {SELECT * FROM t1} } {1 2 3 4} catch {db2 close} sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) finish_test |
Changes to test/exclusive.test.
︙ | ︙ | |||
208 209 210 211 212 213 214 | } db2 } {1 {database is locked}} do_test exclusive-2.8 { execsql { ROLLBACK; } db2 } {} | | | 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | } db2 } {1 {database is locked}} do_test exclusive-2.8 { execsql { ROLLBACK; } db2 } {} sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) do_test exclusive-2.9 { # Write the database to establish the exclusive lock with connection 'db. execsql { INSERT INTO abc VALUES(7, 8, 9); } db catchsql { |
︙ | ︙ |
Changes to test/exclusive2.test.
︙ | ︙ | |||
295 296 297 298 299 300 301 | } {4} do_test exclusive2-3.6 { execsql { INSERT INTO t1 VALUES(randstr(10, 400)); } readPagerChangeCounter test.db } {5} | | | 295 296 297 298 299 300 301 302 303 304 | } {4} do_test exclusive2-3.6 { execsql { INSERT INTO t1 VALUES(randstr(10, 400)); } readPagerChangeCounter test.db } {5} sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) finish_test |
Changes to test/fts2.test.
︙ | ︙ | |||
54 55 56 57 58 59 60 | set tail [file tail $testfile] if {[lsearch -exact $EXCLUDE $tail]>=0} continue if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" | < | | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | set tail [file tail $testfile] if {[lsearch -exact $EXCLUDE $tail]>=0} continue if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" fail_test $tail set sqlite_open_file_count 0 } } set sqlite_open_file_count 0 really_finish_test |
Changes to test/fts3.test.
︙ | ︙ | |||
56 57 58 59 60 61 62 | set tail [file tail $testfile] if {[lsearch -exact $EXCLUDE $tail]>=0} continue if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" | < | | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | set tail [file tail $testfile] if {[lsearch -exact $EXCLUDE $tail]>=0} continue if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" fail_test $tail set sqlite_open_file_count 0 } } set sqlite_open_file_count 0 really_finish_test |
Changes to test/incrblob.test.
︙ | ︙ | |||
204 205 206 207 208 209 210 | execsql { SELECT i FROM blobs } } {45} do_test incrblob-2.$AutoVacuumMode.9 { nRead db } [expr $AutoVacuumMode ? 4 : 30] } | | | 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | execsql { SELECT i FROM blobs } } {45} do_test incrblob-2.$AutoVacuumMode.9 { nRead db } [expr $AutoVacuumMode ? 4 : 30] } sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) #------------------------------------------------------------------------ # incrblob-3.*: # # Test the outcome of trying to write to a read-only blob handle. # do_test incrblob-3.1 { |
︙ | ︙ | |||
496 497 498 499 500 501 502 | } {0 {}} do_test incrblob-6.15 { execsql { SELECT * FROM blobs WHERE rowid = 4; } } {a different invocation} db2 close | | | 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 | } {0 {}} do_test incrblob-6.15 { execsql { SELECT * FROM blobs WHERE rowid = 4; } } {a different invocation} db2 close sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) #----------------------------------------------------------------------- # The following tests verify the behaviour of the incremental IO # APIs in the following cases: # # 7.1 A row that containing an open blob is modified. # |
︙ | ︙ |
Changes to test/lock2.test.
︙ | ︙ | |||
101 102 103 104 105 106 107 | SELECT * FROM sqlite_master; } } } "table abc abc [expr $AUTOVACUUM?3:2] {CREATE TABLE abc(a, b, c)}" catch {testfixture $::tf1 {db close}} catch {close $::tf1} | | | 101 102 103 104 105 106 107 108 109 110 | SELECT * FROM sqlite_master; } } } "table abc abc [expr $AUTOVACUUM?3:2] {CREATE TABLE abc(a, b, c)}" catch {testfixture $::tf1 {db close}} catch {close $::tf1} sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) finish_test |
Changes to test/lock6.test.
︙ | ︙ | |||
157 158 159 160 161 162 163 | } db } {} catch {close $::tf1} set env(SQLITE_FORCE_PROXY_LOCKING) $using_proxy set sqlite_hostid_num 0 | | < | 157 158 159 160 161 162 163 164 165 166 167 | } db } {} catch {close $::tf1} set env(SQLITE_FORCE_PROXY_LOCKING) $using_proxy set sqlite_hostid_num 0 sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) } finish_test |
Changes to test/mallocAll.test.
︙ | ︙ | |||
52 53 54 55 56 57 58 | set tail [file tail $testfile] if {[lsearch -exact $EXCLUDE $tail]>=0} continue if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" | < | | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | set tail [file tail $testfile] if {[lsearch -exact $EXCLUDE $tail]>=0} continue if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" fail_test $tail set sqlite_open_file_count 0 } } source $testdir/misuse.test set sqlite_open_file_count 0 really_finish_test |
Changes to test/mallocC.test.
︙ | ︙ | |||
72 73 74 75 76 77 78 | # Checksum the database. #do_test mallocC-$tn.$::n.3 { # allcksum db #} $sum #integrity_check mallocC-$tn.$::n.4 | < | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | # Checksum the database. #do_test mallocC-$tn.$::n.3 { # allcksum db #} $sum #integrity_check mallocC-$tn.$::n.4 } unset ::mallocopts } sqlite3_extended_result_codes db 1 execsql { |
︙ | ︙ |
Changes to test/memleak.test.
︙ | ︙ | |||
71 72 73 74 75 76 77 | source $testfile if {[info exists Leak]} { lappend LeakList $Leak } } if {$LeakList!=""} { puts -nonewline memory-leak-test-$tail... | | < | | 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | source $testfile if {[info exists Leak]} { lappend LeakList $Leak } } if {$LeakList!=""} { puts -nonewline memory-leak-test-$tail... incr_ntest foreach x $LeakList { if {$x!=[lindex $LeakList 0]} { puts " failed! ($LeakList)" fail_test memory-leak-test-$tail break } } puts " Ok" } } memleak_finish_test |
︙ | ︙ |
Changes to test/pageropt.test.
︙ | ︙ | |||
190 191 192 193 194 195 196 | db close sqlite3 db test.db pagercount_sql { DELETE FROM t1 } } {12 3 3} | | | 190 191 192 193 194 195 196 197 198 199 | db close sqlite3 db test.db pagercount_sql { DELETE FROM t1 } } {12 3 3} sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) catch {db2 close} finish_test |
Changes to test/quick.test.
︙ | ︙ | |||
142 143 144 145 146 147 148 | if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue if {[info exists STARTAT] && [string match $STARTAT $tail]} {unset STARTAT} if {[info exists STARTAT]} continue source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" | < | | 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue if {[info exists STARTAT] && [string match $STARTAT $tail]} {unset STARTAT} if {[info exists STARTAT]} continue source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" fail_test $tail set sqlite_open_file_count 0 } } #set argv quick #source $testdir/permutations.test #set argv "" source $testdir/misuse.test |
︙ | ︙ |
Changes to test/rtree.test.
︙ | ︙ | |||
24 25 26 27 28 29 30 | foreach testfile [lsort -dictionary [glob -nocomplain $rtreedir/*.test]] { set tail [file tail $testfile] if {[lsearch -exact $RTREE_EXCLUDE $tail]>=0} continue source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" | < | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | foreach testfile [lsort -dictionary [glob -nocomplain $rtreedir/*.test]] { set tail [file tail $testfile] if {[lsearch -exact $RTREE_EXCLUDE $tail]>=0} continue source $testfile catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" fail_test $tail set sqlite_open_file_count 0 } } set sqlite_open_file_count 0 rtree_finish_test rename finish_test {} |
︙ | ︙ |
Changes to test/soak.test.
︙ | ︙ | |||
68 69 70 71 72 73 74 | set ISQUICK 1 set soak_starttime [clock seconds] set soak_finishtime [expr {$soak_starttime + $TIMEOUT}] # Loop until the timeout is reached or an error occurs. # | | < | > | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | set ISQUICK 1 set soak_starttime [clock seconds] set soak_finishtime [expr {$soak_starttime + $TIMEOUT}] # Loop until the timeout is reached or an error occurs. # for {set iRun 0} {[clock seconds] < $soak_finishtime} {incr iRun} { set iIdx [expr {$iRun % [llength $SOAKTESTS]}] source [file join $testdir [lindex $SOAKTESTS $iIdx]] catch {db close} if {$sqlite_open_file_count>0} { puts "$tail did not close all files: $sqlite_open_file_count" fail_test $tail set sqlite_open_file_count 0 } if {[set_test_counter errors]>0} break } really_finish_test |
Changes to test/softheap1.test.
︙ | ︙ | |||
41 42 43 44 45 46 47 | ROLLBACK; } execsql { PRAGMA integrity_check; } } {ok} | | < | 41 42 43 44 45 46 47 48 49 | ROLLBACK; } execsql { PRAGMA integrity_check; } } {ok} sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) finish_test |
Changes to test/tester.tcl.
︙ | ︙ | |||
9 10 11 12 13 14 15 16 | # #*********************************************************************** # This file implements some common TCL routines used for regression # testing the SQLite library # # $Id: tester.tcl,v 1.143 2009/04/09 01:23:49 drh Exp $ # | > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > | < < < > > > | < > > > > > > > | < > > > > > | | < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < | | < < < < < < | | < < | < < < < < < < < < | | < > | > | > > | > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > | > > > > > > > > > > > > | | > > > | | | | | > | > > | > | > > > > > > > > > > > > > > > > > > > > > > > > | < < < | < | < | | < | < < | < < < < | 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 | # #*********************************************************************** # This file implements some common TCL routines used for regression # testing the SQLite library # # $Id: tester.tcl,v 1.143 2009/04/09 01:23:49 drh Exp $ #------------------------------------------------------------------------- # The commands provided by the code in this file to help with creating # test cases are as follows: # # Commands to manipulate the db and the file-system at a high level: # # copy_file FROM TO # drop_all_table ?DB? # forcedelete FILENAME # # Test the capability of the SQLite version built into the interpreter to # determine if a specific test can be run: # # ifcapable EXPR # # Calulate checksums based on database contents: # # dbcksum DB DBNAME # allcksum ?DB? # cksum ?DB? # # Commands to execute/explain SQL statements: # # stepsql DB SQL # execsql2 SQL # explain_no_trace SQL # explain SQL ?DB? # catchsql SQL ?DB? # execsql SQL ?DB? # # Commands to run test cases: # # do_ioerr_test TESTNAME ARGS... # crashsql ARGS... # integrity_check TESTNAME ?DB? # do_test TESTNAME SCRIPT EXPECTED # # Commands providing a lower level interface to the test counters: # # set_test_counter COUNTER ?VALUE? # omit_test TESTNAME REASON # fail_test TESTNAME # incr_ntest # # Command run at the end of each test file: # # finish_test # # Commands to help create test files that run with the "WAL" permutation: # # wal_is_wal_mode # wal_set_journal_mode ?DB? # wal_check_journal_mode TESTNAME?DB? # # Set the precision of FP arithmatic used by the interpreter. And # configure SQLite to take database file locks on the page that begins # 64KB into the database file instead of the one 1GB in. This means # the code that handles that special case can be tested without creating # very large database files. # set tcl_precision 15 sqlite3_test_control_pending_byte 0x0010000 # If the pager codec is available, create a wrapper for the [sqlite3] # command that appends "-key {xyzzy}" to the command line. i.e. this: # # sqlite3 db test.db # # becomes # # sqlite3 db test.db -key {xyzzy} # if {[sqlite3 -has-codec] && [info command sqlite_orig]==""} { rename sqlite3 sqlite_orig proc sqlite3 {args} { if {[llength $args]==2 && [string index [lindex $args 0] 0]!="-"} { lappend args -key {xyzzy} } uplevel 1 sqlite_orig $args } } # The following block only runs the first time this file is sourced. # if {[info exists cmdlinearg]==0} { # Parse any options specified in the $argv array. This script accepts the # following options: # # --pause # --soft-heap-limit=NN # --maxerror=NN # --malloctrace=N # --backtrace=N # --binarylog=N # set cmdlinearg(soft-heap-limit) 0 set cmdlinearg(maxerror) 1000 set cmdlinearg(malloctrace) 0 set cmdlinearg(backtrace) 10 set cmdlinearg(binarylog) 0 set leftover [list] foreach a $argv { switch -regexp -- $a { {^-+pause$} { # Wait for user input before continuing. This is to give the user an # opportunity to connect profiling tools to the process. puts -nonewline "Press RETURN to begin..." flush stdout gets stdin } {^-+soft-heap-limit=.+$} { foreach {dummy cmdlinearg(soft-heap-limit)} [split $a =] break } {^-+maxerror=.+$} { foreach {dummy cmdlinearg(maxerror)} [split $a =] break } {^-+malloctrace=.+$} { foreach {dummy cmdlinearg(malloctrace)} [split $a =] break if {$cmdlinearg(malloctrace)} { sqlite3_memdebug_log start } } {^-+backtrace=.+$} { foreach {dummy cmdlinearg(backtrace)} [split $a =] break } sqlite3_memdebug_backtrace $value {^-+binarylog=.+$} { foreach {dummy cmdlinearg(binarylog)} [split $a =] break } default { lappend leftover $a } } } set argv $leftover sqlite3_shutdown install_malloc_faultsim 1 sqlite3_initialize autoinstall_test_functions if {$cmdlinearg(binarylog)} { vfslog new binarylog {} vfslog.bin } # Set the backtrace depth, if malloc tracing is enabled. # if {$cmdlinearg(malloctrace)} { sqlite3_memdebug_backtrace $cmdlinearg(backtrace) } } # Update the soft-heap-limit each time this script is run. In that # way if an individual test file changes the soft-heap-limit, it # will be reset at the start of the next test file. # sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) # Create a test database # proc reset_db {} { catch {db close} file delete -force test.db file delete -force test.db-journal file delete -force test.db-wal sqlite3 db ./test.db set ::DB [sqlite3_connection_pointer db] if {[info exists ::SETUP_SQL]} { db eval $::SETUP_SQL } } reset_db # Abort early if this script has been run before. # if {[info exists TC(count)]} return # Initialize the test counters and set up commands to access them. # Or, if this is a slave interpreter, set up aliases to write the # counters in the parent interpreter. # if {0==[info exists ::SLAVE]} { set TC(errors) 0 set TC(count) 0 set TC(fail_list) [list] set TC(omit_list) [list] proc set_test_counter {counter args} { if {[llength $args]} { set ::TC($counter) [lindex $args 0] } set ::TC($counter) } } # Record the fact that a sequence of tests were omitted. # proc omit_test {name reason} { set omitList [set_test_counter omit_list] lappend omitList [list $name $reason] set_test_counter omit_list $omitList } # Record the fact that a test failed. # proc fail_test {name} { set f [set_test_counter fail_list] lappend f $name set_test_counter fail_list $f set_test_counter errors [expr [set_test_counter errors] + 1] set nFail [set_test_counter errors] if {$nFail>=$::cmdlinearg(maxerror)} { puts "*** Giving up..." finalize_testing } } # Increment the number of tests run # proc incr_ntest {} { set_test_counter count [expr [set_test_counter count] + 1] } # Invoke the do_test procedure to run a single test # proc do_test {name cmd expected} { global argv cmdlinearg sqlite3_memdebug_settitle $name if {[llength $argv]==0} { set go 1 } else { set go 0 foreach pattern $argv { if {[string match $pattern $name]} { set go 1 break } } } if {!$go} return incr_ntest puts -nonewline $name... flush stdout if {[catch {uplevel #0 "$cmd;\n"} result]} { puts "\nError: $result" fail_test $name } elseif {[string compare $result $expected]} { puts "\nExpected: \[$expected\]\n Got: \[$result\]" fail_test $name } else { puts " Ok" } flush stdout } # Run an SQL script. # Return the number of microseconds per statement. # proc speed_trial {name numstmt units sql} { puts -nonewline [format {%-21.21s } $name...] |
︙ | ︙ | |||
242 243 244 245 246 247 248 | global total_time puts [format {%-21.21s %12d uS TOTAL} $name $total_time] } # Run this routine last # proc finish_test {} { | > > > | | > > < < < < < < | | > > | | | 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 | global total_time puts [format {%-21.21s %12d uS TOTAL} $name $total_time] } # Run this routine last # proc finish_test {} { catch {db close} catch {db2 close} catch {db3 close} if {0==[info exists ::SLAVE]} { finalize_testing } } proc finalize_testing {} { global sqlite_open_file_count set omitList [set_test_counter omit_list] catch {db close} catch {db2 close} catch {db3 close} vfs_unlink_test sqlite3 db {} # sqlite3_clear_tsd_memdebug db close sqlite3_reset_auto_extension sqlite3_soft_heap_limit 0 set nTest [incr_ntest] set nErr [set_test_counter errors] puts "$nErr errors out of $nTest tests" if {$nErr>0} { puts "Failures on these tests: [set_test_counter fail_list]" } run_thread_tests 1 if {[llength $omitList]>0} { puts "Omitted test cases:" set prec {} foreach {rec} [lsort $omitList] { if {$rec==$prec} continue set prec $rec puts [format { %-12s %s} [lindex $rec 0] [lindex $rec 1]] } } if {$nErr>0 && ![working_64bit_int]} { puts "******************************************************************" puts "N.B.: The version of TCL that you used to build this test harness" puts "is defective in that it does not support 64-bit integers. Some or" puts "all of the test failures above might be a result from this defect" puts "in your TCL build." puts "******************************************************************" } if {$::cmdlinearg(binarylog)} { vfslog finalize binarylog } if {$sqlite_open_file_count} { puts "$sqlite_open_file_count files were left open" incr nErr } if {[sqlite3_memory_used]>0} { |
︙ | ︙ | |||
313 314 315 316 317 318 319 | } show_memstats puts "Maximum memory usage: [sqlite3_memory_highwater 1] bytes" puts "Current memory usage: [sqlite3_memory_highwater] bytes" if {[info commands sqlite3_memdebug_malloc_count] ne ""} { puts "Number of malloc() : [sqlite3_memdebug_malloc_count] calls" } | | | 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 | } show_memstats puts "Maximum memory usage: [sqlite3_memory_highwater 1] bytes" puts "Current memory usage: [sqlite3_memory_highwater] bytes" if {[info commands sqlite3_memdebug_malloc_count] ne ""} { puts "Number of malloc() : [sqlite3_memdebug_malloc_count] calls" } if {$::cmdlinearg(malloctrace)} { puts "Writing mallocs.sql..." memdebug_log_sql sqlite3_memdebug_log stop sqlite3_memdebug_log clear if {[sqlite3_memory_used]>0} { puts "Writing leaks.sql..." |
︙ | ︙ | |||
982 983 984 985 986 987 988 989 990 991 992 993 994 995 | } proc wal_check_journal_mode {testname {db db}} { if { [wal_is_wal_mode] } { $db eval { SELECT * FROM sqlite_master } do_test $testname [list $db eval "PRAGMA main.journal_mode"] {wal} } } # If the library is compiled with the SQLITE_DEFAULT_AUTOVACUUM macro set # to non-zero, then set the global variable $AUTOVACUUM to 1. set AUTOVACUUM $sqlite_options(default_autovacuum) source $testdir/thread_common.tcl | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 | } proc wal_check_journal_mode {testname {db db}} { if { [wal_is_wal_mode] } { $db eval { SELECT * FROM sqlite_master } do_test $testname [list $db eval "PRAGMA main.journal_mode"] {wal} } } #------------------------------------------------------------------------- # proc slave_test_script {script} { # Create the interpreter used to run the test script. interp create tinterp # Populate some global variables that tester.tcl expects to see. foreach {var value} [list \ ::argv0 $::argv0 \ ::argv {} \ ::SLAVE 1 \ ] { interp eval tinterp [list set $var $value] } # The alias used to access the global test counters. tinterp alias set_test_counter set_test_counter # Set up the ::cmdlinearg array in the slave. interp eval tinterp [list array set ::cmdlinearg [array get ::cmdlinearg]] # Load the various test interfaces implemented in C. load_testfixture_extensions tinterp # Run the test script. interp eval tinterp $script # Delete the interpreter used to run the test script. interp delete tinterp } proc slave_test_file {file} { set zFile [file join $::testdir $file] set time [time { slave_test_script [list source $zFile] }] puts "time $file [lrange $time 0 1]" } # If the library is compiled with the SQLITE_DEFAULT_AUTOVACUUM macro set # to non-zero, then set the global variable $AUTOVACUUM to 1. set AUTOVACUUM $sqlite_options(default_autovacuum) source $testdir/thread_common.tcl |
Changes to test/wal.test.
︙ | ︙ | |||
1486 1487 1488 1489 1490 1491 1492 | COMMIT; SELECT * FROM t1; } } {1 2 3 4 5 6 7 8 9 10 11 12} do_test wal-21.3 { execsql { PRAGMA integrity_check } } {ok} | < | 1486 1487 1488 1489 1490 1491 1492 1493 1494 | COMMIT; SELECT * FROM t1; } } {1 2 3 4 5 6 7 8 9 10 11 12} do_test wal-21.3 { execsql { PRAGMA integrity_check } } {ok} finish_test |