persistentstorage/sqlite3api/TEST/TclScript/soak.test
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/sqlite3api/TEST/TclScript/soak.test	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,89 @@
+# 2007 May 24
+#
+# The author disclaims copyright to this source code.  In place of
+# a legal notice, here is a blessing:
+#
+#    May you do good and not evil.
+#    May you find forgiveness for yourself and forgive others.
+#    May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file is the driver for the "soak" tests. It is a peer of the
+# quick.test and all.test scripts.
+#
+# $Id: soak.test,v 1.3 2008/07/12 14:52:20 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+rename finish_test really_finish_test
+proc finish_test {} {}
+
+# By default, guarantee that the tests will run for at least 1 hour.
+#
+set TIMEOUT 3600
+
+# Process command-line arguments. 
+#
+if {[llength $argv]>0} {
+  foreach {name value} $argv {
+    switch -- $name {
+      -timeout {
+        set TIMEOUT $value
+      }
+      default {
+         puts stderr "Unknown option: $name"
+         exit
+      }
+    }
+  }
+}
+set argv [list]
+
+# Test plan:
+#
+# The general principle is to run those SQLite tests that use
+# pseudo-random data in some way over and over again for a very 
+# long time. The number of tests run depends on the value of 
+# global variable $TIMEOUT - tests are run for at least $TIMEOUT 
+# seconds.
+#
+#   fuzz.test   (pseudo-random SQL statements)
+#   trans.test  (pseudo-random changes to a database followed by rollbacks)
+#
+# fuzzy malloc?
+#
+# Many database changes maintaining some kind of invariant. 
+# Storing checksums etc.
+#
+
+# List of test files that are run by this file.
+#
+set SOAKTESTS {
+  fuzz.test
+  fuzz_malloc.test
+  trans.test
+}
+
+set ISQUICK 1
+
+set soak_starttime  [clock seconds]
+set soak_finishtime [expr {$soak_starttime + $TIMEOUT}]
+
+# Loop until the timeout is reached or an error occurs.
+#
+for {set iRun 0} {[clock seconds] < $soak_finishtime && $nErr==0} {incr iRun} {
+
+  set iIdx [expr {$iRun % [llength $SOAKTESTS]}]
+  source [file join $testdir [lindex $SOAKTESTS $iIdx]]
+  catch {db close}
+
+  if {$sqlite_open_file_count>0} {
+    puts "$tail did not close all files: $sqlite_open_file_count"
+    incr nErr
+    lappend ::failList $tail
+    set sqlite_open_file_count 0
+  }
+
+}
+
+really_finish_test