telephonyserverplugins/simatktsy/tests/src/ccsatrefreshfu.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/simatktsy/tests/src/ccsatrefreshfu.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,852 @@
+// Copyright (c) 2008-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:
+//
+
+
+
+/**
+ @file The TEFUnit test suite for Refresh in the SAT.
+*/
+
+#include <cstktsy/bertlv_defs.h>
+#include <etel.h>
+#include <etelmm.h>
+#include <etelsat.h>
+#include <ctsy/serviceapi/gsmerror.h>
+#include <ctsy/mmtsy_names.h>
+#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
+#include <satcs.h>
+#include <ctsy/ltsy/sat_defs.h>
+#include <cstktsy/ttlv.h>
+
+
+#include <ctsy/ltsy/mltsydispatchsatinterface.h>
+#include <ctsy/ltsy/mltsydispatchphoneinterface.h> 
+#include <test/mockltsyindicatorids.h>
+
+#include <test/tmockltsydata.h>
+#include "ccsatrefreshfu.h"
+
+// ICC file identifier
+_LIT8(KICCID_file, "\x2F\xE2");	
+_LIT16(KICCID16, "\x2FE2");
+_LIT8(KAID, "123");
+const TInt KDelay = 10;
+
+CTestSuite* CCSatRefreshFU::CreateSuiteL(const TDesC& aName)
+	{
+	SUB_SUITE;
+
+	ADD_TEST_STEP_ISO_CPP(CCSatRefreshFU, TestNotifyRefreshPCmd0001L);
+	ADD_TEST_STEP_ISO_CPP(CCSatRefreshFU, TestNotifyRefreshPCmd0002L);
+	ADD_TEST_STEP_ISO_CPP(CCSatRefreshFU, TestNotifyRefreshPCmd0004L);
+	ADD_TEST_STEP_ISO_CPP(CCSatRefreshFU, TestNotifyRefreshPCmd0001bL);
+
+	END_SUITE;
+	}
+
+
+//
+// Actual test cases
+//
+
+
+/**
+@SYMTestCaseID BA-CSAT-RF-SNRFPC-0001
+@SYMPREQ 1780
+@SYMComponent  telephony_csat
+@SYMTestCaseDesc Test support in CSAT for RSat::NotifyRefreshPCmd
+@SYMTestPriority High
+@SYMTestActions Invokes RSat::NotifyRefreshPCmd
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCSatRefreshFU::TestNotifyRefreshPCmd0001L()
+	{
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+	OpenSatL();	
+	
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	TUint8 KPCmdNumber = 1;
+
+	TTlv tlv;
+	PrepareTlv( tlv, KPCmdNumber, KFileChangeNotification);
+	TPtrC8 tlvDsc = tlv.End();
+	TDesC8* tlvDscPtr = &tlvDsc;
+	TMockLtsyData1<TDesC8*> tlvDscPack(tlvDscPtr);
+
+	TRequestStatus refreshStatus;
+	TRequestStatus refreshRequiredStatus;
+	RSat::TRefreshV2 refresh;
+	RSat::TRefreshV2Pckg refreshPck(refresh);
+	RSat::TRefreshV2 refreshRequired;
+	RSat::TRefreshV2Pckg refreshRequiredPck(refreshRequired);
+	
+	// test C
+	// calling both NotifyRefreshRequired() and NotifyRefreshPCmd(), 
+	// then completing NotifyRefreshRequired
+	// and then completing NotifyRefreshPCmd through using RefreshAllowed()
+	// making terminalResponse in the end
+	// Other test C variants implemented in TestNotifyRefreshPCmd0001bL()
+
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::EFileChangeNotification, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KICCID16));
+
+	PrepareAndCallRefreshAllowedL(RSat::KSuccess, 0x00, KICCID_file);
+	
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+	
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::EFileChangeNotification, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KICCID16));
+	AssertMockLtsyStatusL();
+
+	//terminal response	
+	RSat::TRefreshRspV1 refreshTerminalRsp;
+	RSat::TRefreshRspV1Pckg refreshTerminalRspPckg(refreshTerminalRsp);
+	refreshTerminalRsp.SetPCmdNumber(KPCmdNumber);
+	refreshTerminalRsp.iGeneralResult = RSat::KSuccess;
+	refreshTerminalRsp.iInfoType = RSat::KNoAdditionalInfo;
+	refreshTerminalRsp.iAdditionalInfo = KNullDesC;
+	
+	GenerateTerminalResponseL(KPCmdNumber,	KRefresh,	KFileChangeNotification,
+			RSat::ERefresh, refreshTerminalRspPckg,	refreshTerminalRsp.iAdditionalInfo, 
+			refreshTerminalRsp.iGeneralResult);
+	
+	AssertMockLtsyStatusL();
+
+	// test B, for RefreshAllowed
+
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::EFileChangeNotification, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KICCID16));
+
+	refreshTerminalRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
+	refreshTerminalRsp.iInfoType = RSat::KMeProblem;	
+	refreshTerminalRsp.iAdditionalInfo.Zero();
+	refreshTerminalRsp.iAdditionalInfo.Append(RSat::KNoSpecificMeProblem);;
+
+	PrepareTerminalResponseMockDataL( KPCmdNumber, KRefresh, KFileChangeNotification,
+			refreshTerminalRsp.iAdditionalInfo, refreshTerminalRsp.iGeneralResult, KNullDesC8);
+	
+	PrepareAndCallRefreshAllowedL(RSat::KMeUnableToProcessCmd);
+	
+	PrepareAndCallRefreshAllowedL(RSat::KSuccess, 0x00, KICCID_file);
+	
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+	
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::EFileChangeNotification, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KICCID16));
+	AssertMockLtsyStatusL();
+	
+	// test B, for NotifyRefreshRequired
+
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End(), KErrGeneral );
+
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrGeneral, refreshRequiredStatus.Int());
+
+	AssertMockLtsyStatusL();
+	
+	// test E1	- Unsolicited completion, calling CSatNotifyRefresh::CompleteNotifyL() 		
+		
+	TRequestStatus requestStatus;
+	iMockLTSY.NotifyTerminated(requestStatus);	    
+	tlvDscPack.SerialiseL(data);
+	iMockLTSY.CompleteL(KMockLtsyDispatchSatPcmdIndId, KErrNone, data, KDelay);
+	data.Close();
+	
+	refreshTerminalRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
+	refreshTerminalRsp.iInfoType = RSat::KNoAdditionalInfo;
+	refreshTerminalRsp.iAdditionalInfo.Zero();
+	refreshTerminalRsp.iAdditionalInfo.Append(RSat::KNoSpecificMeProblem);;
+
+	PrepareTerminalResponseMockDataL( KPCmdNumber, KRefresh, KFileChangeNotification,
+			refreshTerminalRsp.iAdditionalInfo, refreshTerminalRsp.iGeneralResult, KNullDesC8);
+
+	User::WaitForRequest(requestStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());
+		
+	// test E2, calling CSatNotifyRefresh::CompleteRequest() 	
+	
+	iMockLTSY.NotifyTerminated(requestStatus);	    
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId, KErrNone, KNullDesC8, KDelay);
+
+	User::WaitForRequest(requestStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());
+	
+	AssertMockLtsyStatusL();	
+	
+	//File Change Notification with no files in a filelist
+	
+	tlv.Begin(KBerTlvProactiveSimCommandTag);
+	tlv.AddTag(KTlvCommandDetailsTag);
+	tlv.AddByte(KPCmdNumber);//ETLV_CommandNumber
+	tlv.AddByte(KRefresh); //ETLV_TypeOfCommand
+	tlv.AddByte(KFileChangeNotification); //ETLV_CommandQualifier
+	tlv.AddTag(KTlvDeviceIdentityTag); 
+	tlv.AddByte(KSim); //ETLV_SourceDeviceIdentity
+	tlv.AddByte(KMe); //ETLV_DestinationDeviceIdentity
+		
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	refreshTerminalRsp.SetPCmdNumber(KPCmdNumber);
+	refreshTerminalRsp.iGeneralResult = RSat::KErrorRequiredValuesMissing;
+	refreshTerminalRsp.iInfoType = RSat::KNoAdditionalInfo;
+	refreshTerminalRsp.iAdditionalInfo.Zero();
+
+	PrepareTerminalResponseMockDataL( KPCmdNumber, KRefresh, KFileChangeNotification,
+			refreshTerminalRsp.iAdditionalInfo, refreshTerminalRsp.iGeneralResult, KNullDesC8);
+		
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrCorrupt, refreshRequiredStatus.Int());	
+	
+	AssertMockLtsyStatusL();		
+	
+	CleanupStack::PopAndDestroy(2, this); 	// data, this
+	}
+
+
+/**
+@SYMTestCaseID BA-CSAT-RF-SNRFPC-0002
+@SYMPREQ 1780
+@SYMComponent  telephony_csat
+@SYMTestCaseDesc Test support in CSAT for cancelling of RSat::NotifyRefreshPCmd
+@SYMTestPriority High
+@SYMTestActions Invokes cancelling of RSat::NotifyRefreshPCmd
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCSatRefreshFU::TestNotifyRefreshPCmd0002L()
+	{
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+	OpenSatL();	
+	
+	PrepareRefreshDispatchL();
+	
+	RSat::TRefreshV2 refresh;
+	RSat::TRefreshV2Pckg refreshPck(refresh);
+	TRequestStatus refreshStatus;
+	TRequestStatus refreshRequiredStatus;
+
+	RSat::TRefreshV2 refreshRequired;
+	RSat::TRefreshV2Pckg refreshRequiredPck(refreshRequired);
+
+	// cancelling requests
+	
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+	
+	iSat.CancelAsyncRequest(ESatNotifyRefreshRequiredParam);
+
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS( KErrCancel, refreshRequiredStatus.Int());
+
+	iSat.CancelAsyncRequest(ESatNotifyRefreshPCmd);
+
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS( KErrCancel, refreshStatus.Int());
+
+	AssertMockLtsyStatusL();
+	CleanupStack::PopAndDestroy(1, this); 
+	}
+
+
+/**
+@SYMTestCaseID BA-CSAT-RF-SNRFPC-0004
+@SYMPREQ 1780
+@SYMComponent  telephony_csat
+@SYMTestCaseDesc Test support in CSAT for multiple client requests to RSat::NotifyRefreshPCmd
+@SYMTestPriority High
+@SYMTestActions Invokes multiple client requests to RSat::NotifyRefreshPCmd
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCSatRefreshFU::TestNotifyRefreshPCmd0004L()
+	{
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+	OpenSatL();
+
+	// 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);
+	
+	RSat sat2;	
+	ret = sat2.Open(phone2);
+	ASSERT_EQUALS(KErrNone, ret);
+	CleanupClosePushL(sat2);
+	
+	TUint8 KPCmdNumber = 2;
+
+	TTlv tlv;
+	PrepareTlv( tlv, KPCmdNumber, KFileChangeNotification);
+
+	TRequestStatus refreshStatus;
+	TRequestStatus refreshRequiredStatus;
+	RSat::TRefreshV2 refresh;
+	RSat::TRefreshV2Pckg refreshPck(refresh);
+	RSat::TRefreshV2 refreshRequired;
+	RSat::TRefreshV2Pckg refreshRequiredPck(refreshRequired);
+
+	PrepareRefreshDispatchL();
+	
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	TRequestStatus refreshStatus2;
+	RSat::TRefreshV2 refresh2;
+	RSat::TRefreshV2Pckg refreshPck2(refresh2);
+	
+	// only one client should call NotifyRefreshRequired(), others just call NotifyRefreshPCmd()
+	sat2.NotifyRefreshPCmd(refreshStatus2, refreshPck2);
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::EFileChangeNotification, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KICCID16));
+
+	PrepareAndCallRefreshAllowedL(RSat::KSuccess, 0x00, KICCID_file);
+		
+	// should be enough for all clients
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+	
+	// first client
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::EFileChangeNotification, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KICCID16));
+	AssertMockLtsyStatusL();
+	
+	// second client	
+	User::WaitForRequest(refreshStatus2);
+	ASSERT_EQUALS(KErrNone, refreshStatus2.Int());
+	ASSERT_EQUALS(RSat::EFileChangeNotification, refresh2.iType);
+	ASSERT_EQUALS(0, refresh2.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh2.iFileList.Compare(KICCID16));
+	AssertMockLtsyStatusL();
+
+	CleanupStack::PopAndDestroy(4, this); 	//sat2, phone2, telServer2, this
+	}
+
+
+/**
+@SYMTestCaseID BA-CSAT-RF-SNRFPC-0001b
+@SYMPREQ 1780
+@SYMComponent  telephony_csat
+@SYMTestCaseDesc additional test support in CSAT for RSat::NotifyRefreshPCmd 
+@SYMTestPriority High
+@SYMTestActions Invokes RSat::NotifyRefreshPCmd 
+@SYMTestExpectedResults Pass
+@SYMTestType CT
+*/
+void CCSatRefreshFU::TestNotifyRefreshPCmd0001bL()
+	{
+	OpenEtelServerL(EUseExtendedError);
+	CleanupStack::PushL(TCleanupItem(Cleanup,this));
+	OpenPhoneL();
+	OpenSatL();
+
+	RBuf8 data;
+	CleanupClosePushL(data);
+	
+	//(REFRESH, SIM Initialization)
+
+	TUint8 KPCmdNumber = 1;
+
+	TTlv tlv;
+	
+	PrepareTlv( tlv, KPCmdNumber, KSimInit);
+	
+	TRequestStatus refreshStatus;
+	TRequestStatus refreshRequiredStatus;
+	RSat::TRefreshV2 refresh;
+	RSat::TRefreshV2Pckg refreshPck(refresh);
+	RSat::TRefreshV2 refreshRequired;
+	RSat::TRefreshV2Pckg refreshRequiredPck(refreshRequired);
+	
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::ESimInit, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KNullDesC16));
+
+	PrepareAndCallRefreshAllowedL(RSat::KSuccess, ECacheEFSST | ECacheEFCBMID);
+	
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+	
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::ESimInit, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KNullDesC16));
+	AssertMockLtsyStatusL();	
+	
+	RSat::TRefreshRspV1 refreshTerminalRsp;
+	RSat::TRefreshRspV1Pckg refreshTerminalRspPckg(refreshTerminalRsp);
+	refreshTerminalRsp.SetPCmdNumber(KPCmdNumber);
+	refreshTerminalRsp.iGeneralResult = RSat::KSuccess;
+	refreshTerminalRsp.iInfoType = RSat::KNoAdditionalInfo;
+	refreshTerminalRsp.iAdditionalInfo = KNullDesC;
+
+	GenerateTerminalResponseL(KPCmdNumber,	KRefresh,	KSimInit,
+			RSat::ERefresh, refreshTerminalRspPckg,	refreshTerminalRsp.iAdditionalInfo, 
+			refreshTerminalRsp.iGeneralResult);
+	
+	AssertMockLtsyStatusL();	
+
+	// completion of ESatTsyImsiChanged after terminal responce for full test coverage 	
+	TRequestStatus requestStatus;
+	iMockLTSY.NotifyTerminated(requestStatus);	    
+	iMockLTSY.CompleteL(KMockLtsyDispatchSatImsiChangedIndId, KErrNone, KDelay);
+	User::WaitForRequest(requestStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());
+	//(REFRESH, File Change Notification)
+
+	PrepareTlv( tlv, KPCmdNumber, KFileChangeNotification);
+		
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::EFileChangeNotification, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KICCID16));
+
+	PrepareAndCallRefreshAllowedL(RSat::KSuccess, 0x00, KICCID_file);
+	
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+	
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::EFileChangeNotification, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KICCID16));
+	AssertMockLtsyStatusL();
+
+	refreshTerminalRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
+	refreshTerminalRsp.iInfoType = RSat::KMeProblem;	
+	refreshTerminalRsp.iAdditionalInfo.Zero();
+	refreshTerminalRsp.iAdditionalInfo.Append(RSat::KNoSpecificMeProblem);;
+	
+	GenerateTerminalResponseL(KPCmdNumber,	KRefresh,	KFileChangeNotification,
+			RSat::ERefresh, refreshTerminalRspPckg,	refreshTerminalRsp.iAdditionalInfo, 
+			refreshTerminalRsp.iGeneralResult);
+	
+	AssertMockLtsyStatusL();	
+	
+	//(REFRESH, USIM Initialization and File Change Notification)
+
+	PrepareTlv( tlv, KPCmdNumber, KSimInitFileChangeNotification);
+		
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::ESimInitFileChangeNotification, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KICCID16));
+
+	PrepareAndCallRefreshAllowedL(RSat::KSuccess, 0x00, KICCID_file);
+	
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+	
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::ESimInitFileChangeNotification, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KICCID16));
+	AssertMockLtsyStatusL();
+
+	refreshTerminalRsp.iGeneralResult = RSat::KSuccess;
+	refreshTerminalRsp.iInfoType = RSat::KNoAdditionalInfo;
+	refreshTerminalRsp.iAdditionalInfo.Zero();
+	
+	GenerateTerminalResponseL(KPCmdNumber,	KRefresh,	KSimInitFileChangeNotification,
+			RSat::ERefresh, refreshTerminalRspPckg,	refreshTerminalRsp.iAdditionalInfo, 
+			refreshTerminalRsp.iGeneralResult);
+	
+	AssertMockLtsyStatusL();	
+	
+	//(REFRESH, USIM Initialization and Full File Change Notification)
+
+	PrepareTlv( tlv, KPCmdNumber, KSimInitFullFileChangeNotification);
+		
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::ESimInitFullFileChangeNotification, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KNullDesC16));
+
+	PrepareAndCallRefreshAllowedL(RSat::KSuccess, ECacheEFSST | ECacheEFCBMID);
+	
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+
+	// calling terminal responce through CSatNotifyRefresh::CompleteTerminalRespDataL
+	RSat::TAdditionalInfo additionalInfo(KNullDesC);
+	TDesC* addInfoPtr = &additionalInfo;
+    RSat::TPCmdResult generalResult = RSat::KSuccess;
+    TMockLtsyData2<RSat::TPCmdResult,TDesC*> refreshDataPck(generalResult,addInfoPtr);
+    refreshDataPck.SerialiseL(data);	
+	iMockLTSY.CompleteL(KMockLtsyDispatchSatCreateRefreshTerminalRspIndId,KErrNone,data, KDelay);
+	data.Close();		
+		
+	PrepareTerminalResponseMockDataL( KPCmdNumber, KRefresh, KSimInitFullFileChangeNotification,
+			refreshTerminalRsp.iAdditionalInfo, refreshTerminalRsp.iGeneralResult, KNullDesC8);
+
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::ESimInitFullFileChangeNotification, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KNullDesC16));
+	
+	AssertMockLtsyStatusL();	
+	
+	//(REFRESH, UICC Reset)
+
+	PrepareTlv( tlv, KPCmdNumber, KSimReset);
+		
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::ESimReset, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KNullDesC16));
+
+	PrepareAndCallRefreshAllowedL(RSat::KSuccess, ECacheEFSST | ECacheEFCBMID);
+	
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+	
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::ESimReset, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KNullDesC16));
+	AssertMockLtsyStatusL();
+
+	// for refresh terminal response processed without calling ltsy 
+	TerminalResponseL( RSat::ERefresh, refreshTerminalRspPckg);
+	
+	AssertMockLtsyStatusL();	
+	
+	// IMSI refresh through SIM init
+	
+	PrepareTlv( tlv, KPCmdNumber, KSimInit);
+	
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::ESimInit, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KNullDesC16));
+
+	PrepareAndCallRefreshAllowedL(RSat::KSuccess, ECacheEFSST | ECacheEFCBMID);
+	
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+	
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::ESimInit, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KNullDesC16));
+	AssertMockLtsyStatusL();
+
+	// completion of ESatTsyImsiChanged		
+	iMockLTSY.NotifyTerminated(requestStatus);	    
+	iMockLTSY.CompleteL(KMockLtsyDispatchSatImsiChangedIndId, KErrNone, KDelay);
+	User::WaitForRequest(requestStatus);
+	AssertMockLtsyStatusL();
+	ASSERT_EQUALS(KErrNone, requestStatus.Int());
+		
+	refreshTerminalRsp.iGeneralResult = RSat::KSuccess;
+	refreshTerminalRsp.iInfoType = RSat::KNoAdditionalInfo;
+	refreshTerminalRsp.iAdditionalInfo = KNullDesC;
+
+	//SIM Init shall not be used if EFIMSI is changed, and TerminalResponse will not reach ltsy
+	TerminalResponseL( RSat::ERefresh, refreshTerminalRspPckg, KErrNone);	
+	
+	AssertMockLtsyStatusL();	
+	
+	//(REFRESH, USIM Application Reset)
+
+	PrepareTlv( tlv, KPCmdNumber, KUSIMApplicationReset);
+		
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::EUsimApplicationReset, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KAID));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KNullDesC16));
+
+	PrepareAndCallRefreshAllowedL(RSat::KSuccess, ECacheEFSST | ECacheEFCBMID, KNullDesC8, KAID);
+	
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+	
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::EUsimApplicationReset, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KAID));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KNullDesC16));
+	AssertMockLtsyStatusL();
+
+	GenerateTerminalResponseL(KPCmdNumber,	KRefresh,	KUSIMApplicationReset,
+			RSat::ERefresh, refreshTerminalRspPckg,	refreshTerminalRsp.iAdditionalInfo, 
+			refreshTerminalRsp.iGeneralResult);
+	
+	AssertMockLtsyStatusL();	
+	
+	// 3G session reset
+
+	PrepareTlv( tlv, KPCmdNumber, K3GSessionReset);
+		
+	PrepareRefreshDispatchL();
+
+	iSat.NotifyRefreshRequired(refreshRequiredStatus, refreshRequiredPck);
+	iSat.NotifyRefreshPCmd(refreshStatus, refreshPck);
+
+	CompleteRefreshDispatchL( tlv.End() );
+	
+	User::WaitForRequest(refreshRequiredStatus);
+	ASSERT_EQUALS(KErrNone, refreshRequiredStatus.Int());
+	ASSERT_EQUALS(RSat::E3GSessionReset, refreshRequired.iType);
+	ASSERT_EQUALS(0, refreshRequired.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refreshRequired.iFileList.Compare(KNullDesC16));
+
+	PrepareAndCallRefreshAllowedL();
+	
+	iMockLTSY.CompleteL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,KErrNone, KDelay);
+	
+	User::WaitForRequest(refreshStatus);
+	ASSERT_EQUALS(KErrNone, refreshStatus.Int());
+	ASSERT_EQUALS(RSat::E3GSessionReset, refresh.iType);
+	ASSERT_EQUALS(0, refresh.iAid.Compare(KNullDesC8));
+	ASSERT_EQUALS(0, refresh.iFileList.Compare(KNullDesC16));
+	AssertMockLtsyStatusL();
+
+	GenerateTerminalResponseL(KPCmdNumber,	KRefresh,	K3GSessionReset,
+			RSat::ERefresh, refreshTerminalRspPckg,	refreshTerminalRsp.iAdditionalInfo, 
+			refreshTerminalRsp.iGeneralResult);
+	
+	AssertMockLtsyStatusL();	
+	
+	CleanupStack::PopAndDestroy(2, this);
+	}
+
+
+
+void CCSatRefreshFU::PrepareTlv(TTlv& aTlv, TUint8 aCmdNum, TUint8 aCmdQualifier) 
+	{
+	aTlv.Begin(KBerTlvProactiveSimCommandTag);
+	aTlv.AddTag(KTlvCommandDetailsTag);
+	aTlv.AddByte(aCmdNum);//ETLV_CommandNumber
+	aTlv.AddByte(KRefresh); //ETLV_TypeOfCommand
+	aTlv.AddByte(aCmdQualifier); //ETLV_CommandQualifier
+
+	aTlv.AddTag(KTlvDeviceIdentityTag); 
+	aTlv.AddByte(KSim); //ETLV_SourceDeviceIdentity
+	aTlv.AddByte(KMe); //ETLV_DestinationDeviceIdentity
+
+	switch(aCmdQualifier)
+		{
+		case KFileChangeNotification:
+		case KSimInitFileChangeNotification:
+			{
+		   	aTlv.AddTag(KTlvFileListTag);
+		   	aTlv.AddByte(1);	// num files
+		   	aTlv.AddData(KICCID_file);	
+		   	break;
+			}
+		case KUSIMApplicationReset:
+			{
+			aTlv.AddTag(KTlvAIDTag);	//ETLV_AID 
+			aTlv.AddData(KAID);
+			break;
+			}
+		default:
+			break;
+		}
+	}
+
+void CCSatRefreshFU::CompleteRefreshDispatchL(const TDesC8& aTlvDsc, TInt aRes)
+	{
+	RBuf8 data;
+	CleanupClosePushL(data);
+	
+	TDesC8* tlvDscPtr = const_cast<TDesC8*>(&aTlvDsc);
+	TMockLtsyData1<TDesC8*> tlvDscPack(tlvDscPtr);
+
+	tlvDscPack.SerialiseL(data);
+	iMockLTSY.CompleteL(KMockLtsyDispatchSatPcmdIndId, aRes, data, KDelay);
+	data.Close();		
+
+	CleanupStack::PopAndDestroy(1); 
+	}
+
+void CCSatRefreshFU::PrepareRefreshDispatchL()
+	{
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	TUint8 pcmdCode = KRefresh;
+	TMockLtsyData1<TUint8> expLtsyData(pcmdCode);
+	expLtsyData.SerialiseL(data);
+	
+	iMockLTSY.ExpectL(MLtsyDispatchSatPCmdNotification::KLtsyDispatchSatPCmdNotificationApiId,data);
+	data.Close();
+ 	
+	CleanupStack::PopAndDestroy(1); 
+	}
+
+void CCSatRefreshFU::PrepareAndCallRefreshAllowedL(RSat::TPCmdResult aRes, TUint16 aCache, 
+		const TDesC8& aFileList, const TDesC8& aAid)
+	{
+	RBuf8 data;
+	CleanupClosePushL(data);
+
+	if(RSat::KSuccess == aRes)
+		{
+	    //RSat::TAid aid(aAid); 
+		TDesC8* aidPtr = const_cast<TDesC8*>(&aAid);
+		TDesC8* refreshFileListPtr = const_cast<TDesC8*>(&aFileList);
+		TUint16 cache = aCache;
+		TMockLtsyData3<TDesC8*, TDesC8*, TUint16> refreshAllowedPack(refreshFileListPtr,aidPtr,cache);
+		refreshAllowedPack.SerialiseL(data);
+		iMockLTSY.ExpectL(MLtsyDispatchSatRefreshAllowed::KLtsyDispatchSatRefreshAllowedApiId,data,KErrNone);
+		data.Close();
+		}
+
+	RSat::TRefreshRspV1 refreshAllowedRsp;
+	refreshAllowedRsp.iGeneralResult = aRes;
+	if(RSat::KSuccess == aRes)
+		{
+		refreshAllowedRsp.iInfoType = RSat::KNoAdditionalInfo;
+		refreshAllowedRsp.iAdditionalInfo = KNullDesC;		
+		}
+	else
+		{		
+		refreshAllowedRsp.iInfoType = RSat::KMeProblem;	
+		refreshAllowedRsp.iAdditionalInfo.Zero();
+		refreshAllowedRsp.iAdditionalInfo.Append(RSat::KNoSpecificMeProblem);;
+		}		
+	RSat::TRefreshRspV1Pckg refreshAllowedRspPckg(refreshAllowedRsp);	
+	TRequestStatus refreshAllowedReqStatus;
+	
+	iSat.RefreshAllowed(refreshAllowedReqStatus,refreshAllowedRspPckg);
+	
+	User::WaitForRequest(refreshAllowedReqStatus);
+	// it is completed with KErrNone anyway
+	ASSERT_EQUALS(KErrNone, refreshAllowedReqStatus.Int());	
+	
+	CleanupStack::PopAndDestroy(1); 
+	}
+
+
+