persistentstorage/sqlite3api/TEST/TclScript/crash7.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     1 # 2008 March 20
       
     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 #
       
    12 # $Id: crash7.test,v 1.1 2008/04/03 14:36:26 danielk1977 Exp $
       
    13 
       
    14 set testdir [file dirname $argv0]
       
    15 source $testdir/tester.tcl
       
    16 
       
    17 ifcapable !crashtest {
       
    18   finish_test
       
    19   return
       
    20 }
       
    21 
       
    22 proc signature {} {
       
    23   return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}]
       
    24 }
       
    25 
       
    26 foreach f [list test.db test.db-journal] {
       
    27   for {set ii 1} {$ii < 64} {incr ii} {
       
    28     db close
       
    29     file delete test.db
       
    30     sqlite3 db test.db
       
    31   
       
    32     set from_size [expr 1024 << ($ii&3)]
       
    33     set to_size   [expr 1024 << (($ii>>2)&3)]
       
    34   
       
    35     execsql "
       
    36       PRAGMA page_size = $from_size;
       
    37       BEGIN;
       
    38       CREATE TABLE abc(a PRIMARY KEY, b, c);
       
    39       INSERT INTO abc VALUES(randomblob(100), randomblob(200), randomblob(1000));
       
    40       INSERT INTO abc 
       
    41           SELECT randomblob(1000), randomblob(200), randomblob(100)
       
    42           FROM abc;
       
    43       INSERT INTO abc 
       
    44           SELECT randomblob(100), randomblob(200), randomblob(1000)
       
    45           FROM abc;
       
    46       INSERT INTO abc 
       
    47           SELECT randomblob(100), randomblob(200), randomblob(1000)
       
    48           FROM abc;
       
    49       INSERT INTO abc 
       
    50           SELECT randomblob(100), randomblob(200), randomblob(1000)
       
    51           FROM abc;
       
    52       INSERT INTO abc 
       
    53           SELECT randomblob(100), randomblob(200), randomblob(1000)
       
    54           FROM abc WHERE [expr $ii&16];
       
    55       INSERT INTO abc 
       
    56           SELECT randomblob(25), randomblob(45), randomblob(9456)
       
    57           FROM abc WHERE [expr $ii&32];
       
    58       INSERT INTO abc 
       
    59           SELECT randomblob(100), randomblob(200), randomblob(1000)
       
    60           FROM abc WHERE [expr $ii&8];
       
    61       INSERT INTO abc 
       
    62           SELECT randomblob(25), randomblob(45), randomblob(9456)
       
    63           FROM abc WHERE [expr $ii&4];
       
    64       COMMIT;
       
    65     "
       
    66   
       
    67     set sig [signature]
       
    68     db close
       
    69   
       
    70     do_test crash7-1.$ii.crash {
       
    71        crashsql -file $f "
       
    72          PRAGMA page_size = $to_size;
       
    73          VACUUM;
       
    74        "
       
    75     } {1 {child process exited abnormally}}
       
    76   
       
    77     sqlite3 db test.db
       
    78     integrity_check crash7-1.$ii.integrity
       
    79   } 
       
    80 }
       
    81 
       
    82 finish_test