diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookengines/contactsmodel/tsrc/T_datacompatibility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/tsrc/T_datacompatibility.cpp Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,276 @@ +// Copyright (c) 2003-2009 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" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include +#include +#include +#include +#include + +_LIT(KTestName, "T_DataCompatibility"); + +//That file is a contact model database from a Calypso device +_LIT(KDatabaseV4, "Z:\\Core-Apps\\App-Engines\\CntModel\\Databases\\FormatV4.cdb"); +_LIT(KDatabaseV5, "Z:\\Core-Apps\\App-Engines\\CntModel\\Databases\\FormatV5.cdb"); + +_LIT(KDatabaseV6With10Entries, "Z:\\Core-Apps\\App-Engines\\CntModel\\Databases\\FormatV6-10.cdb"); +_LIT(KDatabaseV7With25Entries, "Z:\\Core-Apps\\App-Engines\\CntModel\\Databases\\FormatV7-25.cdb"); +_LIT(KDatabaseV4With4Entries, "Z:\\Core-Apps\\App-Engines\\CntModel\\Databases\\FormatV4-4.cdb"); +_LIT(KDatabaseV8, "Z:\\Core-Apps\\App-Engines\\CntModel\\Databases\\DBS_100065FF_performance_100_4.cdb"); + +_LIT(KDatabaseCDriveFullPath,"C:\\private\\10003A73\\contacts.cdb"); +_LIT(KOldDatabaseCDriveFullPath,"C:\\private\\10003A73\\DBS_100065FF_performance_100_4.cdb"); + +_LIT(KDatabaseCDrive,"C:contacts.cdb"); +_LIT(KOldDatabaseCDrive,"C:DBS_100065FF_performance_100_4.cdb"); + +_LIT(KOldFileFormatPrefix,"DBS_100065FF"); + +RFs fs; + +// Logging macros & utilities // +GLDEF_C RTest test(KTestName); + + +LOCAL_C void CleanupFilesL() + { + // delete the database files + if (CContactDatabase::ContactDatabaseExistsL(KDatabaseCDrive) ) + { + CContactDatabase::DeleteDatabaseL(KDatabaseCDrive); + } + if (CContactDatabase::ContactDatabaseExistsL(KOldDatabaseCDrive) ) + { + CContactDatabase::DeleteDatabaseL(KOldDatabaseCDrive); + } + } + + + + + +void CopyCdbFileToCDriveL(const TDesC& aFileName) + { + //Will probably need more additions to sos to do this + RPIMTestServer serv; + User::LeaveIfError(serv.Connect()); + serv.CopyFileL(aFileName, KDatabaseCDriveFullPath); + serv.Close(); + } + +void CopyOldCdbFileToCDriveL(const TDesC& aFileName) + { + //Will probably need more additions to sos to do this + RPIMTestServer serv; + User::LeaveIfError(serv.Connect()); + serv.CopyFileL(aFileName, KOldDatabaseCDriveFullPath); + serv.Close(); + } + +typedef void (*TTestFunction)(TBool); + +void DoTestV8DatabaseL() + { + CopyOldCdbFileToCDriveL(KDatabaseV8); + CContactDatabase* db=CContactDatabase::OpenL(KDatabaseCDrive); + TDriveUnit driveUnit = _L("c:"); + TBuf<190> driveName; + CDesCArray* dataBaseList = db->ListDatabasesL(driveUnit); + CleanupStack::PushL(dataBaseList); + TInt theCount = dataBaseList->Count(); + TBool oldFileFormat = EFalse; + for(TInt i = 0; i< theCount; i++) + { + driveName = (*dataBaseList)[i]; + test.Printf(_L("ListDatabaseTestL, ListDatabasesL: %s \n"),driveName.PtrZ()); + TPtrC filenamePtr(driveName); + TInt found = filenamePtr.FindF(KOldFileFormatPrefix); + if (found != 0 && found != KErrNotFound) + { + oldFileFormat = ETrue; + } + } + test(oldFileFormat); + + CleanupStack::PopAndDestroy(dataBaseList); + delete db; + } + +void DoTestV7DatabaseL() + { + CopyCdbFileToCDriveL(KDatabaseV7With25Entries); + CContactDatabase* db=CContactDatabase::OpenL(KDatabaseCDrive); + delete db; + } + +void DoTestV6DatabaseL() + { + CopyCdbFileToCDriveL(KDatabaseV6With10Entries); + CContactDatabase* db=CContactDatabase::OpenL(KDatabaseCDrive); + delete db; + } + +void DoTestV5DatabaseL() + { + CopyCdbFileToCDriveL(KDatabaseV5); + CContactDatabase* db=CContactDatabase::OpenL(KDatabaseCDrive); + delete db; + } + +void DoTestV4DatabaseL(TBool aOOMTest = ETrue) + { + if (aOOMTest) + { + CopyCdbFileToCDriveL(KDatabaseV4With4Entries); + } + else + { + CopyCdbFileToCDriveL(KDatabaseV4); + } + + TTime startTime; + TTime endTime; + + + //Test end profiling + startTime.UniversalTime(); //start profiling + CContactDatabase* db=CContactDatabase::OpenL(KDatabaseCDrive); + endTime.UniversalTime(); //end profiling + CleanupStack::PushL(db); + + //need to sort item otherwise CountL return 0 - only in old model +/* CContactDatabase::TSortPref sortPref(KUidContactFieldGivenName); + CArrayFix* sortOrder=new(ELeave) CArrayFixFlat(1); + CleanupStack::PushL(sortOrder); + sortOrder->AppendL(sortPref); + db->SortL(sortOrder); //Takes ownership + CleanupStack::Pop(sortOrder);*/ + + TInt count=db->CountL(); + + //Now compute delay and print on the screen + TTimeIntervalMicroSeconds delay=endTime.MicroSecondsFrom(startTime); + test.Printf(_L("A v4 database containing %d contacts was converted in %d µs\n"),count,delay.Int64()); + + CleanupStack::PopAndDestroy(db); //db + } + +void DoOOMTestL(TTestFunction aTestFunction) + { + TInt ret = KErrNoMemory; + TInt failAt = 0; + while(ret != KErrNone) + { + failAt += 1 + failAt/30; + test.Printf(_L("OOM step: %d\n"), failAt); + __UHEAP_SETFAIL(RHeap::EDeterministic, failAt); + __UHEAP_MARK; + TRAP(ret, aTestFunction(ETrue)); + __UHEAP_MARKEND; + __UHEAP_RESET; + + if (ret != KErrNoMemory && ret != KErrNone) + { + test.Printf(_L("OOM test failed: %d\n"),ret); + } + + if (!(ret == KErrNoMemory || ret == KErrNone) ) + { + TRAP_IGNORE(CleanupFilesL() ); + } + test(ret == KErrNoMemory || ret == KErrNone); + } + } + + +void DoTestL() + { + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + CTestRegister* TempFiles = CTestRegister::NewLC(); + TempFiles->RegisterL(KDatabaseCDrive, EFileTypeCnt); + + _LIT(KTestV8Database,"Opening DBMS secured (old) database..."); + _LIT(KTestV7Database,"Opening v7 format database..."); + _LIT(KTestV6Database,"Opening v6 format database..."); + _LIT(KTestV5Database,"Opening v5 format database..."); + _LIT(KTestV4Database,"Opening v4 format database..."); + + + test.Next(_L("Opening v7 format database...")); + + DoTestV7DatabaseL(); + + test.Next(_L("Opening DBMS secured (old) database...")); + + DoTestV8DatabaseL(); + + + test.Next(_L("Opening v6 format database...")); + + DoTestV6DatabaseL(); + + test.Next(_L("Opening v5 format database...")); + + DoTestV5DatabaseL(); + + test.Next(_L("Opening v4 format database...")); + + DoTestV4DatabaseL(EFalse); + + //v4 conversion to v7 executes code involved in any other conversion. + DoOOMTestL(DoTestV4DatabaseL); + //DoOOMTestL(DoTestV5DatabaseL); + //DoOOMTestL(DoTestV6DatabaseL); + //DoOOMTestL(DoTestV7DatabaseL); + + CleanupStack::PopAndDestroy(2); // TempFiles, fs + } + +/** + +@SYMTestCaseID PIM-T-DATACOMPATIBILITY-0001 + +*/ + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + CActiveScheduler* scheduler=new CActiveScheduler; + if (scheduler) + { + CActiveScheduler::Install(scheduler); + CTrapCleanup* cleanup=CTrapCleanup::New(); + if (cleanup) + { + test.Title(); + test.Start(_L("@SYMTESTCaseID:PIM-T-DATACOMPATIBILITY-0001 T_DataCompatibility")); + + TRAPD(err, DoTestL()); + // delete database files if they are not cleaned up elsewhere + TRAP_IGNORE(CleanupFilesL() ); + test(err == KErrNone); + test.End(); + User::After(1000000); // wait 1 second and exit + test.Close(); + delete cleanup; + } + delete scheduler; + } + __UHEAP_MARKEND; + return KErrNone; + } + +