81 lines
2.0 KiB
Plaintext
81 lines
2.0 KiB
Plaintext
# 2015 Mar 13
|
|
#
|
|
# The author disclaims copyright to this source code. In place of
|
|
# a legal notice, here is a blessing:
|
|
#
|
|
# May you do good and not evil.
|
|
# May you find forgiveness for yourself and forgive others.
|
|
# May you share freely, never taking more than you give.
|
|
#
|
|
#***********************************************************************
|
|
#
|
|
# Crash tests for the multiplex module with 8.3 filenames enabled.
|
|
#
|
|
|
|
set testdir [file dirname $argv0]
|
|
source $testdir/tester.tcl
|
|
set testprefix crashM
|
|
|
|
ifcapable !crashtest||!8_3_names {
|
|
finish_test
|
|
return
|
|
}
|
|
|
|
db close
|
|
sqlite3_shutdown
|
|
sqlite3_config_uri 1
|
|
|
|
foreach f [glob -nocomplain test1.* test2.*] { forcedelete $f }
|
|
sqlite3_multiplex_initialize "" 1
|
|
sqlite3 db file:test1.db?8_3_names=1
|
|
sqlite3_multiplex_control db main chunk_size [expr 64*1024]
|
|
|
|
do_execsql_test 1.0 {
|
|
ATTACH 'file:test2.db?8_3_names=1' AS aux;
|
|
|
|
CREATE TABLE t1(x, y);
|
|
CREATE INDEX t1x ON t1(x);
|
|
CREATE INDEX t1y ON t1(y);
|
|
|
|
CREATE TABLE aux.t2(x, y);
|
|
CREATE INDEX aux.t2x ON t2(x);
|
|
CREATE INDEX aux.t2y ON t2(y);
|
|
|
|
WITH s(a) AS (
|
|
SELECT 1 UNION ALL SELECT a+1 FROM s WHERE a<1000
|
|
)
|
|
INSERT INTO t1 SELECT a, randomblob(500) FROM s;
|
|
|
|
WITH s(a) AS (
|
|
SELECT 1 UNION ALL SELECT a+1 FROM s WHERE a<1000
|
|
)
|
|
INSERT INTO t2 SELECT a, randomblob(500) FROM s;
|
|
} {}
|
|
|
|
for {set i 0} {$i < 20} {incr i} {
|
|
do_test 2.$i.1 {
|
|
crashsql -delay 1 -file test1.db -opendb {
|
|
sqlite3_shutdown
|
|
sqlite3_config_uri 1
|
|
sqlite3_multiplex_initialize crash 1
|
|
sqlite3 db file:test1.db?8_3_names=1
|
|
sqlite3_multiplex_control db main chunk_size [expr 64*1024]
|
|
} {
|
|
ATTACH 'file:test2.db?8_3_names=1' AS aux;
|
|
BEGIN;
|
|
UPDATE t1 SET y = randomblob(500) WHERE (x%10)==0;
|
|
UPDATE t2 SET y = randomblob(500) WHERE (x%10)==0;
|
|
COMMIT;
|
|
}
|
|
} {1 {child process exited abnormally}}
|
|
|
|
do_execsql_test 2.$i.2 {
|
|
PRAGMA main.integrity_check;
|
|
PRAGMA aux.integrity_check;
|
|
} {ok ok}
|
|
}
|
|
|
|
catch { db close }
|
|
sqlite3_multiplex_shutdown
|
|
finish_test
|