telephonyserverplugins/common_tsy/test/integration/src/cctsyintegrationtestsmspstore.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/test/integration/src/cctsyintegrationtestsmspstore.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,1394 @@
+// 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:
+// Test step definitions for the SMSPStore functional unit.
+// 
+//
+
+/**
+ @internalTechnology
+*/
+
+#include "cctsyintegrationtestsmspstore.h"
+#include "listretrievalhelpers.h"
+
+	
+CCTSYIntegrationTestSMSPStoreBase::CCTSYIntegrationTestSMSPStoreBase(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestSuiteStepBase(aEtelSessionMgr), iSmsMessagingTestHelper(*this)
+/**
+ * Constructor
+ */
+	{
+	}
+
+CCTSYIntegrationTestSMSPStoreBase::~CCTSYIntegrationTestSMSPStoreBase()
+/*
+ * Destructor
+ */
+	{
+	}
+	
+
+CCTSYIntegrationTestSMSPStore0001::CCTSYIntegrationTestSMSPStore0001(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestSMSPStoreBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestSMSPStore0001::GetTestStepName());
+	}
+	
+	
+TBool CCTSYIntegrationTestSMSPStoreBase::CompareEntries(const RMobileSmsMessaging::TMobileSmspEntryV1 &aEntry1,
+		const RMobileSmsMessaging::TMobileSmspEntryV1 &aEntry2)
+/*
+ * This function copares the previously stored enteries
+ *
+ * @param aEntry1 and aEntry2 reference the stored entries before and after retrival of them.
+ * @return true if the comparison of enteries is successful.
+ *
+ */
+	{
+	TBool ret=ETrue;
+	
+	// Making Comparison with respect to Valid Parameter returned by the board
+	if(aEntry2.iValidParams & RMobileSmsMessaging::KSCAIncluded)
+		{
+		// Check CRetrieveMobilePhoneSmspList::Start returned correct service centre details
+		ASSERT_EQUALS_DES16(aEntry1.iServiceCentre.iTelNumber, aEntry2.iServiceCentre.iTelNumber, _L("CRetrieveMobilePhoneSmspList::Start did not return correct service centre telephone number "));
+		ASSERT_EQUALS(aEntry1.iServiceCentre.iNumberPlan, aEntry2.iServiceCentre.iNumberPlan, _L("CRetrieveMobilePhoneSmspList::Start did not return correct service centre number plan "));
+		ASSERT_EQUALS(aEntry1.iServiceCentre.iTypeOfNumber, aEntry2.iServiceCentre.iTypeOfNumber, _L("CRetrieveMobilePhoneSmspList::Start did not return correct service centre type of number "));
+		ASSERT_EQUALS(aEntry1.iIndex, aEntry2.iIndex, _L("Indexes are diffrent "));
+		if(aEntry1.iServiceCentre.iTelNumber!=aEntry2.iServiceCentre.iTelNumber
+				|| aEntry1.iServiceCentre.iNumberPlan!=aEntry2.iServiceCentre.iNumberPlan
+				|| aEntry1.iServiceCentre.iTypeOfNumber!=aEntry2.iServiceCentre.iTypeOfNumber)
+				ret=EFalse;	
+		}
+		
+	if(aEntry2.iValidParams & RMobileSmsMessaging::KDestinationIncluded)
+		{
+		// Check CRetrieveMobilePhoneSmspList::Start returned correct destination details
+		ASSERT_EQUALS_DES16(aEntry1.iDestination.iTelNumber, aEntry2.iDestination.iTelNumber, _L("CRetrieveMobilePhoneSmspList::Start did not return correct destination telephone number"));
+		ASSERT_EQUALS(aEntry1.iDestination.iNumberPlan, aEntry2.iDestination.iNumberPlan, _L("CRetrieveMobilePhoneSmspList::Start did not return correct destination number plan"));
+		ASSERT_EQUALS(aEntry1.iDestination.iTypeOfNumber, aEntry2.iDestination.iTypeOfNumber, _L("CRetrieveMobilePhoneSmspList::Start did not return correct destination type of number"));
+		if(aEntry1.iDestination.iTelNumber!=aEntry2.iDestination.iTelNumber
+			|| aEntry1.iDestination.iNumberPlan!=aEntry2.iDestination.iNumberPlan
+			|| aEntry1.iDestination.iTypeOfNumber!=aEntry2.iDestination.iTypeOfNumber)
+			ret=EFalse;	
+		}
+		
+	if(aEntry2.iValidParams & RMobileSmsMessaging::KProtocolIdIncluded)
+		{	
+		// Check CRetrieveMobilePhoneSmspList::Start returned correct protocolId details
+		ASSERT_EQUALS(aEntry1.iProtocolId,aEntry2.iProtocolId, _L("CRetrieveMobilePhoneSmspList::Start did not return correct protocolId"));	
+		if(aEntry1.iProtocolId!=aEntry2.iProtocolId)
+			ret=EFalse;
+		}	
+	
+	if(aEntry2.iValidParams & RMobileSmsMessaging::KDcsIncluded)
+		{
+		// Check CRetrieveMobilePhoneSmspList::Start returned correct Dcs
+		ASSERT_EQUALS(aEntry1.iDcs,aEntry2.iDcs, _L("CRetrieveMobilePhoneSmspList::Start did not return correct Dcs"));	
+		if(aEntry1.iDcs!=aEntry2.iDcs)
+			ret=EFalse;
+		}
+	
+	if(aEntry2.iValidParams & RMobileSmsMessaging::KValidityPeriodIncluded)
+		{
+		// Check CRetrieveMobilePhoneSmspList::Start returned correct Validity Period
+		ASSERT_EQUALS(aEntry1.iValidityPeriod, aEntry2.iValidityPeriod, _L("CRetrieveMobilePhoneSmspList::Start did not return correct validity period"));	
+		if(aEntry1.iValidityPeriod!=aEntry2.iValidityPeriod)
+			ret=EFalse;
+		}	
+	return ret;
+	
+	}
+
+
+CCTSYIntegrationTestSMSPStore0001::~CCTSYIntegrationTestSMSPStore0001()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestSMSPStore0001::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-SMSP-0001
+ * @SYMFssID BA/CTSY/SMSP-0001
+ * @SYMTestCaseDesc Store and retrieve a SMSP list.
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileSmsMessaging::StoreSmspListL, CRetrieveMobilePhoneSmspList::Start, CMobilePhoneSmspList::NewL, CRetrieveMobilePhoneSmspList::NewL, CMobilePhoneSmspList::AddEntryL, RMobileSmsMessaging::NotifySmspListChange
+ * @SYMTestExpectedResults Pass - SMSP list stored and retrieved correctly.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/automatic
+ *
+ * Reason for test: Verify list can be stored and retrieved list contains correct entries.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+	
+	// Get the RMobileSmsMessaging subsession
+	RMobileSmsMessaging& smsMessaging = iEtelSessionMgr.GetSmsMessagingL(KMainServer,KMainPhone,KMainSmsMessaging);
+	
+	// Ensure RMobileSmsMessaging::GetCaps returns aCaps.iSmsControl caps in set of KCapsSetSmspList | KCapsGetSmspList 
+	RMobileSmsMessaging::TMobileSmsCapsV1  smsCaps;
+	RMobileSmsMessaging::TMobileSmsCapsV1Pckg smsCapsPckg(smsCaps);
+	CHECK_EQUALS_L(smsMessaging.GetCaps(smsCapsPckg),KErrNone, _L("RMobileSmsMessaging::GetCaps returned returned with an error"));
+	TUint32 expectedCaps= RMobileSmsMessaging::KCapsSetSmspList | RMobileSmsMessaging::KCapsGetSmspList;
+	CHECK_BITS_SET_L(smsCaps.iSmsControl, expectedCaps, KNoUnwantedBits, _L("RMobileSmsMessaging::GetCaps returned with unexpected caps"));
+	
+	// Take the backup of the SMSP list. 
+	TInt listCountAtStart;
+	TBackupList backup(*this,smsMessaging);
+	CHECK_TRUE_L(backup.BackupL(listCountAtStart), _L("TBackupList::Backup could not backup"));
+	CleanupStack::PushL (backup);
+	
+	//
+	// SET UP END
+	//
+	
+	StartTest();
+	
+	//
+	// TEST START
+	//
+	
+	// ===  Store SMSP list ===
+
+	// Create a CMobilePhoneSmspList with CMobilePhoneSmspList::NewL 
+   	CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL();
+	CleanupStack::PushL(smspList); 
+	
+	// Create a RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry;
+
+	     smspEntry.iText = _L("VODAFONE"); 
+	 	 
+	     smspEntry.iValidParams = RMobileSmsMessaging::KSCAIncluded 
+
+	         | RMobileSmsMessaging::KProtocolIdIncluded 
+
+	         | RMobileSmsMessaging::KDcsIncluded 
+
+	         | RMobileSmsMessaging::KValidityPeriodIncluded; 
+
+
+	     smspEntry.iDestination.iTelNumber = _L(""); 
+		
+	     smspEntry.iDestination.iNumberPlan = RMobilePhone::EUnknownNumberingPlan; 
+		
+	     smspEntry.iDestination.iTypeOfNumber = RMobilePhone::EUnknownNumber; 
+		
+	     smspEntry.iValidityPeriod = 183; 
+	
+	     smspEntry.iServiceCentre.iTelNumber = _L("+441632960000"); 
+	
+	     smspEntry.iServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+	
+	     smspEntry.iServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	     smspEntry.iProtocolId = 0; 
+
+	     smspEntry.iDcs = 0; 
+
+	     smspEntry.iIndex = 1; 
+
+	// Add the entry to the CMobilePhoneSmspList list with CMobilePhoneSmspList::AddEntryL 
+	smspList->AddEntryL(smspEntry);
+	
+	// Post notification for RMobileSmsMessaging::NotifySmspListChange
+	TExtEtelRequestStatus notifySmspListChangeStatus(smsMessaging, EMobileSmsMessagingNotifySmspListChange);
+	CleanupStack::PushL(notifySmspListChangeStatus);
+	smsMessaging.NotifySmspListChange(notifySmspListChangeStatus);
+
+	// This is deliberate action to open a session because the API in Etelmm allocates memory
+	// The Session Manager should be used in all other places.
+	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone);
+	RMobileSmsMessaging smsMessagingStore;
+	User::LeaveIfError(smsMessagingStore.Open(phone));
+	
+	// Store the empty SMSP list with RMobileSmsMessaging::StoreSmspListL 
+	TExtEtelRequestStatus storeSmspListStatus(smsMessaging, EMobileSmsMessagingStoreSmspList);
+	CleanupStack::PushL(storeSmspListStatus);
+	smsMessagingStore.StoreSmspListL(storeSmspListStatus,smspList);
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(storeSmspListStatus, ETimeMedium),KErrNone, _L("RMobileSmsMessaging::StoreSmspListL timed out"));
+	ASSERT_EQUALS(storeSmspListStatus.Int(), KErrNone, _L("RMobileSmsMessaging::StoreSmspListL returned with an error"));		
+	smsMessagingStore.Close();
+	
+	// Check RMobileSmsMessaging::NotifySmspListChange completes with KErrNone		
+	TInt expectedStatus = KErrNone;
+	iSmsMessagingTestHelper.WaitForMobileSmsMessagingNotifySmspListChange(notifySmspListChangeStatus,expectedStatus);
+		
+	// ===  Retrieve list and check it is the same as the stored list ===
+
+	// Use the helper class for CRetrieveMobilePhoneSmspList to retrieve the SMSP list. 
+	TInt err=0;
+	CRetrieveMobilePhoneSmspListExec* smspListExec = CRetrieveMobilePhoneSmspListHelper::NewL(smsMessaging);	
+	CleanupStack::PushL(smspListExec);
+	CMobilePhoneSmspList* mobileSmspList = smspListExec->DoGetList(err);
+	ASSERT_EQUALS(err, KErrNone, _L("CRetrieveMobilePhoneSmspList::Start returned with an error"));
+
+ 	//	Check CRetrieveMobilePhoneSmspList::Enumerate returns 1 using the helper class function
+	TInt listEntries=mobileSmspList->Enumerate();
+	if(listCountAtStart==0)
+		{
+		ASSERT_EQUALS(listEntries, 1, _L("CRetrieveMobilePhoneSmspList::Enumerate did not return one entry as expected"));
+		}
+   	else
+   		{
+   		ASSERT_EQUALS(listCountAtStart,listEntries, _L("CRetrieveMobilePhoneSmspList::Enumerate did not return number of entries as expected"));
+   		}
+  
+   	// 	Check the entry in the CMobilePhoneSmspList is the same the entry stored
+   	RMobileSmsMessaging::TMobileSmspEntryV1 item;
+   	item=mobileSmspList->GetEntryL(0); // zero is the first index in retrieval list
+   	ASSERT_TRUE(CompareEntries(item,smspEntry),_L("Comparison of stroed enteries failed"));
+	  	 
+   	//
+	// TEST END
+	//
+		   	
+    StartCleanup();
+   
+    // Pop :
+    // backup
+    // smspList
+    // notifySmspListChangeStatus
+	// storeSmspListStatus
+	// smspListExec;
+    CleanupStack::PopAndDestroy(5, &backup);
+      
+    return TestStepResult();
+	
+	}
+
+TPtrC CCTSYIntegrationTestSMSPStore0001::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestSMSPStore0001");
+	}
+
+
+
+CCTSYIntegrationTestSMSPStore0002::CCTSYIntegrationTestSMSPStore0002(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestSMSPStoreBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestSMSPStore0002::GetTestStepName());
+	}
+
+CCTSYIntegrationTestSMSPStore0002::~CCTSYIntegrationTestSMSPStore0002()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestSMSPStore0002::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-SMSP-0002
+ * @SYMFssID BA/CTSY/SMSP-0002
+ * @SYMTestCaseDesc Store an SMSP list with multiple entries.
+ * @SYMTestPriority High
+ * @SYMTestActions This requires an O2 SIM or anyother, which can store multiple entries in SMSP List RMobileSmsMessaging::StoreSmspListL, CRetrieveMobilePhoneSmspList::RetrieveListL
+ * @SYMTestExpectedResults Pass - SMSP list stored.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/manual
+ *
+ * Reason for test: Verify list can be stored and retrieved list contains correct entries.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+		
+	// Get the RMobileSmsMessaging subsession
+	RMobileSmsMessaging& smsMessaging = iEtelSessionMgr.GetSmsMessagingL(KMainServer,KMainPhone,KMainSmsMessaging);
+	
+	// Ensure RMobileSmsMessaging::GetCaps returns aCaps.iSmsControl caps in set of KCapsSetSmspList | KCapsGetSmspList 
+	RMobileSmsMessaging::TMobileSmsCapsV1  smsCaps;
+	RMobileSmsMessaging::TMobileSmsCapsV1Pckg smsCapsPckg(smsCaps);
+	CHECK_EQUALS_L(smsMessaging.GetCaps(smsCapsPckg),KErrNone, _L("RMobileSmsMessaging::GetCaps returned returned with an error"));
+	TUint32 expectedCaps= RMobileSmsMessaging::KCapsSetSmspList | RMobileSmsMessaging::KCapsGetSmspList;
+	CHECK_BITS_SET_L(smsCaps.iSmsControl, expectedCaps, KNoUnwantedBits, _L("RMobileSmsMessaging::GetCaps returned with unexpected caps"));
+
+	// Take the backup of SMSP list. 
+	TInt listCountAtStart;
+	TBackupList backup(*this,smsMessaging);
+	CHECK_TRUE_L(backup.BackupL(listCountAtStart), _L("TBackupList::Backup could not backup"));
+	CleanupStack::PushL (backup);
+	
+	//
+	// SET UP END
+	//
+		
+	StartTest();
+	
+	//
+	// TEST START
+	//
+		
+	TBuf<130> prompt(_L("You need to insert an O2 SIM before running that test, because O2 SIM can store multiple(3) entries in the list"));
+	DisplayUserInteractionPromptL(prompt); // 30 seconds
+
+	// ===  Store SMSP list ===
+
+	// Create a CMobilePhoneSmspList with CMobilePhoneSmspList::NewL 
+	CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL();
+	CleanupStack::PushL(smspList);
+	
+	// Create a RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry;
+	     
+	     smspEntry.iText = _L("ABCD"); 
+
+	     smspEntry.iValidParams = RMobileSmsMessaging::KDestinationIncluded 
+
+	         | RMobileSmsMessaging::KSCAIncluded 
+
+	         | RMobileSmsMessaging::KProtocolIdIncluded 
+
+	         | RMobileSmsMessaging::KDcsIncluded 
+
+	         | RMobileSmsMessaging::KValidityPeriodIncluded; 
+
+	     smspEntry.iDestination.iTelNumber = _L("+1234567890"); 
+
+	     smspEntry.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	     smspEntry.iDestination.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	     smspEntry.iValidityPeriod = 0; 
+
+	     smspEntry.iServiceCentre.iTelNumber = _L("+123"); 
+
+	     smspEntry.iServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	     smspEntry.iServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	     smspEntry.iProtocolId = 2; 
+
+	     smspEntry.iDcs = 4; 
+
+	     smspEntry.iIndex = 1; 
+	
+	// Add the entry to the CMobilePhoneSmspList list with CMobilePhoneSmspList::AddEntryL 
+	smspList->AddEntryL(smspEntry);
+
+	// Create another RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry2;
+		
+		smspEntry2.iText = _L("EFGH");
+		
+		smspEntry2.iValidParams = RMobileSmsMessaging::KDestinationIncluded 
+
+	         | RMobileSmsMessaging::KSCAIncluded 
+
+	         | RMobileSmsMessaging::KProtocolIdIncluded 
+
+	         | RMobileSmsMessaging::KDcsIncluded 
+
+	         | RMobileSmsMessaging::KValidityPeriodIncluded; 
+	    
+	    smspEntry2.iDestination.iTelNumber = _L("+987654"); 
+
+	    smspEntry2.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	    smspEntry2.iDestination.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	    smspEntry2.iValidityPeriod = 0; 
+
+	  	smspEntry2.iServiceCentre.iTypeOfNumber=RMobilePhone::EInternationalNumber; 
+
+	  	smspEntry2.iServiceCentre.iNumberPlan=RMobilePhone:: EIsdnNumberPlan; 
+
+	  	smspEntry2.iServiceCentre.iTelNumber=_L("+456"); 
+	  	
+	  	smspEntry2.iProtocolId = 2; 
+
+	    smspEntry2.iDcs = 4; 
+
+	    smspEntry2.iIndex = 2; 
+
+	// Add the entry to the CMobilePhoneSmspList list with CMobilePhoneSmspList::AddEntryL 
+	smspList->AddEntryL(smspEntry2);
+		
+	// Create another RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry3;
+	  	
+	  	smspEntry3.iText = _L("IJKL"); 
+
+        smspEntry3.iValidParams = RMobileSmsMessaging::KDestinationIncluded 
+
+	         | RMobileSmsMessaging::KSCAIncluded 
+
+	         | RMobileSmsMessaging::KProtocolIdIncluded 
+
+	         | RMobileSmsMessaging::KDcsIncluded 
+
+	         | RMobileSmsMessaging::KValidityPeriodIncluded; 
+
+        smspEntry3.iDestination.iTelNumber = _L("+12456"); 
+
+	    smspEntry3.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	    smspEntry3.iDestination.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	    smspEntry3.iValidityPeriod = 0; 
+
+	    smspEntry3.iServiceCentre.iTelNumber = _L("+789"); 
+
+	    smspEntry3.iServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	    smspEntry3.iServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	    smspEntry3.iProtocolId = 2; 
+
+	    smspEntry3.iDcs = 4; 
+
+	   	smspEntry3.iIndex = 3; 
+	     
+	// Add the entry to the CMobilePhoneSmspList list with CMobilePhoneSmspList::AddEntryL 
+	smspList->AddEntryL(smspEntry3);
+
+	// Post notification for RMobileSmsMessaging::NotifySmspListChange
+	TExtEtelRequestStatus notifySmspListChangeStatus(smsMessaging, EMobileSmsMessagingNotifySmspListChange);
+	CleanupStack::PushL(notifySmspListChangeStatus);
+	smsMessaging.NotifySmspListChange(notifySmspListChangeStatus);
+	
+	// Store the empty SMSP list with RMobileSmsMessaging::StoreSmspListL 
+	TExtEtelRequestStatus storeSmspListStatus(smsMessaging, EMobileSmsMessagingStoreSmspList);
+	CleanupStack::PushL(storeSmspListStatus);
+	smsMessaging.StoreSmspListL(storeSmspListStatus,smspList);
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(storeSmspListStatus, ETimeMedium),KErrNone, _L("RMobileSmsMessaging::StoreSmspListL timed out"));
+	ASSERT_EQUALS(storeSmspListStatus.Int(), KErrNone, _L("RMobileSmsMessaging::StoreSmspListL returned with an error"));		
+	
+	// Check RMobileSmsMessaging::NotifySmspListChange completes with KErrNone		
+	TInt expectedStatus = KErrNone;
+	iSmsMessagingTestHelper.WaitForMobileSmsMessagingNotifySmspListChange(notifySmspListChangeStatus,expectedStatus);
+	
+	// ===  Retrieve list and check it is the same as the stored list ===
+
+	// Use the helper class for CRetrieveMobilePhoneSmspList to retrieve the SMSP list. 
+	TInt err=0;
+	CRetrieveMobilePhoneSmspListExec* smspListExec = CRetrieveMobilePhoneSmspListHelper::NewL(smsMessaging);	
+	CleanupStack::PushL(smspListExec);
+	CMobilePhoneSmspList* mobileSmspList = smspListExec->DoGetList(err);
+	ASSERT_EQUALS(err, KErrNone, _L("CRetrieveMobilePhoneSmspList::Start returned with an error"));
+
+	// Check CRetrieveMobilePhoneSmspList::Enumerate returns 3 using the helper class
+ 	TInt listEnteries=mobileSmspList->Enumerate();
+	ASSERT_EQUALS(listEnteries, 3, _L("CRetrieveMobilePhoneSmspList::Enumerate did not return the correct number of enteries"));
+	
+	// Check the entry in the CMobilePhoneSmspList is the same the entry stored
+   	RMobileSmsMessaging::TMobileSmspEntryV1 item;
+   	RMobileSmsMessaging::TMobileSmspEntryV1 tempSmspEntry;
+	for(TInt i=0;i<listEnteries;i++)
+		{
+		item=mobileSmspList->GetEntryL(i);
+		if(i==0)
+		tempSmspEntry=smspEntry;
+		else if(i==1)
+		tempSmspEntry=smspEntry2;
+		else
+		tempSmspEntry=smspEntry3;
+		ASSERT_TRUE(CompareEntries(tempSmspEntry,item),_L("Comparison of stroed enteries failed"));
+		}
+	
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+    
+    // Pop:
+    // backup
+	// smspListExec;
+ 	// storeSmspListStatus
+	// notifySmspListChangeStatus);	
+	// smspList
+    CleanupStack::PopAndDestroy(5, &backup);
+    	
+    return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestSMSPStore0002::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestSMSPStore0002");
+	}
+
+CCTSYIntegrationTestSMSPStore0003::CCTSYIntegrationTestSMSPStore0003(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestSMSPStoreBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestSMSPStore0003::GetTestStepName());
+	}
+
+CCTSYIntegrationTestSMSPStore0003::~CCTSYIntegrationTestSMSPStore0003()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestSMSPStore0003::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-SMSP-0003
+ * @SYMFssID BA/CTSY/SMSP-0003
+ * @SYMTestCaseDesc Store an empty SMSP list.
+ * @SYMTestPriority High
+ * @SYMTestActions CMobilePhoneSmspList::NewL, CRetrieveMobilePhoneSmspList::NewL, RMobileSmsMessaging::StoreSmspListL, CRetrieveMobilePhoneSmspList::Start
+ * @SYMTestExpectedResults Pass - Empty SMSP list is not stored and retrieved list is not empty.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/automatic
+ *
+ * Reason for test: Verify error is returned.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+	
+	// Get the RMobileSmsMessaging subsession
+	RMobileSmsMessaging& smsMessaging = iEtelSessionMgr.GetSmsMessagingL(KMainServer,KMainPhone,KMainSmsMessaging);
+
+	// Ensure RMobileSmsMessaging::GetCaps returns aCaps.iSmsControl caps in set of KCapsSetSmspList | KCapsGetSmspList 
+	RMobileSmsMessaging::TMobileSmsCapsV1  smsCaps;
+	RMobileSmsMessaging::TMobileSmsCapsV1Pckg smsCapsPckg(smsCaps);
+	CHECK_EQUALS_L(smsMessaging.GetCaps(smsCapsPckg),KErrNone, _L("RMobileSmsMessaging::GetCaps returned returned with an error"));
+	TUint32 expectedCaps= RMobileSmsMessaging::KCapsSetSmspList | RMobileSmsMessaging::KCapsGetSmspList;
+	CHECK_BITS_SET_L(smsCaps.iSmsControl, expectedCaps, KNoUnwantedBits, _L("RMobileSmsMessaging::GetCaps returned with unexpected caps"));
+		
+	//
+	// SET UP END
+	//
+
+	StartTest();
+	
+	//
+	// TEST START
+	//
+	
+	// ===  Store empty list ===
+	
+	// Create a CMobilePhoneSmspList with CMobilePhoneSmspList::NewL 
+	CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL();
+	CleanupStack::PushL(smspList);
+		
+	// Post notification for RMobileSmsMessaging::NotifySmspListChange
+	TExtEtelRequestStatus notifySmspListChangeStatus(smsMessaging, EMobileSmsMessagingNotifySmspListChange);
+	CleanupStack::PushL(notifySmspListChangeStatus);
+	smsMessaging.NotifySmspListChange(notifySmspListChangeStatus);
+
+	// This is deliberate action to open a session because the API in Etelmm allocates memory
+	// The Session Manager should be used in all other places.
+	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone);
+	RMobileSmsMessaging smsMessagingStore;
+ 	smsMessagingStore.Open(phone);
+ 		
+	// Store the empty SMSP list with RMobileSmsMessaging::StoreSmspListL cause Error 
+	TExtEtelRequestStatus storeSmspListStatus(smsMessaging, EMobileSmsMessagingStoreSmspList);
+	CleanupStack::PushL(storeSmspListStatus);
+	smsMessaging.StoreSmspListL(storeSmspListStatus,smspList);
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(storeSmspListStatus, ETimeMedium),KErrNone, _L("RMobileSmsMessaging::StoreSmspListL timed out"));
+	ASSERT_TRUE(storeSmspListStatus.Int()!= KErrNone, _L("RMobileSmsMessaging::StoreSmspListL did not return an error"))		
+	ERR_PRINTF2(_L("<font color=Orange>$CTSYKnownFailure: defect id = %d</font>"), 10012);
+	smsMessagingStore.Close();
+	
+	// Check RMobileSmsMessaging::NotifySmspListChange completes with KErrNone
+	TInt expectedStatus = KErrNone;
+	iSmsMessagingTestHelper.WaitForMobileSmsMessagingNotifySmspListChange(notifySmspListChangeStatus,expectedStatus);
+	
+	// ===  Retrieve list and check it is the same as the stored list ===
+
+	// Use the helper class for CRetrieveMobilePhoneSmspList to retrieve the SMSP list. 
+	TInt err=0;
+	CRetrieveMobilePhoneSmspListExec* smspListExec = CRetrieveMobilePhoneSmspListHelper::NewL(smsMessaging);	
+	CleanupStack::PushL(smspListExec);
+	CMobilePhoneSmspList* mobileSmspList = smspListExec->DoGetList(err);
+	ASSERT_EQUALS(err, KErrNone, _L("CRetrieveMobilePhoneSmspList::Start returned with an error"));
+
+	// Check CMobilePhoneSmspList::Enumerate on the list returned returns value bigger than 0
+	TInt listEnteries=mobileSmspList->Enumerate();
+	ASSERT_TRUE(listEnteries> 0, _L("CRetrieveMobilePhoneSmspList::Enumerate returned an empty list"))
+	
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+	
+	// Pop 
+	// smspListExec;
+ 	// storeSmspListStatus
+	// notifySmspListChangeStatus);	
+	// smspList
+
+    CleanupStack::PopAndDestroy(4, smspList);
+   	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestSMSPStore0003::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestSMSPStore0003");
+	}
+
+
+
+CCTSYIntegrationTestSMSPStore0004::CCTSYIntegrationTestSMSPStore0004(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestSMSPStoreBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestSMSPStore0004::GetTestStepName());
+	}
+
+CCTSYIntegrationTestSMSPStore0004::~CCTSYIntegrationTestSMSPStore0004()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestSMSPStore0004::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-SMSP-0004
+ * @SYMFssID BA/CTSY/SMSP-0004
+ * @SYMTestCaseDesc Cancel reading SMSP list entries.
+ * @SYMTestPriority High
+ * @SYMTestActions CRetrieveMobilePhoneSmspList::Start, CRetrieveMobilePhoneSmspList::Cancel
+ * @SYMTestExpectedResults Pass - Request is cancelled.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/automatic
+ *
+ * Reason for test: Verify request is cancelled.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+	
+	// Get the RMobileSmsMessaging subsession
+	RMobileSmsMessaging& smsMessaging = iEtelSessionMgr.GetSmsMessagingL(KMainServer,KMainPhone,KMainSmsMessaging);
+	
+	// Ensure RMobileSmsMessaging::GetCaps returns aCaps.iSmsControl caps in set of KCapsSetSmspList | KCapsGetSmspList 
+	RMobileSmsMessaging::TMobileSmsCapsV1  smsCaps;
+	RMobileSmsMessaging::TMobileSmsCapsV1Pckg smsCapsPckg(smsCaps);
+	CHECK_EQUALS_L(smsMessaging.GetCaps(smsCapsPckg),KErrNone, _L("RMobileSmsMessaging::GetCaps returned returned with an error"));
+	TUint32 expectedCaps= RMobileSmsMessaging::KCapsSetSmspList | RMobileSmsMessaging::KCapsGetSmspList;
+	CHECK_BITS_SET_L(smsCaps.iSmsControl, expectedCaps, KNoUnwantedBits, _L("RMobileSmsMessaging::GetCaps returned with unexpected caps"));
+
+	//
+	// SET UP END
+	//
+	
+	StartTest();
+	
+	//
+	// TEST START
+	//
+	
+	// Use helper class for CRetrieveMobilePhoneSmspList to retrieve the SMSP list 
+	TInt err=0;
+	CRetrieveMobilePhoneSmspListExec* smspListExec = CRetrieveMobilePhoneSmspListHelper::NewL(smsMessaging);
+	CleanupStack::PushL(smspListExec);
+	
+	// Cancel list retrieval  
+	CMobilePhoneSmspList* smspList = smspListExec->DoGetList(err,ECancelAfterStart);
+	
+	// Check retrieval completes with KErrCancel 
+	ASSERT_EQUALS(err, KErrCancel, _L("CRetrieveMobilePhoneSmspList::Start Request could not be cancelled properly"));
+		
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+    CleanupStack::PopAndDestroy(smspListExec);
+	
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestSMSPStore0004::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestSMSPStore0004");
+	}
+
+
+
+CCTSYIntegrationTestSMSPStore0005::CCTSYIntegrationTestSMSPStore0005(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestSMSPStoreBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestSMSPStore0005::GetTestStepName());
+	}
+
+CCTSYIntegrationTestSMSPStore0005::~CCTSYIntegrationTestSMSPStore0005()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestSMSPStore0005::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-SMSP-0005
+ * @SYMFssID BA/CTSY/SMSP-0005
+ * @SYMTestCaseDesc Cancel writing SMSP list entries.
+ * @SYMTestPriority High
+ * @SYMTestActions 
+ * @SYMTestExpectedResults Pass - Request is cancelled.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/automatic
+ *
+ * Reason for test: Verify request is cancelled.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone);
+	
+	// Get the RMobileSmsMessaging subsession
+	RMobileSmsMessaging& smsMessaging = iEtelSessionMgr.GetSmsMessagingL(KMainServer,KMainPhone,KMainSmsMessaging);
+	
+	// Ensure RMobileSmsMessaging::GetCaps returns aCaps.iSmsControl caps in set of KCapsSetSmspList | KCapsGetSmspList 
+	RMobileSmsMessaging::TMobileSmsCapsV1  smsCaps;
+	RMobileSmsMessaging::TMobileSmsCapsV1Pckg smsCapsPckg(smsCaps);
+	CHECK_EQUALS_L(smsMessaging.GetCaps(smsCapsPckg),KErrNone, _L("RMobileSmsMessaging::GetCaps returned returned with an error"));
+	TUint32 expectedCaps= RMobileSmsMessaging::KCapsSetSmspList | RMobileSmsMessaging::KCapsGetSmspList;
+	CHECK_BITS_SET_L(smsCaps.iSmsControl, expectedCaps, KNoUnwantedBits, _L("RMobileSmsMessaging::GetCaps returned with unexpected caps"));
+	
+	// Take the backup of SMSP list
+	TInt listCountAtStart;
+	TBackupList backup(*this,smsMessaging);
+	CHECK_TRUE_L(backup.BackupL(listCountAtStart), _L("TBackupList::Backup Could not backup"));
+	CleanupStack::PushL (backup);
+	
+	//
+	// SET UP END
+	//
+	
+	StartTest();
+	
+	//
+	// TEST START
+	//
+	
+	// Create a CMobilePhoneSmspList with CMobilePhoneSmspList::NewL 
+	CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL();
+	CleanupStack::PushL(smspList);
+		
+	// Find out the network
+	RMobilePhone::TMobilePhoneNetworkInfoV1 info;
+	RMobilePhone::TMobilePhoneNetworkInfoV1Pckg infopckg(info);
+	TExtEtelRequestStatus getNetworkStatus (phone,EMobilePhoneGetCurrentNetwork);
+	CleanupStack::PushL(getNetworkStatus);
+	phone.GetCurrentNetwork(getNetworkStatus, infopckg);
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(getNetworkStatus, ETimeMedium),   KErrNone,
+	 			_L("MobilePhone::GetCurrentNetwork timed out"))
+	ASSERT_EQUALS(getNetworkStatus.Int(), KErrNone, 
+				_L("MobilePhone::GetCurrentNetwork returned an error"))	
+				
+	// Create a RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry;
+	
+	     smspEntry.iText = _L("ABCD"); 
+
+	     smspEntry.iValidParams = RMobileSmsMessaging::KDestinationIncluded 
+
+	         | RMobileSmsMessaging::KSCAIncluded 
+
+	         | RMobileSmsMessaging::KProtocolIdIncluded 
+
+	         | RMobileSmsMessaging::KDcsIncluded 
+
+	         | RMobileSmsMessaging::KValidityPeriodIncluded; 
+
+	     smspEntry.iDestination.iTelNumber = _L("1234567890"); 
+
+	     smspEntry.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	     smspEntry.iDestination.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	     smspEntry.iValidityPeriod = 0; 
+
+	     smspEntry.iServiceCentre.iTelNumber = _L("1234567890"); 
+
+	     smspEntry.iServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	     smspEntry.iServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	     smspEntry.iProtocolId = 2; 
+
+	     smspEntry.iDcs = 4; 
+
+	     smspEntry.iIndex = 1; 
+	    	     
+	
+	// Create another RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry2;
+
+	  smspEntry2.iValidParams = RMobileSmsMessaging::KSCAIncluded; 
+
+	  smspEntry2.iServiceCentre.iTypeOfNumber=RMobilePhone::EInternationalNumber; 
+
+	  smspEntry2.iServiceCentre.iNumberPlan=RMobilePhone:: EIsdnNumberPlan; 
+
+	  smspEntry2.iServiceCentre.iTelNumber=_L("441632960000"); 
+	  
+	  smspEntry2.iIndex = 2; 
+
+	// Create another RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry3;
+	  
+	  smspEntry3.iValidParams = RMobileSmsMessaging::KSCAIncluded; 
+
+	  smspEntry3.iServiceCentre.iTypeOfNumber=RMobilePhone::EInternationalNumber; 
+
+	  smspEntry3.iServiceCentre.iNumberPlan=RMobilePhone:: EIsdnNumberPlan; 
+
+	  smspEntry3.iServiceCentre.iTelNumber=_L("441632960000"); 
+
+	  smspEntry3.iIndex = 3; 
+	
+	
+	if(info.iShortName.Find(_L("O2")) != KErrNotFound)	//O2
+		{
+		DEBUG_PRINTF1(_L("O2 can have three entries in the SMSP list"));
+		
+		// Add the entry to the CMobilePhoneSmspList list with CMobilePhoneSmspList::AddEntryL 
+		smspList->AddEntryL(smspEntry);
+		smspList->AddEntryL(smspEntry2);
+		smspList->AddEntryL(smspEntry3);
+		}
+	else
+		{
+		smspList->AddEntryL(smspEntry);	
+		}
+		
+	// Store the empty SMSP list with RMobileSmsMessaging::StoreSmspListL
+	TExtEtelRequestStatus storeSmspListStatus(smsMessaging, EMobileSmsMessagingStoreSmspList);
+	CleanupStack::PushL(storeSmspListStatus);
+	smsMessaging.StoreSmspListL(storeSmspListStatus,smspList);
+	
+	// Cancel request immediately with RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingStoreSmspList) 
+	smsMessaging.CancelAsyncRequest(EMobileSmsMessagingStoreSmspList);
+
+	// Check store request completes with KErrCancel or KErrNone
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(storeSmspListStatus, ETimeShort),KErrNone, _L("RMobileSmsMessaging::StoreSmspListL timed out"));
+	ASSERT_TRUE(storeSmspListStatus.Int() == KErrCancel || storeSmspListStatus.Int() == KErrNone, 
+				_L("RMobileSmsMessaging:: CancelAsyncRequest could not cancel the request EMobileSmsMessagingStoreSmspList"));
+	
+	//
+	// TEST END
+	//
+
+	StartCleanup();
+    // Pop:
+	// backup
+  	// storeSmspListStatus
+    // getNetworkStatus
+    // smspList
+    CleanupStack::PopAndDestroy(4,&backup);	
+  
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestSMSPStore0005::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestSMSPStore0005");
+	}
+
+
+
+CCTSYIntegrationTestSMSPStore0006::CCTSYIntegrationTestSMSPStore0006(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestSMSPStoreBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestSMSPStore0006::GetTestStepName());
+	}
+
+CCTSYIntegrationTestSMSPStore0006::~CCTSYIntegrationTestSMSPStore0006()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestSMSPStore0006::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-SMSP-0006
+ * @SYMFssID BA/CTSY/SMSP-0006
+ * @SYMTestCaseDesc Cancel notification of change in SMSP list entries.
+ * @SYMTestPriority High
+ * @SYMTestActions 
+ * @SYMTestExpectedResults Pass - Request is cancelled.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/automatic
+ *
+ * Reason for test: Verify request is cancelled.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+	
+	// Get the RMobileSmsMessaging subsession 
+	RMobileSmsMessaging& smsMessaging = iEtelSessionMgr.GetSmsMessagingL(KMainServer,KMainPhone,KMainSmsMessaging);
+
+	//
+	// SET UP END
+	//
+	
+	StartTest();
+	
+	//
+	// TEST START
+	//
+		
+	// Register for notification of SMSP list change with RMobileSmsMessaging::NotifySmspListChange 
+	TExtEtelRequestStatus notifySmspListChangeStatus(smsMessaging, EMobileSmsMessagingNotifySmspListChange);
+	CleanupStack::PushL(notifySmspListChangeStatus);
+	smsMessaging.NotifySmspListChange(notifySmspListChangeStatus);
+	
+	// Cancel request with RTelSubSessionBase::CancelAsyncRequest(EMobileSmsMessagingNotifySmspListChange) 
+ 	smsMessaging.CancelAsyncRequest(EMobileSmsMessagingNotifySmspListChange);
+ 	
+ 	// Check notification request completes with KErrCancel
+ 	TInt expectedStatus = KErrCancel;
+ 	iSmsMessagingTestHelper.WaitForMobileSmsMessagingNotifySmspListChange(notifySmspListChangeStatus,expectedStatus);
+	
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+	CleanupStack::PopAndDestroy(&notifySmspListChangeStatus);	
+
+	
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestSMSPStore0006::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestSMSPStore0006");
+	}
+
+
+
+CCTSYIntegrationTestSMSPStore0007::CCTSYIntegrationTestSMSPStore0007(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestSMSPStoreBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestSMSPStore0007::GetTestStepName());
+	}
+
+CCTSYIntegrationTestSMSPStore0007::~CCTSYIntegrationTestSMSPStore0007()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestSMSPStore0007::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-SMSP-0007
+ * @SYMFssID BA/CTSY/SMSP-0007
+ * @SYMTestCaseDesc Store an SMSP list that is too long.
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileSmsMessaging::StoreSmspListL, CRetrieveMobilePhoneSmspList::Start, CMobilePhoneSmspList::NewL, CMobilePhoneSmspList::AddEntryL
+ * @SYMTestExpectedResults Pass - KErrArgument returned.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/automatic
+ *
+ * Reason for test: Verify error is returned on storing.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+
+	// Get the RMobileSmsMessaging subsession 
+	RMobileSmsMessaging& smsMessaging = iEtelSessionMgr.GetSmsMessagingL(KMainServer,KMainPhone,KMainSmsMessaging);
+
+	// Ensure RMobileSmsMessaging::GetCaps returns aCaps.iSmsControl caps in set of KCapsSetSmspList | KCapsGetSmspList 
+	RMobileSmsMessaging::TMobileSmsCapsV1  smsCaps;
+	RMobileSmsMessaging::TMobileSmsCapsV1Pckg smsCapsPckg(smsCaps);
+	CHECK_EQUALS_L(smsMessaging.GetCaps(smsCapsPckg),KErrNone, _L("RMobileSmsMessaging::GetCaps returned returned with an error"));
+	TUint32 expectedCaps= RMobileSmsMessaging::KCapsSetSmspList | RMobileSmsMessaging::KCapsGetSmspList;
+	CHECK_BITS_SET_L(smsCaps.iSmsControl, expectedCaps, KNoUnwantedBits, _L("RMobileSmsMessaging::GetCaps returned with unexpected caps"));
+
+	// Take the backup of the SMSP list. 
+	TInt listCountAtStart;
+	TBackupList backup(*this,smsMessaging);
+	CHECK_TRUE_L(backup.BackupL(listCountAtStart), _L("TBackupList::Backup Could not backup"));
+	CleanupStack::PushL (backup);
+	
+	//
+	// SET UP END
+	//
+	
+	StartTest();
+	
+	//
+	// TEST START
+	//
+	
+	// ===  Store SMSP list ===
+
+	// Create a CMobilePhoneSmspList with CMobilePhoneSmspList::NewL 
+	CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL();
+	CleanupStack::PushL(smspList);
+	
+	// Create a RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry;
+	     
+	     smspEntry.iText = _L("ABCD"); 
+
+	     smspEntry.iValidParams = RMobileSmsMessaging::KDestinationIncluded 
+
+	         | RMobileSmsMessaging::KSCAIncluded 
+
+	         | RMobileSmsMessaging::KProtocolIdIncluded 
+
+	         | RMobileSmsMessaging::KDcsIncluded 
+
+	         | RMobileSmsMessaging::KValidityPeriodIncluded; 
+
+	     smspEntry.iDestination.iTelNumber = _L("+1234567890"); 
+
+	     smspEntry.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	     smspEntry.iDestination.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	     smspEntry.iValidityPeriod = 0; 
+
+	     smspEntry.iServiceCentre.iTelNumber = _L("+123"); 
+
+	     smspEntry.iServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	     smspEntry.iServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	     smspEntry.iProtocolId = 2; 
+
+	     smspEntry.iDcs = 4; 
+
+	     smspEntry.iIndex = 1; 
+	
+	// Add the entry to the CMobilePhoneSmspList list with CMobilePhoneSmspList::AddEntryL 
+	smspList->AddEntryL(smspEntry);
+
+	// Create another RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry2;
+		
+		smspEntry2.iText = _L("EFGH");
+		
+		smspEntry2.iValidParams = RMobileSmsMessaging::KDestinationIncluded 
+
+	         | RMobileSmsMessaging::KSCAIncluded 
+
+	         | RMobileSmsMessaging::KProtocolIdIncluded 
+
+	         | RMobileSmsMessaging::KDcsIncluded 
+
+	         | RMobileSmsMessaging::KValidityPeriodIncluded; 
+	    
+	    smspEntry2.iDestination.iTelNumber = _L("+987654"); 
+
+	    smspEntry2.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	    smspEntry2.iDestination.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	    smspEntry2.iValidityPeriod = 0; 
+
+	  	smspEntry2.iServiceCentre.iTypeOfNumber=RMobilePhone::EInternationalNumber; 
+
+	  	smspEntry2.iServiceCentre.iNumberPlan=RMobilePhone:: EIsdnNumberPlan; 
+
+	  	smspEntry2.iServiceCentre.iTelNumber=_L("+456"); 
+	  	
+	  	smspEntry2.iProtocolId = 2; 
+
+	    smspEntry2.iDcs = 4; 
+
+	    smspEntry2.iIndex = 2; 
+
+	// Add the entry to the CMobilePhoneSmspList list with CMobilePhoneSmspList::AddEntryL 
+	smspList->AddEntryL(smspEntry2);
+		
+	// Create another RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry3;
+	  	
+	  	smspEntry3.iText = _L("IJKL"); 
+
+        smspEntry3.iValidParams = RMobileSmsMessaging::KDestinationIncluded 
+
+	         | RMobileSmsMessaging::KSCAIncluded 
+
+	         | RMobileSmsMessaging::KProtocolIdIncluded 
+
+	         | RMobileSmsMessaging::KDcsIncluded 
+
+	         | RMobileSmsMessaging::KValidityPeriodIncluded; 
+
+        smspEntry3.iDestination.iTelNumber = _L("+12456"); 
+
+	    smspEntry3.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	    smspEntry3.iDestination.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	    smspEntry3.iValidityPeriod = 0; 
+
+	    smspEntry3.iServiceCentre.iTelNumber = _L("+789"); 
+
+	    smspEntry3.iServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	    smspEntry3.iServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	    smspEntry3.iProtocolId = 2; 
+
+	    smspEntry3.iDcs = 4; 
+
+	   	smspEntry3.iIndex = 3; 
+	     
+	// Add the entry to the CMobilePhoneSmspList list with CMobilePhoneSmspList::AddEntryL 
+	smspList->AddEntryL(smspEntry3);
+	
+	// Create another RMobileSmsMessaging::TMobileSmspEntryV1 entry with the following parameters: 
+	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry4;
+	  	
+	  	smspEntry4.iText = _L("MNOP"); 
+
+        smspEntry4.iValidParams = RMobileSmsMessaging::KDestinationIncluded 
+
+	         | RMobileSmsMessaging::KSCAIncluded 
+
+	         | RMobileSmsMessaging::KProtocolIdIncluded 
+
+	         | RMobileSmsMessaging::KDcsIncluded 
+
+	         | RMobileSmsMessaging::KValidityPeriodIncluded; 
+
+        smspEntry4.iDestination.iTelNumber = _L("+12456"); 
+
+	    smspEntry4.iDestination.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	    smspEntry4.iDestination.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	    smspEntry4.iValidityPeriod = 0; 
+
+	    smspEntry4.iServiceCentre.iTelNumber = _L("+789"); 
+
+	    smspEntry4.iServiceCentre.iNumberPlan = RMobilePhone::EIsdnNumberPlan; 
+
+	    smspEntry4.iServiceCentre.iTypeOfNumber = RMobilePhone::EInternationalNumber; 
+
+	    smspEntry4.iProtocolId = 2; 
+
+	    smspEntry4.iDcs = 4; 
+
+	   	smspEntry4.iIndex = 4; 
+	     
+	// Add the entry to the CMobilePhoneSmspList list with CMobilePhoneSmspList::AddEntryL 
+	smspList->AddEntryL(smspEntry4);
+
+	// Store the empty SMSP list with RMobileSmsMessaging::StoreSmspListL 
+	TExtEtelRequestStatus storeSmspListStatus(smsMessaging, EMobileSmsMessagingStoreSmspList);
+	CleanupStack::PushL(storeSmspListStatus);
+	smsMessaging.StoreSmspListL(storeSmspListStatus,smspList);
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(storeSmspListStatus, ETimeMedium),KErrNone, _L("RMobileSmsMessaging::StoreSmspListL timed out"));
+	
+	// Check KErrArgument is returned
+	ASSERT_EQUALS(storeSmspListStatus.Int(), KErrArgument, _L("RMobileSmsMessaging::StoreSmspListL did not return with an error"));		
+	
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+    
+	// Pop:
+	// backup
+    // storeSmspListStatus
+    // smspList
+	CleanupStack::PopAndDestroy(3,&backup);
+		
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestSMSPStore0007::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestSMSPStore0007");
+	}
+
+TBackupList::TBackupList(CCTSYIntegrationTestSuiteStepBase &aTestStep,
+			RMobileSmsMessaging &aSmsMessaging) : TTsyTestHelperBase(aTestStep) ,iSmsMessaging(aSmsMessaging)
+/*
+ * Constructor
+ * @param aBase pointer to the test.
+ * @param aSmsMessaging reference to a SMSP session
+ *
+ */
+{
+}
+TBool TBackupList::BackupL(TInt &aListCount)
+/*
+ * This function takes backup of the entries of SMSP list and return false if its fails
+ * @param aListCount refer to the number of entries in the list at the time of backup
+ * @return true if the backup was successful
+ *
+ */	
+	{
+	iValid=EFalse;
+
+	// Enumerater the entries of SMSP List
+	TInt err=0;
+	CRetrieveMobilePhoneSmspListExec* smspListExec = CRetrieveMobilePhoneSmspListHelper::NewL(iSmsMessaging);	
+	CleanupStack::PushL(smspListExec);
+	CMobilePhoneSmspList* retrievedSmspList = smspListExec->DoGetList(err);
+	if(err== KErrNone)
+		{
+		iValid=ETrue;
+		}
+	else
+		{
+		return iValid;
+		}
+	iListCount=retrievedSmspList->Enumerate();
+	aListCount=iListCount;
+	
+	// Store the values of APN control list, so that they can be restored later
+	for(TInt i=0;i<aListCount;i++)
+		{
+		RMobileSmsMessaging::TMobileSmspEntryV1 item;
+	   	item=retrievedSmspList->GetEntryL(i); // zero is the first index in retrieval list
+	   	iEntryArray.Append(item);
+		}
+	CleanupStack::PopAndDestroy(smspListExec);
+	
+	return iValid;
+	}
+void TBackupList::DoCleanupL(TAny* aPtr)
+/*
+ * This function is a static clean up function to be saved in the cleanup stack. Its restore the saved entries.
+ *
+ * @param aPtr a pointer to a TBackupList instance.
+ *
+ */	
+	{
+	TBackupList* me = static_cast<TBackupList*>(aPtr);
+	me->CleanupL();
+	}
+void TBackupList::CleanupL()
+/*
+ * This function restore the saved entries to the entries in the phone
+ *
+ */	
+	{
+	CMobilePhoneSmspList* restoreSmspList = CMobilePhoneSmspList::NewL();
+	CleanupStack::PushL(restoreSmspList); 
+	
+	TExtEtelRequestStatus storeSmspListStatus(iSmsMessaging, EMobileSmsMessagingStoreSmspList);
+	CleanupStack::PushL(storeSmspListStatus);
+	
+	for(int j=0; j<iListCount;j++)
+		{
+		RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry= iEntryArray[j];
+		restoreSmspList->AddEntryL(smspEntry);
+		}
+	iSmsMessaging.StoreSmspListL(storeSmspListStatus,restoreSmspList);
+	
+	
+	if(iTestStep.WaitForRequestWithTimeOut(storeSmspListStatus, ETimeMedium)==KErrNone)
+		{
+		if (storeSmspListStatus.Int()!= KErrNone)
+			{
+			DEBUG_PRINTF1(_L("Error- During CleanupStack RMobileSmsMessaging::StoreSmspListL returned with an error"));
+			}
+		}
+	else
+		{
+		DEBUG_PRINTF1(_L("Error- During CleanupStack RMobileSmsMessaging::StoreSmspListL timed out"));
+		}
+	
+	// Pop:
+	// restoreSmspList
+	// storeSmspListStatus
+	CleanupStack::PopAndDestroy(2,restoreSmspList);
+	
+	}
+TBackupList::operator TCleanupItem()
+/*
+ * This operator create a TCleanupItem to save a pointer to the DoCleanup static function and this in the cleanup stack
+ *
+ */	
+	{
+	return TCleanupItem(DoCleanupL,this);
+	}
+