107 { |
117 { |
108 TEntry entry; |
118 TEntry entry; |
109 err = fsSession.Entry(aFullName, entry); |
119 err = fsSession.Entry(aFullName, entry); |
110 if(err == KErrNone) |
120 if(err == KErrNone) |
111 { |
121 { |
112 RDebug::Print(_L("Deleting \"%S\" file.\n"), &aFullName); |
122 TheTest.Printf(_L("Deleting \"%S\" file.\n"), &aFullName); |
113 err = fsSession.SetAtt(aFullName, 0, KEntryAttReadOnly); |
123 err = fsSession.SetAtt(aFullName, 0, KEntryAttReadOnly); |
114 if(err != KErrNone) |
124 if(err != KErrNone) |
115 { |
125 { |
116 RDebug::Print(_L("Error %d changing \"%S\" file attributes.\n"), err, &aFullName); |
126 TheTest.Printf(_L("Error %d changing \"%S\" file attributes.\n"), err, &aFullName); |
117 } |
127 } |
118 err = fsSession.Delete(aFullName); |
128 err = fsSession.Delete(aFullName); |
119 if(err != KErrNone) |
129 if(err != KErrNone) |
120 { |
130 { |
121 RDebug::Print(_L("Error %d deleting \"%S\" file.\n"), err, &aFullName); |
131 TheTest.Printf(_L("Error %d deleting \"%S\" file.\n"), err, &aFullName); |
122 } |
132 } |
123 } |
133 } |
124 fsSession.Close(); |
134 fsSession.Close(); |
125 } |
135 } |
126 else |
136 else |
127 { |
137 { |
128 RDebug::Print(_L("Error %d connecting file session. File: %S.\n"), err, &aFullName); |
138 TheTest.Printf(_L("Error %d connecting file session. File: %S.\n"), err, &aFullName); |
129 } |
139 } |
130 return err; |
140 return err; |
131 } |
141 } |
132 |
142 |
133 //Deletes large data files only |
143 //Deletes large data files only |
134 static void DeleteLargeDataFiles() |
144 static void DeleteLargeDataFiles() |
135 { |
145 { |
136 for(TInt i=0;i<1000;++i) |
146 for(TInt i=0;i<1000;++i) |
137 { |
147 { |
138 TBuf<KMaxFileName> filePath; |
148 TBuf<KMaxFileName> filePath; |
139 AssembleLargeFileName(KLargeFileName, i, filePath); |
149 AssembleLargeFileName(TheLargeFileName, i, filePath); |
140 if(DeleteDataFile(filePath) != KErrNone) |
150 if(DeleteDataFile(filePath) != KErrNone) |
141 { |
151 { |
142 break; |
152 break; |
143 } |
153 } |
144 } |
154 } |
162 //If (!aValue) then the test will be panicked, the test data files will be deleted. |
172 //If (!aValue) then the test will be panicked, the test data files will be deleted. |
163 static void Check(TInt aValue, TInt aLine) |
173 static void Check(TInt aValue, TInt aLine) |
164 { |
174 { |
165 if(!aValue) |
175 if(!aValue) |
166 { |
176 { |
|
177 TheTest.Printf(_L("*** Expression evaluated to false\r\n")); |
167 DeleteDataFiles(); |
178 DeleteDataFiles(); |
168 TheTest(EFalse, aLine); |
179 TheTest(EFalse, aLine); |
169 } |
180 } |
170 } |
181 } |
171 //If (aValue != aExpected) then the test will be panicked, the test data files will be deleted. |
182 //If (aValue != aExpected) then the test will be panicked, the test data files will be deleted. |
172 static void Check(TInt aValue, TInt aExpected, TInt aLine) |
183 static void Check(TInt aValue, TInt aExpected, TInt aLine) |
173 { |
184 { |
174 if(aValue != aExpected) |
185 if(aValue != aExpected) |
175 { |
186 { |
176 RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue); |
187 TheTest.Printf(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue); |
177 DeleteDataFiles(); |
188 DeleteDataFiles(); |
178 TheTest(EFalse, aLine); |
189 TheTest(EFalse, aLine); |
179 } |
190 } |
180 } |
191 } |
181 //Use these to test conditions. |
192 //Use these to test conditions. |
188 |
199 |
189 //Prepares the test directory. |
200 //Prepares the test directory. |
190 //TheFs.Connect() has to be called already. |
201 //TheFs.Connect() has to be called already. |
191 static void SetupTestDirectory() |
202 static void SetupTestDirectory() |
192 { |
203 { |
193 TInt err = TheFs.MkDir(KTestDatabase); |
204 TInt err = TheFs.MkDir(TheTestDatabase); |
194 if(err != KErrNone) |
205 if(err != KErrNone && err != KErrAlreadyExists) |
195 { |
206 { |
196 RDebug::Print(_L("*** SetupTestDirectory(), RFs::MkDir(), err=%d\r\n"), err); |
207 TheTest.Printf(_L("*** SetupTestDirectory(), RFs::MkDir(), drive=%d, err=%d.\r\nNext attempt with drive %d.\r\n"), TheTestDrive, err, KTestDrive2); |
|
208 TheTestDrive = KTestDrive2; |
|
209 TheTestDatabase.Copy(KTestDatabase2); |
|
210 TheLargeFileName.Copy(KLargeFileName2); |
|
211 err = TheFs.MkDir(TheTestDatabase); |
197 } |
212 } |
198 TEST(err == KErrNone || err == KErrAlreadyExists); |
213 TEST(err == KErrNone || err == KErrAlreadyExists); |
199 } |
214 } |
200 |
215 |
201 //Leaves with info message printed out |
216 //Leaves with info message printed out |
202 static void LeaveL(TInt aError, TInt aLine) |
217 static void LeaveL(TInt aError, TInt aLine) |
203 { |
218 { |
204 RDebug::Print(_L("*** Leave. Error: %d, Line: %d\r\n"), aError, aLine); |
219 TheTest.Printf(_L("*** Leave. Error: %d, Line: %d\r\n"), aError, aLine); |
205 User::Leave(aError); |
220 User::Leave(aError); |
206 } |
221 } |
207 |
222 |
208 //Leaves if aError < 0 with info message printed out |
223 //Leaves if aError < 0 with info message printed out |
209 static void LeaveIfErrorL(TInt aError, TInt aLine) |
224 static void LeaveIfErrorL(TInt aError, TInt aLine) |
260 static void CreateLargeFileL() |
275 static void CreateLargeFileL() |
261 { |
276 { |
262 TInt fileNo = 0; |
277 TInt fileNo = 0; |
263 const TInt KLargeFileSize = 1000000000; |
278 const TInt KLargeFileSize = 1000000000; |
264 TInt64 diskSpace = FreeDiskSpaceL(); |
279 TInt64 diskSpace = FreeDiskSpaceL(); |
265 RDebug::Print(_L("CreateLargeFileL: free space before = %ld\n"), diskSpace); |
280 TheTest.Printf(_L("CreateLargeFileL: free space before = %ld\n"), diskSpace); |
266 TBuf<KMaxFileName> filePath; |
281 TBuf<KMaxFileName> filePath; |
267 const TInt64 KMinDiskSpace = 200; |
282 const TInt64 KMinDiskSpace = 200; |
268 //Reserve almost all disk space, except a small amount - 200 bytes. |
283 //Reserve almost all disk space, except a small amount - 200 bytes. |
269 while(diskSpace > KMinDiskSpace) |
284 while(diskSpace > KMinDiskSpace) |
270 { |
285 { |
271 AssembleLargeFileName(KLargeFileName, fileNo++, filePath); |
286 AssembleLargeFileName(TheLargeFileName, fileNo++, filePath); |
272 TInt fileSize = KLargeFileSize; |
287 TInt fileSize = KLargeFileSize; |
273 if(diskSpace < (TInt64)KLargeFileSize) |
288 if(diskSpace < (TInt64)KLargeFileSize) |
274 { |
289 { |
275 TInt64 lastFileSize = diskSpace - KMinDiskSpace; |
290 TInt64 lastFileSize = diskSpace - KMinDiskSpace; |
276 fileSize = I64LOW(lastFileSize); |
291 fileSize = I64LOW(lastFileSize); |
277 } |
292 } |
278 DoCreateLargeFileL(filePath, fileSize); |
293 DoCreateLargeFileL(filePath, fileSize); |
279 diskSpace = FreeDiskSpaceL(); |
294 diskSpace = FreeDiskSpaceL(); |
280 RDebug::Print(_L("----CreateLargeFileL, step %d, free space = %ld\n"), fileNo, diskSpace); |
295 TheTest.Printf(_L("----CreateLargeFileL, step %d, free space = %ld\n"), fileNo, diskSpace); |
281 } |
296 } |
282 diskSpace = FreeDiskSpaceL(); |
297 diskSpace = FreeDiskSpaceL(); |
283 RDebug::Print(_L("CreateLargeFileL: free space after = %ld\n"), diskSpace); |
298 TheTest.Printf(_L("CreateLargeFileL: free space after = %ld\n"), diskSpace); |
284 } |
299 } |
285 |
300 |
286 //Reserves disk space for TheDbSession instance. |
301 //Reserves disk space for TheDbSession instance. |
287 //TheDbSession instance has to be connected already. |
302 //TheDbSession instance has to be connected already. |
288 static void ReserveDiskSpace() |
303 static void ReserveDiskSpace() |
289 { |
304 { |
290 TInt err = TheDbSession.ReserveDriveSpace(KTestDrive, KReservedSpaceSize); |
305 TInt err = TheDbSession.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize); |
291 TEST2(err, KErrNone); |
306 TEST2(err, KErrNone); |
292 } |
307 } |
293 |
308 |
294 //Frees already reserved disk space for TheDbSession instance. |
309 //Frees already reserved disk space for TheDbSession instance. |
295 //TheDbSession instance has to be connected already. |
310 //TheDbSession instance has to be connected already. |
296 static void FreeReservedSpace() |
311 static void FreeReservedSpace() |
297 { |
312 { |
298 TheDbSession.FreeReservedSpace(KTestDrive); |
313 TheDbSession.FreeReservedSpace(TheTestDrive); |
299 } |
314 } |
300 |
315 |
301 //Gets an access to the reserved disk space for TheDbSession instance. |
316 //Gets an access to the reserved disk space for TheDbSession instance. |
302 //TheDbSession instance has to be connected already. |
317 //TheDbSession instance has to be connected already. |
303 static void UnlockReservedSpace() |
318 static void UnlockReservedSpace() |
304 { |
319 { |
305 TInt err = TheDbSession.GetReserveAccess(KTestDrive); |
320 TInt err = TheDbSession.GetReserveAccess(TheTestDrive); |
306 TEST2(err, KErrNone); |
321 TEST2(err, KErrNone); |
307 } |
322 } |
308 |
323 |
309 //Releases the access to the reserved disk space. |
324 //Releases the access to the reserved disk space. |
310 //TheDbSession instance has to be connected already. |
325 //TheDbSession instance has to be connected already. |
311 static void LockReservedSpace() |
326 static void LockReservedSpace() |
312 { |
327 { |
313 (void)TheDbSession.ReleaseReserveAccess(KTestDrive); |
328 (void)TheDbSession.ReleaseReserveAccess(TheTestDrive); |
314 } |
329 } |
315 |
330 |
316 //Creates the test DBMS session |
331 //Creates the test DBMS session |
317 static void CreateTestDbSession() |
332 static void CreateTestDbSession() |
318 { |
333 { |
325 //TheDbSession instance has to be connected already. |
340 //TheDbSession instance has to be connected already. |
326 //TheFs.Connect() has to be called already. |
341 //TheFs.Connect() has to be called already. |
327 static void CreateTestDatabase(RDbs& aDbs, RDbNamedDatabase& aDb) |
342 static void CreateTestDatabase(RDbs& aDbs, RDbNamedDatabase& aDb) |
328 { |
343 { |
329 //Create the test database. |
344 //Create the test database. |
330 TInt err = aDb.Replace(TheFs, KTestDatabase); |
345 TInt err = aDb.Replace(TheFs, TheTestDatabase); |
331 TEST2(err, KErrNone); |
346 TEST2(err, KErrNone); |
332 TheDb.Close(); |
347 TheDb.Close(); |
333 //Open it now using DBMS session (so, on DBMS server side), because we want to test |
348 //Open it now using DBMS session (so, on DBMS server side), because we want to test |
334 //server side RFs sessions - handling "out of disk space" situations. |
349 //server side RFs sessions - handling "out of disk space" situations. |
335 err = aDb.Open(aDbs, KTestDatabase); |
350 err = aDb.Open(aDbs, TheTestDatabase); |
336 TEST2(err, KErrNone); |
351 TEST2(err, KErrNone); |
337 } |
352 } |
338 |
353 |
339 //Creates a test table |
354 //Creates a test table |
340 static void CreateTestTableL(RDbNamedDatabase& aDb) |
355 static void CreateTestTableL(RDbNamedDatabase& aDb) |
410 RDbs dbs; |
425 RDbs dbs; |
411 CleanupClosePushL(dbs); |
426 CleanupClosePushL(dbs); |
412 LEAVE_IF_ERROR(dbs.Connect()); |
427 LEAVE_IF_ERROR(dbs.Connect()); |
413 |
428 |
414 //Reserve disk space |
429 //Reserve disk space |
415 TInt err = dbs.ReserveDriveSpace(KTestDrive, KReservedSpaceSize); |
430 TInt err = dbs.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize); |
416 TEST2(err, KErrNone); |
431 TEST2(err, KErrNone); |
417 |
432 |
418 //An attempt to re-reserve it |
433 //An attempt to re-reserve it |
419 err = dbs.ReserveDriveSpace(KTestDrive, KReservedSpaceSize); |
434 err = dbs.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize); |
420 TEST2(err, KErrInUse); |
435 TEST2(err, KErrInUse); |
421 |
436 |
422 //Get an access to the reserved disk space |
437 //Get an access to the reserved disk space |
423 err = dbs.GetReserveAccess(KTestDrive); |
438 err = dbs.GetReserveAccess(TheTestDrive); |
424 TEST2(err, KErrNone); |
439 TEST2(err, KErrNone); |
425 |
440 |
426 //An attempt to get an access to the reserved space twice. |
441 //An attempt to get an access to the reserved space twice. |
427 err = dbs.GetReserveAccess(KTestDrive); |
442 err = dbs.GetReserveAccess(TheTestDrive); |
428 TEST2(err, KErrInUse); |
443 TEST2(err, KErrInUse); |
429 |
444 |
430 //This call must fail, because it tries to get an access to the reserved space of |
445 //This call must fail, because it tries to get an access to the reserved space of |
431 //not the same drive, for which ReserveDriveSpace() was called. |
446 //not the same drive, for which ReserveDriveSpace() was called. |
432 err = dbs.GetReserveAccess(KTestDrive + 1); |
447 err = dbs.GetReserveAccess(TheTestDrive + 1); |
433 TEST(err != KErrNone); |
448 TEST(err != KErrNone); |
434 |
449 |
435 (void)dbs.ReleaseReserveAccess(KTestDrive); |
450 (void)dbs.ReleaseReserveAccess(TheTestDrive); |
436 |
451 |
437 //An attempt to release the reserved space twice. This call will panic in debug mode. |
452 //An attempt to release the reserved space twice. This call will panic in debug mode. |
438 //(void)dbs.ReleaseReserveAccess(KTestDrive); |
453 //(void)dbs.ReleaseReserveAccess(TheTestDrive); |
439 |
454 |
440 //Cancel reserving an additional disk space |
455 //Cancel reserving an additional disk space |
441 dbs.FreeReservedSpace(KTestDrive); |
456 dbs.FreeReservedSpace(TheTestDrive); |
442 |
457 |
443 //Cancel reserving an additional disk space twice |
458 //Cancel reserving an additional disk space twice |
444 //This call will panic in debug mode. |
459 //This call will panic in debug mode. |
445 //dbs.FreeReservedSpace(KTestDrive); |
460 //dbs.FreeReservedSpace(TheTestDrive); |
446 |
461 |
447 CleanupStack::PopAndDestroy(&dbs); |
462 CleanupStack::PopAndDestroy(&dbs); |
448 } |
463 } |
449 |
464 |
450 /** |
465 /** |
458 @SYMREQ REQ0000 |
473 @SYMREQ REQ0000 |
459 */ |
474 */ |
460 static void TransactionTestL() |
475 static void TransactionTestL() |
461 { |
476 { |
462 TVolumeIOParamInfo volIoPrm; |
477 TVolumeIOParamInfo volIoPrm; |
463 TInt err = TheFs.VolumeIOParam(KTestDrive, volIoPrm); |
478 TInt err = TheFs.VolumeIOParam(TheTestDrive, volIoPrm); |
464 TEST2(err, KErrNone); |
479 TEST2(err, KErrNone); |
465 RDebug::Print(_L("--Drive %d. BlockSize=%d, ClusterSize=%d, RecReadBufSize=%d, RecWriteBufSize=%d\r\n"), KTestDrive, volIoPrm.iBlockSize, volIoPrm.iClusterSize, volIoPrm.iRecReadBufSize, volIoPrm.iRecWriteBufSize); |
480 TheTest.Printf(_L("--Drive %d. BlockSize=%d, ClusterSize=%d, RecReadBufSize=%d, RecWriteBufSize=%d\r\n"), TheTestDrive, volIoPrm.iBlockSize, volIoPrm.iClusterSize, volIoPrm.iRecReadBufSize, volIoPrm.iRecWriteBufSize); |
466 ///////////////////////////////////////////////////////// |
481 ///////////////////////////////////////////////////////// |
467 CreateTestDbSession(); |
482 CreateTestDbSession(); |
468 //Rserve disk space |
483 //Rserve disk space |
469 ReserveDiskSpace(); |
484 ReserveDiskSpace(); |
470 //Create test database and table. Add some test data to them. |
485 //Create test database and table. Add some test data to them. |
471 CreateTestDatabase(TheDbSession, TheDb); |
486 CreateTestDatabase(TheDbSession, TheDb); |
472 CreateTestTableL(TheDb); |
487 CreateTestTableL(TheDb); |
473 AddTestDataL(TheDb); |
488 AddTestDataL(TheDb); |
474 RDebug::Print(_L("--Simulate an \"out of disk space\" situation with creating a very large data file, which occupies almost the all the available disk space.\r\n")); |
489 TheTest.Printf(_L("--Simulate an \"out of disk space\" situation with creating a very large data file, which occupies almost the all the available disk space.\r\n")); |
475 CreateLargeFileL(); |
490 CreateLargeFileL(); |
476 RDebug::Print(_L("--Attempt to delete test data records. The transaction must fail, because of \"out of disk space\".\r\n")); |
491 TheTest.Printf(_L("--Attempt to delete test data records. The transaction must fail, because of \"out of disk space\".\r\n")); |
477 TInt64 diskSpace = FreeDiskSpaceL(); |
492 TInt64 diskSpace = FreeDiskSpaceL(); |
478 RDebug::Print(_L("--Attempt to delete test data records. Free disk space = %ld\n"), diskSpace); |
493 TheTest.Printf(_L("--Attempt to delete test data records. Free disk space = %ld\n"), diskSpace); |
479 TRAP(err, DeleteRecordsL()); |
494 TRAP(err, DeleteRecordsL()); |
480 RDebug::Print(_L("--DeleteRecordsL() returned %d error\r\n"), err); |
495 TheTest.Printf(_L("--DeleteRecordsL() returned %d error\r\n"), err); |
481 TEST(err != KErrNone); |
496 TEST(err != KErrNone); |
482 RDebug::Print(_L("--The attempt failed with err=%d. Get an access to the reserved disk space.\r\n"), err); |
497 TheTest.Printf(_L("--The attempt failed with err=%d. Get an access to the reserved disk space.\r\n"), err); |
483 UnlockReservedSpace(); |
498 UnlockReservedSpace(); |
484 RDebug::Print(_L("--Try again with getting an access to the reserved disk space.\n")); |
499 TheTest.Printf(_L("--Try again with getting an access to the reserved disk space.\n")); |
485 diskSpace = FreeDiskSpaceL(); |
500 diskSpace = FreeDiskSpaceL(); |
486 RDebug::Print(_L("After GetReserveAccess(), free disk space = %ld\r\n"), diskSpace); |
501 TheTest.Printf(_L("After GetReserveAccess(), free disk space = %ld\r\n"), diskSpace); |
487 DeleteRecordsL(); |
502 DeleteRecordsL(); |
488 RDebug::Print(_L("--\"Delete\" transaction was completed successfully.\n")); |
503 TheTest.Printf(_L("--\"Delete\" transaction was completed successfully.\n")); |
489 //Free the resources, used in the test |
504 //Free the resources, used in the test |
490 DeleteLargeDataFiles(); |
505 DeleteLargeDataFiles(); |
491 LockReservedSpace(); |
506 LockReservedSpace(); |
492 FreeReservedSpace(); |
507 FreeReservedSpace(); |
493 } |
508 } |
583 RDbs dbSess2; |
598 RDbs dbSess2; |
584 CleanupClosePushL(dbSess2); |
599 CleanupClosePushL(dbSess2); |
585 LEAVE_IF_ERROR(dbSess2.Connect()); |
600 LEAVE_IF_ERROR(dbSess2.Connect()); |
586 |
601 |
587 //Play with "ReserveDriveSpace" on both sessions |
602 //Play with "ReserveDriveSpace" on both sessions |
588 TInt err = dbSess1.ReserveDriveSpace(KTestDrive, KReservedSpaceSize); |
603 TInt err = dbSess1.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize); |
589 TEST2(err, KErrNone); |
604 TEST2(err, KErrNone); |
590 err = dbSess2.ReserveDriveSpace(KTestDrive, KReservedSpaceSize); |
605 err = dbSess2.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize); |
591 TEST2(err, KErrNone); |
606 TEST2(err, KErrNone); |
592 dbSess2.FreeReservedSpace(KTestDrive); |
607 dbSess2.FreeReservedSpace(TheTestDrive); |
593 err = dbSess2.ReserveDriveSpace(KTestDrive, KReservedSpaceSize); |
608 err = dbSess2.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize); |
594 TEST2(err, KErrNone); |
609 TEST2(err, KErrNone); |
595 |
610 |
596 //Get an access to the reserved space through session 2 |
611 //Get an access to the reserved space through session 2 |
597 err = dbSess2.GetReserveAccess(KTestDrive); |
612 err = dbSess2.GetReserveAccess(TheTestDrive); |
598 TEST2(err, KErrNone); |
613 TEST2(err, KErrNone); |
599 //Free/re-reserve disk space for session 1. |
614 //Free/re-reserve disk space for session 1. |
600 dbSess1.FreeReservedSpace(KTestDrive); |
615 dbSess1.FreeReservedSpace(TheTestDrive); |
601 err = dbSess1.ReserveDriveSpace(KTestDrive, KReservedSpaceSize); |
616 err = dbSess1.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize); |
602 TEST2(err, KErrNone); |
617 TEST2(err, KErrNone); |
603 |
618 |
604 //Create session4 |
619 //Create session4 |
605 RDbs dbSess4; |
620 RDbs dbSess4; |
606 CleanupClosePushL(dbSess4); |
621 CleanupClosePushL(dbSess4); |
607 LEAVE_IF_ERROR(dbSess4.Connect()); |
622 LEAVE_IF_ERROR(dbSess4.Connect()); |
608 |
623 |
609 //Try to reserve space for session 4. |
624 //Try to reserve space for session 4. |
610 err = dbSess4.ReserveDriveSpace(KTestDrive, KReservedSpaceSize); |
625 err = dbSess4.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize); |
611 TEST2(err, KErrNone); |
626 TEST2(err, KErrNone); |
612 |
627 |
613 //Create session3 |
628 //Create session3 |
614 RDbs dbSess3; |
629 RDbs dbSess3; |
615 CleanupClosePushL(dbSess3); |
630 CleanupClosePushL(dbSess3); |
616 LEAVE_IF_ERROR(dbSess3.Connect()); |
631 LEAVE_IF_ERROR(dbSess3.Connect()); |
617 //Try to reserve space for session 3. |
632 //Try to reserve space for session 3. |
618 err = dbSess3.ReserveDriveSpace(KTestDrive, KReservedSpaceSize); |
633 err = dbSess3.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize); |
619 TEST2(err, KErrNone); |
634 TEST2(err, KErrNone); |
620 |
635 |
621 //Release and free session 2 access to the reserved space. |
636 //Release and free session 2 access to the reserved space. |
622 (void)dbSess2.ReleaseReserveAccess(KTestDrive); |
637 (void)dbSess2.ReleaseReserveAccess(TheTestDrive); |
623 dbSess2.FreeReservedSpace(KTestDrive); |
638 dbSess2.FreeReservedSpace(TheTestDrive); |
624 |
639 |
625 dbSess3.FreeReservedSpace(KTestDrive); |
640 dbSess3.FreeReservedSpace(TheTestDrive); |
626 CleanupStack::PopAndDestroy(&dbSess3); |
641 CleanupStack::PopAndDestroy(&dbSess3); |
627 |
642 |
628 dbSess4.FreeReservedSpace(KTestDrive); |
643 dbSess4.FreeReservedSpace(TheTestDrive); |
629 CleanupStack::PopAndDestroy(&dbSess4); |
644 CleanupStack::PopAndDestroy(&dbSess4); |
630 |
645 |
631 //Get an access to the reserved space through session 2. |
646 //Get an access to the reserved space through session 2. |
632 //But it was freed, so the call will fail. |
647 //But it was freed, so the call will fail. |
633 err = dbSess2.GetReserveAccess(KTestDrive); |
648 err = dbSess2.GetReserveAccess(TheTestDrive); |
634 TEST(err != KErrNone); |
649 TEST(err != KErrNone); |
635 |
650 |
636 //Free/re-reserve disk space for session 1. |
651 //Free/re-reserve disk space for session 1. |
637 dbSess1.FreeReservedSpace(KTestDrive); |
652 dbSess1.FreeReservedSpace(TheTestDrive); |
638 err = dbSess1.ReserveDriveSpace(KTestDrive, KReservedSpaceSize); |
653 err = dbSess1.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize); |
639 TEST2(err, KErrNone); |
654 TEST2(err, KErrNone); |
640 |
655 |
641 //Grant/release the access to the reserved space for session 1. |
656 //Grant/release the access to the reserved space for session 1. |
642 err = dbSess1.GetReserveAccess(KTestDrive); |
657 err = dbSess1.GetReserveAccess(TheTestDrive); |
643 TEST2(err, KErrNone); |
658 TEST2(err, KErrNone); |
644 (void)dbSess1.ReleaseReserveAccess(KTestDrive); |
659 (void)dbSess1.ReleaseReserveAccess(TheTestDrive); |
645 |
660 |
646 //Grant an access to the reserved space for session 2. |
661 //Grant an access to the reserved space for session 2. |
647 //The call will fail because there is no reserved disk space for session 2. |
662 //The call will fail because there is no reserved disk space for session 2. |
648 err = dbSess2.GetReserveAccess(KTestDrive); |
663 err = dbSess2.GetReserveAccess(TheTestDrive); |
649 TEST(err != KErrNone); |
664 TEST(err != KErrNone); |
650 |
665 |
651 //Free the reserved space - session 1 |
666 //Free the reserved space - session 1 |
652 dbSess1.FreeReservedSpace(KTestDrive); |
667 dbSess1.FreeReservedSpace(TheTestDrive); |
653 |
668 |
654 CleanupStack::PopAndDestroy(&dbSess2); |
669 CleanupStack::PopAndDestroy(&dbSess2); |
655 CleanupStack::PopAndDestroy(&dbSess1); |
670 CleanupStack::PopAndDestroy(&dbSess1); |
656 } |
671 } |
657 |
672 |
704 */ |
719 */ |
705 static void OOMTest2() |
720 static void OOMTest2() |
706 { |
721 { |
707 RDbs dbs; |
722 RDbs dbs; |
708 TEST2(dbs.Connect(), KErrNone); |
723 TEST2(dbs.Connect(), KErrNone); |
709 TEST2(dbs.ReserveDriveSpace(KTestDrive, KReservedSpaceSize), KErrNone); |
724 TEST2(dbs.ReserveDriveSpace(TheTestDrive, KReservedSpaceSize), KErrNone); |
710 dbs.ResourceMark(); |
725 dbs.ResourceMark(); |
711 for(TInt count=1;;++count) |
726 for(TInt count=1;;++count) |
712 { |
727 { |
713 RDebug::Print(_L("OOMTest2. Count=%d\n"), count); |
728 TheTest.Printf(_L("OOMTest2. Count=%d\n"), count); |
714 dbs.SetHeapFailure(RHeap::EFailNext, count); |
729 dbs.SetHeapFailure(RHeap::EFailNext, count); |
715 |
730 |
716 TInt ret = dbs.GetReserveAccess(KTestDrive); |
731 TInt ret = dbs.GetReserveAccess(TheTestDrive); |
717 |
732 |
718 if(ret == KErrNoMemory) |
733 if(ret == KErrNoMemory) |
719 { |
734 { |
720 dbs.ResourceCheck(); |
735 dbs.ResourceCheck(); |
721 } |
736 } |
722 else if(ret == KErrNone) |
737 else if(ret == KErrNone) |
723 { |
738 { |
724 (void)dbs.ReleaseReserveAccess(KTestDrive); |
739 (void)dbs.ReleaseReserveAccess(TheTestDrive); |
725 break; |
740 break; |
726 } |
741 } |
727 else |
742 else |
728 { |
743 { |
729 TEST2(ret, KErrNone); |
744 TEST2(ret, KErrNone); |
730 } |
745 } |
731 } |
746 } |
732 |
747 |
733 dbs.FreeReservedSpace(KTestDrive); |
748 dbs.FreeReservedSpace(TheTestDrive); |
734 dbs.SetHeapFailure(RHeap::ENone, 0); |
749 dbs.SetHeapFailure(RHeap::ENone, 0); |
735 dbs.Close(); |
750 dbs.Close(); |
736 } |
751 } |
737 |
752 |
738 |
753 |