xref: /sqlite-3.40.0/test/crashM.test (revision 63c088e7)
1# 2015 Mar 13
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# Crash tests for the multiplex module with 8.3 filenames enabled.
13#
14
15set testdir [file dirname $argv0]
16source $testdir/tester.tcl
17set testprefix crashM
18
19ifcapable !crashtest||!8_3_names {
20  finish_test
21  return
22}
23
24db close
25sqlite3_shutdown
26sqlite3_config_uri 1
27
28foreach f [glob -nocomplain test1.* test2.*] { forcedelete $f }
29sqlite3_multiplex_initialize "" 1
30sqlite3 db file:test1.db?8_3_names=1
31sqlite3_multiplex_control db main chunk_size [expr 64*1024]
32
33do_execsql_test 1.0 {
34  ATTACH 'file:test2.db?8_3_names=1' AS aux;
35
36  CREATE TABLE t1(x, y);
37  CREATE INDEX t1x ON t1(x);
38  CREATE INDEX t1y ON t1(y);
39
40  CREATE TABLE aux.t2(x, y);
41  CREATE INDEX aux.t2x ON t2(x);
42  CREATE INDEX aux.t2y ON t2(y);
43
44  WITH s(a) AS (
45    SELECT 1 UNION ALL SELECT a+1 FROM s WHERE a<1000
46  )
47  INSERT INTO t1 SELECT a, randomblob(500) FROM s;
48
49  WITH s(a) AS (
50    SELECT 1 UNION ALL SELECT a+1 FROM s WHERE a<1000
51  )
52  INSERT INTO t2 SELECT a, randomblob(500) FROM s;
53} {}
54
55for {set i 0} {$i < 20} {incr i} {
56  do_test 2.$i.1 {
57    crashsql -delay 1 -file test1.db -opendb {
58      sqlite3_shutdown
59      sqlite3_config_uri 1
60      sqlite3_multiplex_initialize crash 1
61      sqlite3 db file:test1.db?8_3_names=1
62      sqlite3_multiplex_control db main chunk_size [expr 64*1024]
63    } {
64      ATTACH 'file:test2.db?8_3_names=1' AS aux;
65      BEGIN;
66        UPDATE t1 SET y = randomblob(500) WHERE (x%10)==0;
67        UPDATE t2 SET y = randomblob(500) WHERE (x%10)==0;
68      COMMIT;
69    }
70  } {1 {child process exited abnormally}}
71
72  do_execsql_test 2.$i.2 {
73    PRAGMA main.integrity_check;
74    PRAGMA aux.integrity_check;
75  } {ok ok}
76}
77
78catch { db close }
79sqlite3_multiplex_shutdown
80finish_test
81