Merge updates from trunk.
[sqlite.git] / test / crash7.test
blob482999cbfd9575921d5e6f5336f04e3143db101d
1 # 2008 March 20
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
10 #***********************************************************************
12 # $Id: crash7.test,v 1.1 2008/04/03 14:36:26 danielk1977 Exp $
14 set testdir [file dirname $argv0]
15 source $testdir/tester.tcl
16 set testprefix crash7
18 ifcapable !crashtest {
19   finish_test
20   return
23 proc signature {} {
24   return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}]
27 foreach f [list test.db test.db-journal] {
28   for {set ii 1} {$ii < 64} {incr ii} {
29     db close
30     delete_file test.db
31     sqlite3 db test.db
32   
33     set from_size [expr 1024 << ($ii&3)]
34     set to_size   [expr 1024 << (($ii>>2)&3)]
35   
36     execsql "
37       PRAGMA page_size = $from_size;
38       BEGIN;
39       CREATE TABLE abc(a PRIMARY KEY, b, c);
40       INSERT INTO abc VALUES(randomblob(100), randomblob(200), randomblob(1000));
41       INSERT INTO abc 
42           SELECT randomblob(1000), randomblob(200), randomblob(100)
43           FROM abc;
44       INSERT INTO abc 
45           SELECT randomblob(100), randomblob(200), randomblob(1000)
46           FROM abc;
47       INSERT INTO abc 
48           SELECT randomblob(100), randomblob(200), randomblob(1000)
49           FROM abc;
50       INSERT INTO abc 
51           SELECT randomblob(100), randomblob(200), randomblob(1000)
52           FROM abc;
53       INSERT INTO abc 
54           SELECT randomblob(100), randomblob(200), randomblob(1000)
55           FROM abc WHERE [expr $ii&16];
56       INSERT INTO abc 
57           SELECT randomblob(25), randomblob(45), randomblob(9456)
58           FROM abc WHERE [expr $ii&32];
59       INSERT INTO abc 
60           SELECT randomblob(100), randomblob(200), randomblob(1000)
61           FROM abc WHERE [expr $ii&8];
62       INSERT INTO abc 
63           SELECT randomblob(25), randomblob(45), randomblob(9456)
64           FROM abc WHERE [expr $ii&4];
65       COMMIT;
66     "
67   
68     set sig [signature]
69     db close
70   
71     do_test crash7-1.$ii.crash {
72        crashsql -file $f "
73          PRAGMA page_size = $to_size;
74          VACUUM;
75        "
76     } {1 {child process exited abnormally}}
77   
78     sqlite3 db test.db
79     integrity_check crash7-1.$ii.integrity
80   } 
83 db close
84 forcedelete test.db
85 sqlite3 db test.db
86 do_execsql_test 2.0 {
87   CREATE TABLE t1(a, b, UNIQUE(a, b));
88   INSERT INTO t1 VALUES(randomblob(100), randomblob(100));
89   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
90   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
91   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
92   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
93   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
94   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
95   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
96   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
97   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
98   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
99   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
100   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
101   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
102   INSERT INTO t1 SELECT randomblob(100), randomblob(100) FROM t1;
103   DELETE FROM t1 WHERE rowid%2;
105 db_save_and_close
107 for {set i 0} {$i < 20} {incr i} {
108   db_restore_and_reopen
109   do_test 2.[expr $i+1].1 {
110     crashsql -file test.db -seed $i {VACUUM}
111   } {1 {child process exited abnormally}}
112   do_execsql_test 2.[expr $i+1].2 { PRAGMA integrity_check } {ok}
116 finish_test