Annotation of embedaddon/sqlite3/test/crash6.test, revision 1.1.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>