Annotation of embedaddon/sqlite3/test/crash2.test, revision 1.1
1.1 ! misho 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 implements regression tests for SQLite library.
! 12: #
! 13: # The focus of this file is testing the ability of the database to
! 14: # uses its rollback journal to recover intact (no database corruption)
! 15: # from a power failure during the middle of a COMMIT. Even more
! 16: # specifically, the tests in this file verify this functionality
! 17: # for storage mediums with various sector sizes.
! 18: #
! 19: # $Id: crash2.test,v 1.6 2008/08/25 07:12:29 danielk1977 Exp $
! 20:
! 21: set testdir [file dirname $argv0]
! 22: source $testdir/tester.tcl
! 23:
! 24: ifcapable !crashtest {
! 25: finish_test
! 26: return
! 27: }
! 28:
! 29: db close
! 30:
! 31: # This test is designed to check that the crash-test infrastructure
! 32: # can create files that do not consist of an integer number of
! 33: # simulated disk blocks (i.e. 3KB file using 2KB disk blocks).
! 34: #
! 35: do_test crash2-1.1 {
! 36: crashsql -delay 500 -file test.db -blocksize 2048 {
! 37: PRAGMA auto_vacuum=OFF;
! 38: PRAGMA page_size=1024;
! 39: BEGIN;
! 40: CREATE TABLE abc AS SELECT 1 AS a, 2 AS b, 3 AS c;
! 41: CREATE TABLE def AS SELECT 1 AS d, 2 AS e, 3 AS f;
! 42: COMMIT;
! 43: }
! 44: file size test.db
! 45: } {3072}
! 46:
! 47: for {set ii 0} {$ii < 5} {incr ii} {
! 48:
! 49: # Simple test using the database created above: Create a new
! 50: # table so that page 1 and page 4 are modified. Using a
! 51: # block-size of 2048 and page-size of 1024, this means
! 52: # pages 2 and 3 must also be saved in the journal to avoid
! 53: # risking corruption.
! 54: #
! 55: # The loop is so that this test can be run with a couple
! 56: # of different seeds for the random number generator.
! 57: #
! 58: do_test crash2-1.2.$ii {
! 59: crashsql -file test.db -blocksize 2048 [subst {
! 60: [string repeat {SELECT random();} $ii]
! 61: CREATE TABLE hij(h, i, j);
! 62: }]
! 63: sqlite3 db test.db
! 64: db eval {PRAGMA integrity_check}
! 65: } {ok}
! 66: }
! 67:
! 68: proc signature {} {
! 69: return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}]
! 70: }
! 71:
! 72: # Test case for crashing during journal sync with simulated
! 73: # sector-size values from 1024 to 8192.
! 74: #
! 75: do_test crash2-2.0 {
! 76: execsql BEGIN
! 77: for {set n 0} {$n < 1000} {incr n} {
! 78: execsql "INSERT INTO abc VALUES($n, [expr 2*$n], [expr 3*$n])"
! 79: }
! 80: execsql {
! 81: INSERT INTO abc SELECT * FROM abc;
! 82: INSERT INTO abc SELECT * FROM abc;
! 83: INSERT INTO abc SELECT * FROM abc;
! 84: INSERT INTO abc SELECT * FROM abc;
! 85: INSERT INTO abc SELECT * FROM abc;
! 86: }
! 87: execsql COMMIT
! 88: expr ([file size test.db] / 1024) > 450
! 89: } {1}
! 90: for {set i 1} {$i < 30} {incr i} {
! 91: set sig [signature]
! 92: set sector [expr 1024 * 1<<($i%4)]
! 93: db close
! 94: do_test crash2-2.$i.1 {
! 95: crashsql -blocksize $sector -delay [expr $i%5 + 1] -file test.db-journal "
! 96: PRAGMA temp_store = memory;
! 97: BEGIN;
! 98: SELECT random() FROM abc LIMIT $i;
! 99: INSERT INTO abc SELECT randstr(10,10), 0, 0 FROM abc WHERE random()%2==0;
! 100: DELETE FROM abc WHERE random()%2!=0;
! 101: COMMIT;
! 102: "
! 103: } {1 {child process exited abnormally}}
! 104: do_test crash2-2.$i.2 {
! 105: sqlite3 db test.db
! 106: signature
! 107: } $sig
! 108: }
! 109:
! 110:
! 111: # Test case for crashing during database sync with simulated
! 112: # sector-size values from 1024 to 8192.
! 113: #
! 114: for {set i 1} {$i < 10} {incr i} {
! 115: set sig [signature]
! 116: set sector [expr 1024 * 1<<($i%4)]
! 117: db close
! 118: do_test crash2-3.$i.1 {
! 119: crashsql -blocksize $sector -file test.db "
! 120: BEGIN;
! 121: SELECT random() FROM abc LIMIT $i;
! 122: INSERT INTO abc SELECT randstr(10,10), 0, 0 FROM abc WHERE random()%2==0;
! 123: DELETE FROM abc WHERE random()%2!=0;
! 124: COMMIT;
! 125: "
! 126: } {1 {child process exited abnormally}}
! 127: do_test crash2-3.$i.2 {
! 128: sqlite3 db test.db
! 129: signature
! 130: } $sig
! 131: }
! 132:
! 133: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>