AryaWu/sqlite
0
1# 2008 March 202#3# The author disclaims copyright to this source code. In place of4# 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 14set testdir [file dirname $argv0]15source $testdir/tester.tcl16set testprefix crash717 18ifcapable !crashtest {19 finish_test20 return21}22 23proc signature {} {24 return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}]25}26 27foreach f [list test.db test.db-journal] {28 for {set ii 1} {$ii < 64} {incr ii} {29 db close30 delete_file test.db31 sqlite3 db test.db32 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 close70 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.db79 integrity_check crash7-1.$ii.integrity80 } 81}82 83db close84forcedelete test.db85sqlite3 db test.db86do_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;104}105db_save_and_close106 107for {set i 0} {$i < 20} {incr i} {108 db_restore_and_reopen109 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}113}114 115 116finish_test117 