cryptomgmtlibs/securitytestfw/test/testhandler2/tScriptSetup.cpp
changeset 8 35751d3474b7
parent 0 2c201484c85f
child 77 956a80986d49
--- a/cryptomgmtlibs/securitytestfw/test/testhandler2/tScriptSetup.cpp	Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptomgmtlibs/securitytestfw/test/testhandler2/tScriptSetup.cpp	Thu Sep 10 14:01:51 2009 +0300
@@ -1,244 +1,318 @@
-/*
-* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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 "tScriptSetup.h"
-#include "tScriptTests.h"
-
-#include "t_testactionspec.h"
-#include "t_input.h"
-#include "t_certstoreactionmemfail.h"
-#include "tcancel.h"
-#include "t_sleep.h"
-#include "t_message.h"
-#include "t_output.h"
-#include "tTestSpec.h"
-
-#include <s32file.h>
-
-#include "t_logger.h"
-
-_LIT8(KStartMemFail, "startmemfailure");
-_LIT8(KStopMemFail, "stopmemfailure");
-_LIT8(KCancelStart, "startcancellation");
-_LIT8(KCancelStop, "stopcancellation");
-_LIT8(KMessage, "message");
-_LIT8(KSleep, "sleep");
-
-#include "t_policy.h"
-_LIT8(KPolicyTest, "policytest");
-
-EXPORT_C CScriptSetup* CScriptSetup::NewLC(CConsoleBase* aConsole)
-	{
-	CScriptSetup* self = new (ELeave) CScriptSetup(aConsole);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	return self;
-	}
-
-CScriptSetup::CScriptSetup(CConsoleBase* aConsole) : CTestSetup(aConsole)
-	{
-	}
-
-CScriptSetup::~CScriptSetup()
-	{
-	delete iTestInput;
-	}
-
-EXPORT_C void CScriptSetup::SetupTestsL(RFs& aFs,
-										CTestSpec& aTestSpec, 
-										TScriptTests theTestTypes[], 
-										const CTestHandlerSettings& aCommandLineSettings)
-	{
-	TInt pos = 0;
-	TInt err = KErrNone;
-	for (TInt i = 1 ; ; ++i)
-		{
-		TPtrC8 actionData = Input::ParseElement(*iTestInput, KActionStart, KActionEnd, pos, err);
-		if (err != KErrNone)
-			{
-			break;
-			}
-		
-		TInt relativePos = 0;
-		TInt scriptGroupings= DEFAULTGROUPING;
-		TTestActionSpec actionSpec;
-		//Parse the file to create action name, type , body and result
-		User::LeaveIfError(actionSpec.Init(actionData, relativePos, *iConsole, *iLogFile, scriptGroupings));
-			
-		//Start off checking Exhaustive and Smoke flags, then calls groupings
-		if (!CheckAllFlags(aCommandLineSettings, scriptGroupings))
-			//The current test should not be run
-			continue;
-	
-		CTestAction* newAction = 0;
-		TRAP(err, newAction = 
-			 CreateActionL(aFs, actionSpec, theTestTypes));
-				
-		if (err != KErrNone)
-			{
-			iLogFile->write(_L("CScriptSetup::CreateActionL failed: "));
-			iLogFile->writeError(err);		
-			iLogFile->writeNewLine();
-			
-			iLogFile->write(_L("Action name: "));
-			iLogFile->writeString(actionSpec.iActionName);				
-			iLogFile->writeNewLine();
-
-			iLogFile->write(_L("Action type: "));
-			iLogFile->writeString(actionSpec.iActionType);				
-			iLogFile->writeNewLine();
-			
-			iLogFile->write(_L("1 tests failed out of 1\r\n"));
-			
-			User::Leave(err);
-			}
-		
-		if(newAction->ScriptError() != CTestAction::ENone)
-			{
-			TBuf<KMaxErrorSize> scriptError;
-			newAction->ScriptError(scriptError);
-			
-			iLogFile->write(_L("Script error \"%S\" in test %s\r\n"), &scriptError, i);
-				
-			delete newAction;
-			User::Leave(KErrArgument);
-			}
-		
-		CleanupStack::PushL(newAction);
-		User::LeaveIfError(aTestSpec.AddNextTest(newAction));
-		CleanupStack::Pop(newAction);
-		}
-	}
-
-EXPORT_C TBool CScriptSetup::InitialiseL(RFs &aFs, const TDesC& aDefaultScript, const TDesC& aDefaultLog, TBool aUseCommandLine)
-	{
-	// gets the script file argument
-	HBufC* scriptFileName = NULL;
-
-	if (aUseCommandLine)
-		{
-		scriptFileName = GetArgument();
-		CleanupStack::PushL(scriptFileName);
-		if(scriptFileName->Length()==0)
-			{
-			CleanupStack::PopAndDestroy(scriptFileName);
-			scriptFileName = NULL;
-			}
-		}
-
-	if(scriptFileName == NULL)
-		{
-		if(aDefaultScript.Length() == 0)
-			{
-			PRINTANDLOG(_L("No script file specified on command line and no default given"));
-			return(EFalse);
-			}
-		else
-			{
-			scriptFileName = aDefaultScript.AllocLC();
-			}
-		};
-
-	PRINTANDLOG1(_L("Script file: %S"), scriptFileName);
-
-	// open the script file
-	RFile scriptFile;
-	TInt err = scriptFile.Open(aFs, *scriptFileName, EFileStream | EFileRead | EFileShareReadersOnly);
-	if (err != KErrNone)
-		{
-		PRINTANDLOG1(_L("Error opening script file: %d"), err);
-		CleanupStack::PopAndDestroy();// scriptFileName
-		return(EFalse);
-		}
-	CleanupClosePushL(scriptFile);
-	
-	TRAP(err, OpenLogFileL(aFs, 1, aDefaultLog, aUseCommandLine));	
-	if (err != KErrNone)
-		{
-		PRINTANDLOG1(_L("Error opening log file: %d"), err);		
-		CleanupStack::PopAndDestroy(2);// scripFile, scriptFileName
-		return(EFalse);
-		}
-		
-	// gets size of script file
-	TInt size;
-	scriptFile.Size(size);
-	CleanupStack::PopAndDestroy(); // scriptFile
-		
-	// reads script into iTestInput
-	iTestInput = HBufC8::NewL(size);
-	TPtr8 pInput(iTestInput->Des());
-	pInput.SetLength(size);
-
-	RFileReadStream stream;
-	User::LeaveIfError(stream.Open(aFs, *scriptFileName, EFileStream | EFileRead | EFileShareReadersOnly));
-	CleanupClosePushL(stream);
-	stream.ReadL(pInput, size);
-
-	CleanupStack::PopAndDestroy(2); // stream, scriptFileName
-	return(ETrue);
-	}
-
-EXPORT_C CTestAction* CScriptSetup::CreateActionL(RFs& aFs,
-												  const TTestActionSpec& aTestActionSpec,
-												  const TScriptTests theTestTypes[]) const
-	{
-	// Instantiate built in test actions
-	if (aTestActionSpec.iActionType == KStartMemFail)
-		{
-		return CMemFailStart::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
-		}
-	else if (aTestActionSpec.iActionType == KStopMemFail)
-		{
-		return CMemFailStop::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
-		}
-	else if (aTestActionSpec.iActionType == KCancelStart)
-		{
-		return CCancelStart::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
-		}
-	else if (aTestActionSpec.iActionType == KCancelStop)
-		{
-		return CCancelStop::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
-		}
-	else if (aTestActionSpec.iActionType == KMessage)
-		{
-		return CTestActionMessage::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
-		}
-	else if (aTestActionSpec.iActionType == KSleep)
-		{
-		return CSleep::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
-		}
-	else if (aTestActionSpec.iActionType == KPolicyTest)
-		{
-		return CPolicyTest::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
-		}
-
-	// Look through the array of tests in order to find the correct class to return
-	TInt loop=0;
-	while (theTestTypes[loop].action!=NULL)
-		{
-		if (aTestActionSpec.iActionType == theTestTypes[loop].name)
-			{
-			return theTestTypes[loop].action(aFs, *iTestConsole, *iLogFile, aTestActionSpec);
-			}
-		loop++;
-		}
-
-	User::Leave(KErrNotSupported);
-	return NULL;
-	}
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 "tScriptSetup.h"
+#include "tScriptTests.h"
+
+#include "t_testactionspec.h"
+#include "t_input.h"
+#include "t_tefinput.h"
+#include "t_certstoreactionmemfail.h"
+#include "tcancel.h"
+#include "t_sleep.h"
+#include "t_message.h"
+#include "t_output.h"
+#include "tTestSpec.h"
+
+#include <s32file.h>
+
+#include "t_logger.h"
+
+_LIT8(KStartMemFail, "startmemfailure");
+_LIT8(KStopMemFail, "stopmemfailure");
+_LIT8(KCancelStart, "startcancellation");
+_LIT8(KCancelStop, "stopcancellation");
+_LIT8(KMessage, "message");
+_LIT8(KSleep, "sleep");
+
+#include "t_policy.h"
+_LIT8(KPolicyTest, "policytest");
+
+EXPORT_C CScriptSetup* CScriptSetup::NewLC(CConsoleBase* aConsole)
+	{
+	CScriptSetup* self = new (ELeave) CScriptSetup(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CScriptSetup::CScriptSetup(CConsoleBase* aConsole) : CTestSetup(aConsole)
+	{
+	}
+
+EXPORT_C CScriptSetup::~CScriptSetup()
+	{
+	delete iTestInput;
+	delete iScriptPath;
+	}
+
+EXPORT_C void CScriptSetup::SetupTestsL(RFs& aFs,
+										CTestSpec& aTestSpec, 
+										TScriptTests theTestTypes[], 
+										const CTestHandlerSettings& aCommandLineSettings)
+	{
+	TInt pos = 0;
+	TInt err = KErrNone;
+	TBuf8<256> testCaseID;
+	TBuf8<256> prevtestCaseID;
+	TBuf8<512> scriptResult;
+	TBuf8<512> actionType;
+	TBool runtest = EFalse;
+	TBool iniFile = EFalse;
+	TBool startTest = EFalse;
+	TBool endTest = EFalse;
+	
+	for (TInt i = 1 ; ; ++i)
+		{
+		TPtrC8 runTestStep;
+		TPtrC8 testDescription;
+		TPtrC8 actionData;
+		
+		if (iTefScript)
+			{
+			
+			if(endTest)
+				{
+				startTest = EFalse;
+				runtest = EFalse;
+				testCaseID.Copy(Tefinput::ParseTestCaseID(*iTestInput, KStartTestStep, prevtestCaseID, pos, err, runtest, startTest));
+				prevtestCaseID.Copy(testCaseID);
+				}
+			if(runtest)
+				{
+				if(endTest && startTest)
+					{
+					startTest = ETrue;
+					}
+				else
+					{
+					startTest = EFalse;
+					}
+				endTest = EFalse;
+				testCaseID.Copy(prevtestCaseID);
+				}
+			else
+				{
+				testCaseID.Copy(Tefinput::ParseTestCaseID(*iTestInput, KStartTestStep, prevtestCaseID, pos, err, runtest, startTest));
+				prevtestCaseID.Copy(testCaseID);
+				}
+			runTestStep.Set(Tefinput::ParseRunTestStep(*iTestInput, KRunTestStep, pos, err));
+			endTest = Tefinput::EndTestCase(*iTestInput, runTestStep, KEndTestStep, pos);
+			}
+		else
+			{
+			actionData.Set(Input::ParseElement(*iTestInput, KActionStart, KActionEnd, pos, err));
+			}
+		if (err != KErrNone)
+		  	{
+			break;
+			} 
+			 
+		TInt relativePos = 0;
+		TInt scriptGroupings= DEFAULTGROUPING;
+		TTestActionSpec actionSpec;
+		//Parse the file to create action name, type , body and result
+		if (iTefScript)
+			{
+			User::LeaveIfError(actionSpec.TEFInit(aFs, runTestStep, testCaseID, prevtestCaseID, iTefScript, runtest, iniFile, scriptResult, actionType, *iScriptPath, *iConsole, *iLogFile));
+			}
+		else
+			{
+			User::LeaveIfError(actionSpec.Init(actionData, relativePos, *iConsole, *iLogFile, scriptGroupings));
+			}
+		
+		//Start off checking Exhaustive and Smoke flags, then calls groupings
+		if (!CheckAllFlags(aCommandLineSettings, scriptGroupings))
+			//The current test should not be run
+			continue;
+	
+		
+		CTestAction* newAction = 0;
+		TRAP(err, newAction = CreateActionL(aFs, actionSpec, theTestTypes));
+		
+	
+		
+
+		if (err != KErrNone)
+			{
+			iLogFile->write(_L("CScriptSetup::CreateActionL failed: "));
+			iLogFile->writeError(err);		
+			iLogFile->writeNewLine();
+			
+			iLogFile->write(_L("Action name: "));
+			iLogFile->writeString(actionSpec.iActionName);				
+			iLogFile->writeNewLine();
+
+			iLogFile->write(_L("Action type: "));
+			iLogFile->writeString(actionSpec.iActionType);				
+			iLogFile->writeNewLine();
+			
+			iLogFile->write(_L("1 tests failed out of 1\r\n"));
+			
+			User::Leave(err);
+			}
+		
+		if(newAction->ScriptError() != CTestAction::ENone)
+			{
+			TBuf<KMaxErrorSize> scriptError;
+			newAction->ScriptError(scriptError);
+			
+			iLogFile->write(_L("Script error \"%S\" in test %s\r\n"), &scriptError, i);
+				
+			delete newAction;
+			User::Leave(KErrArgument);
+			}
+		
+		CleanupStack::PushL(newAction);
+		User::LeaveIfError(aTestSpec.AddNextTest(newAction));
+		CleanupStack::Pop(newAction);
+	
+		if(iniFile)
+			{
+			CleanupStack::PopAndDestroy(1);
+			}
+		}
+	}
+
+EXPORT_C TBool CScriptSetup::InitialiseL(RFs &aFs, const TDesC& aDefaultScript, const TDesC& aDefaultLog, TBool aUseCommandLine)
+	{
+	// gets the script file argument
+	iScriptPath = NULL;
+	iTefScript = EFalse;
+
+	if (aUseCommandLine)
+		{
+		iScriptPath = GetArgument();
+		if(iScriptPath->Length()==0)
+			{
+			delete iScriptPath;  
+			iScriptPath = NULL;
+			}
+		else
+			{
+			TPtr scriptFileNameDes = iScriptPath->Des();
+			if (scriptFileNameDes.Right(7) == _L(".script"))
+				{
+				iTefScript = ETrue;
+				}
+			}
+		}
+
+	if(iScriptPath == NULL)
+		{
+		if(aDefaultScript.Length() == 0)
+			{
+			PRINTANDLOG(_L("No script file specified on command line and no default given"));
+			return(EFalse);
+			}
+		else
+			{
+			iScriptPath = aDefaultScript.AllocLC();
+			}
+		};
+
+	PRINTANDLOG1(_L("Script file: %S"), iScriptPath);
+
+	// open the script file
+	RFile scriptFile;
+	TInt err = scriptFile.Open(aFs, *iScriptPath, EFileStream | EFileRead | EFileShareReadersOnly);
+	if (err != KErrNone)
+		{
+		PRINTANDLOG1(_L("Error opening script file: %d"), err);
+		delete iScriptPath;
+		iScriptPath = NULL;
+		return(EFalse);
+		}
+	CleanupClosePushL(scriptFile);
+	
+	TRAP(err, OpenLogFileL(aFs, 1, aDefaultLog, aUseCommandLine));	
+	if (err != KErrNone)
+		{
+		PRINTANDLOG1(_L("Error opening log file: %d"), err);	
+		delete iScriptPath;
+		iScriptPath = NULL;
+		CleanupStack::PopAndDestroy(1);// scripFile
+		return(EFalse);
+		}
+		
+	// gets size of script file
+	TInt size;
+	scriptFile.Size(size);
+	CleanupStack::PopAndDestroy(); // scriptFile
+		
+	// reads script into iTestInput
+	iTestInput = HBufC8::NewL(size);
+	TPtr8 pInput(iTestInput->Des()); 
+	pInput.SetLength(size); 
+
+	RFileReadStream stream;
+	User::LeaveIfError(stream.Open(aFs, *iScriptPath, EFileStream | EFileRead | EFileShareReadersOnly));
+	CleanupClosePushL(stream);
+	stream.ReadL(pInput, size);
+	CleanupStack::PopAndDestroy(1); // stream
+	return(ETrue);
+	}
+
+EXPORT_C CTestAction* CScriptSetup::CreateActionL(RFs& aFs,
+												  const TTestActionSpec& aTestActionSpec,
+												  const TScriptTests theTestTypes[]) const
+	{
+	// Instantiate built in test actions
+	if (aTestActionSpec.iActionType == KStartMemFail)
+		{
+		return CMemFailStart::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
+		}
+	else if (aTestActionSpec.iActionType == KStopMemFail)
+		{
+		return CMemFailStop::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
+		}
+	else if (aTestActionSpec.iActionType == KCancelStart)
+		{
+		return CCancelStart::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
+		}
+	else if (aTestActionSpec.iActionType == KCancelStop)
+		{
+		return CCancelStop::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
+		}
+	else if (aTestActionSpec.iActionType == KMessage)
+		{
+		return CTestActionMessage::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
+		}
+	else if (aTestActionSpec.iActionType == KSleep)
+		{
+		return CSleep::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
+		}
+	else if (aTestActionSpec.iActionType == KPolicyTest)
+		{
+		return CPolicyTest::NewL(*iTestConsole, *iLogFile, aTestActionSpec);
+		}
+
+	// Look through the array of tests in order to find the correct class to return
+	TInt loop=0;
+	while (theTestTypes[loop].action!=NULL)
+		{
+		if (aTestActionSpec.iActionType == theTestTypes[loop].name)
+			{
+			return theTestTypes[loop].action(aFs, *iTestConsole, *iLogFile, aTestActionSpec);
+			}
+		loop++;
+		}
+
+	User::Leave(KErrNotSupported);
+	return NULL;
+	}