telephonyserverplugins/common_tsy/test/integration/src/cctsyintegrationtestsmsstore.cpp
author ivan.fildichev@opencode.com
Thu, 18 Nov 2010 15:42:16 +0200
branchopencode
changeset 88 5e27cc612ac7
parent 24 6638e7f4bd8f
permissions -rw-r--r--
Latest bug-fixes with added tests.

// 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 SMSStore functional unit.
// 
//

/**
 @internalTechnology
*/

#include "cctsyintegrationtestsmsstore.h"
#include "cctsyinidata.h"
#include "cetelsessionmgr.h"



/*
PDU LENGTH IS 140 BYTES
NO SMSC ADDRESS PRESENT
MESSAGE HEADER FLAGS
	MESSAGE TYPE :	SMS DELIVER
	MSGS WAITING IN SC :	NO
	SEND STATUS REPORT :	YES
	USER DATA HEADER :	NO UDH
	REPLY PATH :	NO

ORIGINATING ADDRESS
	NUMBER IS :	+441632960000
	TYPE OF NR. :	International
	NPI :	ISDN/Telephone (E.164/163)

PROTOCOL IDENTIFIER	(0x00)
	MESSAGE ENTITIES :	SME-to-SME
	PROTOCOL USED :	Implicit / SC-specific

DATA CODING SCHEME	(0x00)
	AUTO-DELETION :	OFF
	COMPRESSION :	OFF
	MESSAGE CLASS :	NONE
	ALPHABET USED :	7bit default

SMSC TIMESTAMP :	09/07/07 08:15 GMT+1.00

USER DATA PART OF SM
	USER DATA LENGTH : 	138 septets
	USER DATA (TEXT) :	TravelAlert 08:15: Nrthrn: Severe
		delays on the H Barnet Branch with
		minor delays on the rest of the line
		due to signal failure at Camden.
*/
_LIT8(KValidSmsPdu2, "\x24\x0c\x91\x44\x77\x79\x08\x80\x25\x00\x00\x70\x70\x90\x80\x51\x81\x40\x8a\x54\x79\xd8\x5e\x66\x07\xd9\x65\x39\x1d\x04\xc3\xe9\x62\x35\x1d\xc8\x29\xa7\xa3\xe5\x6e\x1d\x68\x5a\xb6\x97\xe5\x65\x10\xb9\xcc\x0e\xe7\xe7\xa0\xb7\x1b\x44\x47\x97\x41\x48\x90\x30\x2c\x77\x97\xe9\x20\xa1\x3c\xec\x1e\xa3\x41\xf7\x34\x1d\x0d\x6a\xa7\xdd\x6f\x39\x88\x5c\x66\x87\xf3\x73\xd0\xdb\x0d\xa2\xa3\xcb\x20\x79\x79\x4e\x07\xbd\xcd\x20\x3a\xba\x0c\x62\xa7\xdd\x65\x10\xb9\x5e\x06\xd1\xdf\xa0\x79\xfa\xec\x0e\xb3\x41\xe6\x70\x9a\x5d\x97\x97\x41\x61\x3a\x68\x18\x6e\x93\xcb\x6e\x17");

/**
PDU LENGTH IS 19 BYTES
NO SMSC ADDRESS PRESENT
MESSAGE HEADER FLAGS
	MESSAGE TYPE :	SMS DELIVER
	MSGS WAITING IN SC :	NO
	SEND STATUS REPORT :	NO
	USER DATA HEADER :	NO UDH
	REPLY PATH :	NO

ORIGINATING ADDRESS
	NUMBER IS :	+441632960000
	TYPE OF NR. :	International
	NPI :	ISDN/Telephone (E.164/163)

PROTOCOL IDENTIFIER	(0x00)
	MESSAGE ENTITIES :	SME-to-SME
	PROTOCOL USED :	Implicit / SC-specific

DATA CODING SCHEME	(0x00)
	AUTO-DELETION :	OFF
	COMPRESSION :	OFF
	MESSAGE CLASS :	NONE
	ALPHABET USED :	7bit default

SMSC TIMESTAMP :	13/09/07 17:16 GMT+1.00

USER DATA PART OF SM
	USER DATA LENGTH : 	0 septets
	USER DATA (TEXT) :	<no data>
*/
_LIT8(KValidEmptyPdu, "\x04\x0c\x91\x44\x97\x71\x57\x30\x12\x00\x00\x70\x90\x31\x71\x61\x05\x40\x00");


_LIT8(KCorruptSmsPdu, "\x01\x02\x03\x04\x05\x06");

CCTSYIntegrationTestSMSStoreBase::CCTSYIntegrationTestSMSStoreBase(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSuiteStepBase(aEtelSessionMgr), iSmsStoreTestHelper(*this), iSimTsyTestHelper(*this)
/**
 * Constructor
 */
	{
	}

CCTSYIntegrationTestSMSStoreBase::~CCTSYIntegrationTestSMSStoreBase()
/*
 * Destructor
 */
	{
	}
	

void CCTSYIntegrationTestSMSStoreBase::CreateGsmSmsEntry(
		RMobileSmsStore::TMobileGsmSmsEntryV1& aEntry, 
		TInt aIndex,
		const TDesC8& aMsgData,
		RMobileSmsStore::TMobileSmsStoreStatus aStoreStatus,
		RMobilePhone::TMobileTON aServiceCentreTON,
		RMobilePhone::TMobileNPI aServiceCentreNumberingPlan,
		const TDesC& aServiceCentreNum)
/**
 * Populates aEntry with parameters to create a valid SMS entry which
 * can be written to the store. Note that aEntry.iMsgData is not populated.
 * 
 * @param aEntry Entry to be populated
 * @param aIndex Slot number of the entry
 * @param aServiceCentreTON Service centre type of number
 * @param aServiceCentreNumberingPlan Service centre numbering plan
 * @param aServiceCentreNum Service centre number
 */
	{
	aEntry.iMsgStatus = aStoreStatus;
	aEntry.iIndex = aIndex;
	aEntry.iMsgData = aMsgData;
	aEntry.iServiceCentre.iTypeOfNumber =  aServiceCentreTON; 
	aEntry.iServiceCentre.iNumberPlan = aServiceCentreNumberingPlan; 
	aEntry.iServiceCentre.iTelNumber = aServiceCentreNum;
	}



void CCTSYIntegrationTestSMSStoreBase::WaitForPhoneBookCachingToFinish()
	{
	User::After(KOneSecond * 20);
	}

CCTSYIntegrationTestSMSStore0001::CCTSYIntegrationTestSMSStore0001(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0001::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0001::~CCTSYIntegrationTestSMSStore0001()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0001::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0001
 * @SYMFssID BA/CTSY/SMSS-0001
 * @SYMTestCaseDesc Get phone store information.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhone::GetPhoneStoreInfo
 * @SYMTestExpectedResults Pass - Phone store information returned correctly.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify phone store information returned is correct.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);	
	
	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//	
	
	// Get SMS store info. using RMobilePhoneStore::GetInfo with RMobilePhoneStore::TMobilePhoneStoreInfoV1 
	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);

	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::GetInfo timed out"));
	ASSERT_EQUALS(getInfoStatus.Int(), KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));				

	// Check: 
	// iName == KETelIccSmsStore 
	ASSERT_TRUE(storeInfo.iName == KETelIccSmsStore, _L("RMobilePhoneStore::GetInfo returned wrong store name"));
	
	// iType == RMobilePhoneStore::EShortMessageStore 
	ASSERT_EQUALS(storeInfo.iType, RMobilePhoneStore::EShortMessageStore, _L("RMobilePhoneStore::GetInfo returned wrong Type"));
	
	// iTotalEntries >= -1 
	ASSERT_TRUE(storeInfo.iTotalEntries >= -1, _L("RMobilePhoneStore::GetInfo returned wrong Total Entries"));
	
	// iUsedEntries >= -1 
	ASSERT_TRUE(storeInfo.iUsedEntries >= -1, _L("RMobilePhoneStore::GetInfo returned wrong Used Entries"));
	
	// iCaps == RMobilePhoneStore::KCapsIndividualEntry  
	//     | RMobilePhoneStore::KCapsDeleteAll 
	//     | RMobilePhoneStore::KCapsReadAccess 
	//     | RMobilePhoneStore::KCapsWriteAccess 
	//     | RMobilePhoneStore::KCapsNotifyEvent 
	//     | RMobilePhoneStore::KCapsWholeStore 				   
	TUint wantedBits = RMobilePhoneStore::KCapsIndividualEntry  
	    			 | RMobilePhoneStore::KCapsDeleteAll 
	    			 | RMobilePhoneStore::KCapsReadAccess 
	    			 | RMobilePhoneStore::KCapsWriteAccess 
	    			 | RMobilePhoneStore::KCapsNotifyEvent 
	    			 | RMobilePhoneStore::KCapsWholeStore; 
	    			 
	ASSERT_BITS_SET(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned unexpected iCaps"));			

	//
    // TEST END
    //

    StartCleanup();
	
	// Pop
	// getInfoStatus
	CleanupStack::PopAndDestroy(&getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0001::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0001");
	}



CCTSYIntegrationTestSMSStore0002::CCTSYIntegrationTestSMSStore0002(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0002::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0002::~CCTSYIntegrationTestSMSStore0002()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0002::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0002
 * @SYMFssID BA/CTSY/SMSS-0002
 * @SYMTestCaseDesc Read SMS message from the SMS store.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Read
 * @SYMTestExpectedResults Pass - Entry read successfully.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify entries are read correctly.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//
	
	
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	WaitForPhoneBookCachingToFinish();
	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsReadAccess
	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
	CHECK_BITS_SET_L(storeInfo.iCaps, RMobilePhoneStore::KCapsReadAccess,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect store caps"));
				   
	// Write entries to the first slot, slot 4 and the maximum slot in the phone book. PDU in the entry should be coded with valid  
	// * TP-Message parameters 
	// * Type of number 
	// * Type of number plan 
	// * TP Originator address 
	// * TP Protocol Identifier 
	// * TP Data Coding Scheme 
	// * TP Service Center Time Stamp 
	// * TP User data length 

	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry); 

	// Create and write entry for 1st slot
	CreateGsmSmsEntry(entry, 1, KValidSmsPdu1(), RMobileSmsStore::EStoredMessageRead);

	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);
	smsStore.Write(writeStatus,pckgEntry);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium)==KErrNone, _L("RMobileSmsStore::Write timed out"));
	CHECK_TRUE_L(writeStatus.Int() == KErrNone, _L("RMobileSmsStore::Write returned an error"));
	
	// Create and write entry for ninth slot
	CreateGsmSmsEntry(	entry, 9, KValidSmsPdu2(), RMobileSmsStore::EStoredMessageUnread, 
						RMobilePhone::EInternationalNumber, 
						RMobilePhone::EIsdnNumberPlan);
	smsStore.Write(writeStatus,pckgEntry);
	CHECK_EQUALS_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Write timed out"));
	CHECK_EQUALS_L(writeStatus.Int(), KErrNone, _L("RMobileSmsStore::Write returned an error"));	

	// Create and write entry for last slot
	CreateGsmSmsEntry(	entry, storeInfo.iTotalEntries, KValidSmsPdu1(), 
						RMobileSmsStore::EStoredMessageUnread, 
						RMobilePhone::EAbbreviatedNumber, 
						RMobilePhone::EIsdnNumberPlan);
	smsStore.Write(writeStatus,pckgEntry);
	CHECK_EQUALS_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Write timed out"));	
	CHECK_EQUALS_L(writeStatus.Int(), KErrNone, _L("RMobileSmsStore::Write returned an error"));	

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// Read entry from the first slot, slot 9 and the maximum slot from the phone book in turn passing an RMobileSmsStore::TMobileGsmSmsEntryV1 as aEntry. 

	// Set up and read from slot1
	RMobileSmsStore::TMobileGsmSmsEntryV1 readFirstEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg readFirstEntryPckg(readFirstEntry);
	readFirstEntry.iIndex = 1;
	readFirstEntry.iMsgData.Zero();
	readFirstEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;
	TExtEtelRequestStatus readStatus (smsStore,EMobilePhoneStoreRead);	
	CleanupStack::PushL(readStatus);	
	smsStore.Read(readStatus,readFirstEntryPckg);	
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium),KErrNone,_L("RMobileSmsStore::Read timed out"));
	ASSERT_EQUALS(readStatus.Int(), KErrNone, _L("RMobileSmsStore::Read returned an error"));
	
	// Set up and read from slot 9	
	RMobileSmsStore::TMobileGsmSmsEntryV1 readNinthEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg readNinthEntryPckg(readNinthEntry);
	readNinthEntry.iIndex = 9;
	readNinthEntry.iMsgData.Zero();
	readNinthEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;	
	smsStore.Read(readStatus,readNinthEntryPckg);	
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium),KErrNone, _L("RMobileSmsStore::Read Could not read SMS store"));
	ASSERT_EQUALS(readStatus.Int(), KErrNone, _L("RMobileSmsStore::Read returned an error"));

	// Set up and read from last slot
	RMobileSmsStore::TMobileGsmSmsEntryV1 readLastEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg readLastEntryPckg(readLastEntry);
	readLastEntry.iIndex = storeInfo.iTotalEntries;
	readLastEntry.iMsgData.Zero();
	readLastEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;	
	smsStore.Read(readStatus,readLastEntryPckg);	
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium),KErrNone, _L("RMobileSmsStore::Read Could not read SMS store"));
	ASSERT_EQUALS(readStatus.Int(), KErrNone, _L("RMobileSmsStore::Read returned an error"));
	
	// For each one: 

	// Check iMsgStatus is the same as that written to the phone book in set up.
	ASSERT_EQUALS(readFirstEntry.iMsgStatus, RMobileSmsStore::EStoredMessageRead, _L("RMobileSmsStore::Read First Read Entry has the wrong iMsgStatus"));
	ASSERT_EQUALS(readNinthEntry.iMsgStatus, RMobileSmsStore::EStoredMessageUnread, _L("RMobileSmsStore::Read Fourth Read Entry has the wrong iMsgStatus"));
	ASSERT_EQUALS(readLastEntry.iMsgStatus, RMobileSmsStore::EStoredMessageUnread, 	_L("RMobileSmsStore::Read Last Read Entry has the wrong iMsgStatus"));	        																

	// Check iMsgData is the same as that written to the phone book in set up.
	ASSERT_EQUALS_DES8(readFirstEntry.iMsgData, KValidSmsPdu1,_L("RMobileSmsStore::Read First Read Entry has the wrong iMsgData"));
	ASSERT_EQUALS_DES8(readNinthEntry.iMsgData, KValidSmsPdu2,_L("RMobileSmsStore::Read Fourth Read Entry has the wrong iMsgData"));
	ASSERT_EQUALS_DES8(readLastEntry.iMsgData, KValidSmsPdu1,_L("RMobileSmsStore::Read Last Read Entry has the wrong iMsgData"));	
							                                                                                                                            		
	// Check iServiceCentre is the same as that written to the phone book in set up.
	ASSERT_EQUALS(readFirstEntry.iServiceCentre.iTypeOfNumber, RMobilePhone::ENationalNumber,_L("RMobileSmsStore::Read First Read Entry has the wrong iServiceCentre.iTypeOfNumber"));
	ASSERT_EQUALS(readFirstEntry.iServiceCentre.iNumberPlan, RMobilePhone::EIsdnNumberPlan,	_L("RMobileSmsStore::Read First Read Entry has the wrong iServiceCentre.iNumberPlan"));
	ASSERT_EQUALS_DES16(readFirstEntry.iServiceCentre.iTelNumber, KNumber,_L("RMobileSmsStore::Read First Read Entry has the wrong iServiceCentre.iTelNumber"));
		
	ASSERT_EQUALS(readNinthEntry.iServiceCentre.iTypeOfNumber, RMobilePhone::EInternationalNumber, _L("RMobileSmsStore::Read Ninth Read Entry has the wrong iServiceCentre.iTypeOfNumber"));
	ASSERT_EQUALS(readNinthEntry.iServiceCentre.iNumberPlan, RMobilePhone::EIsdnNumberPlan,_L("RMobileSmsStore::Read Ninth Read Entry has the wrong iServiceCentre.iNumberPlan"));
	ASSERT_EQUALS_DES16(readNinthEntry.iServiceCentre.iTelNumber, KNumberInternational, _L("RMobileSmsStore::Read Ninth Read Entry has the wrong iServiceCentre.iTelNumber"));
		
	ASSERT_EQUALS(readLastEntry.iServiceCentre.iTypeOfNumber, RMobilePhone::EAbbreviatedNumber, _L("RMobileSmsStore::Read Last Read Entry has the wrong iServiceCentre.iTypeOfNumber"))	;
	ASSERT_EQUALS(readLastEntry.iServiceCentre.iNumberPlan, RMobilePhone::EIsdnNumberPlan,_L("RMobileSmsStore::Read Last Read Entry has the wrong iServiceCentre.iNumberPlan"))	;
	ASSERT_EQUALS_DES16(readLastEntry.iServiceCentre.iTelNumber, KNumber,_L("RMobileSmsStore::Read Last Read Entry has the wrong iServiceCentre.iTelNumber"));

	//
	// TEST END
	//

    StartCleanup();	
	
	// Pop:
	// getInfoStatus
	// writeStatus
	// readStatus	
	CleanupStack::PopAndDestroy(3,&getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0002::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0002");
	}



CCTSYIntegrationTestSMSStore0003::CCTSYIntegrationTestSMSStore0003(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0003::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0003::~CCTSYIntegrationTestSMSStore0003()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0003::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0003
 * @SYMFssID BA/CTSY/SMSS-0003
 * @SYMTestCaseDesc Read entry that is not present in the SMS store.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Read, RMobilePhoneStore::Read
 * @SYMTestExpectedResults Pass - KErrNotFound returned when reading a non-existent entry.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify KErrNotFound is returned.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsReadAccess 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	WaitForPhoneBookCachingToFinish();
	
	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out")); 
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
	CHECK_BITS_SET_L(storeInfo.iCaps, RMobilePhoneStore::KCapsReadAccess,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect store caps"));
				   
	// Delete an entry from a known slot. 
	// check if it is empty
	RMobileSmsStore::TMobileGsmSmsEntryV1 readEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgReadEntry(readEntry);
	TInt knownSlotIndex = 1;
	readEntry.iIndex = knownSlotIndex;
	readEntry.iMsgData.Zero();
	readEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;
	TExtEtelRequestStatus readStatus (smsStore,EMobilePhoneStoreRead);	
	CleanupStack::PushL(readStatus);
		
	smsStore.Read(readStatus,pckgReadEntry);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(readStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::Read timed out")) ;
	CHECK_EQUALS_L(readStatus.Int(), KErrNone, _L("RMobileSmsStore::Read returned an error"));

	// If the entry exists, delete it				
	if(readStatus.Int() == KErrNone)
		{		
		TExtEtelRequestStatus deleteStatus (smsStore,EMobilePhoneStoreDelete);
		CleanupStack::PushL(deleteStatus);		
		smsStore.Delete(deleteStatus,knownSlotIndex);
		CHECK_TRUE_L(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium) == KErrNone, _L("RMobileSmsStore::Delete timed out"));
		CHECK_TRUE_L(deleteStatus.Int() == KErrNone,_L("RMobileSmsStore::Delete returned an error"));
		CleanupStack::PopAndDestroy(&deleteStatus);
		}

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// Read an entry from a known empty slot. 
	readEntry.iIndex = knownSlotIndex;
	readEntry.iMsgData.Zero();
	readEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;	
	smsStore.Read(readStatus,pckgReadEntry);
	
	// Check KErrNotFound is returned.
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Read timed out"));
	ASSERT_EQUALS(readStatus.Int(), KErrNotFound, _L("RMobileSmsStore::Read did not return KErrNotFound"));	

	//
    // TEST END
    //

    StartCleanup();
	// Pop:
	// getInfoStatus
	// readStatus
	CleanupStack::PopAndDestroy(2,&getInfoStatus);		
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0003::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0003");
	}



CCTSYIntegrationTestSMSStore0004::CCTSYIntegrationTestSMSStore0004(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0004::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0004::~CCTSYIntegrationTestSMSStore0004()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0004::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0004
 * @SYMFssID BA/CTSY/SMSS-0004
 * @SYMTestCaseDesc Read SMS message from the SMS store using invalid slot numbers.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Read
 * @SYMTestExpectedResults Pass - Error returned on read.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify KErrArgument or KErrGsmSMSInvalidMemoryIndex or KErrNotFound is returned.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsReadAccess 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	WaitForPhoneBookCachingToFinish();
	
	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
	CHECK_BITS_SET_L(storeInfo.iCaps, RMobilePhoneStore::KCapsReadAccess,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect store caps"));
				   
	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// ===  Read an entry with an invalid slot number ===

	// Read a single entry from the phone book using aIndex = -1 
	RMobileSmsStore::TMobileGsmSmsEntryV1 readEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgReadEntry(readEntry);
	readEntry.iIndex = -1;
	readEntry.iMsgData.Zero();
	readEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;
	TExtEtelRequestStatus readStatus (smsStore,EMobilePhoneStoreRead);	
	CleanupStack::PushL(readStatus);	
	smsStore.Read(readStatus,pckgReadEntry);
	// Check KErrArgument or KErrGsmSMSInvalidMemoryIndex or KErrNotFound is returned.
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Read timed out"));
	ASSERT_TRUE((readStatus.Int() == KErrArgument) || 
				(readStatus.Int() == KErrGsmSMSInvalidMemoryIndex) || 
				(readStatus.Int() == KErrNotFound),
				_L("RMobileSmsStore::Read Did not get the expected KErrArgument || KErrGsmSMSInvalidMemoryIndex || KErrNotFound when reading from -1 index"));
	

	// Read a single entry from the phone book using aIndex = -10 
	readEntry.iIndex = -10;
	smsStore.Read(readStatus,pckgReadEntry);	
	// Check KErrArgument or KErrGsmSMSInvalidMemoryIndex or KErrNotFound is returned.
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Read timed out"));
	ASSERT_TRUE((readStatus.Int() == KErrArgument) || 
				(readStatus.Int() == KErrGsmSMSInvalidMemoryIndex) || 
				(readStatus.Int() == KErrNotFound),
				_L("RMobileSmsStore::Read Did not get the expected KErrArgument || KErrGsmSMSInvalidMemoryIndex || KErrNotFound when reading from -10 index"));
	

	// Read a single entry from the phone book using aIndex = -50 
	readEntry.iIndex = -50;
	smsStore.Read(readStatus,pckgReadEntry);	
	// Check KErrArgument or KErrGsmSMSInvalidMemoryIndex or KErrNotFound is returned.
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Read timed out"));
	ASSERT_TRUE((readStatus.Int() == KErrArgument) || 
				(readStatus.Int() == KErrGsmSMSInvalidMemoryIndex) || 
				(readStatus.Int() == KErrNotFound),
				_L("RMobileSmsStore::Read Did not get the expected KErrArgument || KErrGsmSMSInvalidMemoryIndex || KErrNotFound when reading from -50 index"));

	//
    // TEST END
    //

    StartCleanup();
	
	// Pop:
	// getInfoStatus
	// readStatus
	CleanupStack::PopAndDestroy(2,&getInfoStatus);		
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0004::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0004");
	}



CCTSYIntegrationTestSMSStore0005::CCTSYIntegrationTestSMSStore0005(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0005::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0005::~CCTSYIntegrationTestSMSStore0005()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0005::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0005
 * @SYMFssID BA/CTSY/SMSS-0005
 * @SYMTestCaseDesc Write SMS message to the SMS store.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Write, RMobilePhoneStore::Read, RMobilePhoneStore::NotifyStoreEvent
 * @SYMTestExpectedResults Pass - Write successful. 
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify entries are written correctly and can be read.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsReadAccess | KCapsWriteAccess | KCapsNotifyEvent 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	WaitForPhoneBookCachingToFinish();
	
	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
					
	TUint wantedBits = RMobilePhoneStore::KCapsReadAccess | 
					   RMobilePhoneStore::KCapsWriteAccess | 
					   RMobilePhoneStore::KCapsNotifyEvent;
	CHECK_BITS_SET_L(storeInfo.iCaps, wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	// Ensure phone store is not full. 	
	TInt clearSpace = iSimTsyTestHelper.EnsureEmptyStoreSpaceL(smsStore,KETelIccSmsStore,storeInfo,phone);
	CHECK_TRUE_L(clearSpace>0,_L("TSimTsyTestHelper::EnsureEmptyStoreSpaceL returned an error"));

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// ===  Find out how many entries are used in the phone store ===
	
	// Get phone store information using RMobilePhone::GetPhoneStoreInfo and KETelIccSmsStore 
	// Store the iUsedEntries returned.
	// Get phone book store information using RMobilePhoneStore::GetInfo 
	// Store the iUsedEntries returned.
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	TInt usedEntries = -1;
	TInt usedEntries2 = -1;
	ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, 
			phoneStoreInfoPckg,
			phone, 
			usedEntries, 
			usedEntries2), 
			KErrNone,  _L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));

	// ===  Write a valid entry (RMobileSmsStore::TMobileGsmSmsEntryV1) ===

	// post notifier for RMobilePhoneStore::NotifyStoreEvent
	TExtEtelRequestStatus notifyStoreEventStatus (smsStore,EMobilePhoneStoreNotifyStoreEvent);	
	CleanupStack::PushL(notifyStoreEventStatus);
	TUint32 storeEvent;
	TInt index;
	smsStore.NotifyStoreEvent(notifyStoreEventStatus, storeEvent, index);
	
	// Write a valid entry with a entry into the phone store specifying a specific index to store the entry which does not contain an entry. 
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry); 
	CreateGsmSmsEntry(entry, clearSpace, KValidSmsPdu1(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENationalNumber,
			RMobilePhone::EIsdnNumberPlan);
	
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);	
	smsStore.Write(writeStatus,pckgEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Write Timed out"));
	ASSERT_EQUALS(writeStatus.Int(), KErrNone, _L("RMobileSmsStore::Write returned an error"));

	TEST_CHECK_POINT_L(_L("RMobileSmsStore::Write returned an error, not proceeding with test"));
		
	// Check RMobilePhoneStore::NotifyStoreEvent completes with RMobilePhoneStore::KStoreEntryAdded
	RMobilePhoneStore::TMobileStoreEvent expectedEvent = RMobilePhoneStore::KStoreEntryAdded ;
	iSmsStoreTestHelper.WaitForSmsStoreNotifyStoreEvent( smsStore,
													notifyStoreEventStatus,
													storeEvent,
													expectedEvent,
													index);

	// ===  Read the written entry ===

	// Read the entry from the phone store. 
	RMobileSmsStore::TMobileGsmSmsEntryV1 readEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgReadEntry(readEntry);
	readEntry.iIndex = index;
	readEntry.iMsgData.Zero();
	readEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;
	TExtEtelRequestStatus readStatus (smsStore,EMobilePhoneStoreRead);	
	CleanupStack::PushL(readStatus);
		
	smsStore.Read(readStatus,pckgReadEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Read, Timed out"));
	ASSERT_EQUALS(readStatus.Int(), KErrNone, _L("RMobileSmsStore::Read returned an error"));			
	
	// Check that the entry information is the same as that written.
	ASSERT_EQUALS(readEntry.iMsgStatus, RMobileSmsStore::EStoredMessageUnread, 	_L("RMobileSmsStore::Read Read Entry has the wrong iMsgStatus"));
	ASSERT_EQUALS_DES8(readEntry.iMsgData, KValidSmsPdu1, _L("RMobileSmsStore::Read Read Entry has the wrong iMsgData"));
									
	// Check iServiceCentre is the same as that written to the phone book in set up.
	ASSERT_EQUALS(readEntry.iServiceCentre.iTypeOfNumber,  RMobilePhone::ENationalNumber, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iTypeOfNumber"));
	ASSERT_EQUALS(readEntry.iServiceCentre.iNumberPlan, RMobilePhone::EIsdnNumberPlan, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iNumberPlan"));
	ASSERT_EQUALS_DES16(readEntry.iServiceCentre.iTelNumber, KNumber, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iTelNumber"));

	// ===  Get the number of used entries and check it is 1 higher than before writing the new entry ===

	// Check RMobilePhoneStore::GetInfo returns iUsedEntries which is 1 higher than that stored if this API is supported
	// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries which is 1 higher than that stored.
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, phoneStoreInfoPckg,  
				phone, usedEntries +1, usedEntries2 +1), 
				KErrNone, 
				_L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));

	// ===  Write an entry to the same slot number as before ===

	// post notifier for RMobilePhoneStore::NotifyStoreEvent
	smsStore.NotifyStoreEvent(notifyStoreEventStatus, storeEvent, index);
	
	// Write a valid entry with a entry into the phone store specifying a specific index to 
	// store the entry which is the same as the index used in the first write. 
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry2;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry2(entry2);
	CreateGsmSmsEntry(entry2, clearSpace, KValidSmsPdu1(), 
			RMobileSmsStore::EStoredMessageRead, RMobilePhone::EInternationalNumber,
			RMobilePhone::EIsdnNumberPlan);
	smsStore.Write(writeStatus,pckgEntry2);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Write timed out"));
	ASSERT_EQUALS(writeStatus.Int(), KErrNone, _L("RMobileSmsStore::Write returned an error"));
	
	TEST_CHECK_POINT_L(_L("RMobileSmsStore::Write returned an error"));
	
	// Check RMobilePhoneStore::NotifyStoreEvent completes with RMobilePhoneStore::KStoreEntryChanged
	expectedEvent = RMobilePhoneStore::KStoreEntryChanged;
	iSmsStoreTestHelper.WaitForSmsStoreNotifyStoreEvent( smsStore,
													notifyStoreEventStatus,
													storeEvent,
													expectedEvent,
													entry2.iIndex);
	
	// DEFECT HERE!
	ERR_PRINTF2(_L("<font color=Orange>$CTSYKnownFailure: defect id = %d</font>"), 10003);

	// ===  Read the written entry ===

	// Read the entry from the phone store. 
	readEntry.iIndex = entry2.iIndex; 
	smsStore.Read(readStatus,pckgReadEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Read, Timed out"));
	ASSERT_EQUALS(readStatus.Int(), KErrNone, _L("RMobileSmsStore::Read returned an error"));
	
	// Check that the entry information is the same as that written.
	ASSERT_EQUALS(readEntry.iMsgStatus, RMobileSmsStore::EStoredMessageRead, _L("RMobileSmsStore::Read Read Entry has the wrong iMsgStatus"));
	ASSERT_EQUALS_DES8(readEntry.iMsgData, KValidSmsPdu1, _L("RMobileSmsStore::Read Read Entry has the wrong iMsgData"));	
	ASSERT_EQUALS(readEntry.iServiceCentre.iTypeOfNumber,  RMobilePhone::EInternationalNumber, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iTypeOfNumber"));
	ASSERT_EQUALS(readEntry.iServiceCentre.iNumberPlan, RMobilePhone::EIsdnNumberPlan,	_L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iNumberPlan"));
	ASSERT_EQUALS_DES16(readEntry.iServiceCentre.iTelNumber, KNumberInternational, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iTelNumber"));

	// ===  Get the number of used entries and check it is the same as the previous call to get number of used entries ===
	
	// Check RMobilePhone::GetPhoneStoreInfo returns correct iUsedEntries
	// Check RMobilePhoneStore::GetInfo returns correct iUsedEntries 
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore,  phoneStoreInfoPckg, phone, usedEntries +1, usedEntries2 +1), 
		KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));

	//
    // TEST END
    //

    StartCleanup();

	// Pop
	// getInfoStatus
	// notifyStoreEventStatus
	// writeStatus
	// readStatus
	CleanupStack::PopAndDestroy(4,&getInfoStatus);
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0005::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0005");
	}



CCTSYIntegrationTestSMSStore0006::CCTSYIntegrationTestSMSStore0006(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0006::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0006::~CCTSYIntegrationTestSMSStore0006()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0006::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0006
 * @SYMFssID BA/CTSY/SMSS-0006
 * @SYMTestCaseDesc Write an entry to SMS store at index of -1 (first free slot).
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Write, RMobilePhoneStore::GetInfo, RMobilePhoneStore::Read, RMobilePhoneStore::NotifyStoreEvent, RMobilePhone::GetPhoneStoreInfo
 * @SYMTestExpectedResults Pass - Entry written.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify entry is written correctly and correct slot number is returned.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	WaitForPhoneBookCachingToFinish();
	
	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	// Ensure SIM phone book is not full. 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	TInt nextFreeSpace = iSimTsyTestHelper.EnsureEmptyStoreSpaceL(smsStore,KETelIccSmsStore,storeInfo,phone);
	CHECK_TRUE_L(nextFreeSpace>=0,_L("TSimTsyTestHelper::GetSmsMessagingL returned an error"));
	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsWriteAccess | KCapsReadAccess | KCapsNotifyEvent 
	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);

	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));				
	TUint wantedBits = RMobilePhoneStore::KCapsReadAccess | 
					   RMobilePhoneStore::KCapsWriteAccess | 
					   RMobilePhoneStore::KCapsNotifyEvent;
	CHECK_BITS_SET_L(storeInfo.iCaps, wantedBits, KNoUnwantedBits, 
					_L("RMobileSmsStore::GetInfo, wrong bits set"));


	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// Get the phone book information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1 	
	TInt storedUsedEntries = -1;
	TInt storedPhoneUsedEntries = -1;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, 
			phoneStoreInfoPckg,
			phone,
			storedUsedEntries,
			storedPhoneUsedEntries),
			KErrNone,  
			_L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));

	// post notifier for RMobilePhoneStore::NotifyStoreEvent
	TExtEtelRequestStatus notifyStoreEventStatus (smsStore,EMobilePhoneStoreNotifyStoreEvent);	
	CleanupStack::PushL(notifyStoreEventStatus);
	TUint32 storeEvent;
	TInt index;
	smsStore.NotifyStoreEvent(notifyStoreEventStatus, storeEvent, index);
	
		
	// ===  Write an entry to the first free slot (RMobileSmsStore::TMobileGsmSmsEntryV1) ===

	// Write a valid entry to the phone store using RMobilePhoneStore::Write supplying aEntry.index = -1 
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry); 
	CreateGsmSmsEntry(entry, -1, KValidSmsPdu1(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENationalNumber,
			RMobilePhone::EIsdnNumberPlan);
	
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);
	smsStore.Write(writeStatus,pckgEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Write timed out"));
	ASSERT_EQUALS(writeStatus.Int(), KErrNone, _L("RMobileSmsStore::Write returned an error"));

										
	// Store the aEntry.iIndex returned for future use 
	TInt storedIndex = entry.iIndex;
	
	// Check RMobilePhoneStore::NotifyStoreEvent completes with RMobilePhoneStore::KStoreEntryAdded
	RMobilePhoneStore::TMobileStoreEvent expectedEvent = RMobilePhoneStore::KStoreEntryAdded ;
	iSmsStoreTestHelper.WaitForSmsStoreNotifyStoreEvent( smsStore,
													notifyStoreEventStatus,
													storeEvent,
													expectedEvent,
													index);
													
	// ===  Get the number of used entries and check it is 1 higher than before writing the new entry ===

	// Check RMobilePhoneStore::GetInfo returns iUsedEntries which is 1 higher than that stored if this API is supported
	// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries which is 1 higher than that stored.
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, 
			 phoneStoreInfoPckg, phone, storedUsedEntries +1, storedPhoneUsedEntries +1),
			KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
	
	// ===  Read the written entry ===

	// Read the written entry at index aEntry.iIndex returned from the write 
	RMobileSmsStore::TMobileGsmSmsEntryV1 readEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgReadEntry(readEntry);
	readEntry.iIndex = storedIndex;
	readEntry.iMsgData.Zero();
	readEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;
	TExtEtelRequestStatus readStatus (smsStore,EMobilePhoneStoreRead);	
	CleanupStack::PushL(readStatus);	
	smsStore.Read(readStatus,pckgReadEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone,	_L("RMobileSmsStore::Read, timed out"));
	ASSERT_EQUALS(readStatus.Int(), KErrNone, _L("RMobileSmsStore::Read returned an error"));

	// Check RMobilePhoneStore::Read returns correct entry information 
	ASSERT_EQUALS(readEntry.iMsgStatus, RMobileSmsStore::EStoredMessageUnread, _L("RMobileSmsStore::Read Read Entry has the wrong iMsgStatus"));
	ASSERT_EQUALS_DES8(readEntry.iMsgData, KValidSmsPdu1, _L("RMobileSmsStore::Read Read Entry has the wrong iMsgData"));			
	ASSERT_EQUALS(readEntry.iServiceCentre.iTypeOfNumber,  RMobilePhone::ENationalNumber, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iTypeOfNumber"));
	ASSERT_EQUALS(readEntry.iServiceCentre.iNumberPlan, RMobilePhone::EIsdnNumberPlan, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iNumberPlan"));
	ASSERT_EQUALS_DES16(readEntry.iServiceCentre.iTelNumber, KNumber, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iTelNumber"));
	
	//
    // TEST END
    //

    StartCleanup();
	// Pop:
	// getInfoStatus
	// writeStatus
	// notifyStoreEventStatus
	// readStatus
	CleanupStack::PopAndDestroy(4, &getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0006::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0006");
	}



CCTSYIntegrationTestSMSStore0007::CCTSYIntegrationTestSMSStore0007(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0007::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0007::~CCTSYIntegrationTestSMSStore0007()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0007::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0007
 * @SYMFssID BA/CTSY/SMSS-0007
 * @SYMTestCaseDesc Write SMS message to the SMS store using invalid slot numbers.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Write, RMobilePhoneStore::Read
 * @SYMTestExpectedResults Pass - Error returned on write.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify error is returned on attempt to write to an invalid index and number of used entries in the store is unchanged.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	
	// Ensure phone book is not full. 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);
	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	TInt nextFreeSpace = iSimTsyTestHelper.EnsureEmptyStoreSpaceL(smsStore,KETelIccSmsStore,storeInfo,phone);
	CHECK_TRUE_L(nextFreeSpace>=0,_L("TSimTsyTestHelper::GetSmsMessagingL returned an error"));
	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsWriteAccess | KCapsReadAccess 
	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
	TUint wantedBits = RMobilePhoneStore::KCapsReadAccess | RMobilePhoneStore::KCapsWriteAccess;
	CHECK_BITS_SET_L(storeInfo.iCaps, wantedBits,KNoUnwantedBits, _L("RMobileSmsStore::GetInfo, wrong bits set"));


	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//

	// ===  1. Find out how many entries are used in the phone book ===
	// ===  2. Attempt to write an entry to invalid index ===
	// ===  3. Get the number of used entries and check it is same as before the attempted write ===
	// Repeat steps 1 to 3 for aEntry.index = 0, -2, -10 	

	TInt indexArray[3] = {0,-2,-10};	
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);	
	TInt storedUsedEntries, storedPhoneUsedEntries;
	
	// create the entry, the only thing that will change in each iteration is the iIndex
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg entryPckg(entry);
 	CreateGsmSmsEntry(entry, 1, KValidSmsPdu1(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENationalNumber,
			RMobilePhone::EIsdnNumberPlan);
 	
	for (TInt i = 0; i< 3; i++)
		{
		// ===  1. Find out how many entries are used in the phone book ===
		
		// Get the phone book information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1 
		// Store iUsedEntries returned for future use
		// Get the phone book information using RMobilePhone::GetPhoneStoreInfo
		// Store iUsedEntries returned for future use
		RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
		RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
		ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, 
				phoneStoreInfoPckg,
				phone,
				storedUsedEntries,
				storedPhoneUsedEntries),
				KErrNone,  _L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));
				
		// ===  2. Attempt to write an entry to invalid index ===
		
		// Write an entry using RMobilePhoneStore::Write and aEntry.index = 0, -2, -10 
		entry.iIndex = indexArray[i];			
		smsStore.Write(writeStatus,entryPckg);
										
		// Check KErrArgument or KErrGsmSMSInvalidMemoryIndex is returned
		DEBUG_PRINTF2(_L("just wrote to index = %d"), entry.iIndex);
		ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium),KErrNone, _L("RMobileSmsStore::Write, timed out"));
		ASSERT_TRUE((writeStatus.Int() == KErrArgument) || (writeStatus.Int() == KErrGsmSMSInvalidMemoryIndex), _L("RMobileSmsStore::Write did not return KErrArgument | KErrGsmSMSInvalidMemoryIndex"));
		DEBUG_PRINTF2(_L("write status = %d"), writeStatus.Int());
										
		// ===  3. Get the number of used entries and check it is same as before the attempted write ===
		
		// Check RMobilePhoneStore::GetInfo returns same iUsedEntries as before	
		// Check RMobilePhone::GetPhoneStoreInfo returns same iUsedEntries as before
		ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, phoneStoreInfoPckg, phone, 
				storedUsedEntries, storedPhoneUsedEntries),
				KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
		} // end for (TInt i = 0; i< 3; i++)
		
	ERR_PRINTF2(_L("<font color=Orange>$CTSYKnownFailure: defect id = %d</font>"), 10004);
	
	// ===  Attempt to write an entry to an index that is higher than the max slot number ===

	// Write an entry using RMobilePhoneStore::Write and aEntry.index = 10000 
	entry.iIndex = 10000;
	smsStore.Write(writeStatus,entryPckg);
	// Check error returned is not KErrNone
	ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Write, timed out"));
	ASSERT_TRUE(writeStatus.Int() != KErrNone, _L("RMobileSmsStore::Write should have returned an error but didnt"));

	
	//
    // TEST END
    //

    StartCleanup();
	// Pop
	// getInfoStatus
	// writeStatus
	CleanupStack::PopAndDestroy(2, &getInfoStatus);	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0007::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0007");
	}



CCTSYIntegrationTestSMSStore0008::CCTSYIntegrationTestSMSStore0008(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0008::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0008::~CCTSYIntegrationTestSMSStore0008()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0008::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0008
 * @SYMFssID BA/CTSY/SMSS-0008
 * @SYMTestCaseDesc Write SMS message to the SMS store when SIM is full.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Write, RMobilePhoneStore::Read
 * @SYMTestExpectedResults Pass - Error on attempt to write.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify error is returned and number of used entries is unchanged.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	// Fill SIM phone book. 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);
    CHECK_TRUE_L(iSmsStoreTestHelper.EnsureStoreFullL(smsStore),_L("TSmsStoreTsyTestHelper::EnsureStoreFullL returned an error"));
    

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// ===  Find out how many entries are used in the phone book ===

	// Get the phone book information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1 
	// Store iUsedEntries returned for future use 
	// Get the phone book information using RMobilePhone::GetPhoneStoreInfo 
	// Store iUsedEntries returned for future use 
	TInt storeUsedEntries = -1;
	TInt phoneUsedEntries = -1;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, 
			phoneStoreInfoPckg,
			phone,
			storeUsedEntries,
			phoneUsedEntries),
			KErrNone,  _L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));
	

	// ===  Attempt to write an entry to the phone book ===

	// Write an entry using RMobilePhoneStore::Write and aEntry.index = -1 
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry);
	CreateGsmSmsEntry(entry, -1, KValidSmsPdu1,
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::EUnknownNumber,
			RMobilePhone::EIsdnNumberPlan);
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);	
	smsStore.Write(writeStatus,pckgEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium),KErrNone, _L("RMobileSmsStore::Write timed out"));

	// Check KErrDiskFull is returned.
	ASSERT_EQUALS(writeStatus.Int(), KErrDiskFull, _L("RMobileSmsStore::Write did not return the expected status != KErrNone"));

	// ===  Get the number of used entries and check it is the same as before attempted write ===

	// Check RMobilePhoneStore::GetInfo returns iUsedEntries which is same as before
	// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries which is same as before
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore,  phoneStoreInfoPckg, phone, 
		storeUsedEntries, phoneUsedEntries),
		KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// writeStatus
	CleanupStack::PopAndDestroy(&writeStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0008::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0008");
	}



CCTSYIntegrationTestSMSStore0009::CCTSYIntegrationTestSMSStore0009(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0009::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0009::~CCTSYIntegrationTestSMSStore0009()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0009::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0009
 * @SYMFssID BA/CTSY/SMSS-0009
 * @SYMTestCaseDesc Write SMS message to the SMS store making the store full.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Write, RMobilePhoneStore::Read, RMobilePhoneStore::NotifyStoreEvent
 * @SYMTestExpectedResults Pass - Entry written correctly.  Store event is retrieved indicating entry has been written and store is full.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify entry written and KStoreFull event occurs.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsWriteAccess | KCapsReadAccess | KCapsNotifyEvent 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
					
	TUint wantedBits =  RMobilePhoneStore::KCapsWriteAccess | 
						RMobilePhoneStore::KCapsReadAccess | 
						RMobilePhoneStore::KCapsNotifyEvent;
	CHECK_BITS_SET_L(storeInfo.iCaps, wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	
	// Fill phone book until there is only one slot free. 
	// Create an entry
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry);
	CreateGsmSmsEntry(entry, -1, KValidSmsPdu2(),
			RMobileSmsStore::EStoredMessageUnread, 
			RMobilePhone::ENetworkSpecificNumber,
			RMobilePhone::ETelexNumberPlan);

	TExtEtelRequestStatus deleteStatus (smsStore,EMobilePhoneStoreDelete);
	CleanupStack::PushL(deleteStatus);
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);
	
	if (storeInfo.iUsedEntries == storeInfo.iTotalEntries) // if already full, delete one entry
		{
		smsStore.Delete(deleteStatus,storeInfo.iUsedEntries);			
		CHECK_TRUE_L(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium) == KErrNone, _L("RMobileSmsStore::Delete timed out"));
		CHECK_TRUE_L(deleteStatus.Int() == KErrNone, _L("RMobileSmsStore::Delete returned an error"));
		}
	else
		{
		while (storeInfo.iUsedEntries != (storeInfo.iTotalEntries))
			{
			entry.iIndex = -1; // need to reset this every time

			smsStore.Write(writeStatus,pckgEntry);
			CHECK_TRUE_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium)==KErrNone, _L("RMobileSmsStore::Write timed out"));
			CHECK_TRUE_L(writeStatus.Int() == KErrNone, _L("RMobileSmsStore::Write returned an error"));
		
			smsStore.GetInfo(getInfoStatus,storeInfoPckg);
			CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
			CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
			}
		}


	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// ===  Find out how many entries are used in the phone book ===

	// Get the phone book information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1  
	// Store iUsedEntries returned for future use 
	// Get the phone book information using RMobilePhone::GetPhoneStoreInfo 
	// Store iUsedEntries returned for future use 
	TInt storeUsedEntries = -1;
	TInt phoneUsedEntries = -1;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, 
			phoneStoreInfoPckg,
			phone,
			storeUsedEntries,
			phoneUsedEntries),
			KErrNone,  _L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));
	
	// ===  Write an entry into the last free slot in the phone book ===

	// Post a notifier
	TExtEtelRequestStatus notifyStoreEventStatus (smsStore,EMobilePhoneStoreNotifyStoreEvent);	
	CleanupStack::PushL(notifyStoreEventStatus);
	TUint32 storeEvent;
	TInt index;
	smsStore.NotifyStoreEvent(notifyStoreEventStatus, storeEvent, index);	
	
	// Write an entry using RMobilePhoneStore::Write and aEntry.index = -1 
	entry.iIndex = -1; 
	smsStore.Write(writeStatus,pckgEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium),KErrNone, _L("RMobileSmsStore::Write timed out"));
	ASSERT_EQUALS(writeStatus.Int(), KErrNone, _L("RMobileSmsStore::Write returned an error"));

	// Check RMobilePhoneStore::NotifyStoreEvent completes with KStoreFull | KStoreEntryAdded
	TUint32 expectedEvent = RMobilePhoneStore::KStoreEntryAdded | RMobilePhoneStore::KStoreFull;
	iSmsStoreTestHelper.WaitForSmsStoreNotifyStoreEvent( smsStore,
													notifyStoreEventStatus,
													storeEvent,
													expectedEvent,
													index);

	// ===  Get the number of used entries and check it is 1 higher than before writing the new entry ===

	// Check RMobilePhoneStore::GetInfo returns iUsedEntries which is 1 higher than that stored.
	// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries which is 1 higher than that stored.
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, phoneStoreInfoPckg, phone,
		storeUsedEntries+1, phoneUsedEntries+1),
		KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
	
	// ===  Read the written entry ===

	// Read the written entry with RMobilePhoneStore::Read 
	RMobileSmsStore::TMobileGsmSmsEntryV1 readEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgReadEntry(readEntry);
	readEntry.iIndex = index;
	readEntry.iMsgData.Zero();
	readEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;

	TExtEtelRequestStatus readStatus (smsStore,EMobilePhoneStoreRead);	
	CleanupStack::PushL(readStatus);
		
	smsStore.Read(readStatus,pckgReadEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone, _L("RMobilePhoneStore::Read timed out"));
	ASSERT_EQUALS(readStatus.Int(), KErrNone, _L("RMobilePhoneStore::Read returned an error"));
	
	// Check entry details are correct
	ASSERT_EQUALS(readEntry.iMsgStatus, RMobileSmsStore::EStoredMessageUnread,_L("RMobilePhoneStore::Read Read Entry has the wrong iMsgStatus"));
	ASSERT_EQUALS_DES8(readEntry.iMsgData, KValidSmsPdu2, _L("RMobilePhoneStore::Read Read Entry has the wrong iMsgData"));
	ASSERT_EQUALS(readEntry.iServiceCentre.iTypeOfNumber,  RMobilePhone::ENetworkSpecificNumber,_L("RMobilePhoneStore::Read Read Entry has the wrong iServiceCentre.iTypeOfNumber"));
	ASSERT_EQUALS(readEntry.iServiceCentre.iNumberPlan, RMobilePhone::ETelexNumberPlan,_L("RMobilePhoneStore::Read Read Entry has the wrong iServiceCentre.iNumberPlan"));
	ASSERT_EQUALS_DES16(readEntry.iServiceCentre.iTelNumber, KNumber, _L("RMobilePhoneStore::Read Read Entry has the wrong iServiceCentre.iTelNumber"));
	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// deleteStatus
	// writeStatus
	// notifyStoreEventStatus
	// readStatus
	CleanupStack::PopAndDestroy(5, &getInfoStatus);
	
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0009::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0009");
	}



CCTSYIntegrationTestSMSStore0010::CCTSYIntegrationTestSMSStore0010(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0010::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0010::~CCTSYIntegrationTestSMSStore0010()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0010::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0010
 * @SYMFssID BA/CTSY/SMSS-0010
 * @SYMTestCaseDesc Delete entry from the SMS store.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Delete, RMobilePhoneStore::GetInfo, RMobilePhone::GetPhoneStoreInfo, RMobilePhoneStore::NotifyStoreEvent
 * @SYMTestExpectedResults Pass - Entry deleted.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify deletion is successful and deleted entry cannot be read.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	
	// Ensure phone has KCapsReadAccess | KCapsWriteAccess | KCapsNotifyEvent capabilities. 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);
	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
					
	TUint wantedBits =  RMobilePhoneStore::KCapsWriteAccess | 
						RMobilePhoneStore::KCapsReadAccess | 
						RMobilePhoneStore::KCapsNotifyEvent;
	CHECK_BITS_SET_L(storeInfo.iCaps, wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));


	// Ensure there is an entry in slot 4 of the phone book. 
    // Create an entry 
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry);
	CreateGsmSmsEntry(entry, 4, KValidSmsPdu1(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENetworkSpecificNumber,
			RMobilePhone::ETelexNumberPlan);    
 	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);   

	smsStore.Write(writeStatus,pckgEntry);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium)==KErrNone, _L("RMobileSmsStore::Write timed out"));
	// This may return a value other than KErrNone, if the space was already full
	CHECK_TRUE_L((writeStatus.Int() == KErrNone ||
				  writeStatus.Int() == KErrGsmSMSSimSMSStorageFull), _L("RMobileSmsStore::Write status was not set to KErrNone or KErrGsmSMSSimSMSStorageFull as expected"));
	

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	// === Delete entry from the phone store specifying aIndex = 4 ===

	// used for RMobilePhoneStore::NotifyStoreEvent
	TExtEtelRequestStatus notifyStoreEventStatus (smsStore,EMobilePhoneStoreNotifyStoreEvent);	
	CleanupStack::PushL(notifyStoreEventStatus);
	TUint32 storeEvent;
	
	// used for RMobileSmsStore::Delete
	TExtEtelRequestStatus deleteStatus (smsStore,EMobilePhoneStoreDelete);
	CleanupStack::PushL(deleteStatus);

	// used to check RMobilePhoneStore::NotifyStoreEvent
	TUint32 expectedEvent;		
	
	// used for RMobilePhoneStore::Read 
	RMobileSmsStore::TMobileGsmSmsEntryV1 readEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgReadEntry(readEntry);	
	TExtEtelRequestStatus readStatus (smsStore,EMobilePhoneStoreRead);	
	CleanupStack::PushL(readStatus);
	
	// ===  Find out how many entries are used in the phone book ===

	// Get the phone store information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1 
	// Store iUsedEntries returned for future use 
	// Get the phone book information using RMobilePhone::GetPhoneStoreInfo 
	// Store iUsedEntries returned for future use 
	TInt storeUsedEntries = -1;
	TInt phoneUsedEntries = -1;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, 
			phoneStoreInfoPckg,
			phone,
			storeUsedEntries,
			phoneUsedEntries),
			KErrNone,  _L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));
	
	// ===  Delete an entry ===
	// Post a notifier
	TInt storeEventIndex;
	smsStore.NotifyStoreEvent(notifyStoreEventStatus, storeEvent, storeEventIndex);	

	// Delete entry from the phone store specifying aIndex = 4
	smsStore.Delete(deleteStatus,4);			
	ASSERT_EQUALS(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Delete timed out"));
	ASSERT_EQUALS(deleteStatus.Int(), KErrNone, _L("RMobileSmsStore::Delete returned an error"));
	
	// Check RMobilePhoneStore::NotifyStoreEvent completes with KStoreEntryDeleted
	expectedEvent = RMobilePhoneStore::KStoreEntryDeleted;
	iSmsStoreTestHelper.WaitForSmsStoreNotifyStoreEvent( smsStore,
													notifyStoreEventStatus,
													storeEvent,
													expectedEvent,
													4);
													
	// ===  Get the number of used entries and check it is 1 lower than before deleting the new entry ===

	// Check RMobilePhoneStore::GetInfo returns iUsedEntries which is 1 lower  than that stored.
	// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries which is 1 lower than that stored.
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore,  phoneStoreInfoPckg, phone,
			storeUsedEntries-1, phoneUsedEntries-1),
			KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
	
	
	// ===  Attempt to read the deleted entry.  ===

	// Read a single entry stored in the slot used in delete 
	readEntry.iIndex = 4;
	readEntry.iMsgData.Zero();
	readEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;		
	smsStore.Read(readStatus,pckgReadEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone, _L("RMobilePhoneStore::Read timed out"));

	// Check KErrNotFound is returned.
	ASSERT_EQUALS(readStatus.Int(), KErrNotFound, _L("RMobilePhoneStore::Read did not return KErrNotFound as expected"));

	// ===  Attempt to delete the already deleted entry again. ===
	
	// Delete the already deleted entry 
	smsStore.Delete(deleteStatus,4);			
	ASSERT_EQUALS(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Delete timed out"));

	// $CTSYProblem The LTSY returns KErrNone to CTSY when an entry is deleted from a slot which is already empty
	// CTSY correctly propagates whatever error is returned by LTSY back to the client.
	// Therefore the test has been coded to expect KErrNone.  If the LTSY behaviour is fixed, KErrNotFound or similar
	// should be expected in this case.
	
	// Check KErrNone is returned
	ASSERT_EQUALS(deleteStatus.Int(), KErrNone, _L("RMobileSmsStore::Delete did not return KErrNone as expected"));	
		

	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// writeStatus
    // notifyStatus
	// deleteStatus
	// readStatus
	CleanupStack::PopAndDestroy(5, &getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0010::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0010");
	}



CCTSYIntegrationTestSMSStore0011::CCTSYIntegrationTestSMSStore0011(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0011::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0011::~CCTSYIntegrationTestSMSStore0011()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0011::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0011
 * @SYMFssID BA/CTSY/SMSS-0011
 * @SYMTestCaseDesc Delete entry from the SMS store which does not exist.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Delete, RMobilePhoneStore::GetInfo, RMobilePhone::GetPhoneStoreInfo
 * @SYMTestExpectedResults Pass - Error returned on delete.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify KErrNotFound or KErrNone is returned.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	// Ensure phone has KCapsReadAccess and KCapsWriteAccess capabilities. 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
					
	TUint wantedBits =  RMobilePhoneStore::KCapsWriteAccess | 
						RMobilePhoneStore::KCapsReadAccess ;
	CHECK_BITS_SET_L(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	// Ensure slot 1 is empty. 
	TExtEtelRequestStatus deleteStatus (smsStore,EMobilePhoneStoreDelete);
	CleanupStack::PushL(deleteStatus);
	smsStore.Delete(deleteStatus,1);			
	CHECK_TRUE_L(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium) == KErrNone, _L("RMobileSmsStore::Delete timed out"));
	CHECK_TRUE_L(deleteStatus.Int() == KErrNone || deleteStatus.Int() == KErrGsmSMSInvalidMemoryIndex,_L("RMobileSmsStore::Delete returned an error"));

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// ===  Find out how many entries are used in the phone book ===

	// Get phone store information using RMobilePhone::GetPhoneStoreInfo and KETelIccSmsStore
	// Store the iUsedEntries for future use.
	// Get phone book store information using RMobilePhoneStore::GetInfo
	// Store the iUsedEntries for future use.
	TInt storeUsedEntries = -1;
	TInt phoneUsedEntries = -1;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, 
			phoneStoreInfoPckg,
			phone,
			storeUsedEntries,
			phoneUsedEntries),
			KErrNone,  _L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));

	// Delete an entry using RMobilePhoneStore::Delete where aIndex is the index of slot 1 
	smsStore.Delete(deleteStatus,1);			
	ASSERT_EQUALS(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Delete timed out"));
	// Check KErrNotFound or KErrGsmSMSInvalidMemoryIndex or KErrNone is returned.
	ASSERT_TRUE((deleteStatus.Int()== KErrNotFound) || (deleteStatus.Int() == KErrNone) || (deleteStatus.Int() == KErrGsmSMSInvalidMemoryIndex),_L("RMobileSmsStore::Delete did not return KErrNotFound or KErrGsmSMSInvalidMemoryIndex"));

	// $CTSYProblem The LTSY returns KErrNone to CTSY when an entry is deleted from a slot which is already empty
	// CTSY correctly propagates whatever error is returned by LTSY back to the client.
	// Therefore the test has been coded to expect KErrNone.  If the LTSY behaviour is fixed, KErrNotFound or similar
	// should be expected in this case.
	
	// ===  Get the number of used entries and check it is the same as before attempted delete ===

	// Check RMobilePhoneStore::GetInfo returns iUsedEntries which is same as before
	// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries which is same as before
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, phoneStoreInfoPckg, phone,
			storeUsedEntries, phoneUsedEntries),
			KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
	

	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus,
	// deleteStatus,
	CleanupStack::PopAndDestroy(2,&getInfoStatus);
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0011::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0011");
	}



CCTSYIntegrationTestSMSStore0012::CCTSYIntegrationTestSMSStore0012(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0012::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0012::~CCTSYIntegrationTestSMSStore0012()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0012::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0012
 * @SYMFssID BA/CTSY/SMSS-0012
 * @SYMTestCaseDesc Delete entry from the SMS store which makes the store empty.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Delete, RMobilePhoneStore::GetInfo, RMobilePhone::GetPhoneStoreInfo, RMobilePhoneStore::NotifyStoreEvent
 * @SYMTestExpectedResults Pass - Entry deleted, RMobilePhoneStore::KStoreEmpty event occurs.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify entry deleted and KStoreEmpty event occurs.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);

	// Ensure phone has KCapsReadAccess | KCapsWriteAccess | KCapsNotifyEvent capabilities. 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone, _L("RMobileSmsStore::GetInfo, timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
	TUint wantedBits =  RMobilePhoneStore::KCapsWriteAccess | 
						RMobilePhoneStore::KCapsReadAccess | 
						RMobilePhoneStore::KCapsNotifyEvent;
	
	CHECK_BITS_SET_L(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));
	
	// Delete all the entries from the phone book then write one entry to a known location. 
	TExtEtelRequestStatus deleteStatus (smsStore,EMobilePhoneStoreDeleteAll);
	CleanupStack::PushL(deleteStatus);
	smsStore.DeleteAll(deleteStatus);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::DeleteAll timed out"));
	CHECK_TRUE_L(deleteStatus.Int() == KErrNone, _L("RMobileSmsStore::DeleteAll returned an error"));
	
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone, _L("RMobileSmsStore::GetInfo, timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
	CHECK_TRUE_L(storeInfo.iUsedEntries == 0, _L("RMobilePhoneStore::GetInfo SET UP error, iUsedEntries should be 0 at this point"));

	// Create an entry 
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry);
	CreateGsmSmsEntry(entry, -1, KValidSmsPdu1(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENetworkSpecificNumber,
			RMobilePhone::ETelexNumberPlan);

	// Write entry
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);
	smsStore.Write(writeStatus,pckgEntry);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium)==KErrNone, _L("RMobileSmsStore::Write timed out"));		
	CHECK_TRUE_L(writeStatus.Int() == KErrNone, _L("RMobileSmsStore::Write returned an error"));
	TInt entryNum = entry.iIndex;	

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// Post a notifier
	TExtEtelRequestStatus notifyStoreEventStatus (smsStore,EMobilePhoneStoreNotifyStoreEvent);	
	CleanupStack::PushL(notifyStoreEventStatus);
	TUint32 storeEvent;
	TInt index;
	smsStore.NotifyStoreEvent(notifyStoreEventStatus, storeEvent, index);	

	// Delete the entry from the SMS store 
	smsStore.Delete(deleteStatus, entryNum);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Delete timed out"));
	ASSERT_EQUALS(deleteStatus.Int(), KErrNone, _L("RMobileSmsStore::Delete returned an error"));

	// Check RMobilePhoneStore::NotifyStoreEvent completes with KStoreEntryDeleted | KStoreEmpty
	TUint32 expectedEvent = RMobilePhoneStore::KStoreEntryDeleted | RMobilePhoneStore::KStoreEmpty;
	iSmsStoreTestHelper.WaitForSmsStoreNotifyStoreEvent( smsStore,
													notifyStoreEventStatus,
													storeEvent,
													expectedEvent,
													index);

	// ===  Get the number of used entries and check it is the same as before attempted delete ===

	// Check RMobilePhoneStore::GetInfo returns iUsedEntries of 0
	// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries of 0
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, phoneStoreInfoPckg, phone, 0, 0),
			KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
    // deleteStatus
	// writeStatus
	// notifyStoreEventStatus
	CleanupStack::PopAndDestroy(4,&getInfoStatus);
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0012::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0012");
	}



CCTSYIntegrationTestSMSStore0013::CCTSYIntegrationTestSMSStore0013(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0013::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0013::~CCTSYIntegrationTestSMSStore0013()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0013::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0013
 * @SYMFssID BA/CTSY/SMSS-0013
 * @SYMTestCaseDesc Delete an entry from a full SMS store.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Delete, RMobilePhoneStore::GetInfo, RMobilePhone::GetPhoneStoreInfo, RMobilePhoneStore::NotifyStoreEvent
 * @SYMTestExpectedResults Pass - Entries deleted, RMobilePhoneStore::KStoreHasSpace event occurs.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify entry deleted and KStoreHasSpace event occurs.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsWriteAccess | KCapsNotifyEvent 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
					
	TUint wantedBits =  RMobilePhoneStore::KCapsWriteAccess | 
						RMobilePhoneStore::KCapsNotifyEvent;
	CHECK_BITS_SET_L(storeInfo.iCaps, wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	// Ensure phone book is full
    CHECK_TRUE_L(iSmsStoreTestHelper.EnsureStoreFullL(smsStore),_L("TSmsStoreTsyTestHelper::EnsureStoreFullL returned an error"));
		
		
	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// ===  Find out how many entries are used in the phone book ===

	// Get the phone book information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1 
	// Store iUsedEntries returned for future use 
	// Get the phone book information using RMobilePhone::GetPhoneStoreInfo				
	// Store iUsedEntries returned for future use 
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	TInt usedEntries = -1;
	TInt phoneUsedEntries = -1;
	ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, phoneStoreInfoPckg, phone,
			usedEntries,
			phoneUsedEntries),
			KErrNone,  _L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));

	// Post a notifier
	TExtEtelRequestStatus notifyStoreEventStatus (smsStore,EMobilePhoneStoreNotifyStoreEvent);	
	CleanupStack::PushL(notifyStoreEventStatus);
	TUint32 storeEvent;
	TInt index;
	smsStore.NotifyStoreEvent(notifyStoreEventStatus, storeEvent, index);	
	
	// Delete an entry from the phone book. 
	TExtEtelRequestStatus deleteStatus (smsStore,EMobilePhoneStoreDelete);
	CleanupStack::PushL(deleteStatus);

	smsStore.Delete(deleteStatus, 1);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Delete timed out"));
	ASSERT_EQUALS(deleteStatus.Int(), KErrNone, _L("RMobileSmsStore::Delete returned an error"));

	// Check RMobilePhoneStore::NotifyStoreEvent completes with RMobilePhoneStore::KStoreHasSpace | RMobilePhoneStore::KStoreEntryDeleted
	TUint32 expectedEvent = RMobilePhoneStore::KStoreHasSpace | RMobilePhoneStore::KStoreEntryDeleted;
	iSmsStoreTestHelper.WaitForSmsStoreNotifyStoreEvent( smsStore,
													notifyStoreEventStatus,
													storeEvent,
													expectedEvent,
													index);

	// ===  Get the number of used entries and check it is one lower than before ===

	// Check RMobilePhoneStore::GetInfo returns iUsedEntries is one lower than before
	// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries is one lower than before
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, phoneStoreInfoPckg, phone,
			usedEntries-1, phoneUsedEntries-1),
			KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
		
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// notifyStoreEventStatus
	// deleteStatus
	CleanupStack::PopAndDestroy(3, &getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0013::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0013");
	}



CCTSYIntegrationTestSMSStore0014::CCTSYIntegrationTestSMSStore0014(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0014::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0014::~CCTSYIntegrationTestSMSStore0014()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0014::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0014
 * @SYMFssID BA/CTSY/SMSS-0014
 * @SYMTestCaseDesc Delete all entries from the SMS store.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::DeleteAll, RMobilePhoneStore::GetInfo, RMobilePhone::GetPhoneStoreInfo, RMobilePhoneStore::NotifyStoreEvent
 * @SYMTestExpectedResults Pass - Entries deleted, RMobilePhoneStore::KStoreEmpty event occurs.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: All entries deleted.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsWriteAccess | KCapsNotifyEvent 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));

	// Ensure phone book is not empty 
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);	

	if (storeInfo.iUsedEntries == 0)
	{
		RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
		RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry);

	    // Create an entry 
		CreateGsmSmsEntry(entry, -1, KValidSmsPdu1(),
				RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENetworkSpecificNumber,
				RMobilePhone::ETelexNumberPlan);
		
		smsStore.Write(writeStatus,pckgEntry);
		CHECK_TRUE_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium)==KErrNone, _L("RMobileSmsStore::Write timed out"));
		CHECK_TRUE_L(writeStatus.Int() == KErrNone, _L("RMobileSmsStore::Write returned an error"));

		smsStore.GetInfo(getInfoStatus,storeInfoPckg);
		CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
		CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
	}
	
	CHECK_TRUE_L(storeInfo.iUsedEntries != 0, _L("SETUP: There should be at least one entry at this point"));

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// ===  Delete all entries from the phone book ===

	// post notifier for RMobilePhoneStore::NotifyStoreEvent
	TExtEtelRequestStatus notifyStoreEventStatus (smsStore,EMobilePhoneStoreNotifyStoreEvent);	
	CleanupStack::PushL(notifyStoreEventStatus);
	TUint32 storeEvent;
	TInt index;
	smsStore.NotifyStoreEvent(notifyStoreEventStatus, storeEvent, index);
	
	// Delete all entries from the full phone book 
	TExtEtelRequestStatus deleteAllStatus (smsStore,EMobilePhoneStoreDeleteAll);
	CleanupStack::PushL(deleteAllStatus);
	smsStore.DeleteAll(deleteAllStatus);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(deleteAllStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::DeleteAll timed out"));
	ASSERT_EQUALS(deleteAllStatus.Int(), KErrNone, _L("RMobileSmsStore::DeleteAll returned an error"));
 	TEST_CHECK_POINT_L(_L("RMobileSmsStore::DeleteAll returned an error"));
			
	// Check RMobilePhoneStore::NotifyStoreEvent complete with KStoreEmpty
	RMobilePhoneStore::TMobileStoreEvent expectedEvent = RMobilePhoneStore::KStoreEmpty ;
	iSmsStoreTestHelper.WaitForSmsStoreNotifyStoreEvent( smsStore,
													notifyStoreEventStatus,
													storeEvent,
													expectedEvent,
													index);	
	
	// ===  Check phone book is empty ===

	// Get the phone book information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1  
	// Check iUsedEntries == 0
	// Get the phone book information using RMobilePhone::GetPhoneStoreInfo 
	// Check iUsedEntries == 0
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, storeInfoPckg, phone, 0, 0),
		KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// writeStatus
	// notifyStoreEventStatus
	// deleteStatus
	CleanupStack::PopAndDestroy(4,&getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0014::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0014");
	}



CCTSYIntegrationTestSMSStore0015::CCTSYIntegrationTestSMSStore0015(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0015::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0015::~CCTSYIntegrationTestSMSStore0015()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0015::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0015
 * @SYMFssID BA/CTSY/SMSS-0015
 * @SYMTestCaseDesc Cancel delete of all entries from the SMS store.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::DeleteAll, RMobilePhoneStore::GetInfo, RMobilePhone::GetPhoneStoreInfo, RMobilePhoneStore::NotifyStoreEvent
 * @SYMTestExpectedResults Pass - Some entries deleted, request cancelled successfully. Store not empty.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify some entries deleted before cancellation but cancellation occurs.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsWriteAccess 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));

	TUint wantedBits =  RMobilePhoneStore::KCapsWriteAccess ;
	CHECK_BITS_SET_L(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	// Ensure phone store is full
    CHECK_TRUE_L(iSmsStoreTestHelper.EnsureStoreFullL(smsStore),_L("TSmsStoreTsyTestHelper::EnsureStoreFullL returned an error"));

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// ===  Find out how many entries are used in the phone book ===

	// Get the phone book information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1   
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	ASSERT_EQUALS(getInfoStatus.Int(), KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));	

	// Store iUsedEntries returned for future use 
	TInt storeUsedEntries = storeInfo.iUsedEntries;

	// ===  Delete all entries from the phone book ===

	// Delete all entries from the full phone book 
	TExtEtelRequestStatus deleteAllStatus (smsStore,EMobilePhoneStoreDeleteAll);
	CleanupStack::PushL(deleteAllStatus);	
	smsStore.DeleteAll(deleteAllStatus);
	// Do not wait for the request to complete. 

	// Wait for 2 seconds. 
	User::After(KOneSecond*2); 
		
	// Cancel the DeleteAll operation. Check KErrCancel returned on status of DeleteAll 
	smsStore.CancelAsyncRequest(EMobilePhoneStoreDeleteAllCancel);

	ASSERT_EQUALS(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::GetInfo, timed out"));
	ASSERT_TRUE(	deleteAllStatus.Int()==KErrNone ||
					deleteAllStatus.Int()==KErrCancel, 
					_L("RMobileSmsStore::GetInfo returned an error"));
	
	// ===  Check phone book is not empty but some entries have been deleted. ===

	// Get the phone book information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1   
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::GetInfo, timed out"));
	ASSERT_EQUALS(getInfoStatus.Int(), KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));

	// Check iUsedEntries < before deletion.
	ASSERT_TRUE(storeInfo.iUsedEntries < storeUsedEntries, _L("RMobilePhoneStore::GetInfo returned an unexpected number of iUsedEntries"));
	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// deleteStatus
	CleanupStack::PopAndDestroy(2, &getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0015::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0015");
	}



CCTSYIntegrationTestSMSStore0016::CCTSYIntegrationTestSMSStore0016(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0016::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0016::~CCTSYIntegrationTestSMSStore0016()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0016::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0016
 * @SYMFssID BA/CTSY/SMSS-0016
 * @SYMTestCaseDesc Write corrupt SMS message to the SMS store.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Write, RMobilePhoneStore::GetInfo
 * @SYMTestExpectedResults Pass - Error returned on write.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify error returned.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//
	
	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsWriteAccess 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));

	TUint wantedBits =  RMobilePhoneStore::KCapsWriteAccess ;
	CHECK_BITS_SET_L(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	TInt nextFreeSpace = iSimTsyTestHelper.EnsureEmptyStoreSpaceL(smsStore,KETelIccSmsStore,storeInfo,phone);
	CHECK_TRUE_L(nextFreeSpace>=0,_L("TSimTsyTestHelper::GetSmsMessagingL returned an error"));
	
	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	// ===  Find out how many entries are used in the phone book ===

	// Get the phone book information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1   
	// Store iUsedEntries returned for future use 
	// Get the phone book information using RMobilePhone::GetPhoneStoreInfo 
	// Store iUsedEntries returned for future use 
	TInt storeUsedEntries = -1;
	TInt phoneUsedEntries = -1;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, 
			phoneStoreInfoPckg,
			phone,
			storeUsedEntries,
			phoneUsedEntries),
			KErrNone,  _L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));
	
	// ===  Construct a corrupt SMS message ===

	// Create a  RMobileSmsStore::TMobileGsmSmsEntryV1 with a corrupt iMsgData. 
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry);
       
    // Create an entry 
	CreateGsmSmsEntry(entry, -1, KCorruptSmsPdu(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENationalNumber,
			RMobilePhone::EIsdnNumberPlan);
	
	// Write the entry to the SMS store. 
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);	

	// $CTSYProblem When the LTSY does not
	// panic when a corrupt SMS is passed to it for writing to the SMS
	// Store.
/*	smsStore.Write(writeStatus,pckgEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium),KErrNone, _L("RMobileSmsStore::Write timed out"))		

	// Check error != KErrNone is returned on attempt to write.
	ASSERT_TRUE(writeStatus.Int() != KErrNone, _L("RMobileSmsStore::Write did not return the expected error != KErrNone"))					

	// ===  Get the number of used entries and check it is the same as before attempted write ===

	// Check RMobilePhoneStore::GetInfo returns iUsedEntries which is same as before
	// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries which is same as before
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, phoneStoreInfoPckg, phone,
			storeUsedEntries, phoneUsedEntries),
			KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
*/
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// writeStatus
	CleanupStack::PopAndDestroy(2, &getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0016::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0016");
	}



CCTSYIntegrationTestSMSStore0017::CCTSYIntegrationTestSMSStore0017(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0017::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0017::~CCTSYIntegrationTestSMSStore0017()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0017::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0017
 * @SYMFssID BA/CTSY/SMSS-0017
 * @SYMTestCaseDesc Store an empty SMS 
 * @SYMTestPriority High
 * @SYMTestActions 
 * @SYMTestExpectedResults Pass - SMS message stored
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify SMS message are written and can be read.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsReadAccess | KCapsWriteAccess
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));

	TUint wantedBits =  RMobilePhoneStore::KCapsReadAccess |
						RMobilePhoneStore::KCapsWriteAccess;
	CHECK_BITS_SET_L(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));
				

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//

	// ===  Find out how many entries are used in the phone store ===
	
	// Get phone store information using RMobilePhone::GetPhoneStoreInfo and KETelIccSmsStore 
	// Store the iUsedEntries returned.
	// Get phone book store information using RMobilePhoneStore::GetInfo 
	// Store the iUsedEntries returned.
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	TInt usedEntries = -1;
	TInt usedEntries2 = -1;
	ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, 
			phoneStoreInfoPckg,
			phone, 
			usedEntries, 
			usedEntries2), 
			KErrNone,  _L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));

	// ===  Write a valid entry (RMobileSmsStore::TMobileGsmSmsEntryV1) ===

	// post notifier for RMobilePhoneStore::NotifyStoreEvent
	TExtEtelRequestStatus notifyStoreEventStatus (smsStore,EMobilePhoneStoreNotifyStoreEvent);	
	CleanupStack::PushL(notifyStoreEventStatus);
	TUint32 storeEvent;
	TInt index;
	smsStore.NotifyStoreEvent(notifyStoreEventStatus, storeEvent, index);
	
	// Write a valid empty entry with a entry into the phone store specifying a specific index to store the entry which does not contain an entry. 
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry); 
	CreateGsmSmsEntry(entry, -1, KValidEmptyPdu(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENationalNumber,
			RMobilePhone::EIsdnNumberPlan);
	
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);	
	smsStore.Write(writeStatus,pckgEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Write Timed out"));
	ASSERT_EQUALS(writeStatus.Int(), KErrNone, _L("RMobileSmsStore::Write returned an error"));

	TEST_CHECK_POINT_L(_L("RMobileSmsStore::Write returned an error, not proceeding with test"));
		
	// Check RMobilePhoneStore::NotifyStoreEvent completes with RMobilePhoneStore::KStoreEntryAdded
	RMobilePhoneStore::TMobileStoreEvent expectedEvent = RMobilePhoneStore::KStoreEntryAdded ;
	iSmsStoreTestHelper.WaitForSmsStoreNotifyStoreEvent( smsStore,
													notifyStoreEventStatus,
													storeEvent,
													expectedEvent,
													index);

	// ===  Read the written entry ===

	// Read the entry from the phone store. 
	RMobileSmsStore::TMobileGsmSmsEntryV1 readEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgReadEntry(readEntry);
	readEntry.iIndex = index;
	readEntry.iMsgData.Zero();
	readEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;
	TExtEtelRequestStatus readStatus (smsStore,EMobilePhoneStoreRead);	
	CleanupStack::PushL(readStatus);
		
	smsStore.Read(readStatus,pckgReadEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Read, Timed out"));
	ASSERT_EQUALS(readStatus.Int(), KErrNone, _L("RMobileSmsStore::Read returned an error"));			
	
	// Check that the entry information is the same as that written.
	ASSERT_EQUALS(readEntry.iMsgStatus, RMobileSmsStore::EStoredMessageUnread, 	_L("RMobileSmsStore::Read Read Entry has the wrong iMsgStatus"));
	ASSERT_EQUALS_DES8(readEntry.iMsgData, KValidEmptyPdu, _L("RMobileSmsStore::Read Read Entry has the wrong iMsgData"));
									
	// Check iServiceCentre is the same as that written to the phone book in set up.
	ASSERT_EQUALS(readEntry.iServiceCentre.iTypeOfNumber,  RMobilePhone::ENationalNumber, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iTypeOfNumber"));
	ASSERT_EQUALS(readEntry.iServiceCentre.iNumberPlan, RMobilePhone::EIsdnNumberPlan, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iNumberPlan"));
	ASSERT_EQUALS_DES16(readEntry.iServiceCentre.iTelNumber, KNumber, _L("RMobileSmsStore::Read Read Entry has the wrong iServiceCentre.iTelNumber"));

	// ===  Get the number of used entries and check it is 1 higher than before writing the new entry ===

	// Check RMobilePhoneStore::GetInfo returns iUsedEntries which is 1 higher than that stored if this API is supported
	// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries which is 1 higher than that stored.
	ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, 
				phoneStoreInfoPckg, phone, usedEntries +1, usedEntries2 +1), 
				KErrNone, 
				_L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
    // notifyStoreEventStatus
	// writeStatus
	// readStatus
	CleanupStack::PopAndDestroy(4, &getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0017::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0017");
	}



CCTSYIntegrationTestSMSStore0018::CCTSYIntegrationTestSMSStore0018(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0018::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0018::~CCTSYIntegrationTestSMSStore0018()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0018::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0018
 * @SYMFssID BA/CTSY/SMSS-0018
 * @SYMTestCaseDesc Delete an SMS message from an invalid slot.
 * @SYMTestPriority High
 * @SYMTestActions RMobilePhoneStore::Delete, RMobilePhone::GetPhoneStoreInfo
 * @SYMTestExpectedResults Pass - KErrPathNotFound returned.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify KErrPathNotFound is returned and number of phone store entries is unaffected.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsWriteAccess  
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));

	TUint wantedBits =  RMobilePhoneStore::KCapsWriteAccess;
	CHECK_BITS_SET_L(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// ===  Find out how many entries are used in the phone book ===

	// Get the phone book information using RMobilePhoneStore::GetInfo using a RMobilePhoneStore::TMobilePhoneStoreInfoV1   
	// Store iUsedEntries returned for future use 
	// Get the phone book information using RMobilePhone::GetPhoneStoreInfo 
	// Store iUsedEntries returned for future use
	TInt storeUsedEntries = -1;
	TInt phoneUsedEntries = -1;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobilePhoneStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	ASSERT_EQUALS(iSimTsyTestHelper.GetNumberOfUsedEntriesInStoreL(smsStore, KETelIccSmsStore, 
			phoneStoreInfoPckg,
			phone,
			storeUsedEntries,
			phoneUsedEntries),
			KErrNone,  _L("RMobilePhone::GetPhoneStoreInfo and RMobilePhoneStore::GetInfo both returned an error."));
	
	// ===  Delete an entry from an invalid slot number ===

	// Delete an entry from slot -1 
	// Repeat test deleting from slot 0 and -10 
	TInt indexArray[] = {-1,0,-10};
	
	TExtEtelRequestStatus deleteStatus (smsStore,EMobilePhoneStoreDelete);
	CleanupStack::PushL(deleteStatus);
	
	for (TInt i = 0; i< 3; i++)
		{
		
		if (indexArray[i] == 0)
			{
			ERR_PRINTF2(_L("<font color=Orange>$CTSYKnownFailure: defect id = %d</font>"), 10011);
			}
		
		smsStore.Delete(deleteStatus, indexArray[i]);
		ASSERT_EQUALS(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Delete timed out"));
		ASSERT_TRUE(deleteStatus.Int() != KErrNone, _L("RMobileSmsStore::Delete returned KErrNone when we were expecting an error"));

		// ===  Get the number of used entries and check it is the same as before attempted delete ===

		// Check RMobilePhoneStore::GetInfo returns iUsedEntries which is same as before
		// Check RMobilePhone::GetPhoneStoreInfo returns iUsedEntries which is same as before
		ASSERT_EQUALS(iSimTsyTestHelper.AssertNumberOfUsedEntriesCorrectL(smsStore, KETelIccSmsStore, phoneStoreInfoPckg, phone,
			storeUsedEntries, phoneUsedEntries),
			KErrNone, _L("RMobilePhoneStore::GetInfo and RMobilePhone::GetPhoneStoreInfo both returned an error"));
		}
	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// deleteStatus
	CleanupStack::PopAndDestroy(2,&getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0018::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0018");
	}



CCTSYIntegrationTestSMSStore0019::CCTSYIntegrationTestSMSStore0019(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0019::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0019::~CCTSYIntegrationTestSMSStore0019()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0019::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0019
 * @SYMFssID BA/CTSY/SMSS-0019
 * @SYMTestCaseDesc Cancel get SMS store info.
 * @SYMTestPriority High
 * @SYMTestActions 
 * @SYMTestExpectedResults Pass - KErrCancel or KErrNone if it was too late to cancel.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify request is cancelled.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// Request to get phone store information by calling RMobilePhoneStore::GetInfo 
	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);

	// Cancel get information by calling RTelSubSession::CancelAsyncRequest(EMobilePhoneStoreGetInfo) 
	smsStore.CancelAsyncRequest(EMobilePhoneStoreGetInfoCancel);
	
	// Check request completes with KErrCancel | KErrNone
	ASSERT_EQUALS(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::GetInfo, timed out"));
	ASSERT_TRUE((getInfoStatus.Int() == KErrCancel) || (getInfoStatus.Int() == KErrNone), _L("RMobileSmsStore::GetInfo did not return KErrCancel or KErrNone"));

	// Call RMobilePhone::GetPhoneStoreInfo with aStoreName=KETelIccSmsStore 
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 phoneStoreInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg phoneStoreInfoPckg(phoneStoreInfo);
	RMobilePhone& phone = iEtelSessionMgr.GetPhoneL(KMainServer,KMainPhone);
	TExtEtelRequestStatus phoneGetInfoStatus (phone,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(phoneGetInfoStatus);
	phone.GetPhoneStoreInfo(phoneGetInfoStatus,phoneStoreInfoPckg, KETelIccSmsStore);

	// Cancel request with RTelSubSession::CancelAsyncRequest(EMobilePhoneGetPhoneStoreInfo) 
	phone.CancelAsyncRequest(EMobilePhoneGetPhoneStoreInfo);

	// Check request completes with KErrCancel | KErrNone | KErrNotSupported
	ASSERT_EQUALS(WaitForRequestWithTimeOut(phoneGetInfoStatus, ETimeMedium), KErrNone, _L("RMobilePhone::GetPhoneStoreInfo, timed out"));
	ASSERT_TRUE((phoneGetInfoStatus.Int() == KErrCancel) || 
				(phoneGetInfoStatus.Int() == KErrNone) || 
				(phoneGetInfoStatus.Int() == KErrNotSupported), _L("RMobilePhone::GetPhoneStoreInfo did not return KErrCancel or KErrNone or KErrNotSupported"));

	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// phoneGetInfoStatus
	CleanupStack::PopAndDestroy(2, &getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0019::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0019");
	}



CCTSYIntegrationTestSMSStore0020::CCTSYIntegrationTestSMSStore0020(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0020::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0020::~CCTSYIntegrationTestSMSStore0020()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0020::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0020
 * @SYMFssID BA/CTSY/SMSS-0020
 * @SYMTestCaseDesc Cancel read SMS message from SMS store.
 * @SYMTestPriority High
 * @SYMTestActions 
 * @SYMTestExpectedResults Pass - KErrCancel or KErrNone if it was too late to cancel.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify request is cancelled.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsReadAccess 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));

	TUint wantedBits =  RMobilePhoneStore::KCapsReadAccess;
	CHECK_BITS_SET_L(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	// Write an entry to a known location in the phone book 
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry);
	CreateGsmSmsEntry(entry, 1, KValidSmsPdu1(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENationalNumber,
			RMobilePhone::EIsdnNumberPlan);
 		
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);	
	smsStore.Write(writeStatus,pckgEntry);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium)==KErrNone, _L("RMobileSmsStore::Write timed out"));
	CHECK_TRUE_L(writeStatus.Int() == KErrNone, _L("RMobileSmsStore::Write returned an error"));

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// Read an entry from a known location from the SMS store. 
	RMobileSmsStore::TMobileGsmSmsEntryV1 readEntry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgReadEntry(readEntry);
	readEntry.iIndex = 1; 
	readEntry.iMsgData.Zero();
	readEntry.iMsgStatus = RMobileSmsStore::EStoredMessageUnknownStatus;

	TExtEtelRequestStatus readStatus (smsStore,EMobilePhoneStoreRead);	
	CleanupStack::PushL(readStatus);	
	smsStore.Read(readStatus,pckgReadEntry);

	// Cancel the read request immediately using RTelSubSessionBase::CancelAsyncRequest(EMobilePhoneStoreRead) 
	smsStore.CancelAsyncRequest(EMobilePhoneStoreReadCancel);
	
	// Check KErrCancel or KErrNone is returned.
	ASSERT_EQUALS(WaitForRequestWithTimeOut(readStatus, ETimeMedium), KErrNone,	_L("RMobileSmsStore::Read, timed out"));
	ASSERT_TRUE(readStatus.Int() == KErrNone || readStatus.Int() ==  KErrCancel, _L("RMobileSmsStore::Read returned an error"));
	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// writeStatus
	// readStatus
	CleanupStack::PopAndDestroy(3, &getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0020::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0020");
	}



CCTSYIntegrationTestSMSStore0021::CCTSYIntegrationTestSMSStore0021(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0021::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0021::~CCTSYIntegrationTestSMSStore0021()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0021::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0021
 * @SYMFssID BA/CTSY/SMSS-0021
 * @SYMTestCaseDesc Cancel delete message from SMS store.
 * @SYMTestPriority High
 * @SYMTestActions 
 * @SYMTestExpectedResults Pass - KErrCancel or KErrNone if it was too late to cancel.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify request is cancelled.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsWriteAccess 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));

	TUint wantedBits =  RMobilePhoneStore::KCapsWriteAccess;
	CHECK_BITS_SET_L(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	// Write an entry to a known location in the phone book 
 	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry);
    
    // Create an entry 
	CreateGsmSmsEntry(entry, 5, KValidSmsPdu1(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENationalNumber,
			RMobilePhone::EIsdnNumberPlan);
	
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);
	smsStore.Write(writeStatus,pckgEntry);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium)==KErrNone, _L("RMobileSmsStore::Write timed out"));
	CHECK_TRUE_L(writeStatus.Int() == KErrNone, _L("RMobileSmsStore::Write returned an error"));

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// Delete an entry at a known index from the SMS store. 
	TExtEtelRequestStatus deleteStatus (smsStore,EMobilePhoneStoreDelete);
	CleanupStack::PushL(deleteStatus);
	smsStore.Delete(deleteStatus,entry.iIndex);			
	
	// Cancel the request immediately with RTelSubSessionBase::.CancelAsyncRequest( EMobilePhoneStoreDelete ) 
	smsStore.CancelAsyncRequest(EMobilePhoneStoreDelete);
	
	// Check KErrCancel or KErrNone is returned (if it was too late to cancel).
	ASSERT_EQUALS(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium), KErrNone,_L("RMobileSmsStore::Delete timed out"));
	ASSERT_TRUE(deleteStatus.Int() == KErrNone ||  deleteStatus.Int() == KErrCancel, _L("RMobileSmsStore::Delete returned an error"));

	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop 
	// getInfoStatus
	// writeStatus
	// deleteStatus
	CleanupStack::PopAndDestroy(3, &getInfoStatus);
	
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0021::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0021");
	}



CCTSYIntegrationTestSMSStore0022::CCTSYIntegrationTestSMSStore0022(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0022::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0022::~CCTSYIntegrationTestSMSStore0022()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0022::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0022
 * @SYMFssID BA/CTSY/SMSS-0022
 * @SYMTestCaseDesc Cancel write message to SMS store.
 * @SYMTestPriority High
 * @SYMTestActions 
 * @SYMTestExpectedResults Pass - KErrCancel or KErrNone if it was too late to cancel.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify request is cancelled.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsWriteAccess 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));

	TUint wantedBits =  RMobilePhoneStore::KCapsWriteAccess;
	CHECK_BITS_SET_L(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	// Ensure phone store is not empty. 
	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry);	    
	
	if(storeInfo.iUsedEntries < 1)
		{
	    // Create an entry 
	    CreateGsmSmsEntry(entry, -1, KValidSmsPdu1(),
				RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENationalNumber,
				RMobilePhone::EIsdnNumberPlan);

		smsStore.Write(writeStatus,pckgEntry);
		CHECK_TRUE_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium)==KErrNone, _L("RMobileSmsStore::Write timed out"));
		CHECK_TRUE_L(writeStatus.Int() == KErrNone, _L("RMobileSmsStore::Write returned an error"));

		smsStore.GetInfo(getInfoStatus,storeInfoPckg);
		CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
		CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));
		}
	
	CHECK_TRUE_L(storeInfo.iUsedEntries > 0, _L("RMobileSmsStore.GetInfo returned storeInfo.iUserEntries >0"));

	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// Write an entry at a known index from the SMS store. 
	CreateGsmSmsEntry(entry, 3, KValidSmsPdu1(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENationalNumber,
			RMobilePhone::EIsdnNumberPlan);
	smsStore.Write(writeStatus,pckgEntry);	

	// Cancel the request immediately with RTelSubSessionBase::.CancelAsyncRequest( EMobilePhoneStoreWrite ) 
	smsStore.CancelAsyncRequest(EMobilePhoneStoreWrite);
	
	// Check KErrCancel or KErrNone is returned (if it was too late to cancel).
	ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Write timed out"));
	ASSERT_TRUE((writeStatus.Int() == KErrCancel) || (writeStatus.Int() == KErrNone) , _L("RMobileSmsStore::Write returned an unexpected error of KErrNone or KErrCancel"));

	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// writeStatus
	CleanupStack::PopAndDestroy(2, &getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0022::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0022");
	}



CCTSYIntegrationTestSMSStore0023::CCTSYIntegrationTestSMSStore0023(CEtelSessionMgr& aEtelSessionMgr)
	: CCTSYIntegrationTestSMSStoreBase(aEtelSessionMgr)
/**
 * Constructor.
 */
	{
	SetTestStepName(CCTSYIntegrationTestSMSStore0023::GetTestStepName());
	}

CCTSYIntegrationTestSMSStore0023::~CCTSYIntegrationTestSMSStore0023()
/**
 * Destructor.
 */
	{
	}

TVerdict CCTSYIntegrationTestSMSStore0023::doTestStepL()
/**
 * @SYMTestCaseID BA-CTSY-INT-SMSS-0023
 * @SYMFssID BA/CTSY/SMSS-0023
 * @SYMTestCaseDesc Cancel notify store event on SMS store.
 * @SYMTestPriority High
 * @SYMTestActions 
 * @SYMTestExpectedResults Pass - KErrCancel returned.
 * @SYMTestType CIT
 * @SYMTestCaseDependencies live/automatic
 *
 * Reason for test: Verify request is cancelled.
 *
 * @return - TVerdict code
 */
	{

	//
	// SET UP
	//

	
	// Ensure RMobilePhoneStore::GetInfo returns iCaps in set of KCapsNotifyEvent 
	RMobileSmsStore& smsStore = iEtelSessionMgr.GetSmsStoreL(KMainServer,KMainPhone,KMainSmsMessaging,KIccSmsStore);

	TExtEtelRequestStatus getInfoStatus (smsStore,EMobilePhoneStoreGetInfo);	
	CleanupStack::PushL(getInfoStatus);
	RMobilePhoneStore::TMobilePhoneStoreInfoV1 storeInfo;
	RMobileSmsStore::TMobilePhoneStoreInfoV1Pckg storeInfoPckg (storeInfo);
	smsStore.GetInfo(getInfoStatus,storeInfoPckg);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(getInfoStatus, ETimeMedium) == KErrNone,_L("RMobileSmsStore::GetInfo timed out"));
	CHECK_TRUE_L(getInfoStatus.Int() == KErrNone, _L("RMobileSmsStore::GetInfo returned an error"));

	TUint wantedBits =  RMobilePhoneStore::KCapsNotifyEvent;
	CHECK_BITS_SET_L(storeInfo.iCaps,wantedBits,KNoUnwantedBits, _L("RMobilePhoneStore::GetInfo returned incorrect Store Info Caps"));

	// Write an entry to a known location in the phone book 

    // Create an entry 
	RMobileSmsStore::TMobileGsmSmsEntryV1 entry;
	RMobileSmsStore::TMobileGsmSmsEntryV1Pckg pckgEntry(entry);	      
	CreateGsmSmsEntry(entry, -1, KValidSmsPdu1(),
			RMobileSmsStore::EStoredMessageUnread, RMobilePhone::ENationalNumber,
			RMobilePhone::EIsdnNumberPlan);

	TExtEtelRequestStatus writeStatus (smsStore,EMobilePhoneStoreWrite);	
	CleanupStack::PushL(writeStatus);
	smsStore.Write(writeStatus,pckgEntry);
	CHECK_TRUE_L(WaitForRequestWithTimeOut(writeStatus, ETimeMedium)==KErrNone, _L("RMobileSmsStore::Write timed out"));
	CHECK_TRUE_L(writeStatus.Int() == KErrNone, _L("RMobileSmsStore::Write returned an error"));


	//
	// SET UP END
	//
	
	StartTest();
	
	//
	// TEST START
	//
	
	
	// Request notification of a store event with RMobilePhoneStore::NotifyStoreEvent 
	
	TExtEtelRequestStatus notifyStoreEventStatus (smsStore,EMobilePhoneStoreNotifyStoreEvent);	
	CleanupStack::PushL(notifyStoreEventStatus);
	TUint32 storeEvent;
	TInt index;
	smsStore.NotifyStoreEvent(notifyStoreEventStatus, storeEvent, index);
	
	// Cancel the RMobilePhoneStore::NotifyStoreEvent with RTelSubSession::CancelAsyncRequest( EMobilePhoneStoreNotifyStoreEvent ) 
	smsStore.CancelAsyncRequest (EMobilePhoneStoreNotifyStoreEvent);
	
	// Do some operations which would trigger a store event if it hadn't been cancelled. 

	// Delete an entry from the phone store 
	TExtEtelRequestStatus deleteStatus (smsStore,EMobilePhoneStoreDelete);
	CleanupStack::PushL(deleteStatus);
	smsStore.Delete(deleteStatus,5);	
	ASSERT_EQUALS(WaitForRequestWithTimeOut(deleteStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Delete timed out"));
	ASSERT_EQUALS(deleteStatus.Int(), KErrNone, _L("RMobileSmsStore::Delete returned an error"));

	// Write an entry to the phone store 
	entry.iIndex = -1;
	smsStore.Write(writeStatus,pckgEntry);
	ASSERT_EQUALS(WaitForRequestWithTimeOut(writeStatus, ETimeMedium), KErrNone, _L("RMobileSmsStore::Write timed out"));
	ASSERT_EQUALS(writeStatus.Int(), KErrNone, _L("RMobileSmsStore::Write returned an error"));

	// Check RMobilePhoneStore::NotifyStoreEvent completes with KErrCancel
	ASSERT_EQUALS(WaitForRequestWithTimeOut(notifyStoreEventStatus, ETimeMedium), KErrNone, _L("RMobilePhoneStore::NotifyStoreEvent timed out"));
	ASSERT_EQUALS(notifyStoreEventStatus.Int(), KErrCancel, _L("RMobilePhoneStore::NotifyStoreEvent did not complete with KErrCancel"));
	
	//
	// TEST END
	//

    StartCleanup();
	
	// Pop
	// getInfoStatus
	// writeStatus
	// notifyStoreEventStatus
	// deleteStatus
	CleanupStack::PopAndDestroy(4,&getInfoStatus);
	
	return TestStepResult();
	}

TPtrC CCTSYIntegrationTestSMSStore0023::GetTestStepName()
/**
 * @return The test step name.
 */
	{
	return _L("CCTSYIntegrationTestSMSStore0023");
	}