blob: 482999cbfd9575921d5e6f5336f04e3143db101d [file] [log] [blame]
danielk19773a2c8c82008-04-03 14:36:25 +00001# 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
14set testdir [file dirname $argv0]
15source $testdir/tester.tcl
dan1e3e4182012-10-17 16:20:36 +000016set testprefix crash7
danielk19773a2c8c82008-04-03 14:36:25 +000017
18ifcapable !crashtest {
19 finish_test
20 return
21}
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 close
mistachkinfda06be2011-08-02 00:57:34 +000030 delete_file test.db
danielk19773a2c8c82008-04-03 14:36:25 +000031 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
dan1e3e4182012-10-17 16:20:36 +000083db close
84forcedelete test.db
85sqlite3 db test.db
86do_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_close
106
107for {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
danielk19773a2c8c82008-04-03 14:36:25 +0000116finish_test