xref: /sqlite-3.40.0/test/crash7.test (revision 1e3e4185)
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
14set testdir [file dirname $argv0]
15source $testdir/tester.tcl
16set testprefix crash7
17
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
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
83db 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
116finish_test
117