Index: third_party/sqlite/src/test/malloc_common.tcl |
diff --git a/third_party/sqlite/src/test/malloc_common.tcl b/third_party/sqlite/src/test/malloc_common.tcl |
index e7f615648b406357a16612ef3067a774261fb326..b586c88d1f0c91f6785ae2e3e2994163d640b5e7 100644 |
--- a/third_party/sqlite/src/test/malloc_common.tcl |
+++ b/third_party/sqlite/src/test/malloc_common.tcl |
@@ -93,6 +93,14 @@ set FAULTSIM(cantopen-persistent) [list \ |
-injectuninstall cantopen_injectuninstall \ |
] |
+set FAULTSIM(interrupt) [list \ |
+ -injectinstall interrupt_injectinstall \ |
+ -injectstart interrupt_injectstart \ |
+ -injectstop interrupt_injectstop \ |
+ -injecterrlist {{1 interrupted} {1 interrupt}} \ |
+ -injectuninstall interrupt_injectuninstall \ |
+] |
+ |
#-------------------------------------------------------------------------- |
@@ -113,7 +121,9 @@ set FAULTSIM(cantopen-persistent) [list \ |
proc do_faultsim_test {name args} { |
global FAULTSIM |
- set DEFAULT(-faults) [array names FAULTSIM] |
+ foreach n [array names FAULTSIM] { |
+ if {$n != "interrupt"} {lappend DEFAULT(-faults) $n} |
+ } |
set DEFAULT(-prep) "" |
set DEFAULT(-body) "" |
set DEFAULT(-test) "" |
@@ -255,6 +265,22 @@ proc cantopen_injectstop {} { |
shmfault cantopen |
} |
+# The following procs are used as [do_one_faultsim_test] callbacks |
+# when injecting SQLITE_INTERRUPT error faults into test cases. |
+# |
+proc interrupt_injectinstall {} { |
+} |
+proc interrupt_injectuninstall {} { |
+} |
+proc interrupt_injectstart {iFail} { |
+ set ::sqlite_interrupt_count $iFail |
+} |
+proc interrupt_injectstop {} { |
+ set res [expr $::sqlite_interrupt_count<=0] |
+ set ::sqlite_interrupt_count 0 |
+ set res |
+} |
+ |
# This command is not called directly. It is used by the |
# [faultsim_test_result] command created by [do_faultsim_test] and used |
# by -test scripts. |
@@ -264,7 +290,7 @@ proc faultsim_test_result_int {args} { |
set t [list $testrc $testresult] |
set r $args |
if { ($testnfail==0 && $t != [lindex $r 0]) || [lsearch $r $t]<0 } { |
- error "nfail=$testnfail rc=$testrc result=$testresult" |
+ error "nfail=$testnfail rc=$testrc result=$testresult list=$r" |
} |
} |
@@ -383,6 +409,7 @@ proc do_malloc_test {tn args} { |
if {[string is integer $tn]} { |
set tn malloc-$tn |
+ catch { set tn $::testprefix-$tn } |
} |
if {[info exists ::mallocopts(-start)]} { |
set start $::mallocopts(-start) |
@@ -408,7 +435,7 @@ proc do_malloc_test {tn args} { |
set zRepeat "transient" |
if {$::iRepeat} {set zRepeat "persistent"} |
restore_prng_state |
- foreach file [glob -nocomplain test.db-mj*] {file delete -force $file} |
+ foreach file [glob -nocomplain test.db-mj*] {forcedelete $file} |
do_test ${tn}.${zRepeat}.${::n} { |
@@ -425,7 +452,7 @@ proc do_malloc_test {tn args} { |
forcedelete test2.db-journal |
forcedelete test2.db-wal |
if {[info exists ::mallocopts(-testdb)]} { |
- file copy $::mallocopts(-testdb) test.db |
+ copy_file $::mallocopts(-testdb) test.db |
} |
catch { sqlite3 db test.db } |
if {[info commands db] ne ""} { |