xref: /sqlite-3.40.0/test/soak.test (revision 0ef54fa6)
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