diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserverplugins/simtsy/test/Te_Sim/Te_SimPhBkSmartCardTest.cpp --- 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(); + } +