telephonyserverplugins/common_tsy/test/integration/src/cctsyintegrationtestussdmessaging.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/test/integration/src/cctsyintegrationtestussdmessaging.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,1628 @@
+// 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 UssdMessaging functional unit.
+// 
+//
+
+/**
+ @internalTechnology
+*/
+
+#include "cctsyintegrationtestussdmessaging.h"
+#include "cetelsessionmgr.h"
+
+
+
+CCTSYIntegrationTestUssdMessagingBase::CCTSYIntegrationTestUssdMessagingBase(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestSuiteStepBase(aEtelSessionMgr), iSmsStoreTsyTestHelper(*this),iNetworkTsyTestHelper(*this)
+/**
+ * Constructor
+ */
+	{
+	}
+
+CCTSYIntegrationTestUssdMessagingBase::~CCTSYIntegrationTestUssdMessagingBase()
+/*
+ * Destructor
+ */
+	{
+	}
+
+
+TInt CCTSYIntegrationTestUssdMessagingBase::SimulateNetworkSendsReleaseCompleteL()
+/**
+ * Helper function
+ *
+ * Simulate network sends a release complete message. Not implemented!
+ *
+ *
+ * @return KErrNone if everything is OK, the error code in any other case
+ */
+	{
+    // This function should call whatever APIs are required to tell the simulator to simulate network sends a release complete message
+	DisplayUserInteractionPromptL(_L("Now we should simulate a Request Complete message. Press any key to continue."), ETimeLong);
+	return KErrNone;
+	}
+
+TInt CCTSYIntegrationTestUssdMessagingBase::SimulateNetworkSendsNotifyMessageL(RMobileUssdMessaging::TMobileUssdMessageType /*aType*/, TInt /*aLength*/)
+/**
+ * Helper function
+ *
+ * Simulate network sends a USSD notify message. Not implemented!
+ *
+ * @param aType The message type
+ * @param aLength The number of charecters in the messege
+ *
+ * @return KErrNone if everything is OK, the error code in any other case
+ */
+	{
+    // This function should call whatever APIs are required to tell the simulator to simulate network sends a USSD notify message
+	DisplayUserInteractionPromptL(_L("Now we should simulate a Notify message. Press any key to continue."), ETimeLong);
+	return KErrNone;
+	}
+
+TInt CCTSYIntegrationTestUssdMessagingBase::SendSimulateCompleteCheckCompleteL(RMobileUssdMessaging &aUssdMessaging, TDes8& aMsg,RMobileUssdMessaging::TMobileUssdMessageType aMessageType)
+/**
+ * Send a message, Simulate network complete, Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length
+ *
+ * @param aUssdMessaging a reference to the USSD Messaging session.
+ * @param aMsg The message USSD string
+ * @param aMessageType The type of message; if type is EUssdMORequest, simulate requestcomplete, otherwise, simulate
+ *
+ * @return KErrNone if everything is OK, the error code in any other case
+ */
+	{
+	TInt ret=KErrNone;
+	TInt last;
+
+    // start listening for incoming messages
+	TExtEtelRequestStatus recvMsgStatus(aUssdMessaging,EMobileUssdMessagingReceiveMessage);
+	CleanupStack::PushL(recvMsgStatus);
+	RMobileUssdMessaging::TGsmUssdMessageData recvUssdMsg;
+	RMobileUssdMessaging::TMobileUssdAttributesV1 recvAttributes;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg recvAttributesPckg(recvAttributes);
+	aUssdMessaging.ReceiveMessage(recvMsgStatus,recvUssdMsg,recvAttributesPckg);
+
+	// Encode USSD string into a TGsmUssdMessageData buffer.
+	TBuf8<200> sevenBitStr;
+	iSmsStoreTsyTestHelper.GsmLibSmsPackMessage( sevenBitStr, aMsg, aMsg.Length());
+	RMobileUssdMessaging::TGsmUssdMessageData sendUssdMsg = sevenBitStr;
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=encoded TGsmUssdMessageData and  aMsgAttributes.iDcs= 0x00 (No class, uncompressed) ,aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=aMessageType
+	TExtEtelRequestStatus sendMsgStatus(aUssdMessaging,EMobileUssdMessagingSendMessage);
+	CleanupStack::PushL(sendMsgStatus);
+	RMobileUssdMessaging::TMobileUssdAttributesV1 sendAttributes;
+	sendAttributes.iDcs=0x00;
+	sendAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs;
+	sendAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString;
+	sendAttributes.iType=aMessageType;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg sendAttributesPckg(sendAttributes);
+	aUssdMessaging.SendMessage(sendMsgStatus, sendUssdMsg, sendAttributesPckg);
+    last = WaitForRequestWithTimeOut(sendMsgStatus, ETimeLong);
+	ASSERT_EQUALS(last,
+			KErrNone, _L("RMobileUssdMessaging::SendMessage did not complete."));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+    last = sendMsgStatus.Int();
+    ASSERT_EQUALS(last,KErrNone,
+    		_L("RMobileUssdMessaging::SendMessage completed with incorrect error"));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+
+    // Post network release notification
+    TExtEtelRequestStatus releaseMsgStatus(aUssdMessaging,EMobileUssdMessagingNotifyNetworkRelease);
+	CleanupStack::PushL(releaseMsgStatus);
+	RMobilePhone::TMobilePhoneSendSSRequestV3 ssRequest;
+	RMobilePhone::TMobilePhoneSendSSRequestV3Pckg ssRequestPckg(ssRequest);
+	aUssdMessaging.NotifyNetworkRelease(releaseMsgStatus,ssRequestPckg,sendAttributesPckg);
+
+	// Simulated network sends a release complete
+    last = SimulateNetworkSendsReleaseCompleteL();
+    ASSERT_EQUALS(last,KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SimulateNetworkSendsReleaseCompleteL returned an error"));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+
+    // Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+    last = WaitForRequestWithTimeOut(releaseMsgStatus, ETimeLong);
+	ASSERT_EQUALS(last,
+			KErrNone, _L("RMobileUssdMessaging::NotifyNetworkRelease did not complete."));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+	ASSERT_TRUE(recvUssdMsg.Length()>0,_L("RMobileUssdMessaging::NotifyNetworkRelease completed with length 0"));
+	if(recvUssdMsg.Length()==0)
+    	{
+    	ret = KErrGeneral;
+    	}
+
+	// Pop:
+	//	releaseMsgStatus
+	//	sendMsgStatus
+	//	recvMsgStatus
+	CleanupStack::PopAndDestroy(3,&recvMsgStatus);
+
+    return ret;
+	}
+
+TInt CCTSYIntegrationTestUssdMessagingBase::SendSimulateNotifyCheckCompleteL(RMobileUssdMessaging &aUssdMessaging, TDes8& aMsg,RMobileUssdMessaging::TMobileUssdMessageType aMessageType,RMobileUssdMessaging::TMobileUssdMessageType aSimulateType, TInt aLength)
+/**
+ * Send a message, Simulate network notify, Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length
+ *
+ * @param aUssdMessaging a reference to the USSD Messaging session.
+ * @param aMsg The message USSD string
+ * @param aMessageType The type of message; if type is EUssdMORequest, simulate requestcomplete, otherwise, simulate
+ * @param aSimulateType the simulated message type
+ * @param aLength the length of the simulated message.
+ *
+ * @return KErrNone if everything is OK, the error code in any other case
+ */
+	{
+	TInt ret=KErrNone;
+	TInt last;
+
+    // start listening for incoming messages
+	TExtEtelRequestStatus recvMsgStatus(aUssdMessaging,EMobileUssdMessagingReceiveMessage);
+	CleanupStack::PushL(recvMsgStatus);
+	RMobileUssdMessaging::TGsmUssdMessageData recvUssdMsg;
+	RMobileUssdMessaging::TMobileUssdAttributesV1 recvAttributes;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg recvAttributesPckg(recvAttributes);
+	aUssdMessaging.ReceiveMessage(recvMsgStatus,recvUssdMsg,recvAttributesPckg);
+
+	// Encode USSD string into a TGsmUssdMessageData buffer.
+	TBuf8<200> sevenBitStr;
+	iSmsStoreTsyTestHelper.GsmLibSmsPackMessage( sevenBitStr, aMsg, aMsg.Length());
+	RMobileUssdMessaging::TGsmUssdMessageData sendUssdMsg = sevenBitStr;
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=encoded TGsmUssdMessageData and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=aMessageType
+	TExtEtelRequestStatus sendMsgStatus(aUssdMessaging,EMobileUssdMessagingSendMessage);
+	CleanupStack::PushL(sendMsgStatus);
+	RMobileUssdMessaging::TMobileUssdAttributesV1 sendAttributes;
+	sendAttributes.iDcs=0x00;
+	sendAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs;
+	sendAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString;
+	sendAttributes.iType=aMessageType;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg sendAttributesPckg(sendAttributes);
+	aUssdMessaging.SendMessage(sendMsgStatus, sendUssdMsg, sendAttributesPckg);
+    last = WaitForRequestWithTimeOut(sendMsgStatus, ETimeLong);
+	ASSERT_EQUALS(last,
+			KErrNone, _L("RMobileUssdMessaging::SendMessage did not complete."));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+    last = sendMsgStatus.Int();
+    ASSERT_EQUALS(last,KErrNone,
+    		_L("RMobileUssdMessaging::SendMessage completed with incorrect error"));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+
+    // Post network release notification
+    TExtEtelRequestStatus releaseMsgStatus(aUssdMessaging,EMobileUssdMessagingNotifyNetworkRelease);
+	CleanupStack::PushL(releaseMsgStatus);
+	RMobilePhone::TMobilePhoneSendSSRequestV3 ssRequest;
+	RMobilePhone::TMobilePhoneSendSSRequestV3Pckg ssRequestPckg(ssRequest);
+	aUssdMessaging.NotifyNetworkRelease(releaseMsgStatus,ssRequestPckg,sendAttributesPckg);
+
+	// Simulated network sends a release complete
+    last = SimulateNetworkSendsNotifyMessageL(aSimulateType,aLength);
+    ASSERT_EQUALS(last,KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SimulateNetworkSendsReleaseCompleteL returned an error"));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+
+    // Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+    last = WaitForRequestWithTimeOut(releaseMsgStatus, ETimeLong);
+	ASSERT_EQUALS(last,
+			KErrNone, _L("RMobileUssdMessaging::NotifyNetworkRelease did not complete."));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+    last = releaseMsgStatus.Int();
+	ASSERT_EQUALS(last,
+			KErrNone, _L("RMobileUssdMessaging::NotifyNetworkRelease returned an error"));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+    ASSERT_EQUALS(recvAttributes.iType,aSimulateType,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with incorrect USSD message type"));
+    ASSERT_TRUE(recvUssdMsg.Length() > 0,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with msglength <=0"));
+    if((recvUssdMsg.Length()==0)||(recvAttributes.iType!=aSimulateType))
+    	{
+    	ret = KErrGeneral;
+    	}
+
+	// Pop:
+	//	releaseMsgStatus
+	//	sendMsgStatus
+	//	recvMsgStatus
+	CleanupStack::PopAndDestroy(3,&recvMsgStatus);
+
+    return ret;
+
+	}
+
+TInt CCTSYIntegrationTestUssdMessagingBase::SimulateNotifyCheckReceiveL(RMobileUssdMessaging &aUssdMessaging,RMobileUssdMessaging::TMobileUssdMessageType aSimulateType, TInt aLength)
+/**
+ * Simulated network sends a USSD notify message, Receive MT notify from network, Check received notification
+ *
+ * @param aUssdMessaging a reference to the USSD Messaging session.
+ * @param aSimulateType the simulated message type
+ * @param aLength the length of the simulated message.
+ * @param aCheckType the type of the recived notification
+ * @return KErrNone if everything is OK, the error code in any other case
+ */
+	{
+	TInt ret=KErrNone;
+	TInt last;
+
+    // start listening for incoming messages
+	TExtEtelRequestStatus recvMsgStatus(aUssdMessaging,EMobileUssdMessagingReceiveMessage);
+	CleanupStack::PushL(recvMsgStatus);
+	RMobileUssdMessaging::TGsmUssdMessageData recvUssdMsg;
+	RMobileUssdMessaging::TMobileUssdAttributesV1 recvAttributes;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg recvAttributesPckg(recvAttributes);
+	aUssdMessaging.ReceiveMessage(recvMsgStatus,recvUssdMsg,recvAttributesPckg);
+
+	// Simulated network sends a USSD notify message.
+    last = SimulateNetworkSendsNotifyMessageL(aSimulateType,aLength);
+    ASSERT_EQUALS(last,KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SimulateNetworkSendsNotifyMessageL returned an error"));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+
+	// ===  Receive MT notify from network ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=aCheckType
+    last = WaitForRequestWithTimeOut(recvMsgStatus, ETimeLong);
+	ASSERT_EQUALS(last,
+			KErrNone, _L("RMobileUssdMessaging::ReceiveMessage did not complete."))	;
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+    last = recvMsgStatus.Int();
+    ASSERT_EQUALS(last,KErrNone,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with incorrect error"));
+	if(last!=KErrNone)
+		{
+		ret=last;
+		}
+    ASSERT_EQUALS(recvAttributes.iType,aSimulateType,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with incorrect USSD message type"));
+    ASSERT_TRUE(recvUssdMsg.Length() > 0,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with msglength <=0"));
+    if((recvUssdMsg.Length()==0)||(recvAttributes.iType!=aSimulateType))
+    	{
+    	ret = KErrGeneral;
+    	}
+
+    // Pop:
+	//	recvMsgStatus
+	CleanupStack::PopAndDestroy(1,&recvMsgStatus);
+
+    return ret;
+
+	}
+CCTSYIntegrationTestUssdMessaging0001::CCTSYIntegrationTestUssdMessaging0001(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0001::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0001::~CCTSYIntegrationTestUssdMessaging0001()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestUssdMessaging0001::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0001
+ * @SYMFssID BA/CTSY/USSDM-0001
+ * @SYMTestCaseDesc Get USSD Caps
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileUssdMessaging::GetCaps
+ * @SYMTestExpectedResults Pass - Correct caps returned.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/automatic
+ *
+ * Reason for test: Verify correct USSD caps returned.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//Get USSD Caps
+	//Verify correct USSD caps returned.
+	//
+	// SET UP
+	//
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+
+	//
+	// TEST START
+	//
+
+
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	ASSERT_EQUALS(mobileUssdMessaging.GetCaps(ussdCapsPk), KErrNone, _L("RMobileUssdMessaging::GetCaps returned error"));
+    ASSERT_EQUALS(ussdCaps.iUssdFormat, (TUint32)RMobileUssdMessaging::KCapsPackedString, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+	TUint32 expectedCaps =  RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	TUint32 unwantedCaps = KNoUnwantedBits;
+	ASSERT_BITS_SET(ussdCapsPk().iUssdTypes, expectedCaps, unwantedCaps, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0001::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0001");
+	}
+
+
+
+CCTSYIntegrationTestUssdMessaging0002::CCTSYIntegrationTestUssdMessaging0002(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0002::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0002::~CCTSYIntegrationTestUssdMessaging0002()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+
+TVerdict CCTSYIntegrationTestUssdMessaging0002::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0002
+ * @SYMFssID BA/CTSY/USSDM-0002
+ * @SYMTestCaseDesc Send a valid USSD request.
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileUssdMessaging::GetCaps, RMobileUssdMessaging::SendMessage, RMobileUssdMessaging::ReceiveMessage
+ * @SYMTestExpectedResults Pass - Message sent and reply received from network.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/automatic
+ *
+ * Reason for test: Verify message sent and reply received.
+ *
+ * @return - TVerdict code
+ */
+	{
+	//Send a valid USSD request.
+	//Verify message sent and reply received..
+	//
+	// SET UP
+	//
+
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	CHECK_TRUE_L(mobileUssdMessaging.GetCaps(ussdCapsPk)==KErrNone,
+					_L("RMobileUssdMessaging::GetCaps returned error"));
+    CHECK_TRUE_L(ussdCapsPk().iUssdFormat==RMobileUssdMessaging::KCapsPackedString ,
+    		_L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	TUint32 expectedCaps =  RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	TUint32 unwantedCaps = KNoUnwantedBits;
+	CHECK_BITS_SET_L(ussdCapsPk().iUssdTypes, expectedCaps, unwantedCaps, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+	RMobilePhone& mobilePhone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone);
+	TInt ret = iNetworkTsyTestHelper.WaitForRegisteredOnHomeNetworkL(mobilePhone);
+	CHECK_EQUALS_L(ret, KErrNone, 
+			_L("RMobilePhone::NotifyNetworkRegistrationStatusChange network registration failed"));
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+
+	//
+	// TEST START
+	//
+
+
+	// ===  Send a valid USSD request ===
+
+	// Encode a the USSD request "*#30#" (Caller ID presentation) into a TGsmUssdMessageData buffer.
+	TBuf8<100> eightBitStr = _L8("*#30#");
+	TBuf8<100> sevenBitStr;
+	iSmsStoreTsyTestHelper.GsmLibSmsPackMessage( sevenBitStr, eightBitStr, eightBitStr.Length());
+	
+	RMobileUssdMessaging::TGsmUssdMessageData sendUssdMsg = sevenBitStr;
+	RMobileUssdMessaging::TMobileUssdAttributesV1 sendAttributes;
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with
+	// aMsgData=encoded TGsmUssdMessageData and
+	// aMsgAttributes.iDcs=0x00 (No class, uncompressed),
+	// aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType
+	//				 		|  RMobileUssdMessaging::KUssdDataFormat
+	//						| RMobileUssdMessaging::KUssdMessageDcs ,
+	// aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString ,
+	// aMsgAttributes.iType=RMobileUssdMessaging::EUssdMORequest
+	TExtEtelRequestStatus sendMsgStatus(mobileUssdMessaging,EMobileUssdMessagingSendMessage);
+	CleanupStack::PushL(sendMsgStatus);
+	sendAttributes.iDcs = 0x00;
+	sendAttributes.iFlags = RMobileUssdMessaging::KUssdMessageType
+					 		| RMobileUssdMessaging::KUssdDataFormat
+							| RMobileUssdMessaging::KUssdMessageDcs;
+	sendAttributes.iFormat = RMobileUssdMessaging::EFormatPackedString;
+	sendAttributes.iType = RMobileUssdMessaging::EUssdMORequest;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg sendAttributesPckg(sendAttributes);
+
+	// start listening for incoming messages
+	TExtEtelRequestStatus recvMsgStatus(mobileUssdMessaging,EMobileUssdMessagingReceiveMessage);
+	CleanupStack::PushL(recvMsgStatus);
+	RMobileUssdMessaging::TGsmUssdMessageData recvUssdMsg;
+	RMobileUssdMessaging::TMobileUssdAttributesV1 recvAttributes;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg recvAttributesPckg(recvAttributes);
+	mobileUssdMessaging.ReceiveMessage(recvMsgStatus,recvUssdMsg,recvAttributesPckg);
+
+    // Post network release notification
+    TExtEtelRequestStatus releaseMsgStatus(mobileUssdMessaging,EMobileUssdMessagingNotifyNetworkRelease);
+	CleanupStack::PushL(releaseMsgStatus);
+	RMobilePhone::TMobilePhoneSendSSRequestV3 ssRequest;
+	RMobilePhone::TMobilePhoneSendSSRequestV3Pckg ssRequestPckg(ssRequest);
+	mobileUssdMessaging.NotifyNetworkRelease(releaseMsgStatus,ssRequestPckg,sendAttributesPckg);
+
+	// send message
+	mobileUssdMessaging.SendMessage(sendMsgStatus, sendUssdMsg, sendAttributesPckg);
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(sendMsgStatus, ETimeLong),
+			KErrNone, _L("RMobileUssdMessaging::SendMessage did not complete."));
+    ASSERT_EQUALS(sendMsgStatus.Int(),KErrNone,
+    		_L("RMobileUssdMessaging::SendMessage completed with incorrect error"));
+
+    // ===  Receive network response ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTReply
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(recvMsgStatus, ETimeLong),
+			KErrNone, _L("RMobileUssdMessaging::ReceiveMessage did not complete."));
+    ASSERT_EQUALS(recvMsgStatus.Int(),KErrNone,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with incorrect error"));
+    ASSERT_TRUE(recvUssdMsg.Length() > 0,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with msglength <=0"));
+    ASSERT_EQUALS(recvAttributes.iType,RMobileUssdMessaging::EUssdMTReply,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with incorrect USSD message type"));
+
+	// ===  Receive network RELEASE COMPLETE message ===
+
+	// Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(releaseMsgStatus, ETimeLong),
+			KErrNone, _L("RMobileUssdMessaging::NotifyNetworkRelease did not complete."));
+    ASSERT_EQUALS(releaseMsgStatus.Int(),KErrNone,
+    		_L("RMobileUssdMessaging::NotifyNetworkRelease completed with incorrect error"));
+    ASSERT_TRUE(recvUssdMsg.Length() > 0,
+    		_L("RMobileUssdMessaging::NotifyNetworkRelease completed with msglength <=0"));
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+	// Pop:
+	//	releaseMsgStatus
+	//	recvMsgStatus
+	//	sendMsgStatus
+	CleanupStack::PopAndDestroy(3,&sendMsgStatus);
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0002::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0002");
+	}
+
+
+
+CCTSYIntegrationTestUssdMessaging0003::CCTSYIntegrationTestUssdMessaging0003(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0003::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0003::~CCTSYIntegrationTestUssdMessaging0003()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestUssdMessaging0003::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0003
+ * @SYMFssID BA/CTSY/USSDM-0003
+ * @SYMTestCaseDesc Send an empty USSD request.
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileUssdMessaging::NotifyNetworkRelease
+ * @SYMTestExpectedResults Pass - Message sent and reply received from network.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies simulated/manual
+ *
+ * Reason for test: Verify message sent and reply received.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+	
+	//
+
+	ERR_PRINTF2(_L("<font color=Orange>$CTSYKnownFailure: defect id = %d</font>"), 10068);
+	User::Leave(KErrNone);
+	
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	CHECK_EQUALS_L(mobileUssdMessaging.GetCaps(ussdCapsPk), KErrNone,
+			_L("RMobileUssdMessaging::GetCaps returned error"));
+	CHECK_EQUALS_L(ussdCaps.iUssdFormat, (TUint32)RMobileUssdMessaging::KCapsPackedString,
+    		_L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+	TUint32 expectedCaps = 	RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	CHECK_BITS_SET_L(ussdCaps.iUssdTypes, expectedCaps, KNoUnwantedBits, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+
+	//
+	// TEST START
+	//
+
+
+	// ===  Send a an empty USSD request ===
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=empty buffer and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMORequest
+
+	// ===  Receive network RELEASE COMPLETE message ===
+	// Simulated network sends a release complete
+	// Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+	TBuf8<100> eightBitStr = _L8("");
+	ASSERT_EQUALS(SendSimulateCompleteCheckCompleteL(mobileUssdMessaging,eightBitStr,RMobileUssdMessaging::EUssdMORequest),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SendSimulateCompleteCheckCompleteL returned an error"));
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0003::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0003");
+	}
+
+
+
+CCTSYIntegrationTestUssdMessaging0004::CCTSYIntegrationTestUssdMessaging0004(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0004::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0004::~CCTSYIntegrationTestUssdMessaging0004()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestUssdMessaging0004::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0004
+ * @SYMFssID BA/CTSY/USSDM-0004
+ * @SYMTestCaseDesc Send a 24 character USSD request.
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileUssdMessaging::NotifyNetworkRelease
+ * @SYMTestExpectedResults Pass - Message sent and reply received from network.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies simulated/manual
+ *
+ * Reason for test: Verify message sent and reply received.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+	
+	ERR_PRINTF2(_L("<font color=Orange>$CTSYKnownFailure: defect id = %d</font>"), 10069);
+	User::Leave(KErrNone);
+
+
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	CHECK_TRUE_L(mobileUssdMessaging.GetCaps(ussdCapsPk)==KErrNone,_L("RMobileUssdMessaging::GetCaps returned error"));
+	CHECK_TRUE_L(ussdCapsPk().iUssdFormat==RMobileUssdMessaging::KCapsPackedString ,_L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+	TUint32 expectedCaps = 	RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	CHECK_BITS_SET_L(ussdCaps.iUssdTypes, expectedCaps, KNoUnwantedBits, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+
+	//
+	// TEST START
+	//
+
+
+	// ===  Send a valid USSD request ===
+
+	// Encode 24 character USSD string (consisting of 24 "*") into a TGsmUssdMessageData buffer.
+	TBuf8<100> eightBitStr = _L8("");
+	for(TInt i=0;i<23;++i)
+		{
+		eightBitStr.Append('*');
+		}
+    eightBitStr.Append('#');
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=encoded TGsmUssdMessageData and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMORequest
+	// ===  Receive network RELEASE COMPLETE message ===
+	// Simulated network sends a release complete
+	// Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+	ASSERT_EQUALS(SendSimulateCompleteCheckCompleteL(mobileUssdMessaging,eightBitStr,RMobileUssdMessaging::EUssdMORequest),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SendSimulateCompleteCheckCompleteL returned an error"));
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0004::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0004");
+	}
+
+
+
+CCTSYIntegrationTestUssdMessaging0005::CCTSYIntegrationTestUssdMessaging0005(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0005::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0005::~CCTSYIntegrationTestUssdMessaging0005()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestUssdMessaging0005::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0005
+ * @SYMFssID BA/CTSY/USSDM-0005
+ * @SYMTestCaseDesc Send a USSD request of length KGsmUssdDataSize
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileUssdMessaging::NotifyNetworkRelease
+ * @SYMTestExpectedResults Pass - Message sent and reply received from network.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies simulated/manual
+ *
+ * Reason for test: Verify message sent and reply received.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+	
+	ERR_PRINTF2(_L("<font color=Orange>$CTSYKnownFailure: defect id = %d</font>"), 10070);
+	User::Leave(KErrNone);
+
+
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	CHECK_EQUALS_L(mobileUssdMessaging.GetCaps(ussdCapsPk), KErrNone,
+			_L("RMobileUssdMessaging::GetCaps returned error"));
+	CHECK_EQUALS_L(ussdCaps.iUssdFormat, (TUint32)RMobileUssdMessaging::KCapsPackedString,
+    		_L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+	TUint32 expectedCaps = 	RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	CHECK_BITS_SET_L(ussdCaps.iUssdTypes, expectedCaps, KNoUnwantedBits, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+
+	//
+	// TEST START
+	//
+
+
+	// ===  Send a valid USSD request ===
+
+	// Encode and fill a TGsmUssdMessageData buffer with "*" characters.
+	// $CTSYProblem This test cannot be run since LTSY crash when the message size is 50 character or more
+    CHECK_TRUE_L(EFalse,_L("$CTSYProblem This test cannot be run since LTSY crash when the message size is 50 character or more"));
+    TBuf8<200> eightBitStr = _L8("");
+	for(TInt i=0;i<181;++i)
+		{
+		eightBitStr.Append('*');
+		}
+    eightBitStr.Append('#');
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=encoded TGsmUssdMessageData and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMORequest
+	// ===  Receive network RELEASE COMPLETE message ===
+	// Simulated network sends a release complete
+	// Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+	ASSERT_EQUALS(SendSimulateCompleteCheckCompleteL(mobileUssdMessaging,eightBitStr,RMobileUssdMessaging::EUssdMORequest),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SendSimulateCompleteCheckCompleteL returned an error"));
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0005::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0005");
+	}
+
+
+
+CCTSYIntegrationTestUssdMessaging0006::CCTSYIntegrationTestUssdMessaging0006(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0006::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0006::~CCTSYIntegrationTestUssdMessaging0006()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestUssdMessaging0006::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0006
+ * @SYMFssID BA/CTSY/USSDM-0006
+ * @SYMTestCaseDesc Receive a USSD notify from network
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileUssdMessaging::NotifyNetworkRelease, RMobileUssdMessaging::SendMessage
+ * @SYMTestExpectedResults Pass - Network USSD message received correctly.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies simulated/manual
+ *
+ * Reason for test: Verify message sent and reply received.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+
+
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	CHECK_EQUALS_L(mobileUssdMessaging.GetCaps(ussdCapsPk), KErrNone,
+			_L("RMobileUssdMessaging::GetCaps returned error"));
+	CHECK_EQUALS_L(ussdCaps.iUssdFormat, (TUint32)RMobileUssdMessaging::KCapsPackedString,
+    		_L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+	TUint32 expectedCaps = 	RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	CHECK_BITS_SET_L(ussdCaps.iUssdTypes, expectedCaps, KNoUnwantedBits, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+
+	//
+	// TEST START
+	//
+
+
+	// ===  Part 1 - Network sends a USSD notify then release complete when acknowledgement received from phone ===
+
+	// Simulated network sends a USSD notify message (message type EUssdMTNotify).
+
+	// ===  Receive MT notify from network ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTNotify
+	ASSERT_EQUALS(SimulateNotifyCheckReceiveL(mobileUssdMessaging,RMobileUssdMessaging::EUssdMTNotify),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SimulateNotifyCheckReceiveL returned an error"));
+
+    // ===  Reply to network with MO acknowledgement ===
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=empty TGsmUssdMessageData and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMOAcknowledgement
+
+	// ===  Receive network RELEASE COMPLETE message ===
+	// Simulated network sends a release complete
+	// Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+	TBuf8<100> eightBitStr = _L8("");
+	ASSERT_EQUALS(SendSimulateCompleteCheckCompleteL(mobileUssdMessaging,eightBitStr,RMobileUssdMessaging::EUssdMOAcknowledgement),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SendSimulateCompleteCheckCompleteL returned an error"));
+
+	// ===  Part 2 - Network sends a USSD notify then release complete when acknowledgement received from phone ===
+
+	// Simulated network sends a USSD notify message (message type EUssdMTNotify).
+
+	// ===  Receive MT notify from network ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTNotify
+	ASSERT_EQUALS(SimulateNotifyCheckReceiveL(mobileUssdMessaging,RMobileUssdMessaging::EUssdMTNotify),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SimulateNotifyCheckReceiveL returned an error"));
+
+	// ===  Reply to network with MO acknowledgement ===
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=empty TGsmUssdMessageData and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMOAcknowledgement
+
+	// Simulated network sends a USSD notify message (message type EUssdMTNotify).
+
+	// ===  Receive MT notify from network ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTNotify
+	ASSERT_EQUALS(SendSimulateNotifyCheckCompleteL(mobileUssdMessaging,eightBitStr,RMobileUssdMessaging::EUssdMOAcknowledgement,RMobileUssdMessaging::EUssdMTNotify),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SendSimulateNotifyCheckCompleteL returned an error"));
+
+	// ===  Reply to network with MO acknowledgement ===
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=empty TGsmUssdMessageData and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMOAcknowledgement
+
+	// ===  Receive network RELEASE COMPLETE message ===
+	// Simulated network sends a release complete
+	// Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+	ASSERT_EQUALS(SendSimulateCompleteCheckCompleteL(mobileUssdMessaging,eightBitStr,RMobileUssdMessaging::RMobileUssdMessaging::EUssdMOAcknowledgement),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SendSimulateCompleteCheckCompleteL returned an error"));
+
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0006::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0006");
+	}
+
+
+
+CCTSYIntegrationTestUssdMessaging0007::CCTSYIntegrationTestUssdMessaging0007(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0007::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0007::~CCTSYIntegrationTestUssdMessaging0007()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestUssdMessaging0007::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0007
+ * @SYMFssID BA/CTSY/USSDM-0007
+ * @SYMTestCaseDesc Receive a USSD notify from network of 182 characters
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileUssdMessaging::SendRelease, RMobileUssdMessaging::SendMessage
+ * @SYMTestExpectedResults Pass - Network USSD message received correctly.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies simulated/manual
+ *
+ * Reason for test: Verify message sent and reply received.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+
+
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	CHECK_EQUALS_L(mobileUssdMessaging.GetCaps(ussdCapsPk), KErrNone,
+			_L("RMobileUssdMessaging::GetCaps returned error"));
+    CHECK_EQUALS_L(ussdCaps.iUssdFormat, (TUint32)RMobileUssdMessaging::KCapsPackedString,
+    		_L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+	TUint32 expectedCaps = 	RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	CHECK_BITS_SET_L(ussdCaps.iUssdTypes, expectedCaps, KNoUnwantedBits, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+
+	//
+	// TEST START
+	//
+
+	// Simulated network sends a USSD notify message (message type EUssdMTNotify) of 182 characters.
+
+	// ===  Receive MT notify from network ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTNotify
+	ASSERT_EQUALS(SimulateNotifyCheckReceiveL(mobileUssdMessaging,RMobileUssdMessaging::EUssdMTNotify,182),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SimulateNotifyCheckReceiveL returned an error"));
+
+	// ===  Reply to network with MO acknowledgement ===
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=empty TGsmUssdMessageData and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMOAcknowledgement
+	TExtEtelRequestStatus sendMsgStatus(mobileUssdMessaging,EMobileUssdMessagingSendMessage);
+	CleanupStack::PushL(sendMsgStatus);
+	RMobileUssdMessaging::TGsmUssdMessageData sendUssdMsg = _L8("");
+	RMobileUssdMessaging::TMobileUssdAttributesV1 sendAttributes;
+	sendAttributes.iDcs=0x00;
+	sendAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs;
+	sendAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString;
+	sendAttributes.iType=RMobileUssdMessaging::EUssdMOAcknowledgement;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg sendAttributesPckg(sendAttributes);
+	mobileUssdMessaging.SendMessage(sendMsgStatus, sendUssdMsg, sendAttributesPckg);
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(sendMsgStatus, ETimeLong),
+			KErrNone, _L("RMobileUssdMessaging::SendMessage did not complete."));
+    ASSERT_EQUALS(sendMsgStatus.Int(),KErrNone,
+    		_L("RMobileUssdMessaging::SendMessage completed with incorrect error"));
+
+	// ===  Send a release complete to the network ===
+
+	// Check RMobileUssdMessaging::SendRelease completes with KErrNone
+	TExtEtelRequestStatus sendReleaseStatus(mobileUssdMessaging,EMobileUssdMessagingSendRelease);
+	CleanupStack::PushL(sendReleaseStatus);
+	RMobilePhone::TMobilePhoneSendSSRequestV3 requestInfo;
+	RMobilePhone::TMobilePhoneSendSSRequestV3Pckg requestInfoPckg(requestInfo);
+    mobileUssdMessaging.SendRelease(sendReleaseStatus,requestInfoPckg);
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(sendReleaseStatus, ETimeLong),
+			KErrNone, _L("RMobileUssdMessaging::SendRelease did not complete."));
+    ASSERT_EQUALS(sendReleaseStatus.Int(),KErrNone,
+    		_L("RMobileUssdMessaging::SendRelease completed with incorrect error"));
+
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+    // Pop:
+	//	sendReleaseStatus
+	//	sendMsgStatus
+	CleanupStack::PopAndDestroy(2,&sendMsgStatus);
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0007::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0007");
+	}
+
+
+
+CCTSYIntegrationTestUssdMessaging0008::CCTSYIntegrationTestUssdMessaging0008(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0008::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0008::~CCTSYIntegrationTestUssdMessaging0008()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestUssdMessaging0008::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0008
+ * @SYMFssID BA/CTSY/USSDM-0008
+ * @SYMTestCaseDesc Receive a USSD request from the network.
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileUssdMessaging::NotifyNetworkRelease, RMobileUssdMessaging::SendMessage
+ * @SYMTestExpectedResults Pass - Network USSD message received correctly.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies simulated/manual
+ *
+ * Reason for test: Verify messages received and replies can be sent.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+
+
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	CHECK_EQUALS_L(mobileUssdMessaging.GetCaps(ussdCapsPk), KErrNone,
+			_L("RMobileUssdMessaging::GetCaps returned error"));
+	CHECK_EQUALS_L(ussdCaps.iUssdFormat, (TUint32)RMobileUssdMessaging::KCapsPackedString,
+    		_L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+	TUint32 expectedCaps = 	RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	CHECK_BITS_SET_L(ussdCaps.iUssdTypes, expectedCaps, KNoUnwantedBits, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+	//
+	// TEST START
+	//
+
+
+	// ===  Part 1 - network sends USSD request, phone replies and network releases ===
+
+	// Simulated network sends a USSD notify message (message type EUssdMTRequest)
+
+	// ===  Receive MT request from network ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTRequest
+	ASSERT_EQUALS(SimulateNotifyCheckReceiveL(mobileUssdMessaging,RMobileUssdMessaging::EUssdMTRequest),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SimulateNotifyCheckReceiveL returned an error"));
+
+	// ===  Send a USSD reply ===
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=a valid encoded string and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTReply
+	TBuf8<100> eightBitStr = _L8("*#30#");
+
+	// ===  Receive network RELEASE COMPLETE message ===
+	// Simulated network sends a release complete
+	// Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+	ERR_PRINTF2(_L("<font color=Orange>$CTSYKnownFailure: defect id2 = %d</font>"), 10035);       
+	CHECK_TRUE_L(EFalse, _L("This test has been made to leave intentially - ***Send message fail, and ctsy cancel it later****"));
+	ASSERT_EQUALS(SendSimulateCompleteCheckCompleteL(mobileUssdMessaging,eightBitStr,RMobileUssdMessaging::EUssdMTReply),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SendSimulateCompleteCheckCompleteL returned an error"));
+
+	// ===  Part 2 - network sends USSD request, phone replies, network sends another request and phone replies again, then network releases ===
+
+	// Simulated network sends a USSD notify message (message type EUssdMTRequest)
+
+	// ===  Receive MT request from network ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTRequest
+	ASSERT_EQUALS(SimulateNotifyCheckReceiveL(mobileUssdMessaging,RMobileUssdMessaging::EUssdMTRequest),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SimulateNotifyCheckReceiveL returned an error"));
+
+	// ===  Send a USSD reply ===
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=a valid encoded string and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTReply
+	eightBitStr = _L8("*#30#");
+
+	// Simulated network sends a USSD notify message (message type EUssdMTRequest)
+
+	// ===  Receive MT request from network ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTRequest
+	ASSERT_EQUALS(SendSimulateNotifyCheckCompleteL(mobileUssdMessaging,eightBitStr,RMobileUssdMessaging::EUssdMTReply ,RMobileUssdMessaging::EUssdMTRequest),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SendSimulateNotifyCheckCompleteL returned an error"));
+
+	// ===  Send a USSD reply ===
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=a valid encoded string and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTReply
+	eightBitStr = _L8("*#30#");
+
+	// ===  Receive network RELEASE COMPLETE message ===
+	// Simulated network sends a release complete
+	// Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+	ASSERT_EQUALS(SendSimulateCompleteCheckCompleteL(mobileUssdMessaging,eightBitStr,RMobileUssdMessaging::EUssdMTReply ),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SendSimulateCompleteCheckCompleteL returned an error"));
+
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0008::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0008");
+	}
+
+
+
+CCTSYIntegrationTestUssdMessaging0009::CCTSYIntegrationTestUssdMessaging0009(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0009::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0009::~CCTSYIntegrationTestUssdMessaging0009()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestUssdMessaging0009::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0009
+ * @SYMFssID BA/CTSY/USSDM-0009
+ * @SYMTestCaseDesc Receive a USSD request from the network of 182 characters long.
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileUssdMessaging::NotifyNetworkRelease, RMobileUssdMessaging::SendMessage
+ * @SYMTestExpectedResults Pass - Network USSD message received correctly.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies simulated/manual
+ *
+ * Reason for test: Verify message received.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+
+
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	CHECK_EQUALS_L(mobileUssdMessaging.GetCaps(ussdCapsPk), KErrNone,
+			_L("RMobileUssdMessaging::GetCaps returned error"));
+	CHECK_EQUALS_L(ussdCaps.iUssdFormat, (TUint32)RMobileUssdMessaging::KCapsPackedString,
+    		_L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+	TUint32 expectedCaps = 	RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	CHECK_BITS_SET_L(ussdCaps.iUssdTypes, expectedCaps, KNoUnwantedBits, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+
+	//
+	// TEST START
+	//
+
+	// Simulated network sends a USSD notify message (message type EUssdMTRequest) of 182 characters
+
+	// ===  Receive MT request from network ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTRequest
+	ASSERT_EQUALS(SimulateNotifyCheckReceiveL(mobileUssdMessaging,RMobileUssdMessaging::EUssdMTRequest,182),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SimulateNotifyCheckReceiveL returned an error"));
+
+
+	// ===  Send a USSD reply ===
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=a valid encoded string and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTReply
+	TBuf8<100> eightBitStr = _L8("*#30#");
+
+	// ===  Receive network RELEASE COMPLETE message ===
+	// Simulated network sends a release complete
+	// Check RMobileUssdMessaging::NotifyNetworkRelease completes with aMsgData with length > 0
+	ERR_PRINTF2(_L("<font color=Orange>$CTSYKnownFailure: defect id2 = %d</font>"), 10035);       
+	CHECK_TRUE_L(EFalse, _L("This test has been made to leave intentially - ***Send message fail, and ctsy cancel it later****"));
+	ASSERT_EQUALS(SendSimulateCompleteCheckCompleteL(mobileUssdMessaging,eightBitStr,RMobileUssdMessaging::EUssdMTReply),KErrNone,_L("CCTSYIntegrationTestUssdMessagingBase::SendSimulateCompleteCheckCompleteL returned an error"));
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0009::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0009");
+	}
+
+
+
+CCTSYIntegrationTestUssdMessaging0010::CCTSYIntegrationTestUssdMessaging0010(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0010::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0010::~CCTSYIntegrationTestUssdMessaging0010()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestUssdMessaging0010::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0010
+ * @SYMFssID BA/CTSY/USSDM-0010
+ * @SYMTestCaseDesc Terminate a USSD exchange.
+ * @SYMTestPriority High
+ * @SYMTestActions RMobileUssdMessaging::ReceiveMessage, RMobileUssdMessaging::SendRelease
+ * @SYMTestExpectedResults Pass - KErrNotSupported when sending USSD to unsupported network
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/automatic
+ *
+ * Reason for test: Verify sending of release complete message is successful.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+
+
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	CHECK_EQUALS_L(mobileUssdMessaging.GetCaps(ussdCapsPk), KErrNone,
+			_L("RMobileUssdMessaging::GetCaps returned error"));
+	CHECK_EQUALS_L(ussdCaps.iUssdFormat, (TUint32)RMobileUssdMessaging::KCapsPackedString,
+    		_L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+	TUint32 expectedCaps = 	RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	CHECK_BITS_SET_L(ussdCaps.iUssdTypes, expectedCaps, KNoUnwantedBits, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+	RMobilePhone& mobilePhone = iEtelSessionMgr.GetPhoneL(KMainServer, KMainPhone);
+	TInt ret = iNetworkTsyTestHelper.WaitForRegisteredOnHomeNetworkL(mobilePhone);
+	CHECK_EQUALS_L(ret, KErrNone, 
+			_L("RMobilePhone::NotifyNetworkRegistrationStatusChange network registration failed"));
+
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+
+	//
+	// TEST START
+	//
+
+
+	// ===  Send a valid USSD request ===
+
+	// Encode a the USSD request "*#30#" (Caller ID presentation) into a TGsmUssdMessageData buffer.
+	TBuf8<100> eightBitStr = _L8("*#30#");
+	TBuf8<100> sevenBitStr;
+	iSmsStoreTsyTestHelper.GsmLibSmsPackMessage( sevenBitStr, eightBitStr, eightBitStr.Length());
+	RMobileUssdMessaging::TGsmUssdMessageData sendUssdMsg = sevenBitStr;
+
+	// start listening for incoming messages
+	TExtEtelRequestStatus recvMsgStatus(mobileUssdMessaging,EMobileUssdMessagingReceiveMessage);
+	CleanupStack::PushL(recvMsgStatus);
+	RMobileUssdMessaging::TGsmUssdMessageData recvUssdMsg;
+	RMobileUssdMessaging::TMobileUssdAttributesV1 recvAttributes;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg recvAttributesPckg(recvAttributes);
+	mobileUssdMessaging.ReceiveMessage(recvMsgStatus,recvUssdMsg,recvAttributesPckg);
+
+	// Send a USSD message to the network with RMobileUssdMessaging::SendMessage with aMsgData=encoded TGsmUssdMessageData and  aMsgAttributes.iDcs=0x00 (No class, uncompressed),aMsgAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs , aMsgAttributes.iFormat=RMobileUssdMessaging::EFormatPackedString , aMsgAttributes.iType=RMobileUssdMessaging::EUssdMORequest
+	TExtEtelRequestStatus sendMsgStatus(mobileUssdMessaging,EMobileUssdMessagingSendMessage);
+	CleanupStack::PushL(sendMsgStatus);
+	RMobileUssdMessaging::TMobileUssdAttributesV1 sendAttributes;
+	sendAttributes.iDcs=0x00;
+	sendAttributes.iFlags=RMobileUssdMessaging::KUssdMessageType |  RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageDcs;
+	sendAttributes.iFormat=RMobileUssdMessaging::RMobileUssdMessaging::EFormatPackedString;
+	sendAttributes.iType=RMobileUssdMessaging::EUssdMORequest;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg sendAttributesPckg(sendAttributes);
+	mobileUssdMessaging.SendMessage(sendMsgStatus, sendUssdMsg, sendAttributesPckg);
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(sendMsgStatus, ETimeLong),
+			KErrNone, _L("RMobileUssdMessaging::SendMessage did not complete."));
+    ASSERT_EQUALS(sendMsgStatus.Int(),KErrNone,
+    		_L("RMobileUssdMessaging::SendMessage completed with incorrect error"));
+
+	// ===  Receive network response ===
+
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgData with length > 0
+	// Check RMobileUssdMessaging::ReceiveMessage completes with aMsgAttributes.iType=RMobileUssdMessaging::EUssdMTReply
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(recvMsgStatus, ETimeLong),
+			KErrNone, _L("RMobileUssdMessaging::ReceiveMessage did not complete."));
+    ASSERT_EQUALS(recvMsgStatus.Int(),KErrNone,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with incorrect error"));
+    ASSERT_TRUE(recvUssdMsg.Length() > 0,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with msglength <=0"));
+    ASSERT_EQUALS(recvAttributes.iType,RMobileUssdMessaging::EUssdMTReply,
+    		_L("RMobileUssdMessaging::ReceiveMessage completed with incorrect USSD message type"));
+
+	// ===  Send release complete  ===
+
+	// Check RMobileUssdMessaging::SendRelease completes with KErrNone
+	TExtEtelRequestStatus sendReleaseStatus(mobileUssdMessaging,EMobileUssdMessagingSendRelease);
+	CleanupStack::PushL(sendReleaseStatus);
+	RMobilePhone::TMobilePhoneSendSSRequestV3 requestInfo;
+	RMobilePhone::TMobilePhoneSendSSRequestV3Pckg requestInfoPckg(requestInfo);
+    mobileUssdMessaging.SendRelease(sendReleaseStatus,requestInfoPckg);
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(sendReleaseStatus, ETimeLong),
+			KErrNone, _L("RMobileUssdMessaging::SendRelease did not complete."));
+    ASSERT_EQUALS(sendReleaseStatus.Int(),KErrNone,
+    		_L("RMobileUssdMessaging::SendRelease completed with incorrect error"));
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+	// Pop:
+	//	sendReleaseStatus
+	//	sendMsgStatus
+	//	recvMsgStatus
+	CleanupStack::PopAndDestroy(3,&recvMsgStatus);
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0010::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0010");
+	}
+
+
+
+CCTSYIntegrationTestUssdMessaging0011::CCTSYIntegrationTestUssdMessaging0011(CEtelSessionMgr& aEtelSessionMgr)
+	: CCTSYIntegrationTestUssdMessagingBase(aEtelSessionMgr)
+/**
+ * Constructor.
+ */
+	{
+	SetTestStepName(CCTSYIntegrationTestUssdMessaging0011::GetTestStepName());
+	}
+
+CCTSYIntegrationTestUssdMessaging0011::~CCTSYIntegrationTestUssdMessaging0011()
+/**
+ * Destructor.
+ */
+	{
+	}
+
+TVerdict CCTSYIntegrationTestUssdMessaging0011::doTestStepL()
+/**
+ * @SYMTestCaseID BA-CTSY-INT-USSDM-0011
+ * @SYMFssID BA/CTSY/USSDM-0011
+ * @SYMTestCaseDesc Cancel receiving a USSD message.
+ * @SYMTestPriority High
+ * @SYMTestActions
+ * @SYMTestExpectedResults Pass - KErrCancel returned.
+ * @SYMTestType CIT
+ * @SYMTestCaseDependencies live/automatic
+ *
+ * Reason for test: Verify KErrCancel returned.
+ *
+ * @return - TVerdict code
+ */
+	{
+
+	//
+	// SET UP
+	//
+
+
+	// Check RMobileUssdMessaging::GetCaps returns iUssdFormat of KCapsPackedString
+	// Check RMobileUssdMessaging::GetCaps returns iUssdTypes of KCapsMOUssd | KCapsMTUssd
+	RMobileUssdMessaging& mobileUssdMessaging = iEtelSessionMgr.GetUssdMessagingL(KMainServer, KMainPhone,KMainUssdMessaging);
+	RMobileUssdMessaging::TMobileUssdCapsV1   ussdCaps;
+	RMobileUssdMessaging::TMobileUssdCapsV1Pckg ussdCapsPk(ussdCaps);
+	CHECK_EQUALS_L(mobileUssdMessaging.GetCaps(ussdCapsPk), KErrNone,
+			_L("RMobileUssdMessaging::GetCaps returned error"));
+	CHECK_EQUALS_L(ussdCaps.iUssdFormat, (TUint32)RMobileUssdMessaging::KCapsPackedString,
+    		_L("RMobileUssdMessaging::GetCaps returned incorrect iUssdFormat"));
+	TUint32 expectedCaps = 	RMobileUssdMessaging::KCapsMOUssd | RMobileUssdMessaging::KCapsMTUssd;
+	CHECK_BITS_SET_L(ussdCaps.iUssdTypes, expectedCaps, KNoUnwantedBits, _L("RMobileUssdMessaging::GetCaps returned incorrect iUssdTypes"));
+
+
+	//
+	// SET UP END
+	//
+
+	StartTest();
+
+	//
+	// TEST START
+	//
+
+
+	// Make an RMobileUssdMessaging::ReceiveMessage request
+	TExtEtelRequestStatus recvMsgStatus(mobileUssdMessaging,EMobileUssdMessagingReceiveMessage);
+	CleanupStack::PushL(recvMsgStatus);
+	RMobileUssdMessaging::TGsmUssdMessageData recvUssdMsg;
+	RMobileUssdMessaging::TMobileUssdAttributesV1 recvAttributes;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg recvAttributesPckg(recvAttributes);
+	mobileUssdMessaging.ReceiveMessage(recvMsgStatus,recvUssdMsg,recvAttributesPckg);
+
+	// Cancel the request with RTelSubSession::CancelAsyncRequest(EMobileUssdMessagingReceiveMessage);
+	mobileUssdMessaging.CancelAsyncRequest(EMobileUssdMessagingReceiveMessage);
+
+	// Check receive message request completes with KErrCancel
+	ASSERT_EQUALS(WaitForRequestWithTimeOut(recvMsgStatus, ETimeLong),
+			KErrNone, _L("RMobileUssdMessaging::ReceiveMessage did not complete."));
+    ASSERT_EQUALS(recvMsgStatus.Int(),KErrCancel,
+    		_L("RMobileUssdMessaging::ReceiveMessage did not completed with KErrCancel"));
+
+
+	//
+	// TEST END
+	//
+
+    StartCleanup();
+
+	// Pop:
+	//	recvMsgStatus
+	CleanupStack::PopAndDestroy(1,&recvMsgStatus);
+
+	return TestStepResult();
+	}
+
+TPtrC CCTSYIntegrationTestUssdMessaging0011::GetTestStepName()
+/**
+ * @return The test step name.
+ */
+	{
+	return _L("CCTSYIntegrationTestUssdMessaging0011");
+	}
+
+
+