mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Enhancements to test scripts. No code changes.
FossilOrigin-Name: ccab94c10d54e585de918bbf82dec188287d93b2
This commit is contained in:
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
|||||||
C Fix\soff-by-one\sbug\sin\s[c3939d2491]\suncovered\sby\sth3.
|
C Enhancements\sto\stest\sscripts.\sNo\scode\schanges.
|
||||||
D 2013-02-23T17:49:16.450
|
D 2013-02-23T18:58:11.423
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in a48faa9e7dd7d556d84f5456eabe5825dd8a6282
|
F Makefile.in a48faa9e7dd7d556d84f5456eabe5825dd8a6282
|
||||||
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 a992d8c80ea91fbf21fb2dd570db40e77dd7e6ae
|
F src/test_syscall.c a992d8c80ea91fbf21fb2dd570db40e77dd7e6ae
|
||||||
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 c6260ef238c1142c8f8bd402db02216afd182ae3
|
F src/test_vfs.c fb16b2d9938cf0c1afc5a423b55b952fcc024275
|
||||||
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
|
||||||
@ -534,7 +534,7 @@ F test/incrblob_err.test d2562d2771ebffd4b3af89ef64c140dd44371597
|
|||||||
F test/incrblobfault.test 917c0292224c64a56ef7215fd633a3a82f805be0
|
F test/incrblobfault.test 917c0292224c64a56ef7215fd633a3a82f805be0
|
||||||
F test/incrvacuum.test d2a6ddf5e429720b5fe502766af747915ccf6c32
|
F test/incrvacuum.test d2a6ddf5e429720b5fe502766af747915ccf6c32
|
||||||
F test/incrvacuum2.test 379eeb8740b0ef60c372c439ad4cbea20b34bb9b
|
F test/incrvacuum2.test 379eeb8740b0ef60c372c439ad4cbea20b34bb9b
|
||||||
F test/incrvacuum_ioerr.test 22f208d01c528403240e05beecc41dc98ed01637
|
F test/incrvacuum_ioerr.test 293f2714571255539c8c789da2f7de4ec3f7101e
|
||||||
F test/index.test b5429732b3b983fa810e3ac867d7ca85dae35097
|
F test/index.test b5429732b3b983fa810e3ac867d7ca85dae35097
|
||||||
F test/index2.test ee83c6b5e3173a3d7137140d945d9a5d4fdfb9d6
|
F test/index2.test ee83c6b5e3173a3d7137140d945d9a5d4fdfb9d6
|
||||||
F test/index3.test 423a25c789fc8cc51aaf2a4370bbdde2d9e9eed7
|
F test/index3.test 423a25c789fc8cc51aaf2a4370bbdde2d9e9eed7
|
||||||
@ -752,7 +752,7 @@ F test/tclsqlite.test 37a61c2da7e3bfe3b8c1a2867199f6b860df5d43
|
|||||||
F test/tempdb.test 19d0f66e2e3eeffd68661a11c83ba5e6ace9128c
|
F test/tempdb.test 19d0f66e2e3eeffd68661a11c83ba5e6ace9128c
|
||||||
F test/temptable.test 51edd31c65ed1560dd600b1796e8325df96318e2
|
F test/temptable.test 51edd31c65ed1560dd600b1796e8325df96318e2
|
||||||
F test/temptrigger.test 26670ed7a39cf2296a7f0a9e0a1d7bdb7abe936d
|
F test/temptrigger.test 26670ed7a39cf2296a7f0a9e0a1d7bdb7abe936d
|
||||||
F test/tester.tcl 0560b09498876da7714fff680c5d892b9228862f
|
F test/tester.tcl 2918ebca150b67ca25b1682f8ecd857af77fab05
|
||||||
F test/thread001.test 9f22fd3525a307ff42a326b6bc7b0465be1745a5
|
F test/thread001.test 9f22fd3525a307ff42a326b6bc7b0465be1745a5
|
||||||
F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58
|
F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58
|
||||||
F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7
|
F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7
|
||||||
@ -1034,7 +1034,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 b73847f17b7ae1298dfc52de6c4c4bc809bc77a3
|
P 66f9faa9a969d004486ee38d492fb3eda6cdebab
|
||||||
R 34a70e559a11e4b7cf3c06168257f235
|
R 87b39f8ba9e2866ed1adab1a9b990f83
|
||||||
U dan
|
U dan
|
||||||
Z 1b7c8c9ddd8f5c22095277131689ae60
|
Z c23ef7906674057cc290bb43146b99c4
|
||||||
|
@ -1 +1 @@
|
|||||||
66f9faa9a969d004486ee38d492fb3eda6cdebab
|
ccab94c10d54e585de918bbf82dec188287d93b2
|
@ -265,7 +265,8 @@ static void tvfsExecTcl(
|
|||||||
const char *zMethod,
|
const char *zMethod,
|
||||||
Tcl_Obj *arg1,
|
Tcl_Obj *arg1,
|
||||||
Tcl_Obj *arg2,
|
Tcl_Obj *arg2,
|
||||||
Tcl_Obj *arg3
|
Tcl_Obj *arg3,
|
||||||
|
Tcl_Obj *arg4
|
||||||
){
|
){
|
||||||
int rc; /* Return code from Tcl_EvalObj() */
|
int rc; /* Return code from Tcl_EvalObj() */
|
||||||
Tcl_Obj *pEval;
|
Tcl_Obj *pEval;
|
||||||
@ -282,6 +283,7 @@ static void tvfsExecTcl(
|
|||||||
if( arg1 ) Tcl_ListObjAppendElement(p->interp, pEval, arg1);
|
if( arg1 ) Tcl_ListObjAppendElement(p->interp, pEval, arg1);
|
||||||
if( arg2 ) Tcl_ListObjAppendElement(p->interp, pEval, arg2);
|
if( arg2 ) Tcl_ListObjAppendElement(p->interp, pEval, arg2);
|
||||||
if( arg3 ) Tcl_ListObjAppendElement(p->interp, pEval, arg3);
|
if( arg3 ) Tcl_ListObjAppendElement(p->interp, pEval, arg3);
|
||||||
|
if( arg4 ) Tcl_ListObjAppendElement(p->interp, pEval, arg4);
|
||||||
|
|
||||||
rc = Tcl_EvalObjEx(p->interp, pEval, TCL_EVAL_GLOBAL);
|
rc = Tcl_EvalObjEx(p->interp, pEval, TCL_EVAL_GLOBAL);
|
||||||
if( rc!=TCL_OK ){
|
if( rc!=TCL_OK ){
|
||||||
@ -302,7 +304,7 @@ static int tvfsClose(sqlite3_file *pFile){
|
|||||||
|
|
||||||
if( p->pScript && p->mask&TESTVFS_CLOSE_MASK ){
|
if( p->pScript && p->mask&TESTVFS_CLOSE_MASK ){
|
||||||
tvfsExecTcl(p, "xClose",
|
tvfsExecTcl(p, "xClose",
|
||||||
Tcl_NewStringObj(pFd->zFilename, -1), pFd->pShmId, 0
|
Tcl_NewStringObj(pFd->zFilename, -1), pFd->pShmId, 0, 0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,7 +335,7 @@ static int tvfsRead(
|
|||||||
Testvfs *p = (Testvfs *)pFd->pVfs->pAppData;
|
Testvfs *p = (Testvfs *)pFd->pVfs->pAppData;
|
||||||
if( p->pScript && p->mask&TESTVFS_READ_MASK ){
|
if( p->pScript && p->mask&TESTVFS_READ_MASK ){
|
||||||
tvfsExecTcl(p, "xRead",
|
tvfsExecTcl(p, "xRead",
|
||||||
Tcl_NewStringObj(pFd->zFilename, -1), pFd->pShmId, 0
|
Tcl_NewStringObj(pFd->zFilename, -1), pFd->pShmId, 0, 0
|
||||||
);
|
);
|
||||||
tvfsResultCode(p, &rc);
|
tvfsResultCode(p, &rc);
|
||||||
}
|
}
|
||||||
@ -362,7 +364,7 @@ static int tvfsWrite(
|
|||||||
if( p->pScript && p->mask&TESTVFS_WRITE_MASK ){
|
if( p->pScript && p->mask&TESTVFS_WRITE_MASK ){
|
||||||
tvfsExecTcl(p, "xWrite",
|
tvfsExecTcl(p, "xWrite",
|
||||||
Tcl_NewStringObj(pFd->zFilename, -1), pFd->pShmId,
|
Tcl_NewStringObj(pFd->zFilename, -1), pFd->pShmId,
|
||||||
Tcl_NewWideIntObj(iOfst)
|
Tcl_NewWideIntObj(iOfst), Tcl_NewIntObj(iAmt)
|
||||||
);
|
);
|
||||||
tvfsResultCode(p, &rc);
|
tvfsResultCode(p, &rc);
|
||||||
}
|
}
|
||||||
@ -390,7 +392,7 @@ static int tvfsTruncate(sqlite3_file *pFile, sqlite_int64 size){
|
|||||||
|
|
||||||
if( p->pScript && p->mask&TESTVFS_TRUNCATE_MASK ){
|
if( p->pScript && p->mask&TESTVFS_TRUNCATE_MASK ){
|
||||||
tvfsExecTcl(p, "xTruncate",
|
tvfsExecTcl(p, "xTruncate",
|
||||||
Tcl_NewStringObj(pFd->zFilename, -1), pFd->pShmId, 0
|
Tcl_NewStringObj(pFd->zFilename, -1), pFd->pShmId, 0, 0
|
||||||
);
|
);
|
||||||
tvfsResultCode(p, &rc);
|
tvfsResultCode(p, &rc);
|
||||||
}
|
}
|
||||||
@ -431,7 +433,7 @@ static int tvfsSync(sqlite3_file *pFile, int flags){
|
|||||||
|
|
||||||
tvfsExecTcl(p, "xSync",
|
tvfsExecTcl(p, "xSync",
|
||||||
Tcl_NewStringObj(pFd->zFilename, -1), pFd->pShmId,
|
Tcl_NewStringObj(pFd->zFilename, -1), pFd->pShmId,
|
||||||
Tcl_NewStringObj(zFlags, -1)
|
Tcl_NewStringObj(zFlags, -1), 0
|
||||||
);
|
);
|
||||||
tvfsResultCode(p, &rc);
|
tvfsResultCode(p, &rc);
|
||||||
}
|
}
|
||||||
@ -578,7 +580,7 @@ static int tvfsOpen(
|
|||||||
z += strlen(z) + 1;
|
z += strlen(z) + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tvfsExecTcl(p, "xOpen", Tcl_NewStringObj(pFd->zFilename, -1), pArg, 0);
|
tvfsExecTcl(p, "xOpen", Tcl_NewStringObj(pFd->zFilename, -1), pArg, 0, 0);
|
||||||
Tcl_DecrRefCount(pArg);
|
Tcl_DecrRefCount(pArg);
|
||||||
if( tvfsResultCode(p, &rc) ){
|
if( tvfsResultCode(p, &rc) ){
|
||||||
if( rc!=SQLITE_OK ) return rc;
|
if( rc!=SQLITE_OK ) return rc;
|
||||||
@ -635,7 +637,7 @@ static int tvfsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
|
|||||||
|
|
||||||
if( p->pScript && p->mask&TESTVFS_DELETE_MASK ){
|
if( p->pScript && p->mask&TESTVFS_DELETE_MASK ){
|
||||||
tvfsExecTcl(p, "xDelete",
|
tvfsExecTcl(p, "xDelete",
|
||||||
Tcl_NewStringObj(zPath, -1), Tcl_NewIntObj(dirSync), 0
|
Tcl_NewStringObj(zPath, -1), Tcl_NewIntObj(dirSync), 0, 0
|
||||||
);
|
);
|
||||||
tvfsResultCode(p, &rc);
|
tvfsResultCode(p, &rc);
|
||||||
}
|
}
|
||||||
@ -663,7 +665,7 @@ static int tvfsAccess(
|
|||||||
if( flags==SQLITE_ACCESS_READWRITE ) zArg = "SQLITE_ACCESS_READWRITE";
|
if( flags==SQLITE_ACCESS_READWRITE ) zArg = "SQLITE_ACCESS_READWRITE";
|
||||||
if( flags==SQLITE_ACCESS_READ ) zArg = "SQLITE_ACCESS_READ";
|
if( flags==SQLITE_ACCESS_READ ) zArg = "SQLITE_ACCESS_READ";
|
||||||
tvfsExecTcl(p, "xAccess",
|
tvfsExecTcl(p, "xAccess",
|
||||||
Tcl_NewStringObj(zPath, -1), Tcl_NewStringObj(zArg, -1), 0
|
Tcl_NewStringObj(zPath, -1), Tcl_NewStringObj(zArg, -1), 0, 0
|
||||||
);
|
);
|
||||||
if( tvfsResultCode(p, &rc) ){
|
if( tvfsResultCode(p, &rc) ){
|
||||||
if( rc!=SQLITE_OK ) return rc;
|
if( rc!=SQLITE_OK ) return rc;
|
||||||
@ -691,7 +693,7 @@ static int tvfsFullPathname(
|
|||||||
Testvfs *p = (Testvfs *)pVfs->pAppData;
|
Testvfs *p = (Testvfs *)pVfs->pAppData;
|
||||||
if( p->pScript && p->mask&TESTVFS_FULLPATHNAME_MASK ){
|
if( p->pScript && p->mask&TESTVFS_FULLPATHNAME_MASK ){
|
||||||
int rc;
|
int rc;
|
||||||
tvfsExecTcl(p, "xFullPathname", Tcl_NewStringObj(zPath, -1), 0, 0);
|
tvfsExecTcl(p, "xFullPathname", Tcl_NewStringObj(zPath, -1), 0, 0, 0);
|
||||||
if( tvfsResultCode(p, &rc) ){
|
if( tvfsResultCode(p, &rc) ){
|
||||||
if( rc!=SQLITE_OK ) return rc;
|
if( rc!=SQLITE_OK ) return rc;
|
||||||
}
|
}
|
||||||
@ -771,7 +773,7 @@ static int tvfsShmOpen(sqlite3_file *pFile){
|
|||||||
*/
|
*/
|
||||||
Tcl_ResetResult(p->interp);
|
Tcl_ResetResult(p->interp);
|
||||||
if( p->pScript && p->mask&TESTVFS_SHMOPEN_MASK ){
|
if( p->pScript && p->mask&TESTVFS_SHMOPEN_MASK ){
|
||||||
tvfsExecTcl(p, "xShmOpen", Tcl_NewStringObj(pFd->zFilename, -1), 0, 0);
|
tvfsExecTcl(p, "xShmOpen", Tcl_NewStringObj(pFd->zFilename, -1), 0, 0, 0);
|
||||||
if( tvfsResultCode(p, &rc) ){
|
if( tvfsResultCode(p, &rc) ){
|
||||||
if( rc!=SQLITE_OK ) return rc;
|
if( rc!=SQLITE_OK ) return rc;
|
||||||
}
|
}
|
||||||
@ -841,7 +843,7 @@ static int tvfsShmMap(
|
|||||||
Tcl_ListObjAppendElement(p->interp, pArg, Tcl_NewIntObj(pgsz));
|
Tcl_ListObjAppendElement(p->interp, pArg, Tcl_NewIntObj(pgsz));
|
||||||
Tcl_ListObjAppendElement(p->interp, pArg, Tcl_NewIntObj(isWrite));
|
Tcl_ListObjAppendElement(p->interp, pArg, Tcl_NewIntObj(isWrite));
|
||||||
tvfsExecTcl(p, "xShmMap",
|
tvfsExecTcl(p, "xShmMap",
|
||||||
Tcl_NewStringObj(pFd->pShm->zFile, -1), pFd->pShmId, pArg
|
Tcl_NewStringObj(pFd->pShm->zFile, -1), pFd->pShmId, pArg, 0
|
||||||
);
|
);
|
||||||
tvfsResultCode(p, &rc);
|
tvfsResultCode(p, &rc);
|
||||||
Tcl_DecrRefCount(pArg);
|
Tcl_DecrRefCount(pArg);
|
||||||
@ -891,7 +893,7 @@ static int tvfsShmLock(
|
|||||||
}
|
}
|
||||||
tvfsExecTcl(p, "xShmLock",
|
tvfsExecTcl(p, "xShmLock",
|
||||||
Tcl_NewStringObj(pFd->pShm->zFile, -1), pFd->pShmId,
|
Tcl_NewStringObj(pFd->pShm->zFile, -1), pFd->pShmId,
|
||||||
Tcl_NewStringObj(zLock, -1)
|
Tcl_NewStringObj(zLock, -1), 0
|
||||||
);
|
);
|
||||||
tvfsResultCode(p, &rc);
|
tvfsResultCode(p, &rc);
|
||||||
}
|
}
|
||||||
@ -937,7 +939,7 @@ static void tvfsShmBarrier(sqlite3_file *pFile){
|
|||||||
|
|
||||||
if( p->pScript && p->mask&TESTVFS_SHMBARRIER_MASK ){
|
if( p->pScript && p->mask&TESTVFS_SHMBARRIER_MASK ){
|
||||||
tvfsExecTcl(p, "xShmBarrier",
|
tvfsExecTcl(p, "xShmBarrier",
|
||||||
Tcl_NewStringObj(pFd->pShm->zFile, -1), pFd->pShmId, 0
|
Tcl_NewStringObj(pFd->pShm->zFile, -1), pFd->pShmId, 0, 0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -961,7 +963,7 @@ static int tvfsShmUnmap(
|
|||||||
|
|
||||||
if( p->pScript && p->mask&TESTVFS_SHMCLOSE_MASK ){
|
if( p->pScript && p->mask&TESTVFS_SHMCLOSE_MASK ){
|
||||||
tvfsExecTcl(p, "xShmUnmap",
|
tvfsExecTcl(p, "xShmUnmap",
|
||||||
Tcl_NewStringObj(pFd->pShm->zFile, -1), pFd->pShmId, 0
|
Tcl_NewStringObj(pFd->pShm->zFile, -1), pFd->pShmId, 0, 0
|
||||||
);
|
);
|
||||||
tvfsResultCode(p, &rc);
|
tvfsResultCode(p, &rc);
|
||||||
}
|
}
|
||||||
|
@ -139,8 +139,8 @@ ifcapable shared_cache {
|
|||||||
# Figure out how big the database is and how many free pages it
|
# Figure out how big the database is and how many free pages it
|
||||||
# has before running incremental-vacuum.
|
# has before running incremental-vacuum.
|
||||||
#
|
#
|
||||||
set nPage [expr {[file size test.db]/1024}]
|
|
||||||
set nFree [execsql {pragma freelist_count} db1]
|
set nFree [execsql {pragma freelist_count} db1]
|
||||||
|
set nPage [execsql {pragma page_count} db1]
|
||||||
|
|
||||||
# Now run incremental-vacuum to vacuum 5 pages from the db file.
|
# Now run incremental-vacuum to vacuum 5 pages from the db file.
|
||||||
# The iTest'th I/O call is set to fail.
|
# The iTest'th I/O call is set to fail.
|
||||||
@ -158,7 +158,7 @@ ifcapable shared_cache {
|
|||||||
set ::sqlite_io_error_hardhit 0
|
set ::sqlite_io_error_hardhit 0
|
||||||
|
|
||||||
set nFree2 [execsql {pragma freelist_count} db1]
|
set nFree2 [execsql {pragma freelist_count} db1]
|
||||||
set nPage2 [expr {[file size test.db]/1024}]
|
set nPage2 [execsql {pragma page_count} db1]
|
||||||
|
|
||||||
do_test incrvacuum-ioerr-4.$iTest.2 {
|
do_test incrvacuum-ioerr-4.$iTest.2 {
|
||||||
set shrink [expr {$nPage-$nPage2}]
|
set shrink [expr {$nPage-$nPage2}]
|
||||||
|
@ -1118,6 +1118,25 @@ proc crashsql {args} {
|
|||||||
lappend r $msg
|
lappend r $msg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc run_ioerr_prep {} {
|
||||||
|
set ::sqlite_io_error_pending 0
|
||||||
|
catch {db close}
|
||||||
|
catch {db2 close}
|
||||||
|
catch {forcedelete test.db}
|
||||||
|
catch {forcedelete test.db-journal}
|
||||||
|
catch {forcedelete test2.db}
|
||||||
|
catch {forcedelete test2.db-journal}
|
||||||
|
set ::DB [sqlite3 db test.db; sqlite3_connection_pointer db]
|
||||||
|
sqlite3_extended_result_codes $::DB $::ioerropts(-erc)
|
||||||
|
if {[info exists ::ioerropts(-tclprep)]} {
|
||||||
|
eval $::ioerropts(-tclprep)
|
||||||
|
}
|
||||||
|
if {[info exists ::ioerropts(-sqlprep)]} {
|
||||||
|
execsql $::ioerropts(-sqlprep)
|
||||||
|
}
|
||||||
|
expr 0
|
||||||
|
}
|
||||||
|
|
||||||
# Usage: do_ioerr_test <test number> <options...>
|
# Usage: do_ioerr_test <test number> <options...>
|
||||||
#
|
#
|
||||||
# This proc is used to implement test cases that check that IO errors
|
# This proc is used to implement test cases that check that IO errors
|
||||||
@ -1150,10 +1169,26 @@ proc do_ioerr_test {testname args} {
|
|||||||
# TEMPORARY: For 3.5.9, disable testing of extended result codes. There are
|
# TEMPORARY: For 3.5.9, disable testing of extended result codes. There are
|
||||||
# a couple of obscure IO errors that do not return them.
|
# a couple of obscure IO errors that do not return them.
|
||||||
set ::ioerropts(-erc) 0
|
set ::ioerropts(-erc) 0
|
||||||
|
|
||||||
|
# Create a single TCL script from the TCL and SQL specified
|
||||||
|
# as the body of the test.
|
||||||
|
set ::ioerrorbody {}
|
||||||
|
if {[info exists ::ioerropts(-tclbody)]} {
|
||||||
|
append ::ioerrorbody "$::ioerropts(-tclbody)\n"
|
||||||
|
}
|
||||||
|
if {[info exists ::ioerropts(-sqlbody)]} {
|
||||||
|
append ::ioerrorbody "db eval {$::ioerropts(-sqlbody)}"
|
||||||
|
}
|
||||||
|
|
||||||
|
save_prng_state
|
||||||
|
if {$::ioerropts(-cksum)} {
|
||||||
|
run_ioerr_prep
|
||||||
|
eval $::ioerrorbody
|
||||||
|
set ::goodcksum [cksum]
|
||||||
|
}
|
||||||
|
|
||||||
set ::go 1
|
set ::go 1
|
||||||
#reset_prng_state
|
#reset_prng_state
|
||||||
save_prng_state
|
|
||||||
for {set n $::ioerropts(-start)} {$::go} {incr n} {
|
for {set n $::ioerropts(-start)} {$::go} {incr n} {
|
||||||
set ::TN $n
|
set ::TN $n
|
||||||
incr ::ioerropts(-count) -1
|
incr ::ioerropts(-count) -1
|
||||||
@ -1170,27 +1205,12 @@ proc do_ioerr_test {testname args} {
|
|||||||
# Delete the files test.db and test2.db, then execute the TCL and
|
# Delete the files test.db and test2.db, then execute the TCL and
|
||||||
# SQL (in that order) to prepare for the test case.
|
# SQL (in that order) to prepare for the test case.
|
||||||
do_test $testname.$n.1 {
|
do_test $testname.$n.1 {
|
||||||
set ::sqlite_io_error_pending 0
|
run_ioerr_prep
|
||||||
catch {db close}
|
|
||||||
catch {db2 close}
|
|
||||||
catch {forcedelete test.db}
|
|
||||||
catch {forcedelete test.db-journal}
|
|
||||||
catch {forcedelete test2.db}
|
|
||||||
catch {forcedelete test2.db-journal}
|
|
||||||
set ::DB [sqlite3 db test.db; sqlite3_connection_pointer db]
|
|
||||||
sqlite3_extended_result_codes $::DB $::ioerropts(-erc)
|
|
||||||
if {[info exists ::ioerropts(-tclprep)]} {
|
|
||||||
eval $::ioerropts(-tclprep)
|
|
||||||
}
|
|
||||||
if {[info exists ::ioerropts(-sqlprep)]} {
|
|
||||||
execsql $::ioerropts(-sqlprep)
|
|
||||||
}
|
|
||||||
expr 0
|
|
||||||
} {0}
|
} {0}
|
||||||
|
|
||||||
# Read the 'checksum' of the database.
|
# Read the 'checksum' of the database.
|
||||||
if {$::ioerropts(-cksum)} {
|
if {$::ioerropts(-cksum)} {
|
||||||
set checksum [cksum]
|
set ::checksum [cksum]
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set the Nth IO error to fail.
|
# Set the Nth IO error to fail.
|
||||||
@ -1198,20 +1218,10 @@ proc do_ioerr_test {testname args} {
|
|||||||
set ::sqlite_io_error_persist $::ioerropts(-persist)
|
set ::sqlite_io_error_persist $::ioerropts(-persist)
|
||||||
set ::sqlite_io_error_pending $n
|
set ::sqlite_io_error_pending $n
|
||||||
}] $n
|
}] $n
|
||||||
|
|
||||||
# Create a single TCL script from the TCL and SQL specified
|
|
||||||
# as the body of the test.
|
|
||||||
set ::ioerrorbody {}
|
|
||||||
if {[info exists ::ioerropts(-tclbody)]} {
|
|
||||||
append ::ioerrorbody "$::ioerropts(-tclbody)\n"
|
|
||||||
}
|
|
||||||
if {[info exists ::ioerropts(-sqlbody)]} {
|
|
||||||
append ::ioerrorbody "db eval {$::ioerropts(-sqlbody)}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Execute the TCL Script created in the above block. If
|
# Execute the TCL script created for the body of this test. If
|
||||||
# there are at least N IO operations performed by SQLite as
|
# at least N IO operations performed by SQLite as a result of
|
||||||
# a result of the script, the Nth will fail.
|
# the script, the Nth will fail.
|
||||||
do_test $testname.$n.3 {
|
do_test $testname.$n.3 {
|
||||||
set ::sqlite_io_error_hit 0
|
set ::sqlite_io_error_hit 0
|
||||||
set ::sqlite_io_error_hardhit 0
|
set ::sqlite_io_error_hardhit 0
|
||||||
@ -1315,8 +1325,15 @@ proc do_ioerr_test {testname args} {
|
|||||||
catch {db close}
|
catch {db close}
|
||||||
catch {db2 close}
|
catch {db2 close}
|
||||||
set ::DB [sqlite3 db test.db; sqlite3_connection_pointer db]
|
set ::DB [sqlite3 db test.db; sqlite3_connection_pointer db]
|
||||||
cksum
|
set nowcksum [cksum]
|
||||||
} $checksum
|
set res [expr {$nowcksum==$::checksum || $nowcksum==$::goodcksum}]
|
||||||
|
if {$res==0} {
|
||||||
|
puts "now=$nowcksum"
|
||||||
|
puts "the=$::checksum"
|
||||||
|
puts "fwd=$::goodcksum"
|
||||||
|
}
|
||||||
|
set res
|
||||||
|
} 1
|
||||||
}
|
}
|
||||||
|
|
||||||
set ::sqlite_io_error_hardhit 0
|
set ::sqlite_io_error_hardhit 0
|
||||||
|
Reference in New Issue
Block a user