diff -r 675a964f4eb5 -r 35751d3474b7 cryptomgmtlibs/securitytestfw/test/testhandler2/tScriptSetup.cpp --- 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 - -#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 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 + +#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 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; + }