blob: a24a901f50748e743dd202daf1ae8fd4118fc74c [file] [log] [blame]
drhdf01cdf2002-08-31 16:52:44 +00001# 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#
drha817e422007-03-30 17:17:51 +000013# $Id: memleak.test,v 1.10 2007/03/30 17:17:52 drh Exp $
drhdf01cdf2002-08-31 16:52:44 +000014
15set testdir [file dirname $argv0]
16source $testdir/tester.tcl
drha817e422007-03-30 17:17:51 +000017rename finish_test memleak_finish_test
drhdf01cdf2002-08-31 16:52:44 +000018proc finish_test {} {
19 catch {db close}
20 memleak_check
21}
22
23if {[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#
33set LeakList {}
34
35set EXCLUDE {
36 all.test
37 quick.test
drhdf01cdf2002-08-31 16:52:44 +000038 misuse.test
39 memleak.test
40 btree2.test
drha817e422007-03-30 17:17:51 +000041 async.test
42 async2.test
drhdf01cdf2002-08-31 16:52:44 +000043 trans.test
danielk19774cb16072004-06-25 10:26:12 +000044 crash.test
danielk19775558a8a2005-01-17 07:53:44 +000045 autovacuum_crash.test
drhdf01cdf2002-08-31 16:52:44 +000046}
danielk19775558a8a2005-01-17 07:53:44 +000047# 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#
51ifcapable default_autovacuum {
52 lappend EXCLUDE btree2.test
53 lappend EXCLUDE btree4.test
54}
55
drhef4ac8f2004-06-19 00:16:31 +000056if {[sqlite3 -has-codec]} {
drhdb2d9a02004-08-01 03:52:17 +000057 # lappend EXCLUDE
drh4d189ca2004-02-12 18:46:38 +000058}
drhe0194f22003-02-26 13:52:51 +000059if {[llength $argv]>0} {
60 set FILELIST $argv
61 set argv {}
62} else {
63 set FILELIST [lsort -dictionary [glob $testdir/*.test]]
64}
drhdf01cdf2002-08-31 16:52:44 +000065
drhe0194f22003-02-26 13:52:51 +000066foreach testfile $FILELIST {
drhdf01cdf2002-08-31 16:52:44 +000067 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...
danc1a60c52010-06-07 14:28:16 +000078 incr_ntest
drhdf01cdf2002-08-31 16:52:44 +000079 foreach x $LeakList {
80 if {$x!=[lindex $LeakList 0]} {
81 puts " failed! ($LeakList)"
danc1a60c52010-06-07 14:28:16 +000082 fail_test memory-leak-test-$tail
drhdf01cdf2002-08-31 16:52:44 +000083 break
84 }
85 }
86 puts " Ok"
87 }
88}
drha817e422007-03-30 17:17:51 +000089memleak_finish_test
drhdf01cdf2002-08-31 16:52:44 +000090
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
drha817e422007-03-30 17:17:51 +000097memleak_finish_test