persistentstorage/sqlite3api/TEST/TclScript/crash6.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     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   file delete -force 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   file delete -force 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   file delete -force 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