1# 2001 September 15 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# This file runs all tests. 12# 13# $Id: all.test,v 1.54 2008/03/31 23:51:35 drh Exp $ 14 15set testdir [file dirname $argv0] 16source $testdir/tester.tcl 17rename finish_test really_finish_test 18proc finish_test {} { 19 # no-op 20} 21 22if {[file exists ./sqlite_test_count]} { 23 set COUNT [exec cat ./sqlite_test_count] 24} else { 25 set COUNT 3 26} 27 28if {[llength $argv]>0} { 29 foreach {name value} $argv { 30 switch -- $name { 31 -count { 32 set COUNT $value 33 } 34 -quick { 35 set ISQUICK $value 36 } 37 -soak { 38 set SOAKTEST $value 39 } 40 default { 41 puts stderr "Unknown option: $name" 42 exit 43 } 44 } 45 } 46} 47set argv {} 48 49# LeakList will hold a list of the number of unfreed mallocs after 50# each round of the test. This number should be constant. If it 51# grows, it may mean there is a memory leak in the library. 52# 53set LeakList {} 54 55set EXCLUDE {} 56lappend EXCLUDE all.test ;# This file 57lappend EXCLUDE async.test 58lappend EXCLUDE crash.test ;# Run seperately later. 59lappend EXCLUDE crash2.test ;# Run seperately later. 60lappend EXCLUDE autovacuum_crash.test ;# Run seperately later. 61lappend EXCLUDE quick.test ;# Alternate test driver script 62lappend EXCLUDE veryquick.test ;# Alternate test driver script 63lappend EXCLUDE malloc.test ;# Run seperately later. 64lappend EXCLUDE misuse.test ;# Run seperately later. 65lappend EXCLUDE memleak.test ;# Alternate test driver script 66lappend EXCLUDE fuzz.test 67lappend EXCLUDE soak.test ;# Takes a very long time (default 1 hr) 68lappend EXCLUDE fts3.test ;# Wrapper for muliple fts3*.tests 69lappend EXCLUDE mallocAll.test ;# Wrapper for running all malloc tests 70 71# Files to include in the test. If this list is empty then everything 72# that is not in the EXCLUDE list is run. 73# 74set INCLUDE { 75} 76 77# Test files btree2.test and btree4.test don't work if the 78# SQLITE_DEFAULT_AUTOVACUUM macro is defined to true (because they depend 79# on tables being allocated starting at page 2). 80# 81ifcapable default_autovacuum { 82 lappend EXCLUDE btree2.test 83 lappend EXCLUDE btree4.test 84} 85 86for {set Counter 0} {$Counter<$COUNT && $nErr==0} {incr Counter} { 87 if {$Counter%2} { 88 set ::SETUP_SQL {PRAGMA default_synchronous=off;} 89 } else { 90 catch {unset ::SETUP_SQL} 91 } 92 foreach testfile [lsort -dictionary [glob $testdir/*.test]] { 93 set tail [file tail $testfile] 94 if {[lsearch -exact $EXCLUDE $tail]>=0} continue 95 if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue 96 reset_prng_state 97 source $testfile 98 catch {db close} 99 if {$sqlite_open_file_count>0} { 100 puts "$tail did not close all files: $sqlite_open_file_count" 101 incr nErr 102 lappend ::failList $tail 103 set sqlite_open_file_count 0 104 } 105 } 106 if {[info exists Leak]} { 107 lappend LeakList $Leak 108 } 109} 110 111# Do one last test to look for a memory leak in the library. This will 112# only work if SQLite is compiled with the -DSQLITE_DEBUG=1 flag. 113# 114if {$LeakList!=""} { 115 puts -nonewline memory-leak-test... 116 incr ::nTest 117 foreach x $LeakList { 118 if {$x!=[lindex $LeakList 0]} { 119 puts " failed!" 120 puts "Expected: all values to be the same" 121 puts " Got: $LeakList" 122 incr ::nErr 123 lappend ::failList memory-leak-test 124 break 125 } 126 } 127 puts " Ok" 128} 129 130# Run the crashtest only on unix and only once. If the library does not 131# always create auto-vacuum databases, also run autovacuum_crash.test. 132# 133if {$::tcl_platform(platform)=="unix"} { 134 source $testdir/crash.test 135 source $testdir/crash2.test 136 ifcapable !default_autovacuum { 137 source $testdir/autovacuum_crash.test 138 } 139} 140 141# Run the malloc tests and the misuse test after memory leak detection. 142# Both tests leak memory. Currently, misuse.test also leaks a handful of 143# file descriptors. This is not considered a problem, but can cause tests 144# in malloc.test to fail. So set the open-file count to zero before running 145# malloc.test to get around this. 146# 147catch {source $testdir/misuse.test} 148set sqlite_open_file_count 0 149catch {source $testdir/malloc.test} 150 151catch {db close} 152set sqlite_open_file_count 0 153really_finish_test 154