diff -r fcc16690f446 -r b6ab70c1385f persistentstorage/sql/TEST/t_sqlfilebuf64.cpp --- a/persistentstorage/sql/TEST/t_sqlfilebuf64.cpp Tue May 25 14:35:19 2010 +0300 +++ b/persistentstorage/sql/TEST/t_sqlfilebuf64.cpp Wed Jun 09 11:36:09 2010 +0300 @@ -50,6 +50,10 @@ EOomTempTest }; +//Used in read/write OOM tests +const TUint8 KChar = 'A'; +const TInt KPageSize = 32768; + /////////////////////////////////////////////////////////////////////////////////////// void DeleteTestFiles() @@ -1118,6 +1122,140 @@ TheTest.Printf(_L("\r\n===File I/O error simulation test succeeded on iteration %d===\r\n"), cnt); } +/** +@SYMTestCaseID PDS-SQL-UT-4207 +@SYMTestCaseDesc RFileBuf64::Write() OOM test. + The test calls RFileBuf64:Write() in an OOM + simulation loop and verifies that no memory is leaked. + The test also check that RFileBuf::DoSetCapacity() correctly operates in + "out of memory" situation. +@SYMTestActions RFileBuf64::Write() OOM test. +@SYMTestExpectedResults Test must not fail +@SYMTestPriority High +@SYMDEF 380056 +*/ +void WriteOomTest() + { + HBufC8* databuf = HBufC8::New(KPageSize); + TEST(databuf != NULL); + TPtr8 dataptr = databuf->Des(); + dataptr.SetLength(KPageSize); + dataptr.Fill(TChar(KChar)); + + TInt err = KErrNoMemory; + TInt failingAllocationNo = 0; + TheTest.Printf(_L("Iteration:\r\n")); + while(err == KErrNoMemory) + { + TheTest.Printf(_L(" %d"), ++failingAllocationNo); + + (void)TheFs.Delete(KTestFile); + + MarkHandles(); + MarkAllocatedCells(); + + __UHEAP_MARK; + __UHEAP_SETBURSTFAIL(RAllocator::EBurstFailNext, failingAllocationNo, KBurstRate); + + const TInt KDefaultBufCapacity = 1024; + RFileBuf64 fbuf(KDefaultBufCapacity); + err = fbuf.Create(TheFs, KTestFile, EFileWrite | EFileRead); + if(err == KErrNone) + { + err = fbuf.Write(0LL, dataptr); + } + fbuf.Close(); + + __UHEAP_RESET; + __UHEAP_MARKEND; + + CheckAllocatedCells(); + CheckHandles(); + } + TEST2(err, KErrNone); + RFile64 file; + err = file.Open(TheFs, KTestFile, EFileRead); + TEST2(err, KErrNone); + dataptr.Zero(); + err = file.Read(dataptr); + TEST2(err, KErrNone); + file.Close(); + TEST2(dataptr.Length(), KPageSize); + for(TInt i=0;iDes(); + + TInt err = KErrNoMemory; + TInt failingAllocationNo = 0; + TheTest.Printf(_L("Iteration:\r\n")); + while(err == KErrNoMemory) + { + TheTest.Printf(_L(" %d"), ++failingAllocationNo); + + MarkHandles(); + MarkAllocatedCells(); + + __UHEAP_MARK; + __UHEAP_SETBURSTFAIL(RAllocator::EBurstFailNext, failingAllocationNo, KBurstRate); + + const TInt KDefaultBufCapacity = 1024; + RFileBuf64 fbuf(KDefaultBufCapacity); + err = fbuf.Open(TheFs, KTestFile, EFileRead); + if(err == KErrNone) + { + err = fbuf.Read(0LL, dataptr); + } + fbuf.Close(); + + __UHEAP_RESET; + __UHEAP_MARKEND; + + CheckAllocatedCells(); + CheckHandles(); + } + TEST2(err, KErrNone); + RFile64 file; + err = file.Open(TheFs, KTestFile, EFileRead); + TEST2(err, KErrNone); + dataptr.Zero(); + err = file.Read(dataptr); + TEST2(err, KErrNone); + file.Close(); + TEST2(dataptr.Length(), KPageSize); + for(TInt i=0;i