telephonyserverplugins/common_tsy/test/component/src/cctsyussdmessagingfu.cpp
changeset 0 3553901f7fa8
child 14 7ef16719d8cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/common_tsy/test/component/src/cctsyussdmessagingfu.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,2213 @@
+// 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:
+// The TEFUnit test suite for UssdMessaging in the Common TSY.
+// 
+//
+
+/**
+ @file
+*/
+
+#include "cctsyussdmessagingfu.h"
+#include <etel.h>
+#include <etelmm.h>
+#include <et_clsvr.h>
+#include <ctsy/mmtsy_names.h>
+#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
+#include "tmockltsydata.h"
+#include <ctsy/serviceapi/gsmerror.h>
+
+CTestSuite* CCTsyUssdMessagingFU::CreateSuiteL(const TDesC& aName)
+	{
+	SUB_SUITE;
+
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendMessage0001L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendMessage0002L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendMessage0003L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendMessage0004L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendMessage0005L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendRelease0001L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendRelease0001bL);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendRelease0002L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendRelease0003L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendRelease0004L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendRelease0005L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestReceiveMessage0001L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestReceiveMessage0002L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestReceiveMessage0003L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestReceiveMessage0004L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestNotifyNetworkRelease0001L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestNotifyNetworkRelease0002L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestNotifyNetworkRelease0003L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestNotifyNetworkRelease0004L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendMessageNoFdnCheck0001L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendMessageNoFdnCheck0002L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendMessageNoFdnCheck0003L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendMessageNoFdnCheck0004L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestSendMessageNoFdnCheck0005L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestGetCaps0001L);
+	ADD_TEST_STEP_ISO_CPP(CCTsyUssdMessagingFU, TestGetCaps0003L);
+
+	END_SUITE;
+	}
+
+
+//
+// Actual test cases
+//
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USM-0001
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::SendMessage
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::SendMessage
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendMessage0001L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TRequestStatus requestStatus;
+
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(attributes);
+	
+	attributes.iFlags  = flags;
+	attributes.iFormat = format;
+	attributes.iType   = type;
+	attributes.iDcs   = dcs;
+	
+	TName name = _L("Name1");
+	TPckg<TName> msgData(name);
+
+ 	//-------------------------------------------------------------------------
+
+	TMockLtsyData2<TName, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(name, attributes);
+
+ 	//-------------------------------------------------------------------------
+	// TEST A: failure to dispatch request to LTSY
+ 	//-------------------------------------------------------------------------
+
+	mockData2.SerialiseL(data);
+    iMockLTSY.ExpectL(EMobileUssdMessagingSendMessage, data, KErrNotSupported);
+
+	ussdMessaging.SendMessage(requestStatus, msgData, msgAttributes);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNotSupported, requestStatus.Int());	
+
+	//-------------------------------------------------------------------------
+	// TEST B: failure on completion of pending request from LTSY->CTSY
+ 	//-------------------------------------------------------------------------
+
+    iMockLTSY.ExpectL(EMobileUssdMessagingSendMessage, data);
+    iMockLTSY.CompleteL(EMobileUssdMessagingSendMessage, KErrGeneral);
+
+	ussdMessaging.SendMessage(requestStatus, msgData, msgAttributes);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrGeneral, requestStatus.Int());	
+
+ 	//-------------------------------------------------------------------------
+	// TEST C: Successful completion request of
+	// RMobileUssdMessaging::SendMessage when result is not cached.
+ 	//-------------------------------------------------------------------------
+
+    iMockLTSY.ExpectL(EMobileUssdMessagingSendMessage, data);
+    iMockLTSY.CompleteL(EMobileUssdMessagingSendMessage, KErrNone);
+
+	ussdMessaging.SendMessage(requestStatus, msgData, msgAttributes);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());	
+
+ 	//-------------------------------------------------------------------------
+	// TEST E: Unsolicited completion of RMobileUssdMessaging::SendMessage
+	// from LTSY.
+ 	//-------------------------------------------------------------------------
+
+    TRequestStatus mockLtsyStatus;
+
+	iMockLTSY.NotifyTerminated(mockLtsyStatus);
+	iMockLTSY.CompleteL(EMobileUssdMessagingSendMessage, KErrNone);
+	User::WaitForRequest(mockLtsyStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int());
+
+ 	//-------------------------------------------------------------------------
+	// TEST : to increase CMmUssdTsy::ExtFunc coverage
+	// covers "if ( ERfsStateInfoInactive == iMmPhone->GetRfStateInfo() && 
+	// ( !IsRequestPossibleInOffline( aIpc ) ) )" condition
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.NotifyTerminated(mockLtsyStatus);
+	TRfStateInfo rfInfo = ERfsStateInfoInactive;
+	TMockLtsyData1<TRfStateInfo> mockData1(rfInfo);
+	
+	data.Close();
+	mockData1.SerialiseL(data);
+
+	iMockLTSY.CompleteL(EMmTsyBootGetRFStatusIPC, KErrNone, data);
+	User::WaitForRequest(mockLtsyStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int());
+
+	ussdMessaging.SendMessage(requestStatus, msgData, msgAttributes);
+
+	User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrGsmOfflineOpNotAllowed, requestStatus.Int());	
+
+	CleanupStack::PopAndDestroy(3, this); // data, this, ussdMessaging
+
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USM-0002
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for cancelling of RMobileUssdMessaging::SendMessage
+@SYMTestPriority High
+@SYMTestActions Invokes cancelling of RMobileUssdMessaging::SendMessage
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendMessage0002L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	TRequestStatus mockLtsyStatus;
+	TRequestStatus requestStatus;
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(attributes);
+	
+	attributes.iFlags  = flags;
+	attributes.iFormat = format;
+	attributes.iType   = type;
+	attributes.iDcs   = dcs;
+	
+	TName name = _L("Name1");
+	TPckg<TName> msgData(name);
+
+ 	//-------------------------------------------------------------------------
+
+	TMockLtsyData2<TName, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(name, attributes);
+
+ 	//-------------------------------------------------------------------------
+	// Test cancelling of RMobileUssdMessaging::SendMessage
+ 	//-------------------------------------------------------------------------
+ 	
+	iMockLTSY.NotifyTerminated(mockLtsyStatus);
+ 	
+	mockData2.SerialiseL(data);
+    iMockLTSY.ExpectL(EMobileUssdMessagingSendMessage, data);
+    iMockLTSY.CompleteL(EMobileUssdMessagingSendMessage, KErrNone, 10);
+	
+	ussdMessaging.SendMessage(requestStatus, msgData, msgAttributes);
+    ussdMessaging.CancelAsyncRequest(EMobileUssdMessagingSendMessage);
+		
+	User::WaitForRequest(mockLtsyStatus);
+	ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int());
+
+    User::WaitForRequest(requestStatus);
+    ASSERT_EQUALS(KErrCancel, requestStatus.Int());
+
+    AssertMockLtsyStatusL();
+	CleanupStack::PopAndDestroy(3); // data, this, ussdMessaging
+	
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USM-0003
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::SendMessage with bad parameter data
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::SendMessage with bad parameter data
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendMessage0003L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TRequestStatus requestStatus;
+
+ 	//-------------------------------------------------------------------------
+	// function parameter
+
+	TName name = _L("Name1");
+	TPckg<TName> msgData(name);
+
+	//-------------------------------------------------------------------------
+	// Test B: Test passing wrong descriptor size to parameter in
+	// RMobileUssdMessaging::SendMessage
+ 	//-------------------------------------------------------------------------
+
+	TBuf8<1> badSizeDescriptor;
+
+	ussdMessaging.SendMessage(requestStatus, msgData, badSizeDescriptor);
+
+	User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrArgument, requestStatus.Int());	
+	
+	CleanupStack::PopAndDestroy(3, this); // data, this, ussdMessaging, ussdMessaging
+
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USM-0004
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for multiple client requests to RMobileUssdMessaging::SendMessage
+@SYMTestPriority High
+@SYMTestActions Invokes multiple client requests to RMobileUssdMessaging::SendMessage
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendMessage0004L()
+	{
+
+					
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	// Open second client
+	RTelServer telServer2;
+	TInt ret = telServer2.Connect();
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(telServer2);
+
+	RMobilePhone phone2;
+	ret = phone2.Open(telServer2,KMmTsyPhoneName);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(phone2);
+
+	RMobileUssdMessaging ussdMessaging1;
+	ret = ussdMessaging1.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging1);
+
+	RMobileUssdMessaging ussdMessaging2;
+	ret = ussdMessaging2.Open(phone2);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging2);
+
+	TRequestStatus requestStatus1;
+	TRequestStatus requestStatus2;
+
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// parameters for first function
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes1;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes1(attributes1);
+	
+	attributes1.iFlags  = flags;
+	attributes1.iFormat = format;
+	attributes1.iType   = type;
+	attributes1.iDcs    = dcs;
+
+	TName name1 = _L("Name1");
+	TPckg<TName> msgData1(name1);
+
+ 	//-------------------------------------------------------------------------
+	// parameters for second function
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes2;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes2(attributes2);
+
+	flags  = 10;
+	format = RMobileUssdMessaging::EFormatPackedString;
+	type   = RMobileUssdMessaging::EUssdMOAcknowledgement;
+	dcs    = 20;
+	
+	attributes2.iFlags  = flags;
+	attributes2.iFormat = format;
+	attributes2.iType   = type;
+	attributes2.iDcs    = dcs;
+	
+	TName name2 = _L("Name2");
+	TPckg<TName> msgData2(name2);
+
+ 	//-------------------------------------------------------------------------
+
+	TMockLtsyData2<TName, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(name1, attributes1);
+
+	//-------------------------------------------------------------------------
+	// Test A: Test multiple clients requesting RMobileUssdMessaging::SendMessage
+ 	//-------------------------------------------------------------------------
+
+	mockData2.SerialiseL(data);
+    iMockLTSY.ExpectL(EMobileUssdMessagingSendMessage, data);
+    iMockLTSY.CompleteL(EMobileUssdMessagingSendMessage, KErrNone, 10);
+	ussdMessaging1.SendMessage(requestStatus1, msgData1, msgAttributes1);
+
+	ussdMessaging2.SendMessage(requestStatus2, msgData2, msgAttributes2);
+	
+    User::WaitForRequest(requestStatus1);        
+	ASSERT_EQUALS(KErrNone, requestStatus1.Int());	
+
+    User::WaitForRequest(requestStatus2);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrServerBusy, requestStatus2.Int());	
+
+	CleanupStack::PopAndDestroy(6, this); // phone2, telServer2, data, this, 
+	                                      // ussdMessaging1, ussdMessaging2
+
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USM-0005
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::SendMessage with timeout
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::SendMessage and tests for timeout
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendMessage0005L()
+	{
+
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TRequestStatus requestStatus;
+
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(attributes);
+	
+	attributes.iFlags  = flags;
+	attributes.iFormat = format;
+	attributes.iType   = type;
+	attributes.iDcs   = dcs;
+	
+	TName name = _L("Name1");
+	TPckg<TName> msgData(name);
+
+ 	//-------------------------------------------------------------------------
+
+	TMockLtsyData2<TName, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(name, attributes);
+
+	//-------------------------------------------------------------------------
+	// Test A: Test timeout of RMobileUssdMessaging::SendMessage
+ 	//-------------------------------------------------------------------------
+
+	mockData2.SerialiseL(data);
+    iMockLTSY.ExpectL(EMobileUssdMessagingSendMessage, data);
+
+	ussdMessaging.SendMessage(requestStatus, msgData, msgAttributes);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrTimedOut, requestStatus.Int());	
+
+	CleanupStack::PopAndDestroy(3, this); // data, this, ussdMessaging
+
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USR-0001
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::SendRelease
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::SendRelease
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendRelease0001L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+    TRequestStatus mockLtsyStatus;
+	TRequestStatus requestStatus;
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+	
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV3;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV3(sendV3);
+	
+ 	//-------------------------------------------------------------------------
+
+	RMobilePhone::TMobilePhoneSendSSRequestV3 completeSendV3;
+
+	TUint8 opCode = 100;
+	_LIT(KAdditionalInfo1, "additionalInfo1");
+	
+	completeSendV3.iOpCode         = opCode;
+	completeSendV3.iAdditionalInfo = KAdditionalInfo1;
+
+	TMockLtsyData1< RMobilePhone::TMobilePhoneSendSSRequestV3 > mockData1(completeSendV3);
+
+	mockData1.SerialiseL(data);
+
+	//-------------------------------------------------------------------------
+	// TEST B: failure on completion of pending request from LTSY->CTSY
+ 	//-------------------------------------------------------------------------
+
+    iMockLTSY.ExpectL(EMobileUssdMessagingSendRelease);
+    iMockLTSY.CompleteL(EMobileUssdMessagingSendRelease, KErrGeneral, data);
+	ussdMessaging.SendRelease(requestStatus, pckgSendV3);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrGeneral, requestStatus.Int());
+
+ 	//-------------------------------------------------------------------------
+	// TEST C: Successful completion request of
+	// RMobileUssdMessaging::SendRelease when result is not cached.
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.ExpectL(EMobileUssdMessagingSendRelease);
+	iMockLTSY.CompleteL(EMobileUssdMessagingSendRelease, KErrNone, data);
+	ussdMessaging.SendRelease(requestStatus, pckgSendV3);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());	
+	ASSERT_EQUALS(opCode, sendV3.iOpCode);	
+	ASSERT_EQUALS(0, completeSendV3.iAdditionalInfo.Compare(sendV3.iAdditionalInfo));	
+
+	//-------------------------------------------------------------------------
+	// TEST E: Unsolicited completion of RMobileUssdMessaging::SendRelease
+	// from LTSY.
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.NotifyTerminated(mockLtsyStatus);
+	iMockLTSY.CompleteL(EMobileUssdMessagingSendRelease, KErrNone, data);
+	User::WaitForRequest(mockLtsyStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int());
+
+	CleanupStack::PopAndDestroy(3, this); // data, this, ussdMessaging
+	
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USR-0001b
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::SendRelease
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::SendRelease
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendRelease0001bL()
+	{
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	TRequestStatus mockLtsyStatus;
+	TRequestStatus requestStatus;
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+	
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV3;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV3(sendV3);
+	
+ 	//-------------------------------------------------------------------------
+
+	RMobilePhone::TMobilePhoneSendSSRequestV3 completeSendV3;
+
+	TUint8 opCode = 100;
+	_LIT(KAdditionalInfo1, "additionalInfo1");
+	
+	completeSendV3.iOpCode         = opCode;
+	completeSendV3.iAdditionalInfo = KAdditionalInfo1;
+
+	TMockLtsyData1< RMobilePhone::TMobilePhoneSendSSRequestV3 > mockData1(completeSendV3);
+
+	mockData1.SerialiseL(data);
+
+ 	//-------------------------------------------------------------------------
+	// TEST A: failure to dispatch request to LTSY
+ 	//-------------------------------------------------------------------------
+
+    iMockLTSY.ExpectL(EMobileUssdMessagingSendRelease, KErrNotSupported);
+	ussdMessaging.SendRelease(requestStatus, pckgSendV3);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNotSupported, requestStatus.Int());
+
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.ExpectL(EMobileUssdMessagingSendRelease);
+	iMockLTSY.CompleteL(EMobileUssdMessagingSendRelease, KErrNone, data);
+	ussdMessaging.SendRelease(requestStatus, pckgSendV3);
+	
+    User::WaitForRequest(requestStatus);        
+
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());	
+
+	AssertMockLtsyStatusL();
+
+	CleanupStack::PopAndDestroy(3); // data, this, ussdMessaging
+
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USR-0002
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for cancelling of RMobileUssdMessaging::SendRelease
+@SYMTestPriority High
+@SYMTestActions Invokes cancelling of RMobileUssdMessaging::SendRelease
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendRelease0002L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	TRequestStatus mockLtsyStatus;
+	TRequestStatus requestStatus;
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+	
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV3;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV3(sendV3);
+	
+ 	//-------------------------------------------------------------------------
+
+	RMobilePhone::TMobilePhoneSendSSRequestV3 completeSendV3;
+
+	TUint8 opCode = 100;
+	_LIT(KAdditionalInfo1, "additionalInfo1");
+	
+	completeSendV3.iOpCode         = opCode;
+	completeSendV3.iAdditionalInfo = KAdditionalInfo1;
+
+	TMockLtsyData1< RMobilePhone::TMobilePhoneSendSSRequestV3 > mockData1(completeSendV3);
+
+	mockData1.SerialiseL(data);
+
+ 	//-------------------------------------------------------------------------
+	// Test cancelling of RMobileUssdMessaging::SendRelease
+ 	//-------------------------------------------------------------------------
+ 	
+	iMockLTSY.NotifyTerminated(mockLtsyStatus);
+ 	
+	iMockLTSY.ExpectL(EMobileUssdMessagingSendRelease);
+	iMockLTSY.CompleteL(EMobileUssdMessagingSendRelease, KErrNone, data, 10);
+
+	ussdMessaging.SendRelease(requestStatus, pckgSendV3);
+    ussdMessaging.CancelAsyncRequest(EMobileUssdMessagingSendRelease);
+		
+	User::WaitForRequest(mockLtsyStatus);
+	ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int());
+
+    User::WaitForRequest(requestStatus);
+    ASSERT_EQUALS(KErrCancel, requestStatus.Int());
+
+    AssertMockLtsyStatusL();
+	CleanupStack::PopAndDestroy(3); // data, this, ussdMessaging
+	
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USR-0003
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::SendRelease with bad parameter data
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::SendRelease with bad parameter data
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendRelease0003L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	TRequestStatus requestStatus;
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+
+ 	//-------------------------------------------------------------------------
+
+	RMobilePhone::TMobilePhoneSendSSRequestV3 completeSendV3;
+
+	TUint8 opCode = 100;
+	_LIT(KAdditionalInfo1, "additionalInfo1");
+	
+	completeSendV3.iOpCode         = opCode;
+	completeSendV3.iAdditionalInfo = KAdditionalInfo1;
+
+	TMockLtsyData1< RMobilePhone::TMobilePhoneSendSSRequestV3 > mockData1(completeSendV3);
+
+	mockData1.SerialiseL(data);
+
+	//-------------------------------------------------------------------------
+	// Test B: Test passing wrong descriptor size to parameter in
+	// RMobileUssdMessaging::SendRelease
+ 	//-------------------------------------------------------------------------
+
+	TBuf8<1> badSizeDescriptor;
+	ussdMessaging.SendRelease(requestStatus, badSizeDescriptor);
+	User::WaitForRequest(requestStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrArgument, requestStatus.Int());
+	
+	CleanupStack::PopAndDestroy(3, this); // data, this, ussdMessaging
+
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USR-0004
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for multiple client requests to RMobileUssdMessaging::SendRelease
+@SYMTestPriority High
+@SYMTestActions Invokes multiple client requests to RMobileUssdMessaging::SendRelease
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendRelease0004L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	// Open second client
+	RTelServer telServer2;
+	TInt ret = telServer2.Connect();
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(telServer2);
+
+	RMobilePhone phone2;
+	ret = phone2.Open(telServer2,KMmTsyPhoneName);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(phone2);
+
+	RMobileUssdMessaging ussdMessaging1;
+	ret = ussdMessaging1.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging1);
+
+	RMobileUssdMessaging ussdMessaging2;
+	ret = ussdMessaging2.Open(phone2);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging2);
+
+	TRequestStatus requestStatus1;
+	TRequestStatus requestStatus2;
+
+ 	//-------------------------------------------------------------------------
+	// parameters for first function
+	
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV31;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV31(sendV31);
+	
+ 	//-------------------------------------------------------------------------
+
+	RMobilePhone::TMobilePhoneSendSSRequestV3 completeSendV31;
+
+	TUint8 opCode = 100;
+	_LIT(KAdditionalInfo1, "additionalInfo1");
+	
+	completeSendV31.iOpCode         = opCode;
+	completeSendV31.iAdditionalInfo = KAdditionalInfo1;
+
+	TMockLtsyData1< RMobilePhone::TMobilePhoneSendSSRequestV3 > mockData11(completeSendV31);
+
+ 	//-------------------------------------------------------------------------
+	// parameters for second function
+	
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV32;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV32(sendV32);
+	
+	//-------------------------------------------------------------------------
+	// Test A: Test multiple clients requesting RMobileUssdMessaging::SendRelease
+ 	//-------------------------------------------------------------------------
+	
+	RBuf8 data;
+	CleanupClosePushL(data); // PUSH
+	mockData11.SerialiseL(data);
+	iMockLTSY.ExpectL(EMobileUssdMessagingSendRelease);
+	iMockLTSY.CompleteL(EMobileUssdMessagingSendRelease, KErrNone, data, 10);
+	ussdMessaging1.SendRelease(requestStatus1, pckgSendV31);
+
+	ussdMessaging2.SendRelease(requestStatus2, pckgSendV32);
+	
+    User::WaitForRequest(requestStatus1);        
+	ASSERT_EQUALS(KErrNone, requestStatus1.Int());	
+
+    User::WaitForRequest(requestStatus2);        
+	ASSERT_EQUALS(KErrServerBusy, requestStatus2.Int());	
+	ASSERT_EQUALS(opCode, sendV31.iOpCode);	
+	ASSERT_EQUALS(0, sendV31.iAdditionalInfo.Compare(KAdditionalInfo1));	
+
+	AssertMockLtsyStatusL();
+	CleanupStack::PopAndDestroy(6, this); // data, ussdMessaging2, ussdMessaging1,
+										  // phone2, telServer2, this                                   
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USR-0005
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::SendRelease with timeout
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::SendRelease and tests for timeout
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendRelease0005L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TRequestStatus requestStatus;
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+	
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV3;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV3(sendV3);
+	
+	//-------------------------------------------------------------------------
+	// Test A: Test timeout of RMobileUssdMessaging::SendRelease
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.ExpectL(EMobileUssdMessagingSendRelease);
+	ussdMessaging.SendRelease(requestStatus, pckgSendV3);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrTimedOut, requestStatus.Int());	
+
+	CleanupStack::PopAndDestroy(3, this); // data, this, ussdMessaging
+
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-URM-0001
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::ReceiveMessage
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::ReceiveMessage
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestReceiveMessage0001L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TRequestStatus requestStatus;
+	TRequestStatus mockLtsyStatus;
+
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(attributes);
+	
+	TBuf8<KMaxName> name;
+
+ 	//-------------------------------------------------------------------------
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 completeAttributes;
+
+	completeAttributes.iFlags  = flags;
+	completeAttributes.iFormat = format;
+	completeAttributes.iType   = type;
+	completeAttributes.iDcs    = dcs;
+	
+	TBuf8<KMaxName> completeName = _L8("Name1");
+
+	TMockLtsyData2<TBuf8<KMaxName>, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(completeName, completeAttributes);
+
+	mockData2.SerialiseL(data);
+	
+	//-------------------------------------------------------------------------
+	// TEST B: failure on completion of pending request from LTSY->CTSY
+ 	//-------------------------------------------------------------------------
+
+    iMockLTSY.CompleteL(EMobileUssdMessagingReceiveMessage, KErrGeneral, data);
+
+	ussdMessaging.ReceiveMessage(requestStatus, name, msgAttributes);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrGeneral, requestStatus.Int());
+
+ 	//-------------------------------------------------------------------------
+	// TEST C: Successful completion request of
+	// RMobileUssdMessaging::ReceiveMessage when result is not cached.
+ 	//-------------------------------------------------------------------------
+
+    iMockLTSY.CompleteL(EMobileUssdMessagingReceiveMessage, KErrNone, data);
+
+	ussdMessaging.ReceiveMessage(requestStatus, name, msgAttributes);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());
+	
+	ASSERT_EQUALS(flags , attributes.iFlags );
+	ASSERT_EQUALS(format, attributes.iFormat);
+	ASSERT_EQUALS(type  , attributes.iType  );
+	ASSERT_EQUALS(dcs   , attributes.iDcs   );
+
+	ASSERT_EQUALS(0, name.Compare(completeName));
+
+ 	//-------------------------------------------------------------------------
+	// TEST E: Unsolicited completion of RMobileUssdMessaging::ReceiveMessage
+	// from LTSY.
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.NotifyTerminated(mockLtsyStatus);
+	iMockLTSY.CompleteL(EMobileUssdMessagingReceiveMessage, KErrNone, data);
+	User::WaitForRequest(mockLtsyStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int());
+
+	CleanupStack::PopAndDestroy(3, this); // data, this, ussdMessaging
+	
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-URM-0002
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for cancelling of RMobileUssdMessaging::ReceiveMessage
+@SYMTestPriority High
+@SYMTestActions Invokes cancelling of RMobileUssdMessaging::ReceiveMessage
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestReceiveMessage0002L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TRequestStatus requestStatus;
+	TRequestStatus mockLtsyStatus;
+
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(attributes);
+	
+	TBuf8<KMaxName> name;
+
+ 	//-------------------------------------------------------------------------
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 completeAttributes;
+
+	completeAttributes.iFlags  = flags;
+	completeAttributes.iFormat = format;
+	completeAttributes.iType   = type;
+	completeAttributes.iDcs    = dcs;
+	
+	TBuf8<KMaxName> completeName = _L8("Name1");
+
+	TMockLtsyData2<TBuf8<KMaxName>, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(completeName, completeAttributes);
+
+	mockData2.SerialiseL(data);
+
+ 	//-------------------------------------------------------------------------
+	// Test cancelling of RMobileUssdMessaging::ReceiveMessage
+ 	//-------------------------------------------------------------------------
+ 	
+	iMockLTSY.NotifyTerminated(mockLtsyStatus);
+ 	
+    iMockLTSY.CompleteL(EMobileUssdMessagingReceiveMessage, KErrNone, data, 10);
+	
+	ussdMessaging.ReceiveMessage(requestStatus, name, msgAttributes);
+    ussdMessaging.CancelAsyncRequest(EMobileUssdMessagingReceiveMessage);
+		
+	User::WaitForRequest(mockLtsyStatus);
+	ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int());
+
+    User::WaitForRequest(requestStatus);
+    ASSERT_EQUALS(KErrCancel, requestStatus.Int());
+ 	
+    AssertMockLtsyStatusL();
+	CleanupStack::PopAndDestroy(3); // data, this, ussdMessaging
+	
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-URM-0003
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::ReceiveMessage with bad parameter data
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::ReceiveMessage with bad parameter data
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestReceiveMessage0003L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TRequestStatus requestStatus;
+
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 completeAttributes;
+
+	completeAttributes.iFlags  = flags;
+	completeAttributes.iFormat = format;
+	completeAttributes.iType   = type;
+	completeAttributes.iDcs    = dcs;
+	
+	TBuf8<KMaxName> completeName = _L8("Name1");
+
+	TMockLtsyData2<TBuf8<KMaxName>, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(completeName, completeAttributes);
+
+	mockData2.SerialiseL(data);
+
+	//-------------------------------------------------------------------------
+	// Test C: Test passing out of bounds parameters to
+	// RPacketQoS::SetProfileParameters
+ 	//-------------------------------------------------------------------------
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(attributes);
+
+	TBuf8<1> badName;
+	
+    iMockLTSY.CompleteL(EMobileUssdMessagingReceiveMessage, KErrNone, data);
+
+	ussdMessaging.ReceiveMessage(requestStatus, badName, msgAttributes);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrArgument, requestStatus.Int());
+
+	//-------------------------------------------------------------------------
+	// Test B: Test passing wrong descriptor size to parameter in
+	// RMobileUssdMessaging::ReceiveMessage
+ 	//-------------------------------------------------------------------------
+
+	TBuf8<KMaxName> name;
+	TBuf8<1> badSizeDescriptor;
+
+	ussdMessaging.ReceiveMessage(requestStatus, name, badSizeDescriptor);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();	
+	ASSERT_EQUALS(KErrArgument, requestStatus.Int());
+	
+	CleanupStack::PopAndDestroy(3, this); // data, this, ussdMessaging
+
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-URM-0004
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for multiple client requests to RMobileUssdMessaging::ReceiveMessage
+@SYMTestPriority High
+@SYMTestActions Invokes multiple client requests to RMobileUssdMessaging::ReceiveMessage
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestReceiveMessage0004L()
+	{
+
+					
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	// Open second client
+	RTelServer telServer2;
+	TInt ret = telServer2.Connect();
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(telServer2);
+
+	RMobilePhone phone2;
+	ret = phone2.Open(telServer2,KMmTsyPhoneName);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(phone2);
+
+	RMobileUssdMessaging ussdMessaging1;
+	ret = ussdMessaging1.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging1);
+
+	RMobileUssdMessaging ussdMessaging2;
+	ret = ussdMessaging2.Open(phone2);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging2);
+
+	TRequestStatus requestStatus1;
+	TRequestStatus requestStatus2;
+
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// parameters for first function
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes1;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes1(attributes1);
+	
+	TBuf8<KMaxName> name1;
+
+ 	//-------------------------------------------------------------------------
+	// parameters for second function
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes2;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes2(attributes2);
+	
+	TBuf8<KMaxName> name2;
+
+ 	//-------------------------------------------------------------------------
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 completeAttributes1;
+
+	completeAttributes1.iFlags  = flags;
+	completeAttributes1.iFormat = format;
+	completeAttributes1.iType   = type;
+	completeAttributes1.iDcs    = dcs;
+	
+	TBuf8<KMaxName> completeName1 = _L8("Name1");
+
+	TMockLtsyData2<TBuf8<KMaxName>, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData21(completeName1, completeAttributes1);
+
+	//-------------------------------------------------------------------------
+	// Test A: Test multiple clients requesting RMobileUssdMessaging::ReceiveMessage
+ 	//-------------------------------------------------------------------------
+
+	mockData21.SerialiseL(data);
+	iMockLTSY.CompleteL(EMobileUssdMessagingReceiveMessage, KErrNone, data, 10);
+	ussdMessaging1.ReceiveMessage(requestStatus1, name1, msgAttributes1);
+
+	ussdMessaging2.ReceiveMessage(requestStatus2, name2, msgAttributes2);
+	
+    User::WaitForRequest(requestStatus1);        
+	ASSERT_EQUALS(KErrNone, requestStatus1.Int());	
+
+    User::WaitForRequest(requestStatus2);        
+
+	/*
+	 * The function returned KErrNone instead of KErrServerBusy.
+	 */
+
+	ERR_PRINTF2(_L("<font color=Orange>$CTSYKnownFailure: defect id = %d</font>"), 380303);
+
+	ASSERT_EQUALS(KErrServerBusy, requestStatus2.Int());	
+
+	ASSERT_EQUALS(completeAttributes1.iFlags , attributes1.iFlags );
+	ASSERT_EQUALS(completeAttributes1.iFormat, attributes1.iFormat);
+	ASSERT_EQUALS(completeAttributes1.iType  , attributes1.iType  );
+	ASSERT_EQUALS(completeAttributes1.iDcs   , attributes1.iDcs   );
+
+	ASSERT_EQUALS(0, name1.Compare(completeName1));
+
+	ASSERT_EQUALS(completeAttributes1.iFlags , attributes2.iFlags );
+	ASSERT_EQUALS(completeAttributes1.iFormat, attributes2.iFormat);
+	ASSERT_EQUALS(completeAttributes1.iType  , attributes2.iType  );
+	ASSERT_EQUALS(completeAttributes1.iDcs   , attributes2.iDcs   );
+
+	ASSERT_EQUALS(0, name2.Compare(completeName1));
+
+	AssertMockLtsyStatusL();
+	CleanupStack::PopAndDestroy(6, this); // phone2, telServer2, data, this,
+	                                      // ussdMessaging1, ussdMessaging2
+
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-UNNR-0001
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::NotifyNetworkRelease
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::NotifyNetworkRelease
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestNotifyNetworkRelease0001L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	TRequestStatus requestStatus;
+    TRequestStatus mockLtsyStatus;
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+	
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV3;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV3(sendV3);
+	
+	// optional parameter
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attrV1;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg pckgAttrV1(attrV1);
+ 	//-------------------------------------------------------------------------
+
+	RMobilePhone::TMobilePhoneSendSSRequestV3 completeSendV3;
+	
+	TUint8 opCode = 100;
+	_LIT(KAdditionalInfo1, "additionalInfo1");
+	
+	completeSendV3.iOpCode         = opCode;
+	completeSendV3.iAdditionalInfo = KAdditionalInfo1;
+
+	TMockLtsyData1< RMobilePhone::TMobilePhoneSendSSRequestV3 > mockData1(completeSendV3);
+	mockData1.SerialiseL(data);
+
+	// optional parameter
+	RMobileUssdMessaging::TMobileUssdAttributesV1 completeAttrV1;
+	completeAttrV1.iFlags = RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageType;
+	completeAttrV1.iFormat = RMobileUssdMessaging::EFormatPackedString;
+	completeAttrV1.iType = RMobileUssdMessaging::EUssdMOAcknowledgement;
+	
+	TMockLtsyData2< RMobilePhone::TMobilePhoneSendSSRequestV3, 
+					RMobileUssdMessaging::TMobileUssdAttributesV1 > 
+					mockData2(completeSendV3,completeAttrV1);
+	
+	RBuf8 data2;
+	CleanupClosePushL(data2);
+	mockData2.SerialiseL(data2);
+	
+	//-------------------------------------------------------------------------
+	// TEST B: failure on completion of pending request from LTSY->CTSY
+ 	//-------------------------------------------------------------------------
+	iMockLTSY.CompleteL(EMobileUssdMessagingNotifyNetworkRelease, KErrGeneral, data);
+	ussdMessaging.NotifyNetworkRelease(requestStatus, pckgSendV3);
+
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrGeneral, requestStatus.Int());	
+
+	
+	// other version of API (with optional TMobileUssdAttributesV1 parameter)
+	
+	iMockLTSY.CompleteL(EMobileUssdMessagingNotifyNetworkRelease, KErrNotReady, data2);
+	ussdMessaging.NotifyNetworkRelease(requestStatus, pckgSendV3, pckgAttrV1);
+
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNotReady, requestStatus.Int());	
+
+ 	//-------------------------------------------------------------------------
+	// TEST E: Unsolicited completion of RMobileUssdMessaging::NotifyNetworkRelease
+	// from LTSY.
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.NotifyTerminated(mockLtsyStatus);
+	iMockLTSY.CompleteL(EMobileUssdMessagingNotifyNetworkRelease, KErrNone, data);
+	
+	// other version of API (with optional TMobileUssdAttributesV1 parameter)
+	
+	iMockLTSY.CompleteL(EMobileUssdMessagingNotifyNetworkRelease, KErrNone, data2);
+	User::WaitForRequest(mockLtsyStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int());
+
+ 	//-------------------------------------------------------------------------
+	// TEST C: Successful completion request of
+	// RMobileUssdMessaging::NotifyNetworkRelease when result is not cached.
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.CompleteL(EMobileUssdMessagingNotifyNetworkRelease, KErrNone, data);
+	ussdMessaging.NotifyNetworkRelease(requestStatus, pckgSendV3);
+
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());	
+	
+	ASSERT_EQUALS(opCode, sendV3.iOpCode);	
+	ASSERT_EQUALS(0, sendV3.iAdditionalInfo.Compare(KAdditionalInfo1));	
+
+	
+	// other version of API (with optional TMobileUssdAttributesV1 parameter)
+	
+	ussdMessaging.Close();
+	ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	
+	iMockLTSY.CompleteL(EMobileUssdMessagingNotifyNetworkRelease, KErrNone, data2);
+	ussdMessaging.NotifyNetworkRelease(requestStatus, pckgSendV3, pckgAttrV1);
+
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());	
+	
+	ASSERT_EQUALS(opCode, sendV3.iOpCode);	
+	ASSERT_EQUALS(0, sendV3.iAdditionalInfo.Compare(KAdditionalInfo1));
+	
+	ASSERT_EQUALS(completeAttrV1.iFlags ,attrV1.iFlags);
+	ASSERT_EQUALS(completeAttrV1.iFormat ,attrV1.iFormat);
+	ASSERT_EQUALS(completeAttrV1.iType ,attrV1.iType);
+
+	CleanupStack::PopAndDestroy(4, this); // data2, ussdMessaging, data, this, 
+	
+	}
+
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-UNNR-0002
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for cancelling of RMobileUssdMessaging::NotifyNetworkRelease
+@SYMTestPriority High
+@SYMTestActions Invokes cancelling of RMobileUssdMessaging::NotifyNetworkRelease
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestNotifyNetworkRelease0002L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	TRequestStatus requestStatus;
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV3;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV3(sendV3);
+
+ 	//-------------------------------------------------------------------------
+	// Test cancelling of RMobileUssdMessaging::NotifyNetworkRelease
+ 	//-------------------------------------------------------------------------
+ 	
+	ussdMessaging.NotifyNetworkRelease(requestStatus, pckgSendV3);
+	ussdMessaging.CancelAsyncRequest(EMobileUssdMessagingNotifyNetworkRelease);
+
+	User::WaitForRequest(requestStatus);
+	ASSERT_EQUALS(KErrCancel, requestStatus.Int());
+
+	AssertMockLtsyStatusL();
+	
+	// again with the optional parameter
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attrV1;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg pckgAttrV1(attrV1);
+	
+	ussdMessaging.NotifyNetworkRelease(requestStatus, pckgSendV3, pckgAttrV1);
+	ussdMessaging.CancelAsyncRequest(EMobileUssdMessagingNotifyNetworkRelease);
+
+	User::WaitForRequest(requestStatus);
+	ASSERT_EQUALS(KErrCancel, requestStatus.Int());
+
+	AssertMockLtsyStatusL();	
+	CleanupStack::PopAndDestroy(2); // this, ussdMessaging
+	
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-UNNR-0003
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::NotifyNetworkRelease with bad parameter data
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::NotifyNetworkRelease with bad parameter data
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestNotifyNetworkRelease0003L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	TRequestStatus requestStatus;
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+
+	//-------------------------------------------------------------------------
+	// Test B: Test passing wrong descriptor size to parameter in
+	// RMobileUssdMessaging::NotifyNetworkRelease
+ 	//-------------------------------------------------------------------------
+
+	TBuf8<1> badSizeDescriptor;
+	ussdMessaging.NotifyNetworkRelease(requestStatus, badSizeDescriptor);
+
+	User::WaitForRequest(requestStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrArgument, requestStatus.Int());
+	
+	// again with the optional parameter
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV3;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV3(sendV3);
+	
+	ussdMessaging.NotifyNetworkRelease(requestStatus, pckgSendV3, badSizeDescriptor);
+
+	User::WaitForRequest(requestStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrArgument, requestStatus.Int());
+	
+	CleanupStack::PopAndDestroy(3); // this, ussdMessaging, data
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-UNNR-0004
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for multiple client requests to RMobileUssdMessaging::NotifyNetworkRelease
+@SYMTestPriority High
+@SYMTestActions Invokes multiple client requests to RMobileUssdMessaging::NotifyNetworkRelease
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestNotifyNetworkRelease0004L()
+	{
+
+					
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	TRequestStatus requestStatus1;
+	TRequestStatus requestStatus2;
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	// Open second client
+	RTelServer telServer2;
+	TInt ret = telServer2.Connect();
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(telServer2);
+
+	RMobilePhone phone2;
+	ret = phone2.Open(telServer2,KMmTsyPhoneName);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(phone2);
+
+	RMobileUssdMessaging ussdMessaging1;
+	ret = ussdMessaging1.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging1);
+
+	RMobileUssdMessaging ussdMessaging2;
+	ret = ussdMessaging2.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging2);
+
+ 	//-------------------------------------------------------------------------
+	// parameters for first function
+	
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV31;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV31(sendV31);
+
+ 	//-------------------------------------------------------------------------
+
+	RMobilePhone::TMobilePhoneSendSSRequestV3 completeSendV31;
+
+	TUint8 opCode1 = 100;
+	_LIT(KAdditionalInfo1, "additionalInfo1");
+	
+	completeSendV31.iOpCode         = opCode1;
+	completeSendV31.iAdditionalInfo = KAdditionalInfo1;
+
+	TMockLtsyData1< RMobilePhone::TMobilePhoneSendSSRequestV3 > mockData11(completeSendV31);
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 completeAttrV1;
+	completeAttrV1.iFlags = RMobileUssdMessaging::KUssdDataFormat | RMobileUssdMessaging::KUssdMessageType;
+	completeAttrV1.iFormat = RMobileUssdMessaging::EFormatPackedString;
+	completeAttrV1.iType = RMobileUssdMessaging::EUssdMTRequest;
+	
+	TMockLtsyData2< RMobilePhone::TMobilePhoneSendSSRequestV3, 
+					RMobileUssdMessaging::TMobileUssdAttributesV1 > 
+					mockData2(completeSendV31,completeAttrV1);
+	
+	RBuf8 data2;
+	CleanupClosePushL(data2);
+	mockData2.SerialiseL(data2);
+		
+	//-------------------------------------------------------------------------
+	// parameters for second function
+	
+	RMobilePhone::TMobilePhoneSendSSRequestV3 sendV32;
+	TPckg<RMobilePhone::TMobilePhoneSendSSRequestV3> pckgSendV32(sendV32);
+
+	//-------------------------------------------------------------------------
+	// Test A: Test multiple clients requesting RMobileUssdMessaging::NotifyNetworkRelease
+ 	//-------------------------------------------------------------------------
+
+	mockData11.SerialiseL(data);
+	iMockLTSY.CompleteL(EMobileUssdMessagingNotifyNetworkRelease, KErrNone, data, 10);
+	ussdMessaging1.NotifyNetworkRelease(requestStatus1, pckgSendV31);
+
+	ussdMessaging2.NotifyNetworkRelease(requestStatus2, pckgSendV32);
+
+    User::WaitForRequest(requestStatus1);        
+	ASSERT_EQUALS(KErrNone, requestStatus1.Int());	
+
+    User::WaitForRequest(requestStatus2);        
+	ASSERT_EQUALS(KErrNone, requestStatus2.Int());	
+
+	ASSERT_EQUALS(opCode1, sendV31.iOpCode);	
+	ASSERT_EQUALS(0, sendV31.iAdditionalInfo.Compare(KAdditionalInfo1));	
+
+	ASSERT_EQUALS(opCode1, sendV32.iOpCode);	
+	ASSERT_EQUALS(0, sendV32.iAdditionalInfo.Compare(KAdditionalInfo1));	
+
+
+	
+	AssertMockLtsyStatusL();
+	
+	//
+	// repeat tests with optional second parameter
+	// 
+	ussdMessaging1.Close();
+	ret = ussdMessaging1.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	ussdMessaging2.Close();
+	ret = ussdMessaging2.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attrV1;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg pckgAttrV1(attrV1);
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attrV12;
+	RMobileUssdMessaging::TMobileUssdAttributesV1Pckg pckgAttrV12(attrV12);
+
+	iMockLTSY.CompleteL(EMobileUssdMessagingNotifyNetworkRelease, KErrNone, data2, 5);
+	ussdMessaging1.NotifyNetworkRelease(requestStatus1, pckgSendV31, pckgAttrV1);
+	ussdMessaging2.NotifyNetworkRelease(requestStatus2, pckgSendV32, pckgAttrV12);	
+	
+    User::WaitForRequest(requestStatus1);        
+	ASSERT_EQUALS(KErrNone, requestStatus1.Int());	
+
+    User::WaitForRequest(requestStatus2);        
+	ASSERT_EQUALS(KErrNone, requestStatus2.Int());	
+
+	ASSERT_EQUALS(opCode1, sendV31.iOpCode);	
+	ASSERT_EQUALS(0, sendV31.iAdditionalInfo.Compare(KAdditionalInfo1));	
+
+	ASSERT_EQUALS(opCode1, sendV32.iOpCode);	
+	ASSERT_EQUALS(0, sendV32.iAdditionalInfo.Compare(KAdditionalInfo1));		
+	
+	ASSERT_EQUALS(completeAttrV1.iFlags ,attrV1.iFlags);
+	ASSERT_EQUALS(completeAttrV1.iFormat ,attrV1.iFormat);
+	ASSERT_EQUALS(completeAttrV1.iType ,attrV1.iType);	
+	
+	ASSERT_EQUALS(completeAttrV1.iFlags ,attrV12.iFlags);
+	ASSERT_EQUALS(completeAttrV1.iFormat ,attrV12.iFormat);
+	ASSERT_EQUALS(completeAttrV1.iType ,attrV12.iType);		
+	
+	CleanupStack::PopAndDestroy(7, this); // phone2, telServer2, data, this
+	                                      // ussdMessaging1, ussdMessaging2, data2 (inv. order)
+
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USMNFC-0001
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::SendMessageNoFdnCheck
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::SendMessageNoFdnCheck
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendMessageNoFdnCheck0001L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	TRequestStatus requestStatus;
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(attributes);
+	
+	attributes.iFlags  = flags;
+	attributes.iFormat = format;
+	attributes.iType   = type;
+	attributes.iDcs   = dcs;
+	
+	TName name = _L("Name1");
+	TPckg<TName> msgData(name);
+
+ 	//-------------------------------------------------------------------------
+
+	TMockLtsyData2<TName, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(name, attributes);
+
+ 	//-------------------------------------------------------------------------
+	// TEST A: failure to dispatch request to LTSY
+ 	//-------------------------------------------------------------------------
+
+	mockData2.SerialiseL(data);
+	iMockLTSY.ExpectL(EMobileUssdMessagingSendMessageNoFdnCheck, data, KErrNotSupported);
+
+	ussdMessaging.SendMessageNoFdnCheck(requestStatus, msgData, msgAttributes);
+
+	User::WaitForRequest(requestStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNotSupported, requestStatus.Int());	
+
+	//-------------------------------------------------------------------------
+	// TEST B: failure on completion of pending request from LTSY->CTSY
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.ExpectL(EMobileUssdMessagingSendMessageNoFdnCheck, data);
+	iMockLTSY.CompleteL(EMobileUssdMessagingSendMessageNoFdnCheck, KErrGeneral);
+
+	ussdMessaging.SendMessageNoFdnCheck(requestStatus, msgData, msgAttributes);
+
+	/*
+	 * Wrong IPC is passed to ResetTsyReqHandle() EMultimodeUssdSendMessage 
+	 * instead of EMultimodeUssdSendMessageNoFdnCheck by call of 
+	 * CMmUssdTsy::CompleteSendMessageNoFdnCheck(). This reduces to panic 
+	 * with EEtelFaultNotRecognisedTsyHandle.
+	 */
+
+	User::WaitForRequest(requestStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrGeneral, requestStatus.Int());	
+
+ 	//-------------------------------------------------------------------------
+	// TEST C: Successful completion request of
+	// RMobileUssdMessaging::SendMessageNoFdnCheck when result is not cached.
+ 	//-------------------------------------------------------------------------
+
+	iMockLTSY.ExpectL(EMobileUssdMessagingSendMessageNoFdnCheck, data);
+	iMockLTSY.CompleteL(EMobileUssdMessagingSendMessageNoFdnCheck, KErrNone);
+
+	ussdMessaging.SendMessageNoFdnCheck(requestStatus, msgData, msgAttributes);
+
+	User::WaitForRequest(requestStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());
+
+ 	//-------------------------------------------------------------------------
+	// TEST E: Unsolicited completion of RMobileUssdMessaging::SendMessageNoFdnCheck
+	// from LTSY.
+ 	//-------------------------------------------------------------------------
+
+	TRequestStatus mockLtsyStatus;
+
+	iMockLTSY.NotifyTerminated(mockLtsyStatus);
+	iMockLTSY.CompleteL(EMobileUssdMessagingSendMessageNoFdnCheck, KErrNone);
+	User::WaitForRequest(mockLtsyStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int());
+
+	CleanupStack::PopAndDestroy(3, this); // data, ussdMessaging, this
+	
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USMNFC-0002
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for cancelling of RMobileUssdMessaging::SendMessageNoFdnCheck
+@SYMTestPriority High
+@SYMTestActions Invokes cancelling of RMobileUssdMessaging::SendMessageNoFdnCheck
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendMessageNoFdnCheck0002L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	TRequestStatus mockLtsyStatus;
+	TRequestStatus requestStatus;
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(attributes);
+	
+	attributes.iFlags  = flags;
+	attributes.iFormat = format;
+	attributes.iType   = type;
+	attributes.iDcs   = dcs;
+	
+	TName name = _L("Name1");
+	TPckg<TName> msgData(name);
+
+ 	//-------------------------------------------------------------------------
+
+	TMockLtsyData2<TName, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(name, attributes);
+
+ 	//-------------------------------------------------------------------------
+	// Test cancelling of RMobileUssdMessaging::SendMessageNoFdnCheck
+ 	//-------------------------------------------------------------------------
+ 	
+	iMockLTSY.NotifyTerminated(mockLtsyStatus);
+ 	
+	mockData2.SerialiseL(data);
+    iMockLTSY.ExpectL(EMobileUssdMessagingSendMessageNoFdnCheck, data);
+    iMockLTSY.CompleteL(EMobileUssdMessagingSendMessageNoFdnCheck, KErrNone, 10);
+	
+	ussdMessaging.SendMessageNoFdnCheck(requestStatus, msgData, msgAttributes);
+    ussdMessaging.CancelAsyncRequest(EMobileUssdMessagingSendMessageNoFdnCheck);
+		
+	User::WaitForRequest(mockLtsyStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, mockLtsyStatus.Int());
+
+    User::WaitForRequest(requestStatus);
+    AssertMockLtsyStatusL();
+    ASSERT_EQUALS(KErrCancel, requestStatus.Int());
+
+	CleanupStack::PopAndDestroy(3); // data, this, ussdMessaging
+	
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USMNFC-0003
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::SendMessageNoFdnCheck with bad parameter data
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::SendMessageNoFdnCheck with bad parameter data
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendMessageNoFdnCheck0003L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TRequestStatus requestStatus;
+
+ 	//-------------------------------------------------------------------------
+	// function parameter
+
+	TName name = _L("Name1");
+	TPckg<TName> msgData(name);
+
+	//-------------------------------------------------------------------------
+	// Test B: Test passing wrong descriptor size to parameter in
+	// RMobileUssdMessaging::SendMessage
+ 	//-------------------------------------------------------------------------
+
+	TBuf8<1> badSizeDescriptor;
+
+	ussdMessaging.SendMessageNoFdnCheck(requestStatus, msgData, badSizeDescriptor);
+	
+    User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrArgument, requestStatus.Int());	
+	
+	CleanupStack::PopAndDestroy(3, this); // data, this, ussdMessaging, ussdMessaging
+
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USMNFC-0004
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for multiple client requests to RMobileUssdMessaging::SendMessageNoFdnCheck
+@SYMTestPriority High
+@SYMTestActions Invokes multiple client requests to RMobileUssdMessaging::SendMessageNoFdnCheck
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendMessageNoFdnCheck0004L()
+	{
+
+					
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	// Open second client
+	RTelServer telServer2;
+	TInt ret = telServer2.Connect();
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(telServer2);
+
+	RMobilePhone phone2;
+	ret = phone2.Open(telServer2,KMmTsyPhoneName);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(phone2);
+
+	RMobileUssdMessaging ussdMessaging1;
+	ret = ussdMessaging1.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging1);
+
+	RMobileUssdMessaging ussdMessaging2;
+	ret = ussdMessaging2.Open(phone2);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging2);
+
+	TRequestStatus requestStatus1;
+	TRequestStatus requestStatus2;
+
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// parameters for first function
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes1;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes1(attributes1);
+	
+	attributes1.iFlags  = flags;
+	attributes1.iFormat = format;
+	attributes1.iType   = type;
+	attributes1.iDcs    = dcs;
+
+	TName name1 = _L("Name1");
+	TPckg<TName> msgData1(name1);
+
+ 	//-------------------------------------------------------------------------
+	// parameters for second function
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes2;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes2(attributes2);
+
+	flags  = 10;
+	format = RMobileUssdMessaging::EFormatPackedString;
+	type   = RMobileUssdMessaging::EUssdMOAcknowledgement;
+	dcs    = 20;
+	
+	attributes2.iFlags  = flags;
+	attributes2.iFormat = format;
+	attributes2.iType   = type;
+	attributes2.iDcs    = dcs;
+	
+	TName name2 = _L("Name2");
+	TPckg<TName> msgData2(name2);
+
+ 	//-------------------------------------------------------------------------
+
+	TMockLtsyData2<TName, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(name1, attributes1);
+
+	//-------------------------------------------------------------------------
+	// Test A: Test multiple clients requesting RMobileUssdMessaging::SendMessageNoFdnCheck
+ 	//-------------------------------------------------------------------------
+
+	mockData2.SerialiseL(data);
+	iMockLTSY.ExpectL(EMobileUssdMessagingSendMessageNoFdnCheck, data);
+	iMockLTSY.CompleteL(EMobileUssdMessagingSendMessageNoFdnCheck, KErrNone, 10);
+	ussdMessaging1.SendMessageNoFdnCheck(requestStatus1, msgData1, msgAttributes1);
+
+	ussdMessaging2.SendMessageNoFdnCheck(requestStatus2, msgData2, msgAttributes2);
+
+	User::WaitForRequest(requestStatus1);
+	ASSERT_EQUALS(KErrNone, requestStatus1.Int());	
+
+	User::WaitForRequest(requestStatus2);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrServerBusy, requestStatus2.Int());	
+
+	CleanupStack::PopAndDestroy(6, this); // phone2, telServer2, data, this, 
+	                                      // ussdMessaging1, ussdMessaging2
+
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-USMNFC-0005
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::SendMessageNoFdnCheck with timeout
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::SendMessageNoFdnCheck and tests for timeout
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestSendMessageNoFdnCheck0005L()
+	{
+
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TRequestStatus requestStatus;
+
+	TUint32 flags = 100;
+	RMobileUssdMessaging::TMobileUssdDataFormat format = RMobileUssdMessaging::EFormatUnspecified;
+	RMobileUssdMessaging::TMobileUssdMessageType type  = RMobileUssdMessaging::EUssdMORequest;
+	TUint8 dcs = 200;
+
+ 	//-------------------------------------------------------------------------
+	// function parameters
+
+	RMobileUssdMessaging::TMobileUssdAttributesV1 attributes;
+	TPckg<RMobileUssdMessaging::TMobileUssdAttributesV1> msgAttributes(attributes);
+	
+	attributes.iFlags  = flags;
+	attributes.iFormat = format;
+	attributes.iType   = type;
+	attributes.iDcs   = dcs;
+	
+	TName name = _L("Name1");
+	TPckg<TName> msgData(name);
+
+ 	//-------------------------------------------------------------------------
+
+	TMockLtsyData2<TName, RMobileUssdMessaging::TMobileUssdAttributesV1> 
+		mockData2(name, attributes);
+
+	//-------------------------------------------------------------------------
+	// Test A: Test timeout of RMobileUssdMessaging::SendMessageNoFdnCheck
+ 	//-------------------------------------------------------------------------
+
+	mockData2.SerialiseL(data);
+	iMockLTSY.ExpectL(EMobileUssdMessagingSendMessageNoFdnCheck, data);
+
+	ussdMessaging.SendMessageNoFdnCheck(requestStatus, msgData, msgAttributes);
+
+	User::WaitForRequest(requestStatus);        
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrTimedOut, requestStatus.Int());	
+
+	CleanupStack::PopAndDestroy(3, this); // data, this, ussdMessaging
+
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-UGC-0001
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::GetCaps
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::GetCaps
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestGetCaps0001L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+	
+	TUint32 format = RMobileUssdMessaging::KCapsPackedString;
+	TUint32 types  = KUssdTypeCaps;
+		
+ 	//-------------------------------------------------------------------------
+	// TEST C: Successful completion request of
+	// RMobileUssdMessaging::GetCaps when result is not cached.
+ 	//-------------------------------------------------------------------------
+
+	RMobileUssdMessaging::TMobileUssdCapsV1 capsV1;
+	TPckg<RMobileUssdMessaging::TMobileUssdCapsV1> pckg(capsV1);
+	ret = ussdMessaging.GetCaps(pckg);
+	ASSERT_EQUALS(KErrNone, ret);
+	
+	ASSERT_EQUALS(format, capsV1.iUssdFormat); // hard coded value
+	ASSERT_EQUALS(types , capsV1.iUssdTypes ); // hard coded value
+
+	CleanupStack::PopAndDestroy(2, this); // this, ussdMessaging
+	
+	}
+
+/**
+@SYMTestCaseID BA-CTSY-USSDM-UGC-0003
+@SYMComponent  telephony_ctsy
+@SYMTestCaseDesc Test support in CTSY for RMobileUssdMessaging::GetCaps with bad parameter data
+@SYMTestPriority High
+@SYMTestActions Invokes RMobileUssdMessaging::GetCaps with bad parameter data
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCTsyUssdMessagingFU::TestGetCaps0003L()
+	{
+
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+
+	RMobileUssdMessaging ussdMessaging;
+	TInt ret = ussdMessaging.Open(iPhone);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(ussdMessaging);
+
+	//-------------------------------------------------------------------------
+	// Test B: Test passing wrong descriptor size to parameter in
+	// RMobileUssdMessaging::GetCaps
+ 	//-------------------------------------------------------------------------
+
+	TBuf8<1> badSizeDescriptor;
+	
+	ret = ussdMessaging.GetCaps(badSizeDescriptor);
+	ASSERT_EQUALS(KErrArgument, ret);
+
+	CleanupStack::PopAndDestroy(2, this); // this, ussdMessaging
+
+	}
+