LOCAL_D void TestFirstL(RTest& aTest) { aTest.Next(_L("@SYMTestCaseID:PIM-T-OWNCARDDELETE-0001 -- First Owncard Test --")); aTest.Printf(_L("Replacing database \n")); CContactDatabase* db = CContactDatabase::ReplaceL(KDatabaseFileName); CleanupStack::PushL(db); CContactDatabase* dbAnother = CContactDatabase::OpenL(KDatabaseFileName); CleanupStack::PushL(dbAnother); PopulateDatabaseL(db, KTotalContacts); WaitForNotificationsL(db); TestSetOwnCardL(db); WaitForNotificationsL(db); aTest.Printf(_L("Checking the count value \n")); TInt count = dbAnother->CountL(); aTest.Printf(_L("Count: %d \n"), count); aTest(count == KTotalContacts, __LINE__); aTest.Printf(_L("Checking the id \n")); TContactItemId id = dbAnother->OwnCardId(); aTest.Printf(_L("id: %d \n"), id); aTest(id != KNullContactId, __LINE__); TContactIter iter(*db); //Test that the iterator is updated TContactItemId firstContactId; firstContactId = iter.FirstL(); //should be own contactId DeleteOwnContactL(dbAnother); WaitForNotificationsL(dbAnother); TContactItemId secondContactId; TRAPD (err, secondContactId = iter.FirstL()); aTest(err == KErrNone && firstContactId != secondContactId, __LINE__); DeleteMultipleContactsL(db); WaitForNotificationsL(db); aTest.Printf(_L("Checking the deleted count value \n")); count = dbAnother->CountL(); aTest.Printf(_L("Count: %d \n"), count); aTest(count == 0, __LINE__); aTest.Printf(_L("Checking the deleted id \n")); id = dbAnother->OwnCardId(); aTest.Printf(_L("id: %d \n"), id); aTest(id == KNullContactId, __LINE__); aTest(gEventCounter == KMaxNumOfEvents, __LINE__); aTest(gUnknownEventCounter == KMaxUnknownEvents, __LINE__); CleanupStack::PopAndDestroy(2,db); }
void CTestResources::ProfileFindsL() { TCntProfile profile[KNumberOfExtendedFieldNames+1]; TBuf<128> result; for(TInt i = 0; i<= GNumberOfFieldNames; i++) { CCntTest::ProfileReset(0,1); CCntTest::ProfileStart(0); CheckFoundL(i); CCntTest::ProfileEnd(0); CCntTest::ProfileResult(&profile[i],0,1); } _LIT(KFindSingle,"@%C N = %d\t Find Single: %d ms\t%d ms\t%d ms\t\tAll: %d \n"); _LIT(KFindAll,"@%C N = %d\t Find Single: %d ms\t%d ms\t%d ms\t%d ms\t%d ms\t%d ms\t\tAll: %d \n"); if(GNumberOfFieldNames==KNumberOfNormalFieldNames) result.Format(KFindSingle,static_cast<TUint>(GChar),iDb->CountL(),profile[0].iTime/1000, profile[1].iTime/1000, profile[2].iTime/1000, profile[3].iTime/1000); else result.Format(KFindAll,static_cast<TUint>(GChar),iDb->CountL(), profile[0].iTime/1000, profile[1].iTime/1000, profile[2].iTime/1000, profile[3].iTime/1000, profile[4].iTime/1000, profile[5].iTime/1000, profile[6].iTime/1000); RDebug::Print(result); }
void CTestContactOperations::DeleteContactsL() { // existing database TPtrC databaseFile(_L("C:contactDB.cdb")); TContactItemId itemId = KErrNotFound; CContactDatabase* dBase = NULL; CContactIdArray* idArray = NULL; dBase = CContactDatabase::OpenL(databaseFile); CleanupStack::PushL(dBase); // Set the filter to select all the contact items in the database CCntFilter* exportFilter = CCntFilter::NewL(); CleanupStack::PushL(exportFilter); exportFilter->SetContactFilterTypeCard(ETrue); dBase->FilterDatabaseL(*exportFilter); idArray = exportFilter->iIds; CleanupStack::PushL(idArray); TInt numberOfContacts; GetIntFromConfig(ConfigSection(), KNumberOfCont, numberOfContacts); INFO_PRINTF1(_L("Deleting Contacts.....")); // Delete the contacts one at a time for(TInt i=(idArray->Count()-1);i>=0;i--) { dBase->DeleteContactL((*idArray)[i]); } _LIT(KCount, "The number of contacts in the database is %d \n"); INFO_PRINTF2(KCount, dBase->CountL()); // Close the contacts dBase->CloseContactL(itemId); // Cleanup CleanupStack::Pop(idArray); CleanupStack::PopAndDestroy(exportFilter); CleanupStack::PopAndDestroy(dBase); }
void CTestResources::ConstructL(TInt aNumberOfContactsToAddToExistingDatabase, TBool aCreateNewDatabase) { if (aCreateNewDatabase) iDb = CContactDatabase::ReplaceL(KTestDbName); else iDb = CContactDatabase::OpenL(KTestDbName); if(!iRandomGenerator) { iRandomGenerator=CRandomContactGenerator::NewL(); } iRandomGenerator->SetDbL(*iDb); CreateContactsL(aNumberOfContactsToAddToExistingDatabase); // done adding everything to the database TCntProfile profile[1]; CCntTest::ProfileReset(0,1); CCntTest::ProfileStart(0); iDb->CompactL(); CCntTest::ProfileEnd(0); CCntTest::ProfileResult(&profile[0],0,1); TInt timeToCompact = profile[0].iTime/1000; CCntTest::ProfileReset(0,1); CCntTest::ProfileStart(0); delete iDb; iDb=NULL; CCntTest::ProfileEnd(0); CCntTest::ProfileResult(&profile[0],0,1); TInt timeToClose = profile[0].iTime; // in microseconds CCntTest::ProfileReset(0,1); CCntTest::ProfileStart(0); iDb = CContactDatabase::OpenL(KTestDbName); CCntTest::ProfileEnd(0); CCntTest::ProfileResult(&profile[0],0,1); iRandomGenerator->SetDbL(*iDb); TInt timeToOpen = profile[0].iTime/1000; TInt numberOfContactsInDb=iDb->CountL(); iViewEventQueue = CContactViewEventQueue::NewL(NULL, numberOfContactsInDb*2); TInt i; for(i = 0; i< GNumberOfFieldsToSort; i++) { iViewSortOrder.AppendL(TUid::Uid(GFieldsToSort[i])); } iLocalView = CContactLocalView::NewL(*iViewEventQueue, *iDb, iViewSortOrder, EContactsOnly); // Wait 100 seconds for the view to get ready TContactViewEvent event; CCntTest::ProfileReset(0,1); CCntTest::ProfileStart(0); test(iViewEventQueue->ListenForEvent(100,event)); CCntTest::ProfileEnd(0); CCntTest::ProfileResult(&profile[0],0,1); test(event.iEventType == TContactViewEvent::EReady); TBuf<128> result; result.Format(_L("*%C Contacts: %d\t"),static_cast<TUint>(GChar),numberOfContactsInDb); RDebug::Print(result); result.Format(_L("\tView ready: %d ms\t\tOpen: %d ms\t\tClose: %d us\t\tCompact: %d ms\t"), profile[0].iTime/1000, timeToOpen, timeToClose, timeToCompact); RDebug::Print(result); result.Format(_L("\tSize: %d bytes\n"),iDb->FileSize()); RDebug::Print(result); iFindFields = new(ELeave)CContactItemFieldDef; }
LOCAL_D void TestSecondL(RTest& aTest) { aTest.Next(_L("-- Second Owncard Test --")); RMutex mtx; TInt errMutex = mtx.CreateGlobal(KOwnCardMutex); User::LeaveIfError(errMutex); CleanupClosePushL(mtx); RThread thd; aTest.Printf(_L("Creating worker thread \n")); TInt errThread = thd.Create(KThreadFunc, ThreadFunction, KDefaultStackSize, KDefaultStackSize*20, KDefaultStackSize*40, NULL); User::LeaveIfError(errThread); CleanupClosePushL(thd); thd.Resume(); SwitchToWorkerThread(mtx, thd, EFalse, ETrue); // a) Run: WT-start to WT-1 /////////////////////////////////////////////// // Worker thread has now replaced the database /////////////////////////////////////////////// aTest.Printf(_L("Open existing database \n")); CContactDatabase* db = CContactDatabase::OpenL(KDatabaseFileName); CleanupStack::PushL(db); SwitchToWorkerThread(mtx, thd, ETrue, ETrue); // b) Run: WT-1 to WT-2 /////////////////////////////////////////////// // Worker thread has now added the contacts /////////////////////////////////////////////// WaitForNotificationsL(db); aTest.Printf(_L("Checking db count \n")); TInt count = db->CountL(); aTest.Printf(_L("Count: %d \n"), count); aTest(count == KTotalContacts, __LINE__); aTest.Printf(_L("Checking owncard id \n")); TContactItemId id = db->OwnCardId(); aTest.Printf(_L("id: %d \n"), id); aTest(id != KNullContactId, __LINE__); SwitchToWorkerThread(mtx, thd, ETrue, ETrue); // c) Run: WT-2 to WT-3 /////////////////////////////////////////////// // Worker thread has now deleted the contacts /////////////////////////////////////////////// aTest.Printf(_L("Checking deleted db count \n")); WaitForNotificationsL(db); count = db->CountL(); aTest.Printf(_L("Count: %d \n"), count); aTest(count == 0, __LINE__); aTest.Printf(_L("Checking deleted owncard id \n")); id = db->OwnCardId(); aTest.Printf(_L("id: %d \n"), id); aTest(id == KNullContactId, __LINE__); CleanupStack::PopAndDestroy(db); SwitchToWorkerThread(mtx, thd, ETrue, EFalse); // d) Run: WT-3 to end CleanupStack::PopAndDestroy(); // close thd handle CleanupStack::PopAndDestroy(); // close mtx handle }
LOCAL_D void ThreadFirstTestL(RTest& aTest) { aTest.Next(_L("-- Running worker thread --")); RMutex mutex; TInt errMutex = mutex.OpenGlobal(KOwnCardMutex); User::LeaveIfError(errMutex); CleanupClosePushL(mutex); aTest.Printf(_L("Replacing the database \n")); CContactDatabase* db = CContactDatabase::ReplaceL(KDatabaseFileName); CleanupStack::PushL(db); // get a second database object CContactDatabase* dbAnother = CContactDatabase::OpenL(KDatabaseFileName); CleanupStack::PushL(dbAnother); SwitchToMainThread(mutex); // 1) Back to MT-a /////////////////////////////////////////////// // Main thread has now opened the database /////////////////////////////////////////////// aTest.Printf(_L("Populating the database \n")); PopulateDatabaseL(db, KTotalContacts); WaitForNotificationsL(db); aTest.Printf(_L("Set the Own card id \n")); TestSetOwnCardL(db); WaitForNotificationsL(db); aTest.Printf(_L("Checking count value \n")); TInt count = db->CountL(); TInt countAnother = dbAnother->CountL(); aTest.Printf(_L("Count: %d \n"), count ); aTest(count == KTotalContacts && countAnother == KTotalContacts, __LINE__); aTest.Printf(_L("Checking the id \n")); TContactItemId id = db->OwnCardId(); TContactItemId idCopy = dbAnother->OwnCardId(); aTest.Printf(_L("Id: %d \n"), id); aTest(id != KNullContactId && idCopy != KNullContactId, __LINE__); SwitchToMainThread(mutex); // 2) Back to MT-b /////////////////////////////////////////////// // Main thread has now checked the added values /////////////////////////////////////////////// DeleteMultipleContactsL(db); WaitForNotificationsL(db); aTest.Printf(_L("Checking deleted count value \n")); count = db->CountL(); countAnother = dbAnother->CountL(); aTest.Printf(_L("Count: %d \n"), count ); aTest(count == 0 && countAnother == 0, __LINE__); aTest.Printf(_L("Checking the deleted id \n")); id = db->OwnCardId(); idCopy = dbAnother->OwnCardId(); aTest.Printf(_L("Id: %d \n"), id); aTest(id == KNullContactId && idCopy == KNullContactId, __LINE__); SwitchToMainThread(mutex); // 3) Back to MT-c /////////////////////////////////////////////// // Main thread has now checked the deleted values /////////////////////////////////////////////// CleanupStack::PopAndDestroy(dbAnother); CleanupStack::PopAndDestroy(db); CleanupStack::PopAndDestroy(); // close mutex handle RThread::Rendezvous(KErrNone); // Finish) back to MT-d }
void CTestContactsPBAPExport::ExportContactsL() { TInt err = KErrNone; // Retrieve the file name to which contact item is to be exported RFs fsSession; RFileWriteStream writeStream; // connect to file system User::LeaveIfError(fsSession.Connect()); CleanupClosePushL(fsSession); GetInputFromIni(); // Makes one or more directories. fsSession.MkDirAll(iExportTo); // Replaces a single file with another User::LeaveIfError(writeStream.Replace(fsSession, iExportTo, EFileWrite)); INFO_PRINTF1(_L("Exporting Contact.....")); // Existing database TPtrC databaseFile(_L("C:contactDb.cdb")); CContactDatabase* dBase = NULL; CContactIdArray* idArray = NULL; // Open the existing database dBase = CContactDatabase::OpenL(databaseFile); CleanupStack::PushL(dBase); // Create Utility class object, to export the contact from database CTestStep* self = static_cast<CTestStep*>(this); iExportObj = new(ELeave) CContactsPBAPExportUtilityClass(self); SetFilterL(); CCntFilter* exportFilter = CCntFilter::NewL(); CleanupStack::PushL(exportFilter); // Get all the contacts from the database to export exportFilter->SetContactFilterTypeCard(ETrue); dBase->FilterDatabaseL(*exportFilter); idArray = exportFilter->iIds; CleanupStack::PushL(idArray); if(iDamageDb) { #ifdef _DEBUG #ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__ TRAPD(err1,dBase->DamageDatabaseL(0x666)); if(err1 == KErrNone) { TRAPD(err,iExportObj->ExportvCardL(dBase, iStandard, idArray, writeStream, iContactFilter)); INFO_PRINTF2(_L("Err:%d"),err); if(err == KErrNotReady) { SetTestStepResult(EPass); } else { SetTestStepResult(EFail); } if(dBase->IsDamaged()) { dBase->RecoverL(); } } else { INFO_PRINTF2(_L("Could not damage database Err:"),err1); } #else SetTestStepResult(EPass); #endif #endif } else { if(iInvalidFileSystem) { #ifdef _DEBUG fsSession.SetErrorCondition(KErrNotReady); TRAPD(err,iExportObj->ExportvCardL(dBase, iStandard, idArray, writeStream, iContactFilter)); if(err == KErrNotReady) { SetTestStepResult(EPass); } else { SetTestStepResult(EFail); } fsSession.SetErrorCondition(KErrNone); #endif } else { if(!iSetOOM) { if(idArray->Count() > 0) { for(TInt i=0; i<idArray->Count() ; i++) { TInt dCount = dBase->CountL(); if(i>=dCount) { break; } // temporary array used to export one contact at a time CContactIdArray* tempIdArray = CContactIdArray::NewL(); CleanupStack::PushL(tempIdArray); tempIdArray->AddL((*idArray)[i]); TRAPD(err,iExportObj->ExportvCardL(dBase, iStandard, tempIdArray, writeStream, iContactFilter)); if(err != KErrNone ) { if(err != KErrNotFound) { SetTestStepError(err); } } CleanupStack::PopAndDestroy(tempIdArray); } } else { if(idArray->Count()==0) { TRAPD(err,iExportObj->ExportvCardL(dBase, iStandard, idArray, writeStream, iContactFilter)); if(err != KErrNone) { SetTestStepError(err); } } } } else { TInt tryCount = 1; for ( ;; ) { __UHEAP_SETFAIL(RHeap::EDeterministic, tryCount); TRAP(err, iExportObj->ExportvCardL(dBase, iStandard, idArray, writeStream, iContactFilter)); if ( err == KErrNone ) { __UHEAP_RESET; INFO_PRINTF1(_L("OOM testing of CContactDatabase::ExportSelectedContactsL Api is done")); break; } if ( err != KErrNoMemory ) { INFO_PRINTF2(_L("The unexpected error code is:%d"),err); SetTestStepResult(EFail); break; } __UHEAP_SETFAIL(RHeap::ENone, 0); tryCount++; } } } } CleanupStack::Pop(idArray); CleanupStack::PopAndDestroy(exportFilter); INFO_PRINTF1(_L("Exported Contact")); writeStream.CommitL(); writeStream.Close(); INFO_PRINTF2(_L("Total number of contacts in database %d "), dBase->CountL()); // Cleanup CleanupStack::PopAndDestroy(dBase); CleanupStack::PopAndDestroy(&fsSession); }