diff -r 000000000000 -r e686773b3f54 pimprotocols/phonebooksync/Test/TE_cntsync/te_cntsyncbase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pimprotocols/phonebooksync/Test/TE_cntsync/te_cntsyncbase.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,544 @@ +// Copyright (c) 2004-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 +#include +#include + +#include "te_cntsyncadd.h" +#include "te_cntsyncdelete.h" +#include "te_cntsyncedit.h" +#include "te_cntsyncfind.h" +#include "te_cntsyncread.h" +#include "te_cntsyncstress.h" +#include "te_cntsyncbase.h" +#include "te_cntsyncsync.h" +#include "te_cntsyncutils.h" +#include "te_cntsyncview.h" + +#include + + +const TInt KTestStringSize=30; +typedef TBuf TTestString; + +#if defined (__WINS__) +#define PDD_NAME _L("ECDRV") +#define LDD_NAME _L("ECOMM") +#else +#define PDD_NAME _L("EUART1") +#define LDD_NAME _L("ECOMM") +#endif + +#include "te_cntsyncbase.h" + + +/** + Instruct the PhBkSync server to configure to a 'Full' state + by using the Secure Backup interface. This will cause the + server to reconnect to ETel and SIMTSY. + */ +void CCntSyncTestStep::ConfigurePhbkSyncToFullL() + { + // + // Ensure that the Secure Backup system does not currently think + // it is performing a backup or restore. + // + iSecureBackupEngine->SetBURModeL(TDriveList(_L8("C")), + EBURNormal, ENoBackup); + + // + // Connect to the server to ensure that the server is running and + // responding. + // + RPhoneBookSession phoneBookSession; + RPhoneBookSession::TPhonebookSyncMode dummySyncMode; + TInt ret; + + ret = phoneBookSession.Connect(); + TESTCHECKL(ret, KErrNone); + + ret = KErrNotReady; + while (ret != KErrNone) + { + ret = phoneBookSession.GetSyncMode(dummySyncMode); + if (ret != KErrNone) + { + User::After(1); + } + } + + phoneBookSession.Close(); + } // CCntSyncTestStep::ConfigurePhbkSyncToFullL + + +/** + Instruct the PhBkSync server to unconfigure to an 'Idle' state + by using the Secure Backup interface. This will cause the + server to disconnect from ETel and SIMTSY. This is effectively + the same as shutting down the server, but can be performed on + release versions. + */ +void CCntSyncTestStep::ConfigurePhbkSyncToIdleL() + { + // + // Connect to the server to ensure that the server is running. + // + RPhoneBookSession phoneBookSession; + TInt ret; + + ret = phoneBookSession.Connect(); + TESTCHECKL(ret, KErrNone); + + // + // Ensure that the Secure Backup system does not currently think + // it is performing a backup or restore. + // + iSecureBackupEngine->SetBURModeL(TDriveList(_L8("C")), + EBURBackupFull, EBackupBase); + + // + // Check that the server is responding. + // + RPhoneBookSession::TPhonebookSyncMode dummySyncMode; + + ret = KErrNone; + while (ret == KErrNone) + { + ret = phoneBookSession.GetSyncMode(dummySyncMode); + if (ret == KErrNone) + { + User::After(1); + } + } + + phoneBookSession.Close(); + } // CCntSyncTestStep::ConfigurePhbkSyncToIdleL + + +/** + * Set the synchronisation mode as aMode + * @param aMode RPhoneBookSession::TPhonebookSyncMode enumeration + */ +void CCntSyncTestStep::SetSyncModeL(RPhoneBookSession::TPhonebookSyncMode aMode) + { + User::LeaveIfError(iSession.SetSyncMode(aMode)); + User::LeaveIfError(iSession.SetSyncMode(aMode, KUidIccGlobalSdnPhonebook)); + User::LeaveIfError(iSession.SetSyncMode(aMode, KUidIccGlobalLndPhonebook)); + User::LeaveIfError(iSession.SetSyncMode(aMode, KUidUsimAppAdnPhonebook)); + User::LeaveIfError(iSession.SetSyncMode(aMode, KUidIccGlobalFdnPhonebook)); + } + + +/** + * Check the synchronisation mode is the same as aMode + * @param aMode RPhoneBookSession::TPhonebookSyncMode enumeration + */ +void CCntSyncTestStep::CheckSyncModeL(RPhoneBookSession::TPhonebookSyncMode aMode) + { + RPhoneBookSession::TPhonebookSyncMode mode; + User::LeaveIfError(iSession.GetSyncMode(mode)); + TESTCHECK(mode, aMode); + User::LeaveIfError(iSession.GetSyncMode(mode, KUidIccGlobalSdnPhonebook)); + TESTCHECK(mode, aMode); + User::LeaveIfError(iSession.GetSyncMode(mode, KUidIccGlobalLndPhonebook)); + TESTCHECK(mode, aMode); + User::LeaveIfError(iSession.GetSyncMode(mode, KUidUsimAppAdnPhonebook)); + TESTCHECK(mode, aMode); + User::LeaveIfError(iSession.GetSyncMode(mode, KUidIccGlobalFdnPhonebook)); + TESTCHECK(mode, aMode); + } + + +/** + * Check the synchronisation state is aStat + * + * @param aState An expected sync state enumeration value. + */ +void CCntSyncTestStep::CheckCacheStateL(RPhoneBookSession::TSyncState aState) + { + RPhoneBookSession::TSyncState state; + TInt ret; + + ret = iSession.GetPhoneBookCacheState(state, KUidIccGlobalAdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + TESTCHECK(state, aState); + + ret = iSession.GetPhoneBookCacheState(state, KUidIccGlobalSdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + TESTCHECK(state, aState); + + ret = iSession.GetPhoneBookCacheState(state, KUidIccGlobalLndPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + TESTCHECK(state, aState); + + ret = iSession.GetPhoneBookCacheState(state, KUidUsimAppAdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + TESTCHECK(state, aState); + + ret = iSession.GetPhoneBookCacheState(state, KUidIccGlobalFdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + TESTCHECK(state, aState); + } + +TVerdict CCntSyncTestStep::doTestStepPreambleL() + { + __UHEAP_MARK; //mark for memory leaks!! + + iScheduler=new(ELeave) CActiveScheduler; + CActiveScheduler::Install(iScheduler); + + iSecureBackupEngine = CSBEClient::NewL(); + iSecureBackupEngine->SetBURModeL(TDriveList(_L8("C")), + EBURNormal, ENoBackup); + + TInt ret = iSession.Connect(); + TESTCHECKL(ret, KErrNone); + + // + // Open the existing database or create a new one. + // + TRAPD(err, iDb = OpenOrCreateContactDatabaseL()); + TESTCHECKL(err, KErrNone); + + return TestStepResult() ; + } + +TVerdict CCntSyncTestStep::doTestStepPostambleL() + { + delete iDb; + iDb=NULL; + + iSession.Close(); + + delete iSecureBackupEngine; + iSecureBackupEngine = NULL; + + delete iScheduler; + iScheduler = NULL; + + __UHEAP_MARKEND; + + return TestStepResult() ; + } + + +/** + * Set the SIM TSY test number to run + * + */ +void CCntSyncTestStep::SetSimTsyTestNumberL(TInt aTestNumber) + { + RProperty testNumberProperty; + User::LeaveIfError(testNumberProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTestNumber)); + CleanupClosePushL(testNumberProperty); + + TRequestStatus status; + testNumberProperty.Subscribe(status); + User::LeaveIfError(testNumberProperty.Set(KUidPSSimTsyCategory,KPSSimTsyTestNumber,aTestNumber)); + User::WaitForRequest(status); + User::LeaveIfError(status.Int()); + TInt testNumberCheck; + User::LeaveIfError(testNumberProperty.Get(testNumberCheck)); + if (aTestNumber != testNumberCheck) + { + User::Leave(KErrNotFound); + } + + CleanupStack::PopAndDestroy(&testNumberProperty); + + delete iDb; + iDb=NULL; + + iSession.Close(); + + // + // Ensure that the server resets its configuration.... + // + ConfigurePhbkSyncToIdleL(); + ConfigurePhbkSyncToFullL(); + + iDb = OpenOrCreateContactDatabaseL(); + + User::LeaveIfError(iSession.Connect()); + + // Ensure that the test number has been set properly + RProperty testNumberInUseProperty; + User::LeaveIfError(testNumberInUseProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTestNumberInUse)); + CleanupClosePushL(testNumberInUseProperty); + + TInt testNumberInUseCheck; + User::LeaveIfError(testNumberInUseProperty.Get(KUidPSSimTsyCategory, KPSSimTsyTestNumberInUse,testNumberInUseCheck)); + TESTCHECKL(aTestNumber,testNumberInUseCheck); + + CleanupStack::PopAndDestroy(&testNumberInUseProperty); + + } // CCntSyncTestStep::SetSimTsyTestNumberL + + +/** + * Publish a new value to indicate that test has finished and simtsy timer can now stop. + * + */ +void CCntSyncTestStep::SignalSimTsyToReduceTimersL() + { + RProperty reduceTimersProperty; + User::LeaveIfError(reduceTimersProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTimersReduceTime)); + CleanupClosePushL(reduceTimersProperty); + + User::LeaveIfError(reduceTimersProperty.Set(KUidPSSimTsyCategory, KPSSimTsyTimersReduceTime, + KReduceSimTsyTimers)); + + CleanupStack::PopAndDestroy(&reduceTimersProperty); + } + + +/** + * Opens the Contacts Database, allowing for errors if the database exists + * or is not found. The function will retry where appropriate. + * + * @return Pointer to opened database. + */ +CContactDatabase* CCntSyncTestStep::OpenOrCreateContactDatabaseL() + { + CContactDatabase* db = NULL; + + // + // 10 attempts at opening the Contacts DB... + // + TInt retryCount = 10; + + while (retryCount > 0) + { + TRAPD(err, db = CContactDatabase::OpenL()); + if (err == KErrNone) + { + return db; + } + else if (err == KErrNotFound) + { + TRAP(err, db = CContactDatabase::CreateL()); + if (err == KErrNone) + { + return db; + } + } + + // + // If this is the last attempt then give up... + // + if (retryCount == 0) + { + User::Leave(err); + } + + // + // Wait a short time and retry... + // + User::After(1000000); + retryCount--; + } + + return db; + } // CCntSyncTestStep::OpenOrCreateContactDatabaseL + + +/** Do a manual synchronisation */ +void CCntSyncTestStep::DoSyncL() + { + // Global ADN Phonebook + TRequestStatus status; + iSession.DoSynchronisation(status); + User::WaitForRequest(status); + TESTCHECKL(status.Int(), KErrNone); + + // Global SDN Phonebook + iSession.DoSynchronisation(status, KUidIccGlobalSdnPhonebook); + User::WaitForRequest(status); + TESTCHECKL(status.Int(), KErrNone); + + // Global LND Phonebook + iSession.DoSynchronisation(status, KUidIccGlobalLndPhonebook); + User::WaitForRequest(status); + TESTCHECKL(status.Int(), KErrNone); + + // Usim App ADN Phonebook + iSession.DoSynchronisation(status, KUidUsimAppAdnPhonebook); + User::WaitForRequest(status); + TESTCHECKL(status.Int(), KErrNone); + + // Global FDN Phonebook + iSession.DoSynchronisation(status, KUidIccGlobalFdnPhonebook); + User::WaitForRequest(status); + TESTCHECKL(status.Int(), KErrNone); + } + +/** Do a manual synchronisation, but without checking for a succeess. This mehtod can + * be used to test DoSync failures. + */ +void CCntSyncTestStep::DoSyncFailL() + { + TRequestStatus status; + iSession.DoSynchronisation(status, KUidIccGlobalAdnPhonebook); + User::WaitForRequest(status); + //If status is KErrNone then view has already been created so, sync + //will not fail with access denied so no point in continuing with the test + if(status.Int() == KErrNone) + { + User::Leave(KErrGeneral); + } + TESTCHECKL(status.Int(), KErrAccessDenied); + + // Global SDN Phonebook + iSession.DoSynchronisation(status, KUidIccGlobalSdnPhonebook); + User::WaitForRequest(status); + //If status is KErrNone then view has already been created so, sync + //will not fail with access denied so no point in continuing with the test + if(status.Int() == KErrNone) + { + User::Leave(KErrGeneral); + } + TESTCHECKL(status.Int(), KErrAccessDenied); + + // Global LND Phonebook + iSession.DoSynchronisation(status, KUidIccGlobalLndPhonebook); + User::WaitForRequest(status); + //If status is KErrNone then view has already been created so, sync + //will not fail with access denied so no point in continuing with the test + if(status.Int() == KErrNone) + { + User::Leave(KErrGeneral); + } + TESTCHECKL(status.Int(), KErrAccessDenied); + + // Usim App ADN Phonebook + iSession.DoSynchronisation(status, KUidUsimAppAdnPhonebook); + User::WaitForRequest(status); + //If status is KErrNone then view has already been created so, sync + //will not fail with access denied so no point in continuing with the test + if(status.Int() == KErrNone) + { + User::Leave(KErrGeneral); + } + TESTCHECKL(status.Int(), KErrAccessDenied); + + // Global FDN Phonebook + iSession.DoSynchronisation(status, KUidIccGlobalFdnPhonebook); + User::WaitForRequest(status); + //If status is KErrNone then view has already been created so, sync + //will not fail with access denied so no point in continuing with the test + if(status.Int() == KErrNone) + { + User::Leave(KErrGeneral); + } + TESTCHECKL(status.Int(), KErrAccessDenied); + } + +void CCntSyncTestStep::WaitForSyncToCompleteL() +/** + * Wait for all phonebooks to become syncronised. The phonebooks checked are ADN, SDN, + * LND, USIM ADN and FDN. + */ { + RPhoneBookSession::TSyncState iccAdnState, iccSdnState, iccLndState; + RPhoneBookSession::TSyncState usimAdnState, iccFdnState; + + // + // Initial check and setup of variables... + // + TInt ret; + + ret = iSession.GetPhoneBookCacheState(iccAdnState, KUidIccGlobalAdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + ret = iSession.GetPhoneBookCacheState(iccSdnState, KUidIccGlobalSdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + ret = iSession.GetPhoneBookCacheState(iccLndState, KUidIccGlobalLndPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + ret = iSession.GetPhoneBookCacheState(usimAdnState, KUidUsimAppAdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + ret = iSession.GetPhoneBookCacheState(iccFdnState, KUidIccGlobalFdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + + // + // Wait if needed, checking every 1 second... + // + while (iccAdnState != RPhoneBookSession::ECacheValid || + iccSdnState != RPhoneBookSession::ECacheValid || + iccLndState != RPhoneBookSession::ECacheValid || + usimAdnState != RPhoneBookSession::ECacheValid || + iccFdnState != RPhoneBookSession::ECacheValid) + { + User::After(1000000); + ret = iSession.GetPhoneBookCacheState(iccAdnState, KUidIccGlobalAdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + ret = iSession.GetPhoneBookCacheState(iccSdnState, KUidIccGlobalSdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + ret = iSession.GetPhoneBookCacheState(iccLndState, KUidIccGlobalLndPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + ret = iSession.GetPhoneBookCacheState(usimAdnState, KUidUsimAppAdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + ret = iSession.GetPhoneBookCacheState(iccFdnState, KUidIccGlobalFdnPhonebook); + if (ret != KErrNone && ret != KErrNotReady) + { + User::Leave(ret); + } + } + }