--- a/telephonyserverplugins/simtsy/test/Te_Sim/Te_SimPhBkSmartCardTest.cpp Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/simtsy/test/Te_Sim/Te_SimPhBkSmartCardTest.cpp Thu May 06 15:10:38 2010 +0100
@@ -1,652 +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();
- }
-
+// 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();
+ }
+