15453b8daSdanielk1977# 2007 May 24 25453b8daSdanielk1977# 35453b8daSdanielk1977# The author disclaims copyright to this source code. In place of 45453b8daSdanielk1977# a legal notice, here is a blessing: 55453b8daSdanielk1977# 65453b8daSdanielk1977# May you do good and not evil. 75453b8daSdanielk1977# May you find forgiveness for yourself and forgive others. 85453b8daSdanielk1977# May you share freely, never taking more than you give. 95453b8daSdanielk1977# 105453b8daSdanielk1977#*********************************************************************** 115453b8daSdanielk1977# This file is the driver for the "soak" tests. It is a peer of the 125453b8daSdanielk1977# quick.test and all.test scripts. 135453b8daSdanielk1977# 14dcc50b74Sshane# $Id: soak.test,v 1.4 2008/11/13 18:29:51 shane Exp $ 155453b8daSdanielk1977 165453b8daSdanielk1977set testdir [file dirname $argv0] 175453b8daSdanielk1977source $testdir/tester.tcl 185453b8daSdanielk1977rename finish_test really_finish_test 195453b8daSdanielk1977proc finish_test {} {} 205453b8daSdanielk1977 215453b8daSdanielk1977# By default, guarantee that the tests will run for at least 1 hour. 225453b8daSdanielk1977# 235453b8daSdanielk1977set TIMEOUT 3600 245453b8daSdanielk1977 255453b8daSdanielk1977# Process command-line arguments. 265453b8daSdanielk1977# 275453b8daSdanielk1977if {[llength $argv]>0} { 285453b8daSdanielk1977 foreach {name value} $argv { 295453b8daSdanielk1977 switch -- $name { 305453b8daSdanielk1977 -timeout { 315453b8daSdanielk1977 set TIMEOUT $value 325453b8daSdanielk1977 } 335453b8daSdanielk1977 default { 345453b8daSdanielk1977 puts stderr "Unknown option: $name" 355453b8daSdanielk1977 exit 365453b8daSdanielk1977 } 375453b8daSdanielk1977 } 385453b8daSdanielk1977 } 395453b8daSdanielk1977} 405453b8daSdanielk1977set argv [list] 415453b8daSdanielk1977 425453b8daSdanielk1977# Test plan: 435453b8daSdanielk1977# 445453b8daSdanielk1977# The general principle is to run those SQLite tests that use 455453b8daSdanielk1977# pseudo-random data in some way over and over again for a very 465453b8daSdanielk1977# long time. The number of tests run depends on the value of 475453b8daSdanielk1977# global variable $TIMEOUT - tests are run for at least $TIMEOUT 485453b8daSdanielk1977# seconds. 495453b8daSdanielk1977# 505453b8daSdanielk1977# fuzz.test (pseudo-random SQL statements) 515453b8daSdanielk1977# trans.test (pseudo-random changes to a database followed by rollbacks) 52dcc50b74Sshane# fuzz_malloc.test 53dcc50b74Sshane# corruptC.test (pseudo-random corruption to a database) 545453b8daSdanielk1977# 555453b8daSdanielk1977# Many database changes maintaining some kind of invariant. 565453b8daSdanielk1977# Storing checksums etc. 575453b8daSdanielk1977# 585453b8daSdanielk1977 595453b8daSdanielk1977# List of test files that are run by this file. 605453b8daSdanielk1977# 615453b8daSdanielk1977set SOAKTESTS { 625453b8daSdanielk1977 fuzz.test 63c9cf901dSdanielk1977 fuzz_malloc.test 645453b8daSdanielk1977 trans.test 65dcc50b74Sshane corruptC.test 665453b8daSdanielk1977} 675453b8daSdanielk1977 68430e74cdSdanset G(isquick) 1 695453b8daSdanielk1977 70*0ef54fa6Sdanset soak_starttime [clock_seconds] 715453b8daSdanielk1977set soak_finishtime [expr {$soak_starttime + $TIMEOUT}] 725453b8daSdanielk1977 735453b8daSdanielk1977# Loop until the timeout is reached or an error occurs. 745453b8daSdanielk1977# 75*0ef54fa6Sdanfor {set iRun 0} {[clock_seconds] < $soak_finishtime} {incr iRun} { 765453b8daSdanielk1977 775453b8daSdanielk1977 set iIdx [expr {$iRun % [llength $SOAKTESTS]}] 785453b8daSdanielk1977 source [file join $testdir [lindex $SOAKTESTS $iIdx]] 795453b8daSdanielk1977 catch {db close} 805453b8daSdanielk1977 815453b8daSdanielk1977 if {$sqlite_open_file_count>0} { 825453b8daSdanielk1977 puts "$tail did not close all files: $sqlite_open_file_count" 83c1a60c51Sdan fail_test $tail 845453b8daSdanielk1977 set sqlite_open_file_count 0 855453b8daSdanielk1977 } 865453b8daSdanielk1977 87c1a60c51Sdan if {[set_test_counter errors]>0} break 885453b8daSdanielk1977} 895453b8daSdanielk1977 905453b8daSdanielk1977really_finish_test 91