--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/simtsy/test/Te_Sim/Te_SimPhBkSmartCardTest.cpp Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,652 @@
+// Copyright (c) 2005-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:
+//
+
+#include "Te_SimPhBkSmartCardTest.h"
+
+CSimPhBkSmartCardTest::CSimPhBkSmartCardTest()
+ {
+ SetTestStepName(_L("SmartCardTest"));
+ }
+
+TVerdict CSimPhBkSmartCardTest::doTestStepL()
+ {
+ INFO_PRINTF1(_L("BeginPhBkSmartCardTest"));
+
+ CreateConfigFileL(_L("c:\\config3.txt"));
+ SetTestNumberL(10);
+
+ RMobilePhone::TAID smartCardAppID;
+ TUint count,smartCardIndex;
+ TRequestStatus reqStatus;
+
+ INFO_PRINTF1(_L(""));
+ INFO_PRINTF1(_L("SmartCard test"));
+ TInt ret = iPhone.Open(iTelServer,KPhoneName);
+ INFO_PRINTF2(_L("Result: %d"),ret);
+ TESTL(ret == KErrNone);
+ INFO_PRINTF1(_L("Opened phone object"));
+
+ // EnumerateSmartCardApplications
+ INFO_PRINTF1(_L("EnumerateSmartCardApplications test"));
+ enum {KSmartCardApps=10};
+ iPhone.EnumerateSmartCardApplications(reqStatus, count);
+ User::WaitForRequest(reqStatus);
+ TESTL(count==KSmartCardApps);
+ CHECKPOINTL(reqStatus, KErrNone, CHP_APPS_CASE("O.1"));
+
+ // GetSmartCardApplicationInfo
+ INFO_PRINTF1(_L("GetSmartCardApplicationInfo test"));
+ // Structured data to read in application info
+ RMobilePhone::TSmartCardApplicationInfoV5 smartCardAppInfo;
+ RMobilePhone::TSmartCardApplicationInfoV5Pckg smartCardAppInfoPckg(smartCardAppInfo);
+
+ // first application
+ smartCardIndex=0;
+ iPhone.GetSmartCardApplicationInfo(reqStatus, smartCardIndex, smartCardAppInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINTL(reqStatus, KErrNone, CHP_APPS_CASE("O.2"));
+ // Test the contents of structured data
+ TESTL(smartCardAppInfo.iAID.Compare(_L8("SCApp1")) == KErrNone);
+ TESTL(smartCardAppInfo.iLabel.Compare(_L8("SmartCardApp1")) == KErrNone);
+
+ // fifth application - USim Application
+ smartCardIndex=4;
+ iPhone.GetSmartCardApplicationInfo(reqStatus, smartCardIndex, smartCardAppInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.3"));
+ TESTL(smartCardAppInfo.iAID.Compare(_L8("USimApp1")) == KErrNone);
+ TESTL(smartCardAppInfo.iLabel.Compare(_L8("USimApplication1")) == KErrNone);
+
+ // last application in array
+ smartCardIndex=9;
+ iPhone.GetSmartCardApplicationInfo(reqStatus, smartCardIndex, smartCardAppInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.4"));
+ TESTL(smartCardAppInfo.iAID.Compare(_L8("SCAppThatIsTooLo")) == KErrNone);
+ TESTL(smartCardAppInfo.iLabel.Compare(_L8("SmartCardAppThatIsMuchMuchMuchTo")) == KErrNone);
+
+ // Out of range application
+ smartCardIndex=10;
+ iPhone.GetSmartCardApplicationInfo(reqStatus, smartCardIndex, smartCardAppInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNotFound, CHP_APPS_CASE("O.5"));
+
+ // NotifySmartCardApplicationInfoChange
+ /* Activate application in order to terminate it later */
+ smartCardAppID=_L8("SCApp2");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ INFO_PRINTF1(_L("NotifySmartCardApplicationInfoChange test"));
+ RMobilePhone::TSmartCardApplicationEvent event;
+ /* Second application is terminated with an event in config.txt
+ This is time dependent */
+ iPhone.NotifySmartCardApplicationInfoChange(reqStatus, smartCardAppID, event);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.6"));
+ TESTL(smartCardAppID==_L8("SCApp2"));
+ TESTL(event==RMobilePhone::EScApplicationTerminated);
+
+ // First application will be activated
+ smartCardAppID=_L8("SCApp1");
+ iPhone.NotifySmartCardApplicationInfoChange(reqStatus, smartCardAppID, event);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.7"));
+ TESTL(smartCardAppID==_L8("SCApp1"));
+ TESTL(event==RMobilePhone::EScApplicationActivated);
+
+ // Notification for activation on already activated first application
+ iPhone.NotifySmartCardApplicationInfoChange(reqStatus, smartCardAppID, event);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.8"));
+ TESTL(smartCardAppID==_L8("SCApp1"));
+ TESTL(event==RMobilePhone::EScApplicationActivated);
+
+ // Terminate first application
+ smartCardAppID=_L8("SCApp1");
+ iPhone.NotifySmartCardApplicationInfoChange(reqStatus, smartCardAppID, event);
+ User::WaitForRequest(reqStatus); // Wait for notification of change
+ CHECKPOINTL(reqStatus, KErrNone, CHP_APPS_CASE("O.9"));
+ TESTL(smartCardAppID==_L8("SCApp1"));
+ TESTL(event==RMobilePhone::EScApplicationTerminated);
+
+ // GetCurrentActiveUSIMApplication
+ smartCardAppID=_L8("");
+ INFO_PRINTF1(_L("GetCurrentActiveUSIMApplication test"));
+ // There should be no active application at this point
+ iPhone.GetCurrentActiveUSimApplication(reqStatus, smartCardAppID);
+ User::WaitForRequest(reqStatus); // Wait for notification of change
+ CHECKPOINTL(reqStatus, KErrMMEtelScApplicationNotActive, CHP_APPS_CASE("O.10"));
+ TESTL(smartCardAppID==_L8(""));
+
+ // Wait for event to activate second application
+ smartCardAppID=_L8("USimApp2");
+ iPhone.NotifySmartCardApplicationInfoChange(reqStatus, smartCardAppID, event);
+ User::WaitForRequest(reqStatus); // Wait for notification of change
+ CHECKPOINTL(reqStatus, KErrNone, CHP_APPS_CASE("O.11"));
+ TESTL(smartCardAppID==_L8("USimApp2"));
+ TESTL(event==RMobilePhone::EScApplicationActivated);
+
+ // There should be an active application at this point
+ iPhone.GetCurrentActiveUSimApplication(reqStatus, smartCardAppID);
+ User::WaitForRequest(reqStatus); // Wait for notification of change
+ CHECKPOINTL(reqStatus, KErrNone, CHP_APPS_CASE("O.12"));
+ TESTL(smartCardAppID==_L8("USimApp2"));
+
+ // At this point there should be one active application, the USIM app, USimApp2
+ // SetSmartCardApplicationStatus
+ INFO_PRINTF1(_L("SetSmartCardApplicationStatus test"));
+ // Try and activate a second USIM application
+ smartCardAppID=_L8("USimApp1");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrAlreadyExists, CHP_APPS_CASE("O.13"));
+
+ // Set other smart card apps to active
+ smartCardAppID=_L8("SCApp3");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ // Set third smart card app to active
+ smartCardAppID=_L8("SCApp4");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ // Set fourth smart card app to active
+ smartCardAppID=_L8("SCApp5");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ /* Set fifth smart card app to active
+ This should return with error code as it surpasses the max set in the config file */
+ smartCardAppID=_L8("SCApp6");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScMaxApplicationsActive, CHP_APPS_CASE("O.14"));
+
+ /* Attempt to status of a AID that does not exist */
+ smartCardAppID=_L8("NotFound");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScTerminate);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNotFound, CHP_APPS_CASE("O.15"));
+
+ smartCardAppID=_L8("NotFound");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNotFound, CHP_APPS_CASE("O.16"));
+
+ // Set fourth smart card app to active when already active
+ smartCardAppID=_L8("SCApp5");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.17"));
+
+ INFO_PRINTF1(_L("GetScFileInfo test"));
+ /* Attempt to get info on a file from an application that is not found */
+ RMobilePhone::TScFilePath filePath;
+ RMobilePhone::TScFileInfoV5 scFileInfo;
+ RMobilePhone::TScFileInfoV5Pckg scFileInfoPckg(scFileInfo);
+
+ filePath.iAID = _L8("App2");
+ filePath.iPath = _L8("7FFF6F3C");
+ iPhone.GetScFileInfo(reqStatus, filePath, scFileInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNotFound, CHP_APPS_CASE("O.18"));
+
+ /* Attempt to get info on a file from an application that has not started */
+ filePath.iAID = _L8("SCApp1");
+ filePath.iPath = _L8("7FFF6F3C");
+ iPhone.GetScFileInfo(reqStatus, filePath, scFileInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScApplicationNotActive, CHP_APPS_CASE("O.19"));
+
+ /* Attempt to get info on a file from an application that has been terminated */
+ smartCardAppID=_L8("SCApp3");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScTerminate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ filePath.iAID = _L8("SCApp3");
+ filePath.iPath = _L8("7FFF6F3C");
+ iPhone.GetScFileInfo(reqStatus, filePath, scFileInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScApplicationNotActive, CHP_APPS_CASE("O.20"));
+
+ smartCardAppID=_L8("SCApp4");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScTerminate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ smartCardAppID=_L8("SCApp5");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScTerminate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ /* Attempt to set SCApp5 to inactive when it already is inactive */
+ smartCardAppID=_L8("SCApp5");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScTerminate);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScApplicationNotActive, CHP_APPS_CASE("O.21"));
+
+ smartCardAppID=_L8("USimApp2");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScTerminate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ filePath.iAID = _L8("SCApp1");
+ filePath.iPath = _L8("7FFF6F3C");
+ smartCardAppID = _L8("SCApp1");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ /* Attempt to get info on a pre-configured Linear Fixed Record based file */
+ iPhone.GetScFileInfo(reqStatus, filePath, scFileInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.22"));
+ TESTL(scFileInfo.iFileID == (0x6F3C));
+ TESTL(scFileInfo.iNumberRecords == 2);
+ TESTL(scFileInfo.iRecordLength == 5);
+ TESTL(scFileInfo.iType == RMobilePhone::ELinearFixed);
+ TESTL(scFileInfo.iTotalLength == 10);
+
+ /* Attempt to get info on a pre-configured Cyclical Record based file, testing same filename
+ in different application */
+ filePath.iAID = _L8("SCApp2");
+ smartCardAppID = _L8("SCApp2");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ filePath.iAID = _L8("SCApp2");
+ iPhone.GetScFileInfo(reqStatus, filePath, scFileInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.23"));
+ TESTL(scFileInfo.iFileID == (0x6F3C));
+ TESTL(scFileInfo.iNumberRecords == 1);
+ TESTL(scFileInfo.iRecordLength == 5);
+ TESTL(scFileInfo.iType == RMobilePhone::ECyclic);
+ TESTL(scFileInfo.iTotalLength == 5);
+
+ /* Attempt to get info on a pre-configured Transparent Record based file, testing same filename
+ in different application */
+ smartCardAppID=_L8("SCApp4");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ filePath.iAID = _L8("SCApp4");
+ iPhone.GetScFileInfo(reqStatus, filePath, scFileInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.24"));
+ TESTL(scFileInfo.iFileID == (0x6F3C));
+ TESTL(scFileInfo.iNumberRecords == 0);
+ TESTL(scFileInfo.iRecordLength == 0);
+ TESTL(scFileInfo.iType == RMobilePhone::ETransparent);
+ TESTL(scFileInfo.iTotalLength == 10);
+
+ /* Simple interaction test with smart card not owned by application */
+ filePath.iAID = _L8("");
+ filePath.iPath = _L8("3FFF6F3C");
+ iPhone.GetScFileInfo(reqStatus, filePath, scFileInfoPckg);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.25"));
+ TESTL(scFileInfo.iFileID == (0x6F3C));
+ TESTL(scFileInfo.iNumberRecords == 1);
+ TESTL(scFileInfo.iRecordLength == 5);
+ TESTL(scFileInfo.iType == RMobilePhone::ELinearFixed);
+ TESTL(scFileInfo.iTotalLength == 5);
+
+ INFO_PRINTF1(_L("ReadSCFile test"));
+ /* Test ReadSCFile on Linear Fixed file with specified iAID, iPath first record */
+ RMobilePhone::TScFilePathWithAccessOffsets offsets;
+ TBuf8<25> readBuffer;
+ TBuf8<4> testBuffer; // buffer too small for a record
+
+ offsets.iAID = _L8("SCApp1");
+ offsets.iPath = _L8("7FFF6F3C");
+ offsets.iType = RMobilePhone::ELinearFixed;
+ offsets.iCount = 1; // number of records to read
+ offsets.iStartOffset = 1;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.26"));
+ TESTL(readBuffer == _L8("HELLO"));
+
+ /* Test ReadSCFile, second record */
+ offsets.iStartOffset = 2;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.27"));
+ TESTL(readBuffer == _L8("WORLD"));
+
+ /* Test ReadSCFile, out of range record */
+ offsets.iStartOffset = 0;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrMMEtelScRecordNotFound);
+
+ /* Test ReadSCFile, out of range record */
+ offsets.iStartOffset = 10;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScRecordNotFound, CHP_APPS_CASE("O.28"));
+
+ /* Test ReadSCFile, buffer too small */
+ offsets.iStartOffset = 1;
+ iPhone.ReadScFile(reqStatus, offsets, testBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrOverflow, CHP_APPS_CASE("O.29"));
+
+ /* Simple ReadScFile test with smart card not owned by application */
+ offsets.iAID = _L8("");
+ offsets.iPath = _L8("3FFF6F3C");
+ offsets.iCount = 1; // number of records to read
+ offsets.iStartOffset = 1;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.30"));
+ TESTL(readBuffer == _L8("HELLO"));
+
+ /* Test ReadSCFile on Cyclical file with specified iAID but without application active */
+ offsets.iAID = _L8("SCApp3");
+ offsets.iType = RMobilePhone::ECyclic;
+ offsets.iCount = 1; // number of records to read
+ offsets.iStartOffset = 1;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScApplicationNotActive, CHP_APPS_CASE("O.31"));
+
+ smartCardAppID=_L8("SCApp3");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ /* Test ReadSCFile, with incorrect path */
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScFileNotFound, CHP_APPS_CASE("O.32"));
+
+ /* Test ReadSCFile on Cyclical file with specified iAID, iPath last record written */
+ offsets.iPath = _L8("7FFF6F3C"); // set correct path
+
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.33"));
+ TESTL(readBuffer == _L8("WORLD"));
+
+ /* Test ReadSCFile, second record, actually oldest record */
+ offsets.iStartOffset = 2;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.34"));
+ TESTL(readBuffer == _L8("HELLO"));
+
+ /* Test ReadSCFile, out of range record */
+ offsets.iStartOffset = 0;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrMMEtelScRecordNotFound);
+
+ /* Test ReadSCFile, out of range record */
+ offsets.iStartOffset = 10;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScRecordNotFound, CHP_APPS_CASE("O.35"));
+
+ /* Test ReadSCFile, buffer too small */
+ offsets.iStartOffset = 1;
+ iPhone.ReadScFile(reqStatus, offsets, testBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrOverflow, CHP_APPS_CASE("O.36"));
+
+ /* Test ReadSCFile on Transparent file with specified iAID, iPath first 4 bytes */
+ offsets.iAID = _L8("SCApp4");
+ offsets.iType = RMobilePhone::ETransparent;
+ offsets.iCount = 4; // number of bytes to read
+ offsets.iStartOffset = 0;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.37"));
+ TESTL(readBuffer == _L8("HELL"));
+
+ /* Test ReadSCFile, 5 bytes in for 5 bytes */
+ offsets.iCount = 5; // number of bytes to read
+ offsets.iStartOffset = 5;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.38"));
+ TESTL(readBuffer == _L8("WORLD"));
+
+ /* Test ReadSCFile, buffer too small */
+ offsets.iStartOffset = 1;
+ iPhone.ReadScFile(reqStatus, offsets, testBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrOverflow, CHP_APPS_CASE("O.39"));
+
+ /* Test ReadSCFile, out of range record */
+ offsets.iStartOffset = 11;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScReferencedDataNotFound, CHP_APPS_CASE("O.40"));
+
+ /* Test ReadSCFile, 5 bytes in for 10 bytes, beyond end of file */
+ offsets.iCount = 10; // number of bytes to read
+ offsets.iStartOffset = 5;
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScEofReached, CHP_APPS_CASE("O.41"));
+
+ INFO_PRINTF1(_L("UpdateSCFile test"));
+ /* Test UpdateSCFile on Linear Fixed file with specified iAID, write first record */
+ TBuf8<25> writeBuffer;
+
+ /* Simple UpdateSCFile test with smart card not owned by application */
+ writeBuffer = _L8("EARTH");
+ offsets.iAID = _L8("");
+ offsets.iPath = _L8("3FFF6F3C");
+ offsets.iType = RMobilePhone::ELinearFixed;
+ offsets.iCount = 1; // number of records to read
+ offsets.iStartOffset = 1;
+ iPhone.UpdateScFile(reqStatus, offsets, writeBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrNone);
+
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.42"));
+ TESTL(readBuffer == _L8("EARTH"));
+
+ offsets.iAID = _L8("SCApp1");
+ offsets.iPath = _L8("7FFF6F3C");
+ offsets.iCount = 1; // number of records to write
+ offsets.iStartOffset = 1; // record number to write
+ writeBuffer = _L8("GOODB");
+
+ iPhone.UpdateScFile(reqStatus, offsets, writeBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrNone);
+
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.43"));
+ TESTL(readBuffer == _L8("GOODB"));
+
+ /* Test UpdateSCFile on Linear Fixed file with specified iAID, write 2nd record */
+ offsets.iStartOffset = 2; // record number to write
+ writeBuffer = _L8("EARTH");
+
+ iPhone.UpdateScFile(reqStatus, offsets, writeBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrNone);
+
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.44"));
+ TESTL(readBuffer == _L8("EARTH"));
+
+ /* Test UpdateSCFile, out of range record */
+ offsets.iStartOffset = 0;
+ iPhone.UpdateScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrMMEtelScRecordNotFound);
+
+ /* Test UpdateSCFile, out of range record */
+ offsets.iStartOffset = 10;
+ iPhone.UpdateScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScRecordNotFound, CHP_APPS_CASE("O.45"));
+
+ /* Test UpdateSCFile on Linear Fixed file, buffer too small */
+ offsets.iStartOffset = 1;
+ iPhone.UpdateScFile(reqStatus, offsets, testBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScWrongLength, CHP_APPS_CASE("O.46"));
+
+ /* Test UpdateSCFile on Cyclic file with specified iAID, write oldest record at 1st position */
+ offsets.iAID = _L8("SCApp3");
+ offsets.iType = RMobilePhone::ECyclic;
+ writeBuffer = _L8("GOODB");
+
+ iPhone.UpdateScFile(reqStatus, offsets, writeBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrNone);
+
+ offsets.iStartOffset = 1; // record number to read (lastest written record)
+
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.47"));
+ TESTL(readBuffer == _L8("GOODB"));
+
+ /* Test UpdateSCFile on Cyclic file with specified iAID, write oldest record, now at 2nd position */
+ writeBuffer = _L8("EARTH");
+
+ iPhone.UpdateScFile(reqStatus, offsets, writeBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrNone);
+
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.48"));
+ TESTL(readBuffer == _L8("EARTH"));
+
+ /* Test UpdateSCFile on Cyclic file with specified iAID, write oldest record, now at back at 1st position */
+ writeBuffer = _L8("HELLO");
+
+ iPhone.UpdateScFile(reqStatus, offsets, writeBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrNone);
+
+ offsets.iStartOffset = 2; // record number to read (oldest record)
+
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.49"));
+ TESTL(readBuffer == _L8("EARTH"));
+
+ /* Test UpdateSCFile on Cyclic file, buffer too small */
+ offsets.iStartOffset = 1;
+ iPhone.UpdateScFile(reqStatus, offsets, testBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScWrongLength, CHP_APPS_CASE("O.50"));
+
+ /* Test UpdateSCFile on Transparent file with specified iAID, write from beginning */
+ offsets.iAID = _L8("SCApp4");
+ offsets.iType = RMobilePhone::ETransparent;
+ writeBuffer = _L8("GOODB");
+ offsets.iCount = 5; // number of bytes to write
+ offsets.iStartOffset = 0; // From position 0
+
+ iPhone.UpdateScFile(reqStatus, offsets, writeBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrNone);
+
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.51"));
+ TESTL(readBuffer == _L8("GOODB"));
+
+ /* Test UpdateSCFile on Transparent file with specified iAID, write from half way through */
+ writeBuffer = _L8("EARTH");
+ offsets.iCount = 5; // number of bytes to write
+ offsets.iStartOffset = 5; // From position 0
+
+ iPhone.UpdateScFile(reqStatus, offsets, writeBuffer);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus == KErrNone);
+
+ offsets.iCount = 10; // number of bytes to write
+ offsets.iStartOffset = 0; // From position 0
+
+ iPhone.ReadScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrNone, CHP_APPS_CASE("O.52"));
+ TESTL(readBuffer == _L8("GOODBEARTH"));
+
+ /* Test UpdateSCFile, buffer too small */
+ offsets.iStartOffset = 1;
+ iPhone.UpdateScFile(reqStatus, offsets, testBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrArgument, CHP_APPS_CASE("O.53"));
+
+ /* Test UpdateSCFile, out of range record */
+ offsets.iStartOffset = 11;
+ iPhone.UpdateScFile(reqStatus, offsets, readBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScReferencedDataNotFound, CHP_APPS_CASE("O.54"));
+
+ /* Test UpdateSCFile, writing beyond range of file */
+ offsets.iStartOffset = 1;
+ offsets.iCount = 11; // number of bytes to write
+ iPhone.UpdateScFile(reqStatus, offsets, testBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrArgument, CHP_APPS_CASE("O.55"));
+
+ /* Test UpdateSCFile on Linear file with specified iAID but without application active */
+ smartCardAppID=_L8("SCApp1");
+ offsets.iAID = _L8("SCApp1");
+ offsets.iType = RMobilePhone::ELinearFixed;
+ offsets.iCount = 1; // number of records to write
+ offsets.iStartOffset = 1; // record number to write
+ writeBuffer = _L8("GOODB");
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScTerminate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ iPhone.UpdateScFile(reqStatus, offsets, writeBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScApplicationNotActive, CHP_APPS_CASE("O.56"));
+
+ iPhone.SetSmartCardApplicationStatus(reqStatus,smartCardAppID,RMobilePhone::EScApplicationActivate);
+ User::WaitForRequest(reqStatus);
+ TESTL(reqStatus==KErrNone);
+
+ /* Test UpdateSCFile, with incorrect path */
+ offsets.iPath = _L8("3FFF6F3C");
+ iPhone.UpdateScFile(reqStatus, offsets, writeBuffer);
+ User::WaitForRequest(reqStatus);
+ CHECKPOINT_EXL(reqStatus==KErrMMEtelScFileNotFound, CHP_APPS_CASE("O.57"));
+
+ iPhone.Close();
+ ASSERT(RThread().RequestCount()==0);
+
+ return TestStepResult();
+ }
+