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