--- /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);
+ }
+
+
+