Home | History | Annotate | Download | only in test
      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