diff options
author | dan <dan@noemail.net> | 2010-06-19 17:26:37 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2010-06-19 17:26:37 +0000 |
commit | 146ed78b7818b43845ae44d3cbb12c7c80183be5 (patch) | |
tree | 7eb9f83718496ada212e817794b621458a075a2d /src | |
parent | de4996e2ee8662ac7e875c4591bca9115b25f13f (diff) | |
download | sqlite-146ed78b7818b43845ae44d3cbb12c7c80183be5.tar.gz sqlite-146ed78b7818b43845ae44d3cbb12c7c80183be5.zip |
Add tests to pager1.test and pagerfault.test.
FossilOrigin-Name: f5df83fd875073eee8e2269e87e2a8c9c7abc981
Diffstat (limited to 'src')
-rw-r--r-- | src/test_vfs.c | 75 |
1 files changed, 62 insertions, 13 deletions
diff --git a/src/test_vfs.c b/src/test_vfs.c index 8a0095d87..2d4dad786 100644 --- a/src/test_vfs.c +++ b/src/test_vfs.c @@ -59,6 +59,10 @@ struct Testvfs { int ioerr; int nIoerrFail; + int iFullCnt; + int fullerr; + int nFullFail; + int iDevchar; int iSectorsize; }; @@ -193,6 +197,30 @@ static int tvfsResultCode(Testvfs *p, int *pRc){ return 0; } +static int tvfsInjectIoerr(Testvfs *p){ + int ret = 0; + if( p->ioerr ){ + p->iIoerrCnt--; + if( p->iIoerrCnt==0 || (p->iIoerrCnt<0 && p->ioerr==2) ){ + ret = 1; + p->nIoerrFail++; + } + } + return ret; +} + +static int tvfsInjectFullerr(Testvfs *p){ + int ret = 0; + if( p->fullerr ){ + p->iFullCnt--; + if( p->iFullCnt<=0 ){ + ret = 1; + p->nFullFail++; + } + } + return ret; +} + static void tvfsExecTcl( Testvfs *p, @@ -302,6 +330,8 @@ static int tvfsWrite( ); tvfsResultCode(p, &rc); } + + if( rc==SQLITE_OK && tvfsInjectFullerr(p) ) rc = SQLITE_FULL; if( rc==SQLITE_OK ){ rc = sqlite3OsWrite(pFd->pReal, zBuf, iAmt, iOfst); @@ -365,6 +395,8 @@ static int tvfsSync(sqlite3_file *pFile, int flags){ tvfsResultCode(p, &rc); } + if( rc==SQLITE_OK && tvfsInjectFullerr(p) ) rc = SQLITE_FULL; + if( rc==SQLITE_OK ){ rc = sqlite3OsSync(pFd->pReal, flags); } @@ -603,18 +635,6 @@ static int tvfsCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut){ return PARENTVFS(pVfs)->xCurrentTime(PARENTVFS(pVfs), pTimeOut); } -static int tvfsInjectIoerr(Testvfs *p){ - int ret = 0; - if( p->ioerr ){ - p->iIoerrCnt--; - if( p->iIoerrCnt==0 || (p->iIoerrCnt<0 && p->ioerr==2) ){ - ret = 1; - p->nIoerrFail++; - } - } - return ret; -} - static int tvfsShmOpen( sqlite3_file *pFileDes ){ @@ -832,7 +852,7 @@ static int testvfs_obj_cmd( enum DB_enum { CMD_SHM, CMD_DELETE, CMD_FILTER, CMD_IOERR, CMD_SCRIPT, - CMD_DEVCHAR, CMD_SECTORSIZE + CMD_DEVCHAR, CMD_SECTORSIZE, CMD_FULLERR }; struct TestvfsSubcmd { char *zName; @@ -842,6 +862,7 @@ static int testvfs_obj_cmd( { "delete", CMD_DELETE }, { "filter", CMD_FILTER }, { "ioerr", CMD_IOERR }, + { "fullerr", CMD_FULLERR }, { "script", CMD_SCRIPT }, { "devchar", CMD_DEVCHAR }, { "sectorsize", CMD_SECTORSIZE }, @@ -979,6 +1000,34 @@ static int testvfs_obj_cmd( } /* + ** TESTVFS fullerr ?IFAIL? + ** + ** Where IFAIL is an integer. + */ + case CMD_FULLERR: { + int iRet = p->nFullFail; + + p->nFullFail = 0; + p->fullerr = 0; + p->iFullCnt = 0; + + if( objc==3 ){ + int iCnt; + if( TCL_OK!=Tcl_GetIntFromObj(interp, objv[2], &iCnt) ){ + return TCL_ERROR; + } + p->fullerr = (iCnt>0); + p->iFullCnt = iCnt; + }else if( objc!=2 ){ + Tcl_AppendResult(interp, "Bad args", 0); + return TCL_ERROR; + } + + Tcl_SetObjResult(interp, Tcl_NewIntObj(iRet)); + break; + } + + /* ** TESTVFS ioerr ?IFAIL PERSIST? ** ** Where IFAIL is an integer and PERSIST is boolean. |