--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/test/integration/src/tsimtsytesthelper.cpp Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,525 @@
+// Copyright (c) 2007-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 "tsimtsytesthelper.h"
+#include "cctsyinidata.h"
+
+/**
+* Constructor
+*/
+TSimTsyTestHelper::TSimTsyTestHelper(CCTSYIntegrationTestSuiteStepBase& aTestStep)
+ : TTsyTestHelperBase( aTestStep )
+ {
+ }
+/**
+* Notify reset for RMobilePhone::NotifyUSimApplicationsInfoChange
+*/
+void TSimTsyTestHelper::WaitForMobilePhoneNotifyUSimApplicationsInfoChange(
+ RMobilePhone& aMobilePhone,
+ TEtelRequestBase& aRequestStatus,
+ TInt& aCount,
+ TInt aExpectedCount,
+ RMobilePhone::TAID &aActiveAID,
+ TInt aWantedStatus )
+
+ {
+ // Wait for the request to complete
+ TInt err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ ASSERT_EQUALS(err, KErrNone, _L("RMobilePhone::NotifyUSimApplicationsInfoChange did not complete"))
+
+ while ( err == KErrNone && aRequestStatus.Int() == KErrNone
+ && aCount != aExpectedCount )
+ {
+ // Request has completed with incorrect result. Consume any outstanding
+ // Repost notification until timeout or we get the right result.
+
+ aMobilePhone.NotifyUSimApplicationsInfoChange(aRequestStatus, aCount, aActiveAID);
+ err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ }
+
+ ASSERT_EQUALS(aRequestStatus.Int(), aWantedStatus, _L("RMobilePhone::NotifyUSimApplicationsInfoChange Wrong completion status"))
+ ASSERT_EQUALS(aCount, aExpectedCount,
+ _L("RMobilePhone::NotifyUSimApplicationsInfoChange Wrong result"))
+
+ // Cancel request if it is still pending
+ if (aRequestStatus.Int() == KRequestPending)
+ {
+ aRequestStatus.Cancel();
+ }
+ }
+
+
+/**
+* Notify reset for RMobilePhone::NotifyUSimAppsSelectionModeChange
+*/
+void TSimTsyTestHelper::WaitForMobilePhoneNotifyUSimAppsSelectionModeChange(
+ RMobilePhone& aMobilePhone,
+ TEtelRequestBase& aRequestStatus,
+ RMobilePhone::TUSimSelectionMode& aUSimSelectionMode,
+ RMobilePhone::TUSimSelectionMode aExpectedUSimSelectionMode,
+ TInt aWantedStatus )
+
+ {
+ // Wait for the request to complete
+ TInt err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ ASSERT_EQUALS(err, KErrNone, _L("RMobilePhone::NotifyUSimAppsSelectionModeChange did not complete"))
+
+ while ( err == KErrNone && aRequestStatus.Int() == KErrNone
+ && aUSimSelectionMode != aExpectedUSimSelectionMode )
+ {
+ // Request has completed with incorrect result. Consume any outstanding
+ // Repost notification until timeout or we get the right result.
+
+ aMobilePhone.NotifyUSimAppsSelectionModeChange(aRequestStatus, aUSimSelectionMode);
+ err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ }
+
+ ASSERT_EQUALS(aRequestStatus.Int(), aWantedStatus, _L("RMobilePhone::NotifyUSimAppsSelectionModeChange Wrong completion status"))
+ ASSERT_EQUALS(aUSimSelectionMode, aExpectedUSimSelectionMode,
+ _L("RMobilePhone::NotifyUSimAppsSelectionModeChange Wrong result"))
+
+ // Cancel request if it is still pending
+ if (aRequestStatus.Int() == KRequestPending)
+ {
+ aRequestStatus.Cancel();
+ }
+ }
+
+
+/**
+* Notify reset for RMobilePhone::NotifyUUSSettingChange
+*/
+void TSimTsyTestHelper::WaitForMobilePhoneNotifyUUSSettingChange(
+ RMobilePhone& aMobilePhone,
+ TEtelRequestBase& aRequestStatus,
+ RMobilePhone::TMobilePhoneUUSSetting& aSetting,
+ RMobilePhone::TMobilePhoneUUSSetting aExpectedSetting,
+ TInt aWantedStatus )
+
+ {
+ // Wait for the request to complete
+ TInt err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ ASSERT_EQUALS(err, KErrNone, _L("RMobilePhone::NotifyUUSSettingChange did not complete"))
+
+ while ( err == KErrNone && aRequestStatus.Int() == KErrNone
+ && aSetting != aExpectedSetting )
+ {
+ // Request has completed with incorrect result. Consume any outstanding
+ // Repost notification until timeout or we get the right result.
+
+ aMobilePhone.NotifyUUSSettingChange(aRequestStatus, aSetting);
+ err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ }
+
+ ASSERT_EQUALS(aRequestStatus.Int(), aWantedStatus, _L("RMobilePhone::NotifyUUSSettingChange Wrong completion status"))
+ ASSERT_EQUALS(aSetting, aExpectedSetting,
+ _L("RMobilePhone::NotifyUUSSettingChange Wrong result"))
+
+ // Cancel request if it is still pending
+ if (aRequestStatus.Int() == KRequestPending)
+ {
+ aRequestStatus.Cancel();
+ }
+ }
+
+
+/**
+* Notify reset for RMobilePhone::NotifyIccMessageWaitingIndicatorsChange
+*/
+void TSimTsyTestHelper::WaitForMobilePhoneNotifyIccMessageWaitingIndicatorsChange(
+ RMobilePhone& aMobilePhone,
+ TEtelRequestBase& aRequestStatus,
+ TCmpBase<RMobilePhone::TMobilePhoneMessageWaitingV1> &aMobilePhoneMessageWaitingV1,
+ TInt aWantedStatus )
+
+ {
+ // Wait for the request to complete
+ TInt err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ ASSERT_EQUALS(err, KErrNone, _L("RMobilePhone::NotifyIccMessageWaitingIndicatorsChange did not complete"))
+
+ while ( err == KErrNone && aRequestStatus.Int() == KErrNone
+ && !aMobilePhoneMessageWaitingV1.IsEqual(ENoLogError) )
+ {
+ // Request has completed with incorrect result. Consume any outstanding
+ // Repost notification until timeout or we get the right result.
+ RMobilePhone::TMobilePhoneMessageWaitingV1Pckg pkgParam( aMobilePhoneMessageWaitingV1.GetValue() );
+ aMobilePhone.NotifyIccMessageWaitingIndicatorsChange(aRequestStatus, pkgParam);
+ err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ }
+
+ ASSERT_EQUALS(aRequestStatus.Int(), aWantedStatus, _L("RMobilePhone::NotifyIccMessageWaitingIndicatorsChange Wrong completion status"))
+ ASSERT_TRUE(aMobilePhoneMessageWaitingV1.IsEqual(ELogError),
+ _L("RMobilePhone::NotifyIccMessageWaitingIndicatorsChange Wrong result"))
+
+ // Cancel request if it is still pending
+ if (aRequestStatus.Int() == KRequestPending)
+ {
+ aRequestStatus.Cancel();
+ }
+ }
+
+
+/**
+* Notify reset for RMobilePhone::NotifyImsAuthorizationInfoChange
+*/
+void TSimTsyTestHelper::WaitForMobilePhoneNotifyImsAuthorizationInfoChange(
+ TEtelRequestBase& aRequestStatus,
+ TInt aWantedStatus )
+
+ {
+ // Wait for the request to complete
+ TInt err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ ASSERT_EQUALS(err, KErrNone, _L("RMobilePhone::NotifyImsAuthorizationInfoChange did not complete"))
+ ASSERT_EQUALS(aRequestStatus.Int(), aWantedStatus, _L("RMobilePhone::NotifyImsAuthorizationInfoChange Wrong completion status"))
+ // Cancel request if it is still pending
+ if (aRequestStatus.Int() == KRequestPending)
+ {
+ aRequestStatus.Cancel();
+ }
+ }
+
+
+/**
+* Notify reset for RMobilePhone::NotifySmartCardApplicationInfoChange
+*/
+void TSimTsyTestHelper::WaitForMobilePhoneNotifySmartCardApplicationInfoChange(
+ RMobilePhone& aMobilePhone,
+ TEtelRequestBase& aRequestStatus,
+ RMobilePhone::TAID& aAID,
+ RMobilePhone::TAID& aExpectedAID,
+ RMobilePhone::TSmartCardApplicationEvent &aEvent,
+ TInt aWantedStatus )
+
+ {
+ // Wait for the request to complete
+ TInt err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ ASSERT_EQUALS(err, KErrNone, _L("RMobilePhone::NotifySmartCardApplicationInfoChange did not complete"))
+
+ while ( err == KErrNone && aRequestStatus.Int() == KErrNone
+ && aAID != aExpectedAID )
+ {
+ // Request has completed with incorrect result. Consume any outstanding
+ // Repost notification until timeout or we get the right result.
+
+ aMobilePhone.NotifySmartCardApplicationInfoChange(aRequestStatus, aAID, aEvent);
+ err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ }
+
+ ASSERT_EQUALS(aRequestStatus.Int(), aWantedStatus, _L("RMobilePhone::NotifySmartCardApplicationInfoChange Wrong completion status"))
+ ASSERT_EQUALS_DES8(aAID, aExpectedAID,
+ _L("RMobilePhone::NotifySmartCardApplicationInfoChange Wrong result"))
+
+ // Cancel request if it is still pending
+ if (aRequestStatus.Int() == KRequestPending)
+ {
+ aRequestStatus.Cancel();
+ }
+ }
+
+
+/**
+* Notify reset for RMobilePhone::NotifyMailboxNumbersChange
+*/
+void TSimTsyTestHelper::WaitForMobilePhoneNotifyMailboxNumbersChange(
+ RMobilePhone& aMobilePhone,
+ TEtelRequestBase& aRequestStatus,
+ TCmpBase<RMobilePhone::TMobilePhoneVoicemailIdsV3> &aMobilePhoneVoicemailIdsV3,
+ TInt aWantedStatus )
+
+ {
+ // Wait for the request to complete
+ TInt err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ ASSERT_EQUALS(err, KErrNone, _L("RMobilePhone::NotifyMailboxNumbersChange did not complete"))
+
+ while ( err == KErrNone && aRequestStatus.Int() == KErrNone
+ && !aMobilePhoneVoicemailIdsV3.IsEqual(ENoLogError) )
+ {
+ // Request has completed with incorrect result. Consume any outstanding
+ // Repost notification until timeout or we get the right result.
+ RMobilePhone::TMobilePhoneVoicemailIdsV3Pckg pkgParam( aMobilePhoneVoicemailIdsV3.GetValue() );
+ aMobilePhone.NotifyMailboxNumbersChange(aRequestStatus, pkgParam);
+ err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ }
+
+ ASSERT_EQUALS(aRequestStatus.Int(), aWantedStatus, _L("RMobilePhone::NotifyMailboxNumbersChange Wrong completion status"))
+ ASSERT_TRUE(aMobilePhoneVoicemailIdsV3.IsEqual(ELogError),
+ _L("RMobilePhone::NotifyMailboxNumbersChange Wrong result"))
+
+ // Cancel request if it is still pending
+ if (aRequestStatus.Int() == KRequestPending)
+ {
+ aRequestStatus.Cancel();
+ }
+ }
+
+
+/**
+* Notify reset for RMobilePhoneStore::NotifyStoreEvent
+*/
+void TSimTsyTestHelper::WaitForMobilePhoneStoreNotifyStoreEvent(
+ RMobilePhoneStore& aMobilePhoneStore,
+ TEtelRequestBase& aRequestStatus,
+ TUint32& aEvent,
+ TUint32 aExpectedEvent,
+ TInt &aIndex,
+ TInt aWantedStatus )
+
+ {
+ // Wait for the request to complete
+ TInt err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeMedium);
+ ASSERT_EQUALS(err, KErrNone, _L("RMobilePhoneStore::NotifyStoreEvent did not complete"))
+
+ while ( err == KErrNone && aRequestStatus.Int() == KErrNone
+ && aEvent != aExpectedEvent )
+ {
+ // Request has completed with incorrect result. Consume any outstanding
+ // Repost notification until timeout or we get the right result.
+
+ aMobilePhoneStore.NotifyStoreEvent(aRequestStatus, aEvent, aIndex);
+ err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeMedium);
+ }
+
+ ASSERT_EQUALS(aRequestStatus.Int(), aWantedStatus, _L("RMobilePhoneStore::NotifyStoreEvent Wrong completion status"))
+ ASSERT_EQUALS(aEvent, aExpectedEvent,
+ _L("RMobilePhoneStore::NotifyStoreEvent Wrong result"))
+
+ // Cancel request if it is still pending
+ if (aRequestStatus.Int() == KRequestPending)
+ {
+ aRequestStatus.Cancel();
+ }
+ }
+
+
+/**
+* Notify reset for RMobileSmartCardEap::NotifyEapMethodAccessStatusChange
+*/
+void TSimTsyTestHelper::WaitForMobileSmartCardEapNotifyEapMethodAccessStatusChange(
+ RMobileSmartCardEap& aMobileSmartCardEap,
+ TEtelRequestBase& aRequestStatus,
+ RMobileSmartCardEap::TEapMethodAccessStatus& aEapMethodStatus,
+ RMobileSmartCardEap::TEapMethodAccessStatus aExpectedEapMethodStatus,
+ TInt aWantedStatus )
+
+ {
+ // Wait for the request to complete
+ TInt err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ ASSERT_EQUALS(err, KErrNone, _L("RMobileSmartCardEap::NotifyEapMethodAccessStatusChange did not complete"))
+
+ while ( err == KErrNone && aRequestStatus.Int() == KErrNone
+ && aEapMethodStatus != aExpectedEapMethodStatus )
+ {
+ // Request has completed with incorrect result. Consume any outstanding
+ // Repost notification until timeout or we get the right result.
+
+ aMobileSmartCardEap.NotifyEapMethodAccessStatusChange(aRequestStatus, aEapMethodStatus);
+ err = iTestStep.WaitForRequestWithTimeOut(aRequestStatus, ETimeShort);
+ }
+
+ ASSERT_EQUALS(aRequestStatus.Int(), aWantedStatus, _L("RMobileSmartCardEap::NotifyEapMethodAccessStatusChange Wrong completion status"))
+ ASSERT_EQUALS(aEapMethodStatus, aExpectedEapMethodStatus,
+ _L("RMobileSmartCardEap::NotifyEapMethodAccessStatusChange Wrong result"))
+
+ // Cancel request if it is still pending
+ if (aRequestStatus.Int() == KRequestPending)
+ {
+ aRequestStatus.Cancel();
+ }
+ }
+#if 0
+template<typename T>
+TInt TSimTsyTestHelper::GetNumberOfUsedEntriesInStoreL(
+ RMobilePhoneStore& aPhoneStore,
+ const TDesC& aStoreName,
+ T& aInfoPkg,
+ RMobilePhone& aPhone,
+ TInt& aUsedEntries1,
+ TInt& aUsedEntries2)
+/**
+ * Uses two methods of getting the number of entries in the ICC SMS store.
+ *
+ * @param aSmsStore SMS store subsession
+ * @param aGetInfoError Error returned by RMobilePhoneStore::GetInfo. If this is
+ * KErrNone, aUsedEntries is valid.
+ * @param aUsedEntries Number of used entries as returned by RMobilePhoneStore::GetInfo
+ * @param aGetPhoneStoreInfoError Error returned by RMobilePhone::GetPhoneStoreInfo. If this is
+ * KErrNone, this indicates that aUsedEntries2 is valid.
+ * @param aUsedEntriews2 Number of used entries as returned by RMobilePhone::GetPhoneStoreInfo
+ *
+ * @return KErrNone if one of the get info APIs are supported, KErrNotSupported if neither
+ * are supported.
+ */
+ {
+ // Get number of entries using RMobilePhoneStore::GetInfo
+ TExtEtelRequestStatus getInfoStatus (aPhoneStore,EMobilePhoneStoreGetInfo);
+ CleanupStack::PushL(getInfoStatus);
+ aPhoneStore.GetInfo(getInfoStatus,aInfoPkg);
+ ASSERT_EQUALS(iTestStep.WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
+ if (getInfoStatus.Int() == KErrNone)
+ {
+ aUsedEntries1 = aInfoPkg().iUsedEntries;
+ }
+ else
+ {
+ DEBUG_PRINTF2(_L("RMobilePhoneStore::GetInfo returned with error = %d"), getInfoStatus.Int());
+ }
+
+ // Get number of entries using RMobilePhone::GetPhoneStoreInfo
+ TExtEtelRequestStatus getInfoStatus2 (aPhoneStore,EMobilePhoneStoreGetInfo);
+ CleanupStack::PushL(getInfoStatus2);
+ aPhone.GetPhoneStoreInfo(getInfoStatus2,aInfoPkg, aStoreName);
+ ASSERT_EQUALS(iTestStep.WaitForRequestWithTimeOut(getInfoStatus2, ETimeMedium), KErrNone,_L("RMobilePhone::GetPhoneStoreInfo timed out"));
+ if (getInfoStatus2.Int() == KErrNone)
+ {
+ aUsedEntries2 = aInfoPkg().iUsedEntries;
+ }
+ else
+ {
+ DEBUG_PRINTF2(_L("RMobilePhone::GetPhoneStoreInfo returned with error = %d"), getInfoStatus2.Int());
+ }
+
+ if (getInfoStatus.Int() == KErrNone || getInfoStatus2.Int() == KErrNone)
+ {
+ CleanupStack::PopAndDestroy(2);
+ return KErrNone;
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(2);
+ return KErrNotSupported;
+ }
+ }
+
+
+TInt TSimTsyTestHelper::AssertNumberOfUsedEntriesCorrectL
+ (RMobilePhoneStore& aPhoneStore,
+ const TDesC& aStoreName,
+ T& aInfoPkg,
+ RMobilePhone& aPhone,
+ TInt aExpectedGetInfoEntries,
+ TInt aExpectedGetPhoneStoreInfoEntries)
+/**
+ * Call RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo and checks
+ * that the number of used entries in the phone book is the expected value if the
+ * API is supported.
+ *
+ * @param aPhoneStore Reference to phone store subsession.
+ * @param aStoreName Store name from Etelmm
+ * @param aExpectedGetInfoEntries A expected number of entries to be returned by
+ * RMobilePhoneStore::GetInfo
+ * @param aExpectedGetPhoneStoreInfoEntries A expected number of entries to be
+ * returned by RMobilePhone::GetPhoneStoreInfo
+ *
+ * @return KErrNone if RMobilePhone::GetPhoneStoreInfo or RMobilePhoneStore::GetInfo
+ * completed with KErrNone. KErrNotSupported otherwise.
+ */
+ {
+ // Check RMobilePhoneStore::GetInfo returns iUsedEntries which is equal to aExpectedGetInfoEntries
+ TExtEtelRequestStatus getInfoStatus (aPhoneStore, EMobilePhoneStoreGetInfo);
+ CleanupStack::PushL(getInfoStatus);
+ aPhoneStore.GetInfo(getInfoStatus,aInfoPkg);
+ ASSERT_EQUALS(iTestStep.WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium), KErrNone, _L("RMobilePhoneStore::GetInfo, Timed out"))
+
+ if (getInfoStatus.Int() == KErrNone)
+ {
+ ASSERT_EQUALS(getInfoStatus.Int(), KErrNone, _L("RMobilePhoneStore::GetInfo returned an error"))
+ ASSERT_EQUALS(aExpectedGetInfoEntries, (aInfoPkg().iUsedEntries), _L("RMobilePhoneStore::GetInfo Unexpected number of iUsedEntries returned" ))
+ }
+
+ // Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries which is equal to aExpectedGetPhoneStoreInfoEntries
+ TExtEtelRequestStatus getInfoStatus2 (aPhoneStore, EMobilePhoneStoreGetInfo);
+ CleanupStack::PushL(getInfoStatus2);
+ aPhone.GetPhoneStoreInfo(getInfoStatus2,aInfoPkg, aStoreName);
+ ASSERT_EQUALS(iTestStep.WaitForRequestWithTimeOut(getInfoStatus2, ETimeMedium), KErrNone, _L("RMobilePhone::GetPhoneStoreInfo timed out"))
+
+ if (getInfoStatus2.Int() == KErrNone)
+ {
+ ASSERT_EQUALS(getInfoStatus2.Int(), KErrNone, _L("RMobilePhone::GetPhoneStoreInfo returned an error"))
+ ASSERT_EQUALS(aExpectedGetPhoneStoreInfoEntries, (aInfoPkg().iUsedEntries ), _L("RMobilePhone::GetPhoneStoreInfo Unexpected number of iUsedEntries returned" ))
+ }
+
+ if (getInfoStatus.Int() == KErrNone || getInfoStatus2.Int() == KErrNone)
+ {
+ CleanupStack::PopAndDestroy(2);
+ return KErrNone;
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(2);
+ return KErrNotSupported;
+ }
+ }
+#endif
+
+void TSimTsyTestHelper::VerifyPin2L(RMobilePhone& aMobilePhone, TNetworkTsyTestHelper& aNetworkTsyTestHelper)
+/**
+ * member function for enabling pin2 for FDN phone book
+ * @param aMobilePhone reference to RMobilePhone
+ * @param aNetworkTsyTestHelper reference to TNetworkTsyTestHelper
+ *
+ * @return void.
+ */
+ {
+
+ const TDesC* networkSection = NULL;
+ aNetworkTsyTestHelper.GetNetworkPasswordsSectionL(aMobilePhone,networkSection);
+
+ // Get the password from the ini file
+ TPtrC password;
+ CHECK_TRUE_L(iTestStep.GetStringFromConfig(*networkSection, KIniPin2, password) != EFalse,
+ _L("GetStringFromConfig returned with an error"));
+
+ TExtEtelRequestStatus notifySecurityEventStatus(aMobilePhone, EMobilePhoneNotifySecurityEvent);
+ CleanupStack::PushL( notifySecurityEventStatus );
+ RMobilePhone::TMobilePhoneSecurityEvent securityEvent;
+ aMobilePhone.NotifySecurityEvent(notifySecurityEventStatus, securityEvent);
+
+ TExtEtelRequestStatus verifySecurityCodeStatus(aMobilePhone, EMobilePhoneVerifySecurityCode);
+ CleanupStack::PushL( verifySecurityCodeStatus );
+ RMobilePhone::TMobilePassword dummyUnblockCode;
+
+ aMobilePhone.VerifySecurityCode( verifySecurityCodeStatus, RMobilePhone::ESecurityCodePin2,
+ password, dummyUnblockCode );
+
+ CHECK_EQUALS_L(iTestStep.WaitForRequestWithTimeOut(verifySecurityCodeStatus, ETimeMedium),
+ KErrNone, _L("RMobilePhone::VerifySecurityCode timed-out"));
+ CHECK_EQUALS_L( verifySecurityCodeStatus.Int(), KErrNone, _L("RMobilePhone::VerifySecurityCode returned with an error"));
+
+ TInt err = iTestStep.WaitForRequestWithTimeOut(notifySecurityEventStatus, ETimeShort);
+ CHECK_EQUALS_L(err, KErrNone, _L("RMobilePhone::NotifySecurityEvent did not complete"))
+
+ while ( err == KErrNone && notifySecurityEventStatus.Int() == KErrNone
+ && securityEvent != RMobilePhone::EPin2Verified )
+ {
+ // Request has completed with incorrect result. Consume any outstanding
+ // Repost notification until timeout or we get the right result.
+
+ aMobilePhone.NotifySecurityEvent(notifySecurityEventStatus, securityEvent);
+ err = iTestStep.WaitForRequestWithTimeOut(notifySecurityEventStatus, ETimeShort);
+ }
+
+ CHECK_EQUALS_L(notifySecurityEventStatus.Int(), KErrNone, _L("RMobilePhone::NotifySecurityEvent Wrong completion status"))
+ CHECK_EQUALS_L(securityEvent, RMobilePhone::EPin2Verified,
+ _L("RMobilePhone::NotifySecurityEvent Wrong result"))
+
+ // Cancel request if it is still pending
+ if (notifySecurityEventStatus.Int() == KRequestPending)
+ {
+ notifySecurityEventStatus.Cancel();
+ }
+
+ CleanupStack::PopAndDestroy(2,¬ifySecurityEventStatus);
+
+ }