persistentstorage/sql/TEST/t_sqlood.cpp
changeset 55 44f437012c90
parent 40 b8bdbc8f59c7
--- 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<KMaxFileName> 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<KMaxFileName> 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();