danielk1977 | 3a2c8c8 | 2008-04-03 14:36:25 +0000 | [diff] [blame] | 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 |
dan | 1e3e418 | 2012-10-17 16:20:36 +0000 | [diff] [blame] | 16 | set testprefix crash7 |
danielk1977 | 3a2c8c8 | 2008-04-03 14:36:25 +0000 | [diff] [blame] | 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 |
mistachkin | fda06be | 2011-08-02 00:57:34 +0000 | [diff] [blame] | 30 | delete_file test.db |
danielk1977 | 3a2c8c8 | 2008-04-03 14:36:25 +0000 | [diff] [blame] | 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 | |
dan | 1e3e418 | 2012-10-17 16:20:36 +0000 | [diff] [blame] | 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 | |
danielk1977 | 3a2c8c8 | 2008-04-03 14:36:25 +0000 | [diff] [blame] | 116 | finish_test |