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: memleak.test,v 1.10 2007/03/30 17:17:52 drh Exp $ 14 15 set testdir [file dirname $argv0] 16 source $testdir/tester.tcl 17 rename finish_test memleak_finish_test 18 proc finish_test {} { 19 catch {db close} 20 memleak_check 21 } 22 23 if {[file exists ./sqlite_test_count]} { 24 set COUNT [exec cat ./sqlite_test_count] 25 } else { 26 set COUNT 3 27 } 28 29 # LeakList will hold a list of the number of unfreed mallocs after 30 # each round of the test. This number should be constant. If it 31 # grows, it may mean there is a memory leak in the library. 32 # 33 set LeakList {} 34 35 set EXCLUDE { 36 all.test 37 quick.test 38 misuse.test 39 memleak.test 40 btree2.test 41 async.test 42 async2.test 43 trans.test 44 crash.test 45 autovacuum_crash.test 46 } 47 # Test files btree2.test and btree4.test don't work if the 48 # SQLITE_DEFAULT_AUTOVACUUM macro is defined to true (because they depend 49 # on tables being allocated starting at page 2). 50 # 51 ifcapable default_autovacuum { 52 lappend EXCLUDE btree2.test 53 lappend EXCLUDE btree4.test 54 } 55 56 if {[sqlite3 -has-codec]} { 57 # lappend EXCLUDE 58 } 59 if {[llength $argv]>0} { 60 set FILELIST $argv 61 set argv {} 62 } else { 63 set FILELIST [lsort -dictionary [glob $testdir/*.test]] 64 } 65 66 foreach testfile $FILELIST { 67 set tail [file tail $testfile] 68 if {[lsearch -exact $EXCLUDE $tail]>=0} continue 69 set LeakList {} 70 for {set COUNTER 0} {$COUNTER<$COUNT} {incr COUNTER} { 71 source $testfile 72 if {[info exists Leak]} { 73 lappend LeakList $Leak 74 } 75 } 76 if {$LeakList!=""} { 77 puts -nonewline memory-leak-test-$tail... 78 incr_ntest 79 foreach x $LeakList { 80 if {$x!=[lindex $LeakList 0]} { 81 puts " failed! ($LeakList)" 82 fail_test memory-leak-test-$tail 83 break 84 } 85 } 86 puts " Ok" 87 } 88 } 89 memleak_finish_test 90 91 # Run the malloc tests and the misuse test after memory leak detection. 92 # Both tests leak memory. 93 # 94 #catch {source $testdir/misuse.test} 95 #catch {source $testdir/malloc.test} 96 97 memleak_finish_test 98