diff -r 7d4490026038 -r 44f437012c90 persistentstorage/sql/TEST/t_sqlood.cpp --- a/persistentstorage/sql/TEST/t_sqlood.cpp Mon Sep 27 11:59:56 2010 +0100 +++ b/persistentstorage/sql/TEST/t_sqlood.cpp Tue Oct 19 16:26:13 2010 +0100 @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2006-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" @@ -65,9 +65,21 @@ _LIT8(KDatabasePageSizeConfig, "page_size=1024"); +//The drive that will be used in case if the original drive, where KTestDir is supposed to be created, is not present. +const TInt KTestDrive2 = EDriveC; +_LIT(KTestDir2, "c:\\test\\"); +_LIT(KTestDatabase2, "c:\\test\\t_sql_ood.db"); +_LIT(KLargeFileName2, "c:\\test\\DeleteMe"); + const TInt KMaxTestRecordsCount = 350; TInt TestRecordsCount = 0; + +TInt TheTestDrive = -1; +TFileName TheTestDir; +TFileName TheTestDatabase; +TFileName TheLargeFileName; + /////////////////////////////////////////////////////////////////////////////////////// //Assemblesd a file name from "aFileName" and "aFileNumber" parameters and places the resulting string in "aResultPath". @@ -85,7 +97,7 @@ while(err == KErrNone) { TBuf filePath; - ::AssembleLargeFileName(KLargeFileName, ++i, filePath); + ::AssembleLargeFileName(TheLargeFileName, ++i, filePath); err = TheFs.Delete(filePath); } } @@ -94,7 +106,7 @@ void DeleteTestFiles() { DeleteLargeDataFiles(); - (void)RSqlDatabase::Delete(KTestDatabase); + (void)RSqlDatabase::Delete(TheTestDatabase); } /////////////////////////////////////////////////////////////////////////////////////// @@ -105,7 +117,7 @@ if(!aValue) { DeleteTestFiles(); - RDebug::Print(_L("*** Line %d\r\n"), aLine); + TheTest.Printf(_L("*** Line %d\r\n"), aLine); TheTest(EFalse, aLine); } } @@ -114,7 +126,7 @@ if(aValue != aExpected) { DeleteTestFiles(); - RDebug::Print(_L("*** Line %d, Expected error: %d, got: %d\r\n"), aLine, aExpected, aValue); + TheTest.Printf(_L("*** Line %d, Expected error: %d, got: %d\r\n"), aLine, aExpected, aValue); TheTest(EFalse, aLine); } } @@ -129,11 +141,17 @@ TInt err = TheFs.Connect(); TEST2(err, KErrNone); - err = TheFs.MkDir(KTestDir); - if(err != KErrNone) + err = TheFs.MkDir(TheTestDir); + if(err != KErrNone && err != KErrAlreadyExists) { - RDebug::Print(_L("*** CreateTestEnv(), RFs::MkDir(), err=%d\r\n"), err); + TheTest.Printf(_L("*** CreateTestEnv(), RFs::MkDir(), dir=%S, err=%d.\r\nNext attempt with %S.\r\n"), &TheTestDir, err, &KTestDir2); + TheTestDrive = KTestDrive2; + TheTestDir.Copy(KTestDir2); + TheTestDatabase.Copy(KTestDatabase2); + TheLargeFileName.Copy(KLargeFileName2); + err = TheFs.MkDir(TheTestDir); } + TheTest.Printf(_L("*** CreateTestEnv(), RFs::MkDir(), dir=%S, err=%d."), &TheTestDir, err); TEST(err == KErrNone || err == KErrAlreadyExists); } @@ -142,9 +160,11 @@ void FillLargeDataFile(RFile& aFile, TInt aSize) { TInt err = KErrDiskFull; + TheTest.Printf(_L("FillLargeDataFile-1\r\n")); while(err == KErrDiskFull) { err = aFile.SetSize(aSize); + TheTest.Printf(_L("FillLargeDataFile-2 err=%d aSize=%d\r\n"), err, aSize); aSize -= 100; if(aSize <= 0) { @@ -158,7 +178,7 @@ TInt64 FreeDiskSpace() { TVolumeInfo volInfoBefore; - TInt err = TheFs.Volume(volInfoBefore, KTestDrive); + TInt err = TheFs.Volume(volInfoBefore, TheTestDrive); TEST2(err, KErrNone); return volInfoBefore.iFree; } @@ -166,13 +186,17 @@ //Creates a large data file with aSize size (in bytes). void DoCreateLargeFile(const TDesC& aPath, TInt aSize) { + TheTest.Printf(_L("DoCreateLargeFile, aPath=%S, aSize=%d\r\n"), &aPath, aSize/1000); RFile file; TInt err = file.Replace(TheFs, aPath, EFileRead | EFileWrite); + TheTest.Printf(_L("DoCreateLargeFile, err=%d\r\n"), err); TEST2(err, KErrNone); FillLargeDataFile(file, aSize); err = file.Flush(); + TheTest.Printf(_L("DoCreateLargeFile, flush err=%d\r\n"), err); TEST2(err, KErrNone); file.Close(); + TheTest.Printf(_L("DoCreateLargeFile, close\r\n")); } //Creates enough number of large data files to fill the available disk space. @@ -181,28 +205,28 @@ TInt fileNo = 0; const TInt KLargeFileSize = 1000000000; TInt64 diskSpace = ::FreeDiskSpace(); - RDebug::Print(_L("CreateLargeFile: free space before = %ld\r\n"), diskSpace); + TheTest.Printf(_L("CreateLargeFile: free space before = %ld\r\n"), diskSpace); TBuf filePath; while(diskSpace > KLargeFileSize) { - AssembleLargeFileName(KLargeFileName, fileNo++, filePath); + AssembleLargeFileName(TheLargeFileName, fileNo++, filePath); DoCreateLargeFile(filePath, KLargeFileSize); diskSpace = ::FreeDiskSpace(); - RDebug::Print(_L("----CreateLargeFile, step %d, free space = %ld\r\n"), fileNo, diskSpace); + TheTest.Printf(_L("----CreateLargeFile, step %d, free space = %ld\r\n"), fileNo, diskSpace); } //Reserve almost all disk space, except a small amount - 200 bytes. if(diskSpace > 0) { - ::AssembleLargeFileName(KLargeFileName, fileNo++, filePath); + ::AssembleLargeFileName(TheLargeFileName, fileNo++, filePath); const TInt64 KSpaceLeft = 200; TInt64 lastFileSize = diskSpace - KSpaceLeft; TInt lastFileSize32 = I64LOW(lastFileSize); - RDebug::Print(_L("----file size32 = %d\r\n"), lastFileSize32); + TheTest.Printf(_L("----file size32 = %d\r\n"), lastFileSize32); ::DoCreateLargeFile(filePath, lastFileSize32); - RDebug::Print(_L("----CreateLargeFile, last step (%d), file size = %ld\r\n"), fileNo, lastFileSize); + TheTest.Printf(_L("----CreateLargeFile, last step (%d), file size = %ld\r\n"), fileNo, lastFileSize); } diskSpace = ::FreeDiskSpace(); - RDebug::Print(_L("CreateLargeFile: free space after = %ld\r\n"), diskSpace); + TheTest.Printf(_L("CreateLargeFile: free space after = %ld\r\n"), diskSpace); } @@ -218,7 +242,7 @@ //Creates and fills with some records a test database void CreateAndFillTestDatabase(RSqlDatabase& aDb) { - TInt err = aDb.Create(KTestDatabase, &KDatabasePageSizeConfig); + TInt err = aDb.Create(TheTestDatabase, &KDatabasePageSizeConfig); TEST2(err, KErrNone); err = aDb.Exec(_L("CREATE TABLE A(Id INTEGER, Data TEXT)")); TEST(err >= 0); @@ -231,25 +255,25 @@ TSqlScalarFullSelectQuery q(aDb); TInt pageSize = 0; TRAP(err, pageSize = q.SelectIntL(sql);); - //RDebug::Print(_L("Error %d Page Size %d"),err,pageSize); + //TheTest.Printf(_L("Error %d Page Size %d"),err,pageSize); TEST2(err, KErrNone); TEST(pageSize > 0); - //RDebug::Print(_L("Page Size %d"),pageSize); + //TheTest.Printf(_L("Page Size %d"),pageSize); // // Find the sector size of this media // TDriveInfo driveInfo; - err = TheFs.Drive(driveInfo, KTestDrive); + err = TheFs.Drive(driveInfo, TheTestDrive); TEST2(err, KErrNone); TVolumeIOParamInfo volumeInfo; - err = TheFs.VolumeIOParam(KTestDrive, volumeInfo); + err = TheFs.VolumeIOParam(TheTestDrive, volumeInfo); TEST2(err, KErrNone); TInt sectorSize = volumeInfo.iBlockSize; - //RDebug::Print(_L("Sector Size %d"),sectorSize); + //TheTest.Printf(_L("Sector Size %d"),sectorSize); TInt journalHeaderSize = Max(sectorSize, KJournalHeaderSize); - //RDebug::Print(_L("Journal Header Size %d"),journalHeaderSize); + //TheTest.Printf(_L("Journal Header Size %d"),journalHeaderSize); // // Keep adding to database until it is a size such that all the data can still be deleted within the reserved disk space size. @@ -265,7 +289,7 @@ TInt size = aDb.Size(); TInt numberOfPages = size/pageSize; TInt predictedJournalSize = journalHeaderSize + numberOfPages * (pageSize + KJournalPageOverhead); - //RDebug::Print(_L("Size %d, Pages %d, predictedJournalSize %d"),size, numberOfPages, predictedJournalSize); + //TheTest.Printf(_L("Size %d, Pages %d, predictedJournalSize %d"),size, numberOfPages, predictedJournalSize); // Will another page take us over the limit ? if ((predictedJournalSize + (pageSize + KJournalPageOverhead)) >= (KReserveDriveSpaceAmount)) @@ -275,7 +299,7 @@ } TestRecordsCount = i + 1; - //RDebug::Print(_L("TestRecordsCount %d"),TestRecordsCount); + //TheTest.Printf(_L("TestRecordsCount %d"),TestRecordsCount); } @@ -307,10 +331,10 @@ void SimpleCallsTest() { RSqlDatabase db, db2; - TInt err = db.Create(KTestDatabase, &KDatabasePageSizeConfig); + TInt err = db.Create(TheTestDatabase, &KDatabasePageSizeConfig); TEST2(err, KErrNone); - err = db2.Open(KTestDatabase); + err = db2.Open(TheTestDatabase); TEST2(err, KErrNone); //An attempt to get an access to the reserved space (which is not reserved yet). @@ -357,7 +381,7 @@ db2.Close(); db.Close(); - (void)RSqlDatabase::Delete(KTestDatabase); + (void)RSqlDatabase::Delete(TheTestDatabase); } /** @@ -378,32 +402,32 @@ void DeleteTransactionTest() { TVolumeIOParamInfo volIoPrm; - TInt err = TheFs.VolumeIOParam(KTestDrive, volIoPrm); + TInt err = TheFs.VolumeIOParam(TheTestDrive, volIoPrm); TEST2(err, KErrNone); - RDebug::Print(_L("--Drive %d. BlockSize=%d, ClusterSize=%d, RecReadBufSize=%d, RecWriteBufSize=%d\r\n"), KTestDrive, volIoPrm.iBlockSize, volIoPrm.iClusterSize, volIoPrm.iRecReadBufSize, volIoPrm.iRecWriteBufSize); + TheTest.Printf(_L("--Drive %d. BlockSize=%d, ClusterSize=%d, RecReadBufSize=%d, RecWriteBufSize=%d\r\n"), TheTestDrive, volIoPrm.iBlockSize, volIoPrm.iClusterSize, volIoPrm.iRecReadBufSize, volIoPrm.iRecWriteBufSize); ///////////////////////////////////////////////////////// - RDebug::Print(_L("--Create and fill database \"%S\".\r\n"), &KTestDatabase); + TheTest.Printf(_L("--Create and fill database \"%S\".\r\n"), &TheTestDatabase); RSqlDatabase db; CreateAndFillTestDatabase(db); db.Close();//When the database gets closed, the persisted journal file will be deleted. - RDebug::Print(_L("--Close and reopen database \"%S\" (in order to get the persisted journal file deleted).\r\n"), &KTestDatabase); - err = db.Open(KTestDatabase); + TheTest.Printf(_L("--Close and reopen database \"%S\" (in order to get the persisted journal file deleted).\r\n"), &TheTestDatabase); + err = db.Open(TheTestDatabase); TEST2(err, KErrNone); - RDebug::Print(_L("--Reserve disk space for database \"%S\".\r\n"), &KTestDatabase); + TheTest.Printf(_L("--Reserve disk space for database \"%S\".\r\n"), &TheTestDatabase); err = db.ReserveDriveSpace(0); TEST2(err, KErrNone); - 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")); + 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")); CreateLargeFile(); - RDebug::Print(_L("--Attempt to delete test data records. The transaction must fail, because of \"out of disk space\".\r\n")); + TheTest.Printf(_L("--Attempt to delete test data records. The transaction must fail, because of \"out of disk space\".\r\n")); err = DeleteTestRecords(db); TEST2(err, KErrDiskFull); - RDebug::Print(_L("--Get an access to the reserved disk space.\r\n")); + TheTest.Printf(_L("--Get an access to the reserved disk space.\r\n")); err = db.GetReserveAccess(); TEST2(err, KErrNone); TInt64 diskSpace = ::FreeDiskSpace(); - RDebug::Print(_L("After GetReserveAccess(), free disk space = %ld. Try again \"Delete records\" transaction. The transaction must not fail.\r\n"), diskSpace); + TheTest.Printf(_L("After GetReserveAccess(), free disk space = %ld. Try again \"Delete records\" transaction. The transaction must not fail.\r\n"), diskSpace); err = DeleteTestRecords(db); - RDebug::Print(_L("--DeleteTestRecords() returned %d error.\r\n"), err); + TheTest.Printf(_L("--DeleteTestRecords() returned %d error.\r\n"), err); TEST(err >= 0); //Releases the access to the reserved disk space db.ReleaseReserveAccess(); @@ -421,7 +445,7 @@ TEST2(recCount, 0); stmt.Close(); db.Close(); - (void)RSqlDatabase::Delete(KTestDatabase); + (void)RSqlDatabase::Delete(TheTestDatabase); } //OOD API tests with more than one connection to the same SQL database. @@ -434,7 +458,7 @@ CreateAndFillTestDatabase(db1); RSqlDatabase db2; - TInt err = db2.Open(KTestDatabase); + TInt err = db2.Open(TheTestDatabase); TEST2(err, KErrNone); //Play with "ReserveDriveSpace" on both sessions @@ -455,7 +479,7 @@ TEST2(err, KErrNone); RSqlDatabase db4; - err = db4.Open(KTestDatabase); + err = db4.Open(TheTestDatabase); TEST2(err, KErrNone); //Try to reserve space for db4. @@ -463,7 +487,7 @@ TEST2(err, KErrNone); RSqlDatabase db3; - err = db3.Open(KTestDatabase); + err = db3.Open(TheTestDatabase); TEST2(err, KErrNone); //Try to reserve space for session db3. @@ -506,7 +530,7 @@ db2.Close(); db1.Close(); - (void)RSqlDatabase::Delete(KTestDatabase); + (void)RSqlDatabase::Delete(TheTestDatabase); } void DoTests() @@ -529,6 +553,11 @@ __UHEAP_MARK; + TheTestDrive = KTestDrive; + TheTestDir.Copy(KTestDir); + TheTestDatabase.Copy(KTestDatabase); + TheLargeFileName.Copy(KLargeFileName); + CreateTestEnv(); DeleteTestFiles(); DoTests();