Annotation of embedaddon/sqlite3/test/crash6.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 tests that rollback journals for databases that use a 
        !            12: # page-size other than the default page-size can be rolled back Ok.
        !            13: #
        !            14: # $Id: crash6.test,v 1.2 2008/04/14 15:27:19 drh Exp $
        !            15: 
        !            16: set testdir [file dirname $argv0]
        !            17: source $testdir/tester.tcl
        !            18: 
        !            19: ifcapable !crashtest {
        !            20:   finish_test
        !            21:   return
        !            22: }
        !            23: 
        !            24: for {set ii 0} {$ii < 10} {incr ii} {
        !            25:   catch {db close}
        !            26:   forcedelete test.db test.db-journal
        !            27:   crashsql -delay 2 -file test.db {
        !            28:     PRAGMA auto_vacuum=OFF;
        !            29:     PRAGMA page_size=4096;
        !            30:     BEGIN;
        !            31:     CREATE TABLE abc AS SELECT 1 AS a, 2 AS b, 3 AS c;
        !            32:     COMMIT;
        !            33:     BEGIN;
        !            34:     CREATE TABLE def AS SELECT 1 AS d, 2 AS e, 3 AS f;
        !            35:     COMMIT;
        !            36:   }
        !            37:   sqlite3 db test.db
        !            38:   integrity_check crash6-1.$ii
        !            39: }
        !            40: 
        !            41: for {set ii 0} {$ii < 10} {incr ii} {
        !            42:   catch {db close}
        !            43:   forcedelete test.db test.db-journal
        !            44:   sqlite3 db test.db
        !            45:   execsql {
        !            46:     PRAGMA auto_vacuum=OFF;
        !            47:     PRAGMA page_size=2048;
        !            48:     BEGIN;
        !            49:     CREATE TABLE abc AS SELECT 1 AS a, 2 AS b, 3 AS c;
        !            50:     COMMIT;
        !            51:   }
        !            52:   db close
        !            53:   crashsql -delay 1 -file test.db {
        !            54:     INSERT INTO abc VALUES(5, 6, 7);
        !            55:   }
        !            56:   sqlite3 db test.db
        !            57:   integrity_check crash6-2.$ii
        !            58: }
        !            59: 
        !            60: proc signature {} {
        !            61:   return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}]
        !            62: }
        !            63: 
        !            64: # Test case for crashing during database sync with page-size values 
        !            65: # from 1024 to 8192.
        !            66: #
        !            67: for {set ii 0} {$ii < 30} {incr ii} {
        !            68:   db close
        !            69:   forcedelete test.db
        !            70:   sqlite3 db test.db
        !            71: 
        !            72:   set pagesize [expr 1024 << ($ii % 4)]
        !            73:   if {$pagesize>$::SQLITE_MAX_PAGE_SIZE} {
        !            74:     set pagesize $::SQLITE_MAX_PAGE_SIZE
        !            75:   }
        !            76:   do_test crash6-3.$ii.0 {
        !            77:     execsql "pragma page_size = $pagesize"
        !            78:     execsql "pragma page_size"
        !            79:   } $pagesize
        !            80: 
        !            81:   do_test crash6-3.$ii.1 {
        !            82:   
        !            83:     execsql BEGIN
        !            84:     execsql {CREATE TABLE abc(a, b, c)}
        !            85:     for {set n 0} {$n < 1000} {incr n} {
        !            86:       execsql "INSERT INTO abc VALUES($n, [expr 2*$n], [expr 3*$n])"
        !            87:     }
        !            88:     execsql {
        !            89:       INSERT INTO abc SELECT * FROM abc;
        !            90:       INSERT INTO abc SELECT * FROM abc;
        !            91:       INSERT INTO abc SELECT * FROM abc;
        !            92:       INSERT INTO abc SELECT * FROM abc;
        !            93:       INSERT INTO abc SELECT * FROM abc;
        !            94:     }
        !            95:     execsql COMMIT
        !            96:     expr ([file size test.db] / 1024) > 450
        !            97:   } {1}
        !            98: 
        !            99:   set sig [signature]
        !           100:   db close
        !           101: 
        !           102:   do_test crash6-3.$ii.2 {
        !           103:      crashsql -file test.db "
        !           104:        BEGIN;
        !           105:        SELECT random() FROM abc LIMIT $ii;
        !           106:        INSERT INTO abc SELECT randstr(10,10), 0, 0 FROM abc WHERE random()%2==0;
        !           107:        DELETE FROM abc WHERE random()%2!=0;
        !           108:        COMMIT;
        !           109:      "
        !           110:   } {1 {child process exited abnormally}}
        !           111: 
        !           112:   do_test crash6-3.$ii.3 {
        !           113:     sqlite3 db test.db
        !           114:     signature
        !           115:   } $sig
        !           116: } 
        !           117: 
        !           118: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>