sysstatemgmt/systemstatereferenceplugins/test/tunitcustcmd/src/tcmd_step_simsecuritycheck.cpp
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysstatemgmt/systemstatereferenceplugins/test/tunitcustcmd/src/tcmd_step_simsecuritycheck.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,1067 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include "tcmd_step_simsecuritycheck.h"
+#include "ssmsecuritychecknotifier.h"
+#include "ssmuiproviderdll.h"
+#include "ssmcustomcmdfactory.h"
+#include <ssm/startupdomainpskeys.h>
+#include <e32event.h>
+#include <e32std.h>
+#include <s32file.h>
+
+//Swp policy file for sim status swp
+_LIT(KTestSimStatusSwpPolicy, "ssm.swp.policy.simstatus.dll");
+
+//Exe name which defines startup PS keys
+_LIT (KExeToDefineStartUpPS, "\\sys\\bin\\definestartupps.exe");
+
+//Exe name which defines emergency call PS keys
+_LIT (KExeToDefineEmergencyCallPS, "\\sys\\bin\\defineemergencycallps.exe");
+
+// Use to write the PIN Check Security test case nos.
+_LIT(KTestCmdSecurityCheckTestFile, "c:\\cmdsecuritychecktest\\pinchecksecuritycaseno.txt");
+
+static TInt CallBack2L(TAny* aCCustomCmdTestSecurityCheck);
+
+CCustomCmdTestSimSecurityCheck::~CCustomCmdTestSimSecurityCheck()
+	{
+	delete iAsyncStopScheduler;
+	delete iActiveSchedulerWait;
+	delete iActiveScheduler;
+	}
+
+CCustomCmdTestSimSecurityCheck::CCustomCmdTestSimSecurityCheck()
+	{
+	//Set test step name
+	SetTestStepName(KTCCustomCmdTestSimSecurityCheck);
+	}
+
+TVerdict CCustomCmdTestSimSecurityCheck::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("doTestStepPreambleL"));
+	//Create and install active scheduler
+	iActiveScheduler = new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install (iActiveScheduler);
+	iActiveSchedulerWait = new(ELeave) CActiveSchedulerWait;
+	
+	//Needed fro calling calback for stopping active scheduler
+	iAsyncStopScheduler = new(ELeave) CAsyncCallBack(CActive::EPriorityIdle);
+
+	RProcess processHandle;
+	CleanupClosePushL(processHandle);
+	//Start the test exe which defines startup related property keys
+	processHandle.Create(KExeToDefineStartUpPS, KNullDesC);
+	processHandle.Resume();
+	
+	// wait for the newly created process to rendezvous
+	TRequestStatus status;
+	processHandle.Rendezvous(status);
+	User::WaitForRequest(status);
+	
+	TInt retVal = status.Int();
+	TEST(KErrNone == retVal);
+	// leave if the process has not started properly
+	User::LeaveIfError(retVal);
+	CleanupStack::PopAndDestroy();
+	
+	//Start the test exe which defines emergency call related property keys
+	processHandle.Create(KExeToDefineEmergencyCallPS, KNullDesC);
+	processHandle.Resume();
+	processHandle.Close();
+	
+	RegisterSimSecurityStatus();
+	
+	//there are 8 different scenarios to test the custom command. Check the test spec for the scenarios.
+ 	//CMiscAdaptationRef::SecurityStateChange() has been changed to simulate the scenarios.
+ 	//CMiscAdaptationRef::SecurityStateChange() function uses pinchecksecuritycaseno.txt file to select the scenarios.
+ 	//This test case uses scenario 1 to test custom command.
+	_LIT(KDirNameOfTestCasesNumFile, "c:\\cmdsecuritychecktest\\");
+	
+	//connect to file server
+	User::LeaveIfError(iFs.Connect());
+	TInt err = iFs.MkDirAll(KDirNameOfTestCasesNumFile);
+	if (KErrAlreadyExists != err && KErrNone != err)
+		{
+		INFO_PRINTF1(_L("Leaving as it could not create directory"));
+		User::Leave(err);
+		}
+	RFile file;
+	CleanupClosePushL(file);
+	err = file.Replace(iFs, KTestCmdSecurityCheckTestFile, EFileWrite | EFileStream);
+	RFileWriteStream stream(file);
+	CleanupClosePushL(stream);
+   
+	stream.WriteInt32L(1);
+	stream.CommitL();
+	CleanupStack::PopAndDestroy(&stream);
+	CleanupStack::PopAndDestroy(&file);
+	
+	User::After(1000000);
+	//Create a security check cmd
+	iCustomCmdCheck = static_cast<CCustomCmdSimSecurityCheck*>(SsmCustomCmdFactory::CmdSimSecurityCheckNewL());
+	return CTestStep::doTestStepPreambleL();
+	}
+
+TVerdict CCustomCmdTestSimSecurityCheck::doTestStepPostambleL()
+	{
+	iFs.Delete(KTestCmdSecurityCheckTestFile);
+	iFs.Close();
+	return CTestStep::doTestStepPostambleL();
+	}
+
+// CCustomCmdTestSimSecurityCheck::RegisterSimSecurityStatus()
+// This method is used to define the SIM status proeprty with SSM's secure ID
+// and to map the SIM status PandS key with the SIM Status SWP policy
+void CCustomCmdTestSimSecurityCheck::RegisterSimSecurityStatus()
+    {
+    INFO_PRINTF1(_L("RegisterSimSecurityStatus"));
+    
+    _LIT_SECURITY_POLICY_PASS(KAllowAllPolicy);
+       
+    //Define the property for sim status for swp.
+    TInt ret = RProperty::Define(RProcess().SecureId(), CSsmUiSpecific::SimStatusPropertyKey(), RProperty::EInt,
+                                         KAllowAllPolicy, KAllowAllPolicy);
+    TEST(KErrNone == ret || KErrAlreadyExists == ret);
+    
+    //Connect to SsmStateManager
+    RSsmStateManager stateManager;
+    ret = stateManager.Connect();
+    TEST(KErrNone == ret);
+    const TUint KStartupSimSecurityStatusUid = CSsmUiSpecific::SimStatusPropertyKey();
+    
+    //register the swp mapping for Sim security status with its swp policy
+    ret = stateManager.RegisterSwpMapping(KStartupSimSecurityStatusUid, KTestSimStatusSwpPolicy);
+    TEST(KErrNone == ret || KErrAlreadyExists == ret);
+    stateManager.Close();
+    }
+
+/////////////////////////////////////////////////////////////////////////////////////
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0006
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+
+
+void CCustomCmdTestSimSecurityCheck::TestGeneralL()
+	{
+	//Testing some of the functions from ui specific dll.
+	const TUid KPSStartupUid = {0x2000E65E};
+	const TUid KSecurityPinNotifierUid = {0x2000E667};
+	
+	TUid uid1 = CSsmUiSpecific::StartupPSUid();
+	TEST(KPSStartupUid == uid1);
+
+	TUid uid2 = CSsmUiSpecific::SecurityPinNotifierUid();
+	TEST(KSecurityPinNotifierUid == uid2);
+	
+	TEST( CSsmUiSpecific::IsSimlessOfflineSupported() );
+	
+	TEST( CSsmUiSpecific::IsNormalBoot() );
+	
+	TEST( CSsmUiSpecific::IsSimChangedReset() );
+    
+	//Get the instance of ui specific dll
+	CSsmUiSpecific* ssmSecurityCustomCmdUid = CSsmUiSpecific::InstanceL();
+	
+	//Set the security status as passed
+	ssmSecurityCustomCmdUid->SetSecurityStatus(EStrtSecurityCheckPassed);
+	
+	//Get the security status
+	TStrtSecurityStatus sst = ssmSecurityCustomCmdUid->SecurityStatus();
+	
+	//Test the security status with EStrtSecurityCheckPassed which was set
+	TEST(EStrtSecurityCheckPassed == sst); 
+
+	//Delete created uispecific object
+	CSsmUiSpecific::Release();
+	}
+
+//
+static TInt CallBack1L(TAny* aCCustomCmdTestSimSecurityCheck)
+	{
+	//Call back function to stop active scheduler
+	CCustomCmdTestSimSecurityCheck* test = reinterpret_cast<CCustomCmdTestSimSecurityCheck*>(aCCustomCmdTestSimSecurityCheck);
+	test->CallBack1RunL();
+	return KErrNone;
+	}
+
+void CCustomCmdTestSimSecurityCheck::CallBack1RunL()
+	{
+	//Stop the active scheduler if the request is completed else
+	//callback once again
+	if(iRequest != KRequestPending)
+		{
+		iActiveSchedulerWait->AsyncStop();
+		}
+	else
+		{
+		iAsyncStopScheduler->CallBack();
+		}
+	}
+
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0007
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMPresentL()
+	{
+	TestHandleSIMPresent1L();
+	TestHandleSIMPresent2L();
+	TestHandleSIMPresent3L();
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMPresent1L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMPresent1L");
+	INFO_PRINTF1(KTESTLOG);
+
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EPUK1Required;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMPresent();
+
+	TCallBack stop(CallBack1L, this);
+	iAsyncStopScheduler->Set(stop);
+
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrGeneral == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMPresent2L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMPresent2L");
+	TInt result = RProperty::Set(CSsmUiSpecific::StartupPSUid(), CSsmUiSpecific::SimStatusPropertyKey(), ESimStatusUninitialized);
+	TEST(KErrNone == result);
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EYes;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMPresent();
+	TCallBack stop(CallBack2L, this);
+
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+#ifdef __WINS__	
+	TEST(KErrNone == iRequest.Int());
+#else
+	//Other tests which ran before this might have already loaded sus pluing (ssmclayersup.dll) which 
+	//will result in KErrAlreadyExists. This will happen only in armv5 as it runs 
+	//all the tests with out rebooting
+	TEST(KErrNone == iRequest.Int() || KErrAlreadyExists == iRequest.Int());
+#endif
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMPresent3L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMPresent3L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::ENo;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMPresent();
+
+	TCallBack stop(CallBack1L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+//
+
+/*
+Test Case ID            DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+*/
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMInvalidL()
+    {
+    TestHandleSIMInvalid1L();
+    TestHandleSIMInvalid2L();
+    TestHandleSIMInvalid3L();
+    }
+
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMInvalid1L()
+    {
+    _LIT(KTESTLOG, "TestHandleSIMInvalid1L");
+    INFO_PRINTF1(KTESTLOG);
+    iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EPUK1Required;
+    iRequest = KRequestPending;
+    iCustomCmdCheck->iExecuteRequest = &iRequest;
+    iCustomCmdCheck->HandleSIMInvalid();
+
+    TCallBack stop(CallBack2L, this);
+    iAsyncStopScheduler->Set(stop);
+    iAsyncStopScheduler->CallBack();
+    iActiveSchedulerWait->Start();
+    TEST(KErrGeneral == iRequest.Int());
+    }
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMInvalid2L()
+    {
+    _LIT(KTESTLOG, "TestHandleSIMInvalid2L");
+    INFO_PRINTF1(KTESTLOG);
+    iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EYes;
+    iRequest = KRequestPending;
+    iCustomCmdCheck->iExecuteRequest = &iRequest;
+    iCustomCmdCheck->HandleSIMInvalid();
+
+    TCallBack stop(CallBack2L, this);
+    iAsyncStopScheduler->Set(stop);
+    iAsyncStopScheduler->CallBack();
+    iActiveSchedulerWait->Start();
+    TEST(KErrNone == iRequest.Int());
+    }
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMInvalid3L()
+    {
+    _LIT(KTESTLOG, "TestHandleSIMInvalid3L");
+    INFO_PRINTF1(KTESTLOG);
+    iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::ENo;
+    iRequest = KRequestPending;
+    iCustomCmdCheck->iExecuteRequest = &iRequest;
+    iCustomCmdCheck->HandleSIMInvalid();
+
+    TCallBack stop(CallBack2L, this);
+    iAsyncStopScheduler->Set(stop);
+    iAsyncStopScheduler->CallBack();
+    iActiveSchedulerWait->Start();
+    TEST(KErrNone == iRequest.Int());
+    }
+
+//
+
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0008
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMRejectedL()
+	{
+	TestHandleSIMRejected1L();
+	TestHandleSIMRejected2L();
+	TestHandleSIMRejected3L();
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMRejected1L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMRejected1L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EPUK1Required;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMRejected();
+
+	TCallBack stop(CallBack1L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrGeneral == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMRejected2L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMRejected2L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EYes;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMRejected();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	//Security observer might have already been loaded so returning with KErrAlreadyExists
+	TEST(KErrNone == iRequest.Int());
+
+	TInt val;
+	//Get the startup PS value for sim security status
+	TInt result = RProperty::Get(iCustomCmdCheck->iStartupPSUid, KStartupSimSecurityStatus, val);
+	TEST(KErrNone == result);
+	
+	//Test the sim security status value
+	TEST(ESimRejected == val);
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMRejected3L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMRejected3L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::ENo;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMRejected();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+//
+static TInt CallBack2L(TAny* aCCustomCmdTestSimSecurityCheck)
+	{
+	CCustomCmdTestSimSecurityCheck* test = reinterpret_cast<CCustomCmdTestSimSecurityCheck*>(aCCustomCmdTestSimSecurityCheck);
+	test->CallBack2RunL();
+	return KErrNone;
+	}
+
+void CCustomCmdTestSimSecurityCheck::CallBack2RunL()
+	{
+	if(iRequest != KRequestPending)
+		{
+		iActiveSchedulerWait->AsyncStop();
+		}
+	else
+		{
+		iAsyncStopScheduler->CallBack();
+		
+		//Simulate entering the password only when it is asked for
+		if(iCustomCmdCheck->iState == StartupAdaptation::EAskPIN ||
+			iCustomCmdCheck->iState == StartupAdaptation::EAskPUK ||
+			iCustomCmdCheck->iState == StartupAdaptation::EAskSEC ||
+			iCustomCmdCheck->iState == StartupAdaptation::ESIMLock)
+			{
+			SimulatePasswordEntry();
+			}
+		}
+	}
+
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0009
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMBlockedL()
+	{
+	TestHandleSIMBlocked1L();
+	TestHandleSIMBlocked2L();
+	TestHandleSIMBlocked3L();
+	TestHandleSIMBlocked4L();
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMBlocked1L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMBlocked1L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EPUK1Required;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMBlocked();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMBlocked2L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMBlocked2L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EYes;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMBlocked();
+
+	TCallBack stop(CallBack1L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrGeneral == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMBlocked3L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMBlocked3L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::ENo;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMBlocked();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMBlocked4L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMBlocked4L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EUPUKRequired;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMBlocked();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+//
+
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0010
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePINRequiredL()
+	{
+	TestHandlePINRequired1L();
+	TestHandlePINRequired2L();
+	TestHandlePINRequired3L();
+	TestHandlePINRequired4L();
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePINRequired1L()
+	{
+	_LIT(KTESTLOG, "TestHandlePINRequired1L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EUPUKRequired;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandlePINRequired();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrGeneral == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePINRequired2L()
+	{
+	_LIT(KTESTLOG, "TestHandlePINRequired2L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EPIN1Required;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandlePINRequired();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePINRequired3L()
+	{
+	_LIT(KTESTLOG, "TestHandlePINRequired3L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EUPINRequired;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandlePINRequired();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePINRequired4L()
+	{
+	_LIT(KTESTLOG, "TestHandlePINRequired4L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::ENo;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandlePINRequired();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+//
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0012
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMLessOfflineSupportedL()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMLessOfflineSupportedL");
+	INFO_PRINTF1(KTESTLOG);
+	
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMLessOfflineSupported();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+//
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0013
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMLockL()
+	{
+	TestHandleSIMLock1L();
+	TestHandleSIMLock2L();
+	TestHandleSIMLock3L();
+	TestHandleSIMLock4L();
+	TestHandleSIMLock5L();
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMLock1L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMLock1L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EUPUKRequired;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMLock();
+
+	TCallBack stop(CallBack1L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrGeneral == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMLock2L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMLock2L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::ESimLockRestricted;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMLock();
+
+	TCallBack stop(CallBack1L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMLock3L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMLock3L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::ESimLockOk;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMLock();
+
+	TCallBack stop(CallBack1L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMLock4L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMLock4L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::ESimLockRestrictionOn;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMLock();
+
+	TCallBack stop(CallBack1L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandleSIMLock5L()
+	{
+	_LIT(KTESTLOG, "TestHandleSIMLock5L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::ESimLockRestrictionPending;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandleSIMLock();
+
+	TCallBack stop(CallBack1L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	}
+
+//
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0015
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePINAskedL()
+	{
+	TestHandlePINAsked1L();
+	TestHandlePINAsked2L();
+	TestHandlePINAsked3L();
+	TestHandlePINAsked4L();
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePINAsked1L()
+	{
+	_LIT(KTESTLOG, "TestHandlePINAsked1L");
+	INFO_PRINTF1(KTESTLOG);
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->iSsmSecurityCheckNotifier = CSsmSecurityCheckNotifier::NewL(ESecInfoSimLockRestrOn);
+	iCustomCmdCheck->HandlePINAsked();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrGeneral == iRequest.Int());
+
+	delete iCustomCmdCheck->iSsmSecurityCheckNotifier;
+	iCustomCmdCheck->iSsmSecurityCheckNotifier = NULL;
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePINAsked2L()
+	{
+	_LIT(KTESTLOG, "TestHandlePINAsked2L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iNoteType = ESecCodePIN1;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->iSsmSecurityCheckNotifier = CSsmSecurityCheckNotifier::NewL(ESecInfoSimLockRestrOn);
+	iCustomCmdCheck->ExecuteCancel();
+	iCustomCmdCheck->HandlePINAsked();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrCancel == iRequest.Int());
+
+	delete iCustomCmdCheck->iSsmSecurityCheckNotifier;
+	iCustomCmdCheck->iSsmSecurityCheckNotifier = NULL;
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePINAsked3L()
+	{
+	_LIT(KTESTLOG, "TestHandlePINAsked3L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iNoteType = ESecCodeUPIN;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->iStateChangePending = EFalse;
+	iCustomCmdCheck->iSsmSecurityCheckNotifier = CSsmSecurityCheckNotifier::NewL(ESecInfoSimLockRestrOn);
+	iCustomCmdCheck->Cancel();
+	iCustomCmdCheck->HandlePINAsked();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+
+	delete iCustomCmdCheck->iSsmSecurityCheckNotifier;
+	iCustomCmdCheck->iSsmSecurityCheckNotifier = NULL;
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePINAsked4L()
+	{
+	_LIT(KTESTLOG, "TestHandlePINAsked4L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iNoteType = ESecCodeSPC;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->iSsmSecurityCheckNotifier = CSsmSecurityCheckNotifier::NewL(ESecInfoSimLockRestrOn);
+	iCustomCmdCheck->Cancel();
+	iCustomCmdCheck->HandlePINAsked();
+	
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrGeneral == iRequest.Int());
+	delete iCustomCmdCheck->iSsmSecurityCheckNotifier;
+	iCustomCmdCheck->iSsmSecurityCheckNotifier = NULL;
+	}
+
+//
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0016
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+
+void CCustomCmdTestSimSecurityCheck::TestHandlePUKAskedL()
+	{
+	_LIT(KTESTLOG, "TestHandlePUKAskedL");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EUPUKRequired;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->iStateChangePending = EFalse;
+	iCustomCmdCheck->iSsmSecurityCheckNotifier = CSsmSecurityCheckNotifier::NewL(ESecInfoSimLockRestrOn);
+	iCustomCmdCheck->Cancel();
+	iCustomCmdCheck->HandlePUKAsked();
+
+	TCallBack stop(CallBack2L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+
+	TInt val;
+	TInt result = RProperty::Get(iCustomCmdCheck->iStartupPSUid, KStartupSimSecurityStatus, val);
+	TEST(KErrNone == result);
+	TEST(ESimRejected == val);
+	}
+//
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0018
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+
+void CCustomCmdTestSimSecurityCheck::TestSimFunctionsL()
+	{
+	_LIT(KTESTLOG, "TestSimFunctions");
+	INFO_PRINTF1(KTESTLOG);
+
+	TestSimNotSupported();
+	TestSimRemoved();
+	TestSimReadable();
+	TestSimUsable();
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestSimNotSupported()
+	{
+	//Cancel any request if they are active
+	iCustomCmdCheck->Cancel();
+
+	TInt result = RProperty::Set(CSsmUiSpecific::StartupPSUid(), CSsmUiSpecific::SimStatusPropertyKey(), ESimStatusUninitialized);
+	TEST(KErrNone == result);
+	iCustomCmdCheck->SimNotSupported();
+
+	//Wait for PS value to get updated
+	User::After(2000000);
+
+	TInt simResult;
+	result = RProperty::Get(CSsmUiSpecific::StartupPSUid(), CSsmUiSpecific::SimStatusPropertyKey(), simResult);
+	TEST(KErrNone == result);
+	TEST(simResult == ESimNotSupported);
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestSimRemoved()
+	{
+	//Cancel any request if they are active
+	iCustomCmdCheck->Cancel();
+
+	TInt result = RProperty::Set(CSsmUiSpecific::StartupPSUid(), CSsmUiSpecific::SimStatusPropertyKey(), ESimUsable);
+	TEST(KErrNone == result);
+	iCustomCmdCheck->SimRemoved();
+
+	//Wait for PS value to get updated
+	User::After(2000000);
+
+	TInt simResult;
+	result = RProperty::Get(CSsmUiSpecific::StartupPSUid(), CSsmUiSpecific::SimStatusPropertyKey(), simResult);
+	TEST(KErrNone == result);
+	TEST(simResult == ESimNotPresent);
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestSimReadable()
+	{
+	//Cancel any request if they are active
+	iCustomCmdCheck->Cancel();
+
+	TInt result = RProperty::Set(CSsmUiSpecific::StartupPSUid(), CSsmUiSpecific::SimStatusPropertyKey(), ESimNotPresent);
+	TEST(KErrNone == result);
+	iCustomCmdCheck->SimReadable();
+
+	//Wait for PS value to get updated
+	User::After(2000000);
+
+	TInt simResult;
+	result = RProperty::Get(CSsmUiSpecific::StartupPSUid(), CSsmUiSpecific::SimStatusPropertyKey(), simResult);
+	TEST(KErrNone == result);
+	TEST(simResult == ESimReadable);
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestSimUsable()
+	{
+	//Cancel any request if they are active
+	iCustomCmdCheck->Cancel();
+
+	TInt result = RProperty::Set(CSsmUiSpecific::StartupPSUid(), CSsmUiSpecific::SimStatusPropertyKey(), ESimReadable);
+	TEST(KErrNone == result);
+	iCustomCmdCheck->SimUsable();
+
+	//Wait for PS value to get updated
+	User::After(2000000);
+
+	TInt simResult;
+	result = RProperty::Get(CSsmUiSpecific::StartupPSUid(), CSsmUiSpecific::SimStatusPropertyKey(), simResult);
+	TEST(KErrNone == result);
+	TEST(simResult == ESimUsable);
+	}
+
+//
+static TInt CallBack3L(TAny* aCCustomCmdTestSimSecurityCheck)
+	{
+	CCustomCmdTestSimSecurityCheck* test = reinterpret_cast<CCustomCmdTestSimSecurityCheck*>(aCCustomCmdTestSimSecurityCheck);
+	test->CallBack3RunL();
+	return KErrNone;
+	}
+
+void CCustomCmdTestSimSecurityCheck::SimulatePasswordEntry()
+	{
+	TRawEvent eventDown;
+	TRawEvent eventUp;
+
+	//Simulate the key press ,(comma) in to pin notifier dialogue
+	eventDown.Set(TRawEvent::EKeyDown, EStdKeyComma);
+	UserSvr::AddEvent(eventDown);
+	eventUp.Set(TRawEvent::EKeyUp, EStdKeyComma);
+	UserSvr::AddEvent(eventUp);
+	User::After(100000);
+
+	eventDown.Set(TRawEvent::EKeyDown, EStdKeyEnter);
+	UserSvr::AddEvent(eventDown);
+	eventUp.Set(TRawEvent::EKeyUp, EStdKeyEnter);
+	UserSvr::AddEvent(eventUp);
+	User::After(100000);
+	}
+
+void CCustomCmdTestSimSecurityCheck::CallBack3RunL()
+	{
+	if(iRequest != KRequestPending)
+		{
+		iActiveSchedulerWait->AsyncStop();
+		}
+	else
+		{
+		iAsyncStopScheduler->CallBack();
+		if(iCustomCmdCheck->iState == StartupAdaptation::EAskPIN ||
+			iCustomCmdCheck->iState == StartupAdaptation::EAskPUK ||
+			iCustomCmdCheck->iState == StartupAdaptation::EAskSEC ||
+			iCustomCmdCheck->iState == StartupAdaptation::ESIMLock)
+			{
+			//Reset the security code status PS so that test goes further
+			TInt result = RProperty::Set(CSsmUiSpecific::StartupPSUid(), KStartupSecurityCodeQueryStatus, ESecurityQueryActive);
+			TEST(KErrNone == result);
+			SimulatePasswordEntry();
+			}
+		}
+	}
+
+/**
+Old Test CaseID 		APPFWK-CUSTCMD-0020
+New Test CaseID 		DEVSRVS-SSREFPLUGINS-CUSTCMD-0006
+ */
+
+void CCustomCmdTestSimSecurityCheck::TestSecurityNoteObserverL()
+	{
+	TestSecurityNoteObserver1L();
+	TestSecurityNoteObserver2L();
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestSecurityNoteObserver1L()
+	{
+	_LIT(KTESTLOG, "TestSecurityNoteObserver1L");
+	INFO_PRINTF1(KTESTLOG);
+	iCustomCmdCheck->iSecurityStateInfo = StartupAdaptation::EPIN1Required;
+	iRequest = KRequestPending;
+	iCustomCmdCheck->iExecuteRequest = &iRequest;
+	iCustomCmdCheck->HandlePINRequired();
+
+	TCallBack stop(CallBack3L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrNone == iRequest.Int());
+	TInt propertyValue;
+	TInt result = RProperty::Get(CSsmUiSpecific::StartupPSUid(), KPSSplashShutdown, propertyValue);
+	TEST(KErrNone == result);
+	TEST(propertyValue == ESplashShutdown);
+	}
+
+void CCustomCmdTestSimSecurityCheck::TestSecurityNoteObserver2L()
+	{
+	_LIT(KTESTLOG, "TestSecurityNoteObserver2L");
+	INFO_PRINTF1(KTESTLOG);
+	TBufC8<1> dummy;
+	iCustomCmdCheck->StartSecurityNoteObserverL();
+	iCustomCmdCheck->Execute(dummy, iRequest);
+	iCustomCmdCheck->ExecuteCancel();
+	iCustomCmdCheck->iStateChangePending = EFalse;
+	
+	TCallBack stop(CallBack3L, this);
+	iAsyncStopScheduler->Set(stop);
+	iAsyncStopScheduler->CallBack();
+	iActiveSchedulerWait->Start();
+	TEST(KErrCancel == iRequest.Int());
+	}
+
+//
+TVerdict CCustomCmdTestSimSecurityCheck::doTestStepL()
+	{
+	__UHEAP_MARK;
+	TestGeneralL();
+	TestHandleSIMPresentL();
+	TestHandleSIMInvalidL();
+	TestHandleSIMRejectedL();
+	TestHandleSIMBlockedL();
+	TestHandlePINRequiredL();
+	TestSecurityNoteObserverL();
+	TestHandleSIMLessOfflineSupportedL();
+	TestHandleSIMLockL();
+	TestHandlePINAskedL();
+	TestHandlePUKAskedL();
+	TestSimFunctionsL();
+
+	//Close the security check custom custom
+	iCustomCmdCheck->Close();
+
+	//Delete the security check custom custom
+	iCustomCmdCheck->Release();
+	__UHEAP_MARKEND;
+	return TestStepResult();
+	}