Index: third_party/sqlite/sqlite-src-3170000/test/crashM.test |
diff --git a/third_party/sqlite/sqlite-src-3170000/test/crashM.test b/third_party/sqlite/sqlite-src-3170000/test/crashM.test |
new file mode 100644 |
index 0000000000000000000000000000000000000000..de10c4589a5bf6eeb1b64234430b583ce49c5599 |
--- /dev/null |
+++ b/third_party/sqlite/sqlite-src-3170000/test/crashM.test |
@@ -0,0 +1,80 @@ |
+# 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 |