diff -r 211563e4b919 -r 6b6fd149daa2 persistentstorage/sql/TEST/t_sqlfilebuf64.cpp --- a/persistentstorage/sql/TEST/t_sqlfilebuf64.cpp Wed Apr 14 17:46:32 2010 +0300 +++ b/persistentstorage/sql/TEST/t_sqlfilebuf64.cpp Tue Apr 27 18:25:57 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of "Eclipse Public License v1.0" @@ -30,6 +30,7 @@ _LIT(KTestDir, "c:\\test\\"); _LIT(KTestFile, "c:\\test\\t_sqlfilebuf64.bin"); _LIT(KTestFile2, "\\test\\t_sqlfilebuf64_2.bin"); +_LIT(KTestFile3, "c:\\test\\t_sqlfilebuf64_3.bin"); static TBuf8<1024> TheBuf; static TFileName TheDbName; @@ -57,6 +58,7 @@ { (void)TheFs.Delete(TheDbName); } + (void)TheFs.Delete(KTestFile3); (void)TheFs.Delete(KTestFile); } @@ -508,7 +510,7 @@ const TInt KBufMaxSize = 20;// This is half the file size RFileBuf64 fbuf(KBufMaxSize); TInt err = fbuf.Open(TheFs, KTestFile, EFileWrite | EFileRead | EFileShareReadersOrWriters); - TEST2(err, KErrNone); + TEST2(err, KErrNone); fbuf.ProfilerReset(); //Zero max length request @@ -521,7 +523,7 @@ TEST2(fbuf.iFileReadCount, 0); TEST2(fbuf.iFileReadAmount, 0); TEST2(fbuf.iFileSizeCount, 0); - + //Too big request TBuf8 buf2; err = fbuf.Read(0, buf2); @@ -536,6 +538,30 @@ TEST2(err, KErrNone); TEST2(buf2.Length(), 0); + //Write "5678" in the buffer, pos [4..8) + err = fbuf.Write(4, _L8("5678")); + TEST2(err, KErrNone); + + //Too big request. There are pending data in the buffer. + TBuf8 buf3; + err = fbuf.Read(1, buf3); + TEST2(err, KErrNone); + VerifyFileContent(buf3, 1); + + //Read from a non-zero file position to move the buffer start pos. The cached file pos will be 35 at the end. + TBuf8<5> buf4; + err = fbuf.Read(30, buf4); + TEST2(err, KErrNone); + VerifyFileContent(buf4, 30); + err = fbuf.Read(35, buf4); + TEST2(err, KErrNone); + VerifyFileContent(buf4, 35); + + //Too big request. No pending data in the buffer. The file read pos is before the position of the cached data in the buffer. + err = fbuf.Read(10, buf3); + TEST2(err, KErrNone); + VerifyFileContent(buf3, 10); + fbuf.Close(); } @@ -981,6 +1007,113 @@ (void)TheFs.Delete(KTestFile); } +/** +@SYMTestCaseID PDS-SQL-UT-4195 +@SYMTestCaseDesc RFileBuf64::Create() file I/O error simulation test. + The test calls RFileBuf64:Create() in a file I/O error simulation loop. +@SYMTestActions RFileBuf64::Create() file I/O error simulation test. +@SYMTestExpectedResults Test must not fail +@SYMTestPriority High +@SYMDEF DEF145198 +*/ +void CreateFileIoErrTest() + { + TInt err = KErrGeneral; + TInt cnt = 0; + for(;err=KErrBadName;--fsError) + { + TheTest.Printf(_L("%d "), fsError); + __UHEAP_MARK; + (void)TheFs.SetErrorCondition(fsError, cnt); + RFileBuf64 fbuf(1024);//buffer capacity = 1024 bytes + err = fbuf.Create(TheFs, KTestFile3, EFileRead | EFileWrite); + (void)TheFs.SetErrorCondition(KErrNone); + fbuf.Close(); + __UHEAP_MARKEND; + TInt err2 = TheFs.Delete(KTestFile3); + TInt expectedErr = err == KErrNone ? KErrNone : KErrNotFound; + TEST2(err2, expectedErr); + } + TheTest.Printf(_L("\r\n")); + } + TheTest.Printf(_L("\r\n===File I/O error simulation test succeeded on iteration %d===\r\n"), cnt); + } + +/** +@SYMTestCaseID PDS-SQL-UT-4196 +@SYMTestCaseDesc RFileBuf64::Open() file I/O error simulation test. + The test calls RFileBuf64:Open() in a file I/O error simulation loop. +@SYMTestActions RFileBuf64::Open() file I/O error simulation test. +@SYMTestExpectedResults Test must not fail +@SYMTestPriority High +@SYMDEF DEF145198 +*/ +void OpenFileIoErrTest() + { + RFileBuf64 fbuf(1024);//buffer capacity = 1024 bytes + TInt err = fbuf.Create(TheFs, KTestFile3, EFileRead | EFileWrite); + fbuf.Close(); + TEST2(err, KErrNone); + err = KErrGeneral; + TInt cnt = 0; + for(;err=KErrBadName;--fsError) + { + TheTest.Printf(_L("%d "), fsError); + __UHEAP_MARK; + (void)TheFs.SetErrorCondition(fsError, cnt); + err = fbuf.Open(TheFs, KTestFile3, EFileRead | EFileWrite); + (void)TheFs.SetErrorCondition(KErrNone); + fbuf.Close(); + __UHEAP_MARKEND; + } + TheTest.Printf(_L("\r\n")); + } + TheTest.Printf(_L("\r\n===File I/O error simulation test succeeded on iteration %d===\r\n"), cnt); + (void)TheFs.Delete(KTestFile3); + } + +/** +@SYMTestCaseID PDS-SQL-UT-4197 +@SYMTestCaseDesc RFileBuf64::Temp() file I/O error simulation test. + The test calls RFileBuf64:Temp() in a file I/O error simulation loop. +@SYMTestActions RFileBuf64::temp() file I/O error simulation test. +@SYMTestExpectedResults Test must not fail +@SYMTestPriority High +@SYMDEF DEF145198 +*/ +void TempFileIoErrTest() + { + TInt err = KErrGeneral; + TInt cnt = 0; + for(;err=KErrBadName;--fsError) + { + TheTest.Printf(_L("%d "), fsError); + __UHEAP_MARK; + (void)TheFs.SetErrorCondition(fsError, cnt); + RFileBuf64 fbuf(1024);//buffer capacity = 1024 bytes + TFileName tmpFileName; + err = fbuf.Temp(TheFs, KTestDir, tmpFileName, EFileWrite | EFileRead); + (void)TheFs.SetErrorCondition(KErrNone); + fbuf.Close(); + __UHEAP_MARKEND; + TInt err2 = TheFs.Delete(tmpFileName); + TInt expectedErr = err == KErrNone ? KErrNone : KErrNotFound; + TEST2(err2, expectedErr); + } + TheTest.Printf(_L("\r\n")); + } + TheTest.Printf(_L("\r\n===File I/O error simulation test succeeded on iteration %d===\r\n"), cnt); + } + void DoTests() { TheTest.Start(_L(" @SYMTestCaseID:PDS-SQL-UT-4132 RFileBuf64 write test 1")); @@ -1015,6 +1148,13 @@ OomTest(EOomOpenTest); TheTest.Next( _L(" @SYMTestCaseID:PDS-SQL-UT-4142 RFileBuf64::Temp() OOM test")); OomTest(EOomTempTest); + + TheTest.Next( _L(" @SYMTestCaseID:PDS-SQL-UT-4195 RFileBuf64::Create() file I/O error simulation test")); + CreateFileIoErrTest(); + TheTest.Next( _L(" @SYMTestCaseID:PDS-SQL-UT-4196 RFileBuf64::Open() file I/O error simulation test")); + OpenFileIoErrTest(); + TheTest.Next( _L(" @SYMTestCaseID:PDS-SQL-UT-4197 RFileBuf64::Temp() file I/O error simulation test")); + OpenFileIoErrTest(); } TInt E32Main()