sqlite/test/writecrash.test

69 lines
1.3 KiB
Plaintext
Raw Normal View History

# 2009 January 8
#
# 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.
#
#***********************************************************************
#
# Test the outcome of a writer crashing within a call to the VFS
# xWrite function.
#
set testdir [file dirname $argv0]
source $testdir/tester.tcl
set testprefix writecrash
do_not_use_codec
if {$tcl_platform(platform)=="windows"} {
finish_test
return
}
do_execsql_test 1.0 {
CREATE TABLE t1(a INTEGER PRIMARY KEY, b BLOB UNIQUE);
WITH s(i) AS (
VALUES(1) UNION ALL SELECT i+1 FROM s WHERE i<100
)
INSERT INTO t1 SELECT NULL, randomblob(900) FROM s;
} {}
set bGo 1
for {set tn 1} {$bGo} {incr tn} {
db close
sqlite3 db test.db
do_test 1.$tn.1 {
set res [crash_on_write $tn {
UPDATE t1 SET b = randomblob(899) WHERE (a%3)==0
}]
set bGo 0
if {[string match {1 {child killed:*}} $res]} {
set res {0 {}}
set bGo 1
}
set res
} {0 {}}
#db close
#sqlite3 db test.db
do_execsql_test 1.$tn.2 { PRAGMA integrity_check } {ok}
db close
sqlite3 db test.db
do_execsql_test 1.$tn.3 { PRAGMA integrity_check } {ok}
}
finish_test