blob: de10c4589a5bf6eeb1b64234430b583ce49c5599 [file] [log] [blame]
dan63c088e2015-03-12 19:12:30 +00001# 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