drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 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 | # |
drh | a817e42 | 2007-03-30 17:17:51 +0000 | [diff] [blame] | 13 | # $Id: memleak.test,v 1.10 2007/03/30 17:17:52 drh Exp $ |
drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 14 | |
| 15 | set testdir [file dirname $argv0] |
| 16 | source $testdir/tester.tcl |
drh | a817e42 | 2007-03-30 17:17:51 +0000 | [diff] [blame] | 17 | rename finish_test memleak_finish_test |
drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 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 |
drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 38 | misuse.test |
| 39 | memleak.test |
| 40 | btree2.test |
drh | a817e42 | 2007-03-30 17:17:51 +0000 | [diff] [blame] | 41 | async.test |
| 42 | async2.test |
drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 43 | trans.test |
danielk1977 | 4cb1607 | 2004-06-25 10:26:12 +0000 | [diff] [blame] | 44 | crash.test |
danielk1977 | 5558a8a | 2005-01-17 07:53:44 +0000 | [diff] [blame] | 45 | autovacuum_crash.test |
drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 46 | } |
danielk1977 | 5558a8a | 2005-01-17 07:53:44 +0000 | [diff] [blame] | 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 | |
drh | ef4ac8f | 2004-06-19 00:16:31 +0000 | [diff] [blame] | 56 | if {[sqlite3 -has-codec]} { |
drh | db2d9a0 | 2004-08-01 03:52:17 +0000 | [diff] [blame] | 57 | # lappend EXCLUDE |
drh | 4d189ca | 2004-02-12 18:46:38 +0000 | [diff] [blame] | 58 | } |
drh | e0194f2 | 2003-02-26 13:52:51 +0000 | [diff] [blame] | 59 | if {[llength $argv]>0} { |
| 60 | set FILELIST $argv |
| 61 | set argv {} |
| 62 | } else { |
| 63 | set FILELIST [lsort -dictionary [glob $testdir/*.test]] |
| 64 | } |
drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 65 | |
drh | e0194f2 | 2003-02-26 13:52:51 +0000 | [diff] [blame] | 66 | foreach testfile $FILELIST { |
drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 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... |
dan | c1a60c5 | 2010-06-07 14:28:16 +0000 | [diff] [blame] | 78 | incr_ntest |
drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 79 | foreach x $LeakList { |
| 80 | if {$x!=[lindex $LeakList 0]} { |
| 81 | puts " failed! ($LeakList)" |
dan | c1a60c5 | 2010-06-07 14:28:16 +0000 | [diff] [blame] | 82 | fail_test memory-leak-test-$tail |
drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 83 | break |
| 84 | } |
| 85 | } |
| 86 | puts " Ok" |
| 87 | } |
| 88 | } |
drh | a817e42 | 2007-03-30 17:17:51 +0000 | [diff] [blame] | 89 | memleak_finish_test |
drh | df01cdf | 2002-08-31 16:52:44 +0000 | [diff] [blame] | 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 | |
drh | a817e42 | 2007-03-30 17:17:51 +0000 | [diff] [blame] | 97 | memleak_finish_test |