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.52 2007/11/27 14:46:42 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 malloc.test ;# Run seperately later. 63lappend EXCLUDE misuse.test ;# Run seperately later. 64lappend EXCLUDE memleak.test ;# Alternate test driver script 65lappend EXCLUDE fuzz.test 66lappend EXCLUDE soak.test ;# Takes a very long time (default 1 hr) 67lappend EXCLUDE fts3.test ;# Wrapper for muliple fts3*.tests 68lappend EXCLUDE mallocAll.test ;# Wrapper for running all malloc tests 69 70# Files to include in the test. If this list is empty then everything 71# that is not in the EXCLUDE list is run. 72# 73set INCLUDE { 74} 75 76# Test files btree2.test and btree4.test don't work if the 77# SQLITE_DEFAULT_AUTOVACUUM macro is defined to true (because they depend 78# on tables being allocated starting at page 2). 79# 80ifcapable default_autovacuum { 81 lappend EXCLUDE btree2.test 82 lappend EXCLUDE btree4.test 83} 84 85for {set Counter 0} {$Counter<$COUNT && $nErr==0} {incr Counter} { 86 if {$Counter%2} { 87 set ::SETUP_SQL {PRAGMA default_synchronous=off;} 88 } else { 89 catch {unset ::SETUP_SQL} 90 } 91 foreach testfile [lsort -dictionary [glob $testdir/*.test]] { 92 set tail [file tail $testfile] 93 if {[lsearch -exact $EXCLUDE $tail]>=0} continue 94 if {[llength $INCLUDE]>0 && [lsearch -exact $INCLUDE $tail]<0} continue 95 source $testfile 96 catch {db close} 97 if {$sqlite_open_file_count>0} { 98 puts "$tail did not close all files: $sqlite_open_file_count" 99 incr nErr 100 lappend ::failList $tail 101 set sqlite_open_file_count 0 102 } 103 } 104 if {[info exists Leak]} { 105 lappend LeakList $Leak 106 } 107} 108 109# Do one last test to look for a memory leak in the library. This will 110# only work if SQLite is compiled with the -DSQLITE_DEBUG=1 flag. 111# 112if {$LeakList!=""} { 113 puts -nonewline memory-leak-test... 114 incr ::nTest 115 foreach x $LeakList { 116 if {$x!=[lindex $LeakList 0]} { 117 puts " failed!" 118 puts "Expected: all values to be the same" 119 puts " Got: $LeakList" 120 incr ::nErr 121 lappend ::failList memory-leak-test 122 break 123 } 124 } 125 puts " Ok" 126} 127 128# Run the crashtest only on unix and only once. If the library does not 129# always create auto-vacuum databases, also run autovacuum_crash.test. 130# 131if {$::tcl_platform(platform)=="unix"} { 132 source $testdir/crash.test 133 source $testdir/crash2.test 134 ifcapable !default_autovacuum { 135 source $testdir/autovacuum_crash.test 136 } 137} 138 139# Run the malloc tests and the misuse test after memory leak detection. 140# Both tests leak memory. Currently, misuse.test also leaks a handful of 141# file descriptors. This is not considered a problem, but can cause tests 142# in malloc.test to fail. So set the open-file count to zero before running 143# malloc.test to get around this. 144# 145catch {source $testdir/misuse.test} 146set sqlite_open_file_count 0 147catch {source $testdir/malloc.test} 148 149catch {db close} 150set sqlite_open_file_count 0 151really_finish_test 152