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.
|
C Improve\sthe\scode\scoverage\sof\s"permutations.test\scoverage-pager".
|
||||||
D 2013-04-04T19:32:53.279
|
D 2013-04-05T20:40:43.227
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in aafa71d66bab7e87fb2f348152340645f79f0244
|
F Makefile.in aafa71d66bab7e87fb2f348152340645f79f0244
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@ -229,7 +229,7 @@ F src/test_superlock.c 2b97936ca127d13962c3605dbc9a4ef269c424cd
|
|||||||
F src/test_syscall.c 7e8293e4e6971b0f44c7f7f37b1315a8cc9f6018
|
F src/test_syscall.c 7e8293e4e6971b0f44c7f7f37b1315a8cc9f6018
|
||||||
F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa
|
F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa
|
||||||
F src/test_thread.c e286f2173563f2a1747c24bcda6b9d030bf4f4e4
|
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_vfstrace.c 34b544e80ba7fb77be15395a609c669df2e660a2
|
||||||
F src/test_wholenumber.c 3d2b9ed1505c40ad5c5ca2ad16ae7a289d6cc251
|
F src/test_wholenumber.c 3d2b9ed1505c40ad5c5ca2ad16ae7a289d6cc251
|
||||||
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
|
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
|
||||||
@ -651,10 +651,10 @@ F test/orderby2.test bc11009f7cd99d96b1b11e57b199b00633eb5b04
|
|||||||
F test/orderby3.test 8619d06a3debdcd80a27c0fdea5c40b468854b99
|
F test/orderby3.test 8619d06a3debdcd80a27c0fdea5c40b468854b99
|
||||||
F test/orderby4.test 4d39bfbaaa3ae64d026ca2ff166353d2edca4ba4
|
F test/orderby4.test 4d39bfbaaa3ae64d026ca2ff166353d2edca4ba4
|
||||||
F test/oserror.test 50417780d0e0d7cd23cf12a8277bb44024765df3
|
F test/oserror.test 50417780d0e0d7cd23cf12a8277bb44024765df3
|
||||||
F test/pager1.test 31c04bec797dda1bde337810b52efa08d1f1f08e
|
F test/pager1.test 622bfaea80604a96010f35256a4fc22fce584e95
|
||||||
F test/pager2.test 745b911dde3d1f24ae0870bd433dfa83d7c658c1
|
F test/pager2.test 745b911dde3d1f24ae0870bd433dfa83d7c658c1
|
||||||
F test/pager3.test 3856d9c80839be0668efee1b74811b1b7f7fc95f
|
F test/pager3.test 3856d9c80839be0668efee1b74811b1b7f7fc95f
|
||||||
F test/pagerfault.test fc2e37b2da626826dd54bb13720b4d721719b660
|
F test/pagerfault.test 636c01bdbdb2bb2baf68532d6c4ef4c633022743
|
||||||
F test/pagerfault2.test 1f79ea40d1133b2683a2f811b00f2399f7ec2401
|
F test/pagerfault2.test 1f79ea40d1133b2683a2f811b00f2399f7ec2401
|
||||||
F test/pagerfault3.test f16e2efcb5fc9996d1356f7cbc44c998318ae1d7
|
F test/pagerfault3.test f16e2efcb5fc9996d1356f7cbc44c998318ae1d7
|
||||||
F test/pageropt.test 32cb5a6ed7ccddf8e8c842cb44240bd9340223ce
|
F test/pageropt.test 32cb5a6ed7ccddf8e8c842cb44240bd9340223ce
|
||||||
@ -955,7 +955,7 @@ F test/vtabF.test fd5ad376f5a34fe0891df1f3cddb4fe7c3eb077e
|
|||||||
F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
|
F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
|
||||||
F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
|
F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
|
||||||
F test/vtab_shared.test 82f463886e18d7f8395a4b6167c91815efe54839
|
F test/vtab_shared.test 82f463886e18d7f8395a4b6167c91815efe54839
|
||||||
F test/wal.test 62454b2cf00b311e9e65f898aad0fef536ed561a
|
F test/wal.test bbd98ac09d8fbcaa80ec233757056eb1bbb7cd95
|
||||||
F test/wal2.test d4b470f13c87f6d8268b004380afa04c3c67cb90
|
F test/wal2.test d4b470f13c87f6d8268b004380afa04c3c67cb90
|
||||||
F test/wal3.test b22eb662bcbc148c5f6d956eaf94b047f7afe9c0
|
F test/wal3.test b22eb662bcbc148c5f6d956eaf94b047f7afe9c0
|
||||||
F test/wal4.test 4744e155cd6299c6bd99d3eab1c82f77db9cdb3c
|
F test/wal4.test 4744e155cd6299c6bd99d3eab1c82f77db9cdb3c
|
||||||
@ -971,7 +971,7 @@ F test/walcksum.test f5447800a157c9e2234fbb8e80243f0813941bde
|
|||||||
F test/walcrash.test 4457436593be8c136f9148487c7dccd5e9013af2
|
F test/walcrash.test 4457436593be8c136f9148487c7dccd5e9013af2
|
||||||
F test/walcrash2.test 019d60b89d96c1937adb2b30b850ac7e86e5a142
|
F test/walcrash2.test 019d60b89d96c1937adb2b30b850ac7e86e5a142
|
||||||
F test/walcrash3.test 595e44c6197f0d0aa509fc135be2fd0209d11a2c
|
F test/walcrash3.test 595e44c6197f0d0aa509fc135be2fd0209d11a2c
|
||||||
F test/walfault.test 97394d8de82a99f7abf1c12ed229640607fd0ad2
|
F test/walfault.test 54ad6e849c727f4da463964b9eb8c8e8e155cf82
|
||||||
F test/walhook.test ed00a40ba7255da22d6b66433ab61fab16a63483
|
F test/walhook.test ed00a40ba7255da22d6b66433ab61fab16a63483
|
||||||
F test/walmode.test 4022fe03ae6e830583672caa101f046438a0473c
|
F test/walmode.test 4022fe03ae6e830583672caa101f046438a0473c
|
||||||
F test/walnoshm.test 84ca10c544632a756467336b7c3b864d493ee496
|
F test/walnoshm.test 84ca10c544632a756467336b7c3b864d493ee496
|
||||||
@ -1044,7 +1044,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
|
|||||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||||
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
|
F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
|
||||||
P 2b3d9805a28e51f646113e22c2dff2272342306e
|
P a107f75d93b8acd3403d8473a75137378041a833
|
||||||
R 4c631120a8e96e37be49975ee7d63ac7
|
R 6d11c98ab18b87c4b8798ffe987d9d38
|
||||||
U dan
|
U dan
|
||||||
Z d6d074a538192756f7d91b52bba8b7ce
|
Z 50aa2590d101ae076870fa94f81e976a
|
||||||
|
@ -1 +1 @@
|
|||||||
a107f75d93b8acd3403d8473a75137378041a833
|
b095e2cdb61ca8487255687f58fb1024d40f3986
|
@ -125,8 +125,9 @@ struct Testvfs {
|
|||||||
#define TESTVFS_ACCESS_MASK 0x00004000
|
#define TESTVFS_ACCESS_MASK 0x00004000
|
||||||
#define TESTVFS_FULLPATHNAME_MASK 0x00008000
|
#define TESTVFS_FULLPATHNAME_MASK 0x00008000
|
||||||
#define TESTVFS_READ_MASK 0x00010000
|
#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
|
#define TESTVFS_MAX_PAGES 1024
|
||||||
@ -467,8 +468,12 @@ static int tvfsLock(sqlite3_file *pFile, int eLock){
|
|||||||
** Unlock an tvfs-file.
|
** Unlock an tvfs-file.
|
||||||
*/
|
*/
|
||||||
static int tvfsUnlock(sqlite3_file *pFile, int eLock){
|
static int tvfsUnlock(sqlite3_file *pFile, int eLock){
|
||||||
TestvfsFd *p = tvfsGetFd(pFile);
|
TestvfsFd *pFd = tvfsGetFd(pFile);
|
||||||
return sqlite3OsUnlock(p->pReal, eLock);
|
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 },
|
{ "xClose", TESTVFS_CLOSE_MASK },
|
||||||
{ "xAccess", TESTVFS_ACCESS_MASK },
|
{ "xAccess", TESTVFS_ACCESS_MASK },
|
||||||
{ "xFullPathname", TESTVFS_FULLPATHNAME_MASK },
|
{ "xFullPathname", TESTVFS_FULLPATHNAME_MASK },
|
||||||
|
{ "xUnlock", TESTVFS_UNLOCK_MASK },
|
||||||
};
|
};
|
||||||
Tcl_Obj **apElem = 0;
|
Tcl_Obj **apElem = 0;
|
||||||
int nElem = 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/lock_common.tcl
|
||||||
source $testdir/malloc_common.tcl
|
source $testdir/malloc_common.tcl
|
||||||
source $testdir/wal_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
|
# 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).
|
# manipulated directly using tcl scripts (using the [hexio_write] command).
|
||||||
@ -1382,6 +1383,7 @@ db2 close
|
|||||||
#
|
#
|
||||||
testvfs tv -default 1
|
testvfs tv -default 1
|
||||||
foreach sectorsize {
|
foreach sectorsize {
|
||||||
|
16
|
||||||
32 64 128 256 512 1024 2048
|
32 64 128 256 512 1024 2048
|
||||||
4096 8192 16384 32768 65536 131072 262144
|
4096 8192 16384 32768 65536 131072 262144
|
||||||
} {
|
} {
|
||||||
@ -1404,7 +1406,7 @@ foreach sectorsize {
|
|||||||
COMMIT;
|
COMMIT;
|
||||||
}
|
}
|
||||||
file size test.db-journal
|
file size test.db-journal
|
||||||
} [expr $sectorsize > 65536 ? 65536 : $sectorsize]
|
} [expr $sectorsize > 65536 ? 65536 : ($sectorsize<32 ? 512 : $sectorsize)]
|
||||||
|
|
||||||
do_test pager1-10.$sectorsize.2 {
|
do_test pager1-10.$sectorsize.2 {
|
||||||
execsql {
|
execsql {
|
||||||
@ -2523,4 +2525,211 @@ if {$::tcl_platform(platform)=="unix"} {
|
|||||||
} {one two}
|
} {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
|
finish_test
|
||||||
|
@ -1246,6 +1246,7 @@ do_faultsim_test pagerfault-27 -faults ioerr-persistent -prep {
|
|||||||
faultsim_integrity_check
|
faultsim_integrity_check
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
do_test pagerfault-28-pre {
|
do_test pagerfault-28-pre {
|
||||||
@ -1279,7 +1280,7 @@ do_test pagerfault-28-pre {
|
|||||||
} {1}
|
} {1}
|
||||||
faultsim_save_and_close
|
faultsim_save_and_close
|
||||||
|
|
||||||
do_faultsim_test pagerfault-28 -faults oom* -prep {
|
do_faultsim_test pagerfault-28a -faults oom* -prep {
|
||||||
faultsim_restore_and_reopen
|
faultsim_restore_and_reopen
|
||||||
execsql { PRAGMA mmap_limit=0 }
|
execsql { PRAGMA mmap_limit=0 }
|
||||||
|
|
||||||
@ -1303,5 +1304,185 @@ do_faultsim_test pagerfault-28 -faults oom* -prep {
|
|||||||
faultsim_integrity_check
|
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
|
finish_test
|
||||||
|
|
||||||
|
@ -1569,26 +1569,6 @@ ifcapable autovacuum {
|
|||||||
} [wal_file_size 1 1024]
|
} [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
|
db close
|
||||||
sqlite3_shutdown
|
sqlite3_shutdown
|
||||||
test_sqlite3_log
|
test_sqlite3_log
|
||||||
|
@ -548,6 +548,44 @@ do_faultsim_test walfault-14 -prep {
|
|||||||
set nRow [db eval {SELECT count(*) FROM abc}]
|
set nRow [db eval {SELECT count(*) FROM abc}]
|
||||||
if {!(($nRow==2 && $testrc) || $nRow==3)} { error "Bad db content" }
|
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
|
finish_test
|
||||||
|
Loading…
Reference in New Issue
Block a user