Improve the code coverage of "permutations.test coverage-pager".
FossilOrigin-Name: b095e2cdb61ca8487255687f58fb1024d40f3986
This commit is contained in:
parent
ced9813b12
commit
d7a558a9fb
20
manifest
20
manifest
@ -1,5 +1,5 @@
|
||||
C Add\sfurther\smulti-client\stests\sto\smmap1.test.
|
||||
D 2013-04-04T19:32:53.279
|
||||
C Improve\sthe\scode\scoverage\sof\s"permutations.test\scoverage-pager".
|
||||
D 2013-04-05T20:40:43.227
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in aafa71d66bab7e87fb2f348152340645f79f0244
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@ -229,7 +229,7 @@ F src/test_superlock.c 2b97936ca127d13962c3605dbc9a4ef269c424cd
|
||||
F src/test_syscall.c 7e8293e4e6971b0f44c7f7f37b1315a8cc9f6018
|
||||
F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa
|
||||
F src/test_thread.c e286f2173563f2a1747c24bcda6b9d030bf4f4e4
|
||||
F src/test_vfs.c fb16b2d9938cf0c1afc5a423b55b952fcc024275
|
||||
F src/test_vfs.c 8e6087a8b3dcc260282074b0efba14b76311120c
|
||||
F src/test_vfstrace.c 34b544e80ba7fb77be15395a609c669df2e660a2
|
||||
F src/test_wholenumber.c 3d2b9ed1505c40ad5c5ca2ad16ae7a289d6cc251
|
||||
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
|
||||
@ -651,10 +651,10 @@ F test/orderby2.test bc11009f7cd99d96b1b11e57b199b00633eb5b04
|
||||
F test/orderby3.test 8619d06a3debdcd80a27c0fdea5c40b468854b99
|
||||
F test/orderby4.test 4d39bfbaaa3ae64d026ca2ff166353d2edca4ba4
|
||||
F test/oserror.test 50417780d0e0d7cd23cf12a8277bb44024765df3
|
||||
F test/pager1.test 31c04bec797dda1bde337810b52efa08d1f1f08e
|
||||
F test/pager1.test 622bfaea80604a96010f35256a4fc22fce584e95
|
||||
F test/pager2.test 745b911dde3d1f24ae0870bd433dfa83d7c658c1
|
||||
F test/pager3.test 3856d9c80839be0668efee1b74811b1b7f7fc95f
|
||||
F test/pagerfault.test fc2e37b2da626826dd54bb13720b4d721719b660
|
||||
F test/pagerfault.test 636c01bdbdb2bb2baf68532d6c4ef4c633022743
|
||||
F test/pagerfault2.test 1f79ea40d1133b2683a2f811b00f2399f7ec2401
|
||||
F test/pagerfault3.test f16e2efcb5fc9996d1356f7cbc44c998318ae1d7
|
||||
F test/pageropt.test 32cb5a6ed7ccddf8e8c842cb44240bd9340223ce
|
||||
@ -955,7 +955,7 @@ F test/vtabF.test fd5ad376f5a34fe0891df1f3cddb4fe7c3eb077e
|
||||
F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
|
||||
F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
|
||||
F test/vtab_shared.test 82f463886e18d7f8395a4b6167c91815efe54839
|
||||
F test/wal.test 62454b2cf00b311e9e65f898aad0fef536ed561a
|
||||
F test/wal.test bbd98ac09d8fbcaa80ec233757056eb1bbb7cd95
|
||||
F test/wal2.test d4b470f13c87f6d8268b004380afa04c3c67cb90
|
||||
F test/wal3.test b22eb662bcbc148c5f6d956eaf94b047f7afe9c0
|
||||
F test/wal4.test 4744e155cd6299c6bd99d3eab1c82f77db9cdb3c
|
||||
@ -971,7 +971,7 @@ F test/walcksum.test f5447800a157c9e2234fbb8e80243f0813941bde
|
||||
F test/walcrash.test 4457436593be8c136f9148487c7dccd5e9013af2
|
||||
F test/walcrash2.test 019d60b89d96c1937adb2b30b850ac7e86e5a142
|
||||
F test/walcrash3.test 595e44c6197f0d0aa509fc135be2fd0209d11a2c
|
||||
F test/walfault.test 97394d8de82a99f7abf1c12ed229640607fd0ad2
|
||||
F test/walfault.test 54ad6e849c727f4da463964b9eb8c8e8e155cf82
|
||||
F test/walhook.test ed00a40ba7255da22d6b66433ab61fab16a63483
|
||||
F test/walmode.test 4022fe03ae6e830583672caa101f046438a0473c
|
||||
F test/walnoshm.test 84ca10c544632a756467336b7c3b864d493ee496
|
||||
@ -1044,7 +1044,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
|
||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
|
||||
P 2b3d9805a28e51f646113e22c2dff2272342306e
|
||||
R 4c631120a8e96e37be49975ee7d63ac7
|
||||
P a107f75d93b8acd3403d8473a75137378041a833
|
||||
R 6d11c98ab18b87c4b8798ffe987d9d38
|
||||
U dan
|
||||
Z d6d074a538192756f7d91b52bba8b7ce
|
||||
Z 50aa2590d101ae076870fa94f81e976a
|
||||
|
@ -1 +1 @@
|
||||
a107f75d93b8acd3403d8473a75137378041a833
|
||||
b095e2cdb61ca8487255687f58fb1024d40f3986
|
@ -125,8 +125,9 @@ struct Testvfs {
|
||||
#define TESTVFS_ACCESS_MASK 0x00004000
|
||||
#define TESTVFS_FULLPATHNAME_MASK 0x00008000
|
||||
#define TESTVFS_READ_MASK 0x00010000
|
||||
#define TESTVFS_UNLOCK_MASK 0x00020000
|
||||
|
||||
#define TESTVFS_ALL_MASK 0x0001FFFF
|
||||
#define TESTVFS_ALL_MASK 0x0003FFFF
|
||||
|
||||
|
||||
#define TESTVFS_MAX_PAGES 1024
|
||||
@ -467,8 +468,12 @@ static int tvfsLock(sqlite3_file *pFile, int eLock){
|
||||
** Unlock an tvfs-file.
|
||||
*/
|
||||
static int tvfsUnlock(sqlite3_file *pFile, int eLock){
|
||||
TestvfsFd *p = tvfsGetFd(pFile);
|
||||
return sqlite3OsUnlock(p->pReal, eLock);
|
||||
TestvfsFd *pFd = tvfsGetFd(pFile);
|
||||
Testvfs *p = (Testvfs *)pFd->pVfs->pAppData;
|
||||
if( p->mask&TESTVFS_WRITE_MASK && tvfsInjectIoerr(p) ){
|
||||
return SQLITE_IOERR_UNLOCK;
|
||||
}
|
||||
return sqlite3OsUnlock(pFd->pReal, eLock);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1101,6 +1106,7 @@ static int testvfs_obj_cmd(
|
||||
{ "xClose", TESTVFS_CLOSE_MASK },
|
||||
{ "xAccess", TESTVFS_ACCESS_MASK },
|
||||
{ "xFullPathname", TESTVFS_FULLPATHNAME_MASK },
|
||||
{ "xUnlock", TESTVFS_UNLOCK_MASK },
|
||||
};
|
||||
Tcl_Obj **apElem = 0;
|
||||
int nElem = 0;
|
||||
|
211
test/pager1.test
211
test/pager1.test
@ -15,6 +15,7 @@ source $testdir/tester.tcl
|
||||
source $testdir/lock_common.tcl
|
||||
source $testdir/malloc_common.tcl
|
||||
source $testdir/wal_common.tcl
|
||||
set testprefix pager1
|
||||
|
||||
# Do not use a codec for tests in this file, as the database file is
|
||||
# manipulated directly using tcl scripts (using the [hexio_write] command).
|
||||
@ -1382,6 +1383,7 @@ db2 close
|
||||
#
|
||||
testvfs tv -default 1
|
||||
foreach sectorsize {
|
||||
16
|
||||
32 64 128 256 512 1024 2048
|
||||
4096 8192 16384 32768 65536 131072 262144
|
||||
} {
|
||||
@ -1404,7 +1406,7 @@ foreach sectorsize {
|
||||
COMMIT;
|
||||
}
|
||||
file size test.db-journal
|
||||
} [expr $sectorsize > 65536 ? 65536 : $sectorsize]
|
||||
} [expr $sectorsize > 65536 ? 65536 : ($sectorsize<32 ? 512 : $sectorsize)]
|
||||
|
||||
do_test pager1-10.$sectorsize.2 {
|
||||
execsql {
|
||||
@ -2523,4 +2525,211 @@ if {$::tcl_platform(platform)=="unix"} {
|
||||
} {one two}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test that appending pages to the database file then moving those pages
|
||||
# to the free-list before the transaction is committed does not cause
|
||||
# an error.
|
||||
#
|
||||
foreach {tn pragma strsize} {
|
||||
1 { PRAGMA mmap_limit = 0 } 2400
|
||||
2 { } 2400
|
||||
3 { PRAGMA mmap_limit = 0 } 4400
|
||||
4 { } 4400
|
||||
} {
|
||||
reset_db
|
||||
db func a_string a_string
|
||||
db eval $pragma
|
||||
do_execsql_test 34.$tn.1 {
|
||||
CREATE TABLE t1(a, b);
|
||||
INSERT INTO t1 VALUES(1, 2);
|
||||
}
|
||||
breakpoint
|
||||
do_execsql_test 34.$tn.2 {
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES(2, a_string($strsize));
|
||||
DELETE FROM t1 WHERE oid=2;
|
||||
COMMIT;
|
||||
PRAGMA integrity_check;
|
||||
} {ok}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
reset_db
|
||||
do_test 35 {
|
||||
sqlite3 db test.db
|
||||
|
||||
execsql {
|
||||
CREATE TABLE t1(x, y);
|
||||
PRAGMA journal_mode = WAL;
|
||||
INSERT INTO t1 VALUES(1, 2);
|
||||
}
|
||||
|
||||
execsql {
|
||||
BEGIN;
|
||||
CREATE TABLE t2(a, b);
|
||||
}
|
||||
|
||||
hexio_write test.db-shm [expr 16*1024] [string repeat 0055 8192]
|
||||
catchsql ROLLBACK
|
||||
} {0 {}}
|
||||
|
||||
do_multiclient_test tn {
|
||||
sql1 {
|
||||
PRAGMA auto_vacuum = 0;
|
||||
CREATE TABLE t1(x, y);
|
||||
INSERT INTO t1 VALUES(1, 2);
|
||||
}
|
||||
|
||||
do_test 36.$tn.1 {
|
||||
sql2 { PRAGMA max_page_count = 2 }
|
||||
list [catch { sql2 { CREATE TABLE t2(x) } } msg] $msg
|
||||
} {1 {database or disk is full}}
|
||||
|
||||
sql1 { PRAGMA checkpoint_fullfsync = 1 }
|
||||
sql1 { CREATE TABLE t2(x) }
|
||||
|
||||
do_test 36.$tn.2 {
|
||||
sql2 { INSERT INTO t2 VALUES('xyz') }
|
||||
list [catch { sql2 { CREATE TABLE t3(x) } } msg] $msg
|
||||
} {1 {database or disk is full}}
|
||||
}
|
||||
|
||||
forcedelete test1 test2
|
||||
foreach {tn uri} {
|
||||
1 {file:?mode=memory&cache=shared}
|
||||
2 {file:one?mode=memory&cache=shared}
|
||||
3 {file:test1?cache=shared}
|
||||
4 {file:test2?another=parameter&yet=anotherone}
|
||||
} {
|
||||
do_test 37.$tn {
|
||||
catch { db close }
|
||||
sqlite3_shutdown
|
||||
sqlite3_config_uri 1
|
||||
sqlite3 db $uri
|
||||
db eval {
|
||||
CREATE TABLE t1(x);
|
||||
INSERT INTO t1 VALUES(1);
|
||||
SELECT * FROM t1;
|
||||
}
|
||||
} {1}
|
||||
db close
|
||||
sqlite3_shutdown
|
||||
sqlite3_config_uri 0
|
||||
}
|
||||
|
||||
do_test 38.1 {
|
||||
catch { db close }
|
||||
forcedelete test.db
|
||||
set fd [open test.db w]
|
||||
puts $fd "hello world"
|
||||
close $fd
|
||||
sqlite3 db test.db
|
||||
catchsql { CREATE TABLE t1(x) }
|
||||
} {1 {file is encrypted or is not a database}}
|
||||
do_test 38.2 {
|
||||
catch { db close }
|
||||
forcedelete test.db
|
||||
} {}
|
||||
|
||||
do_test 39.1 {
|
||||
sqlite3 db test.db
|
||||
execsql {
|
||||
PRAGMA auto_vacuum = 1;
|
||||
CREATE TABLE t1(x);
|
||||
INSERT INTO t1 VALUES('xxx');
|
||||
INSERT INTO t1 VALUES('two');
|
||||
INSERT INTO t1 VALUES(randomblob(400));
|
||||
INSERT INTO t1 VALUES(randomblob(400));
|
||||
INSERT INTO t1 VALUES(randomblob(400));
|
||||
INSERT INTO t1 VALUES(randomblob(400));
|
||||
BEGIN;
|
||||
UPDATE t1 SET x = 'one' WHERE rowid=1;
|
||||
}
|
||||
set ::stmt [sqlite3_prepare db "SELECT * FROM t1 ORDER BY rowid" -1 dummy]
|
||||
sqlite3_step $::stmt
|
||||
sqlite3_column_text $::stmt 0
|
||||
} {one}
|
||||
do_test 39.2 {
|
||||
execsql { CREATE TABLE t2(x) }
|
||||
sqlite3_step $::stmt
|
||||
sqlite3_column_text $::stmt 0
|
||||
} {two}
|
||||
do_test 39.3 {
|
||||
sqlite3_finalize $::stmt
|
||||
execsql COMMIT
|
||||
} {}
|
||||
|
||||
do_execsql_test 39.4 {
|
||||
PRAGMA auto_vacuum = 2;
|
||||
CREATE TABLE t3(x);
|
||||
CREATE TABLE t4(x);
|
||||
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
}
|
||||
do_test 39.5 {
|
||||
db close
|
||||
sqlite3 db test.db
|
||||
execsql {
|
||||
PRAGMA cache_size = 1;
|
||||
PRAGMA incremental_vacuum;
|
||||
PRAGMA integrity_check;
|
||||
}
|
||||
} {ok}
|
||||
|
||||
do_test 40.1 {
|
||||
reset_db
|
||||
execsql {
|
||||
PRAGMA auto_vacuum = 1;
|
||||
CREATE TABLE t1(x PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES(randomblob(1200));
|
||||
PRAGMA page_count;
|
||||
}
|
||||
} {6}
|
||||
do_test 40.2 {
|
||||
execsql {
|
||||
INSERT INTO t1 VALUES(randomblob(1200));
|
||||
INSERT INTO t1 VALUES(randomblob(1200));
|
||||
INSERT INTO t1 VALUES(randomblob(1200));
|
||||
}
|
||||
} {}
|
||||
do_test 40.3 {
|
||||
db close
|
||||
sqlite3 db test.db
|
||||
execsql {
|
||||
PRAGMA cache_size = 1;
|
||||
CREATE TABLE t2(x);
|
||||
PRAGMA integrity_check;
|
||||
}
|
||||
} {ok}
|
||||
|
||||
do_test 41.1 {
|
||||
reset_db
|
||||
execsql {
|
||||
CREATE TABLE t1(x PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES(randomblob(200));
|
||||
INSERT INTO t1 SELECT randomblob(200) FROM t1;
|
||||
INSERT INTO t1 SELECT randomblob(200) FROM t1;
|
||||
INSERT INTO t1 SELECT randomblob(200) FROM t1;
|
||||
INSERT INTO t1 SELECT randomblob(200) FROM t1;
|
||||
INSERT INTO t1 SELECT randomblob(200) FROM t1;
|
||||
INSERT INTO t1 SELECT randomblob(200) FROM t1;
|
||||
}
|
||||
} {}
|
||||
do_test 41.2 {
|
||||
testvfs tv -default 1
|
||||
tv sectorsize 16384;
|
||||
tv devchar [list]
|
||||
db close
|
||||
sqlite3 db test.db
|
||||
execsql {
|
||||
PRAGMA cache_size = 1;
|
||||
DELETE FROM t1 WHERE rowid%4;
|
||||
PRAGMA integrity_check;
|
||||
}
|
||||
} {ok}
|
||||
|
||||
|
||||
finish_test
|
||||
|
@ -1246,6 +1246,7 @@ do_faultsim_test pagerfault-27 -faults ioerr-persistent -prep {
|
||||
faultsim_integrity_check
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
do_test pagerfault-28-pre {
|
||||
@ -1279,7 +1280,7 @@ do_test pagerfault-28-pre {
|
||||
} {1}
|
||||
faultsim_save_and_close
|
||||
|
||||
do_faultsim_test pagerfault-28 -faults oom* -prep {
|
||||
do_faultsim_test pagerfault-28a -faults oom* -prep {
|
||||
faultsim_restore_and_reopen
|
||||
execsql { PRAGMA mmap_limit=0 }
|
||||
|
||||
@ -1303,5 +1304,185 @@ do_faultsim_test pagerfault-28 -faults oom* -prep {
|
||||
faultsim_integrity_check
|
||||
}
|
||||
|
||||
faultsim_restore_and_reopen
|
||||
sqlite3 db2 test.db
|
||||
db2 eval {SELECT count(*) FROM t2}
|
||||
db close
|
||||
|
||||
do_faultsim_test pagerfault-28b -faults oom* -prep {
|
||||
sqlite3 db test.db
|
||||
} -body {
|
||||
execsql { SELECT count(*) FROM t2 }
|
||||
} -test {
|
||||
faultsim_test_result {0 2048}
|
||||
db close
|
||||
}
|
||||
|
||||
db2 close
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Try this:
|
||||
#
|
||||
# 1) Put the pager in ERROR state (error during rollback)
|
||||
#
|
||||
# 2) Next time the connection is used inject errors into all xWrite() and
|
||||
# xUnlock() calls. This causes the hot-journal rollback to fail and
|
||||
# the pager to declare its locking state UNKNOWN.
|
||||
#
|
||||
# 3) Same again.
|
||||
#
|
||||
# 4a) Stop injecting errors. Allow the rollback to succeed. Check that
|
||||
# the database is Ok. Or,
|
||||
#
|
||||
# 4b) Close and reopen the db. Check that the db is Ok.
|
||||
#
|
||||
proc custom_injectinstall {} {
|
||||
testvfs custom -default true
|
||||
custom filter {xWrite xUnlock}
|
||||
}
|
||||
proc custom_injectuninstall {} {
|
||||
catch {db close}
|
||||
catch {db2 close}
|
||||
custom delete
|
||||
}
|
||||
proc custom_injectstart {iFail} {
|
||||
custom ioerr $iFail 1
|
||||
}
|
||||
proc custom_injectstop {} {
|
||||
custom ioerr
|
||||
}
|
||||
set ::FAULTSIM(custom) [list \
|
||||
-injectinstall custom_injectinstall \
|
||||
-injectstart custom_injectstart \
|
||||
-injectstop custom_injectstop \
|
||||
-injecterrlist {{1 {disk I/O error}}} \
|
||||
-injectuninstall custom_injectuninstall \
|
||||
]
|
||||
|
||||
do_test pagerfault-29-pre {
|
||||
faultsim_delete_and_reopen
|
||||
db func a_string a_string
|
||||
execsql {
|
||||
PRAGMA page_size = 1024;
|
||||
PRAGMA cache_size = 5;
|
||||
|
||||
BEGIN;
|
||||
CREATE TABLE t2(a UNIQUE, b UNIQUE);
|
||||
INSERT INTO t2 VALUES( a_string(800), a_string(800) );
|
||||
INSERT INTO t2 SELECT a_string(800), a_string(800) FROM t2;
|
||||
INSERT INTO t2 SELECT a_string(800), a_string(800) FROM t2;
|
||||
INSERT INTO t2 SELECT a_string(800), a_string(800) FROM t2;
|
||||
INSERT INTO t2 SELECT a_string(800), a_string(800) FROM t2;
|
||||
COMMIT;
|
||||
}
|
||||
expr {[file size test.db] >= 50*1024}
|
||||
} {1}
|
||||
faultsim_save_and_close
|
||||
foreach {tn tt} {
|
||||
29 { catchsql ROLLBACK }
|
||||
30 { db close ; sqlite3 db test.db }
|
||||
} {
|
||||
do_faultsim_test pagerfault-$tn -faults custom -prep {
|
||||
faultsim_restore_and_reopen
|
||||
db func a_string a_string
|
||||
execsql {
|
||||
PRAGMA cache_size = 5;
|
||||
BEGIN;
|
||||
UPDATE t2 SET a = a_string(799);
|
||||
}
|
||||
} -body {
|
||||
catchsql ROLLBACK
|
||||
catchsql ROLLBACK
|
||||
catchsql ROLLBACK
|
||||
} -test {
|
||||
eval $::tt
|
||||
if {"ok" != [db one {PRAGMA integrity_check}]} {
|
||||
error "integrity check failed"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
do_test pagerfault-31-pre {
|
||||
sqlite3_shutdown
|
||||
sqlite3_config_uri 1
|
||||
} {SQLITE_OK}
|
||||
do_faultsim_test pagerfault-31 -faults oom* -body {
|
||||
sqlite3 db {file:one?mode=memory&cache=shared}
|
||||
db eval {
|
||||
CREATE TABLE t1(x);
|
||||
INSERT INTO t1 VALUES(1);
|
||||
SELECT * FROM t1;
|
||||
}
|
||||
} -test {
|
||||
faultsim_test_result {0 1} {1 {}}
|
||||
catch { db close }
|
||||
}
|
||||
sqlite3_shutdown
|
||||
sqlite3_config_uri 0
|
||||
|
||||
do_test pagerfault-32-pre {
|
||||
reset_db
|
||||
execsql {
|
||||
CREATE TABLE t1(x);
|
||||
INSERT INTO t1 VALUES('one');
|
||||
}
|
||||
} {}
|
||||
faultsim_save_and_close
|
||||
|
||||
do_faultsim_test pagerfault-32 -prep {
|
||||
faultsim_restore_and_reopen
|
||||
db eval { SELECT * FROM t1; }
|
||||
} -body {
|
||||
execsql { SELECT * FROM t1; }
|
||||
} -test {
|
||||
faultsim_test_result {0 one}
|
||||
}
|
||||
sqlite3_shutdown
|
||||
sqlite3_config_uri 0
|
||||
|
||||
do_faultsim_test pagerfault-33a -prep {
|
||||
sqlite3 db :memory:
|
||||
execsql {
|
||||
CREATE TABLE t1(a, b);
|
||||
INSERT INTO t1 VALUES(1, 2);
|
||||
}
|
||||
} -body {
|
||||
execsql { VACUUM }
|
||||
} -test {
|
||||
faultsim_test_result {0 {}}
|
||||
}
|
||||
do_faultsim_test pagerfault-33b -prep {
|
||||
sqlite3 db ""
|
||||
execsql {
|
||||
CREATE TABLE t1(a, b);
|
||||
INSERT INTO t1 VALUES(1, 2);
|
||||
}
|
||||
} -body {
|
||||
execsql { VACUUM }
|
||||
} -test {
|
||||
faultsim_test_result {0 {}}
|
||||
}
|
||||
|
||||
do_test pagerfault-34-pre {
|
||||
reset_db
|
||||
execsql {
|
||||
CREATE TABLE t1(x PRIMARY KEY);
|
||||
}
|
||||
} {}
|
||||
faultsim_save_and_close
|
||||
do_faultsim_test pagerfault-34 -prep {
|
||||
faultsim_restore_and_reopen
|
||||
execsql {
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES( randomblob(4000) );
|
||||
DELETE FROM t1;
|
||||
}
|
||||
} -body {
|
||||
execsql COMMIT
|
||||
} -test {
|
||||
faultsim_test_result {0 {}}
|
||||
}
|
||||
|
||||
|
||||
finish_test
|
||||
|
||||
|
@ -1569,26 +1569,6 @@ ifcapable autovacuum {
|
||||
} [wal_file_size 1 1024]
|
||||
}
|
||||
|
||||
reset_db
|
||||
do_test 25 {
|
||||
sqlite3 db test.db
|
||||
|
||||
execsql {
|
||||
CREATE TABLE t1(x, y);
|
||||
PRAGMA journal_mode = WAL;
|
||||
INSERT INTO t1 VALUES(1, 2);
|
||||
}
|
||||
|
||||
execsql {
|
||||
BEGIN;
|
||||
CREATE TABLE t2(a, b);
|
||||
}
|
||||
|
||||
hexio_write test.db-shm [expr 16*1024] [string repeat 0055 8192]
|
||||
catchsql ROLLBACK
|
||||
} {0 {}}
|
||||
|
||||
|
||||
db close
|
||||
sqlite3_shutdown
|
||||
test_sqlite3_log
|
||||
|
@ -548,6 +548,44 @@ do_faultsim_test walfault-14 -prep {
|
||||
set nRow [db eval {SELECT count(*) FROM abc}]
|
||||
if {!(($nRow==2 && $testrc) || $nRow==3)} { error "Bad db content" }
|
||||
}
|
||||
finish_test
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test fault-handling when switching out of exclusive-locking mode.
|
||||
#
|
||||
do_test walfault-14-pre {
|
||||
faultsim_delete_and_reopen
|
||||
execsql {
|
||||
PRAGMA auto_vacuum = 0;
|
||||
PRAGMA journal_mode = WAL;
|
||||
BEGIN;
|
||||
CREATE TABLE abc(a PRIMARY KEY);
|
||||
INSERT INTO abc VALUES(randomblob(1500));
|
||||
INSERT INTO abc VALUES(randomblob(1500));
|
||||
COMMIT;
|
||||
}
|
||||
faultsim_save_and_close
|
||||
} {}
|
||||
do_faultsim_test walfault-14 -prep {
|
||||
faultsim_restore_and_reopen
|
||||
breakpoint
|
||||
execsql {
|
||||
SELECT count(*) FROM abc;
|
||||
PRAGMA locking_mode = exclusive;
|
||||
BEGIN;
|
||||
INSERT INTO abc VALUES(randomblob(1500));
|
||||
COMMIT;
|
||||
}
|
||||
} -body {
|
||||
db eval {
|
||||
PRAGMA locking_mode = normal;
|
||||
BEGIN;
|
||||
INSERT INTO abc VALUES(randomblob(1500));
|
||||
COMMIT;
|
||||
}
|
||||
} -test {
|
||||
faultsim_integrity_check
|
||||
set nRow [db eval {SELECT count(*) FROM abc}]
|
||||
if {$nRow!=3 && $nRow!=4} { error "Bad db content" }
|
||||
}
|
||||
|
||||
finish_test
|
||||
|
Loading…
Reference in New Issue
Block a user