github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/crash7.test (about) 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 set testprefix crash7 17 18 ifcapable !crashtest { 19 finish_test 20 return 21 } 22 23 proc signature {} { 24 return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}] 25 } 26 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 } 81 } 82 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; 104 } 105 db_save_and_close 106 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} 113 } 114 115 116 finish_test