--- a/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/ttesttoolstep.cpp Tue Jul 21 01:04:32 2009 +0100
+++ b/cryptoservices/filebasedcertificateandkeystores/test/ttesttools/ttesttoolstep.cpp Thu Sep 10 14:01:51 2009 +0300
@@ -1,932 +1,982 @@
-/*
-* Copyright (c) 2007-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:
-* test tool step implementation
-*
-*/
-
-
-
-
-/**
- @file
-*/
-
-
-#include <e32std.h>
-#include "ttesttoolstep.h"
-
-_LIT8(KLabel,"label");
-
-const TChar KCarriageReturn = '\r';
-const TChar KLineReturn = '\n';
-const TChar KDelemeter = ':';
-
-HBufC8* ParseOutputFileLC(const TPtrC& aFileName);
-TInt ReadWordL(const TDesC8& aBuffer, TInt& aPos, TPtrC8& aLine);
-void ConstuctExpectedArrayL(RPointerArray<HBufC>& aArray, const TDesC8& aBuffer,TBool aCheck, TBool aException = EFalse);
-void ResetAndDestroyHBufCList(TAny* aList);
-
-//
-// CTestToolListCertStep
-//
-
-CTestToolListCertStep::~CTestToolListCertStep()
- {
-
- }
-
-
-CTestToolListCertStep::CTestToolListCertStep()
- {
- // Call base class method to set up the human readable name for logging
- SetTestStepName(KTestToolListCertStep);
- }
-
-/**
- * Override of base class virtual. Prepares for the test run of Filetokens
- * @return TVerdict code
- */
-TVerdict CTestToolListCertStep::doTestStepPreambleL()
- {
- _LIT(KActualOutput, "actualoutput");
- GetStringFromConfig(ConfigSection(), KActualOutput, iActualOutput);
-
- // construct name of the cert
- if (GetStringFromConfig(ConfigSection(), KExpectedOwner, iExpectedOwner))
- {
- iOwnerExist = 1;
- }
- if (!GetIntFromConfig(ConfigSection(), KExpectedListStore, iListStoreExist))
- {
- iListStoreExist = 0;
- }
- if(!GetIntFromConfig(ConfigSection(), KStore, iExpectedStore))
- {
- iExpectedStore = -1;
- }
- if(!GetIntFromConfig(ConfigSection(), KExpectedNumLabel, iExpectedNumLabel))
- {
- iExpectedNumLabel = 1;
- }
- if (GetStringFromConfig(ConfigSection(), KExpectedLabel1, iExpectedLabel1))
- {
- iLabel1Exist = 1;
- }
- if (GetStringFromConfig(ConfigSection(), KExpectedLabel2, iExpectedLabel2))
- {
- iLabel2Exist = 1;
- }
- return TestStepResult();
- }
-
-/**
- * Override of base class pure virtual
- * Demonstrates reading configuration parameters from an ini file section
- * @return TVerdict code
- */
-TVerdict CTestToolListCertStep::doTestStepL()
- {
- if (TestStepResult() != EPass)
- {
- return TestStepResult();
- }
-
- CActiveScheduler* sched = NULL;
- sched = new (ELeave) CActiveScheduler;
- CleanupStack::PushL(sched);
- CActiveScheduler::Install(sched);
- CTestToolEngine* activeEngine = CTestToolEngine::NewLC();
-
- if (iLabel1Exist && !iLabel2Exist)
- {
- iVerdict = activeEngine->ListCerts(iExpectedLabel1, iExpectedNumLabel);
- }
- else if (iLabel2Exist && iLabel1Exist)
- {
- iVerdict = activeEngine->ListCerts(iExpectedLabel1, iExpectedLabel2, iExpectedNumLabel);
- }
- else
- {
- RPointerArray<HBufC> CertList;
- CleanupStack::PushL(TCleanupItem(ResetAndDestroyHBufCList, &CertList));
- HBufC8* fileContents = ParseOutputFileLC(iActualOutput);
- if (iListStoreExist)
- {
- _LIT8(KLabel1, "label:");
- TLex8 lex(*fileContents);
- while(!lex.Eos())
- {
- TPtrC8 token = lex.NextToken();
- if(token.CompareF(KLabel1) == KErrNone)
- {
- TInt offset = lex.Offset();
- TChar c = lex.Get();
- while(c != KCarriageReturn && c != KLineReturn)
- {
- c = lex.Get();
- }
- TInt end = lex.Offset();
- TPtrC8 newtoken;
- TInt tokenLen = end-offset-1;
- newtoken.Set(&fileContents->Des()[offset], tokenLen);
-
- HBufC* tmp = HBufC::NewLC(tokenLen);
- tmp->Des().Copy(newtoken);
- tmp->Des().Trim();
- CertList.Append(tmp);
- CleanupStack::Pop(tmp);
- }
- }
- CleanupStack::PopAndDestroy(fileContents);
- iVerdict = activeEngine->ListStore(CertList);
- }
- else
- {
- ConstuctExpectedArrayL(CertList, fileContents->Des(), ETrue);
- CleanupStack::PopAndDestroy(fileContents);
- if (iOwnerExist)
- {
- iVerdict = activeEngine->ListCerts(CertList, iExpectedOwner);
- }
- else if (iExpectedStore != -1)
- {
- iVerdict = activeEngine->ListCerts(CertList, iExpectedStore);
- }
- else
- {
- iVerdict = activeEngine->ListCerts(CertList);
- }
- }
- CleanupStack::PopAndDestroy(&CertList);
- }
-
-
- CleanupStack::PopAndDestroy(2, sched);
-
- if (iVerdict == EFail)
- {
- INFO_PRINTF1(_L("Exptected Certificate is not Exist"));
- }
- SetTestStepResult(iVerdict);
-
- return TestStepResult();
- }
-
-/**
- * Override of base class virtual
- * @return TVerdict code
- */
-TVerdict CTestToolListCertStep::doTestStepPostambleL()
- {
- CActiveScheduler::Install(NULL);
- return TestStepResult();
- }
-
-
-//
-// CTestToolGetTrustAppsStep
-//
-
-CTestToolGetTrustAppsStep::~CTestToolGetTrustAppsStep()
- {
- iApps.ResetAndDestroy();
- }
-
-
-CTestToolGetTrustAppsStep::CTestToolGetTrustAppsStep()
- {
- // Call base class method to set up the human readable name for logging
- SetTestStepName(KTestToolGetTrustAppsStep);
- }
-
-/**
- * Override of base class virtual. Prepares for the test run of Filetokens
- * @return TVerdict code
- */
-TVerdict CTestToolGetTrustAppsStep::doTestStepPreambleL()
- {
- _LIT(KNumApps, "numapps"); // this specifies how many commands to read
- _LIT(KAppsBase, "apps"); // + number (0-based) = file to check for
-
- if (!GetStringFromConfig(ConfigSection(), KExpectedLabel1, iExpectedLabel))
- {
- INFO_PRINTF1(_L("label name is missing"));
- SetTestStepResult(EFail);
- }
- TInt numApps = 0;
- if (GetIntFromConfig(ConfigSection(), KNumApps, numApps) && numApps!=0)
- {
- TPtrC appName;
- for (TInt i=0; i<numApps; i++)
- {
- // construct name of the key
- const TInt KKeyBufSize=64;
- TBuf<KKeyBufSize> keyBuf(KAppsBase);
- keyBuf.AppendNum(i);
-
- if (GetStringFromConfig(ConfigSection(), keyBuf, appName))
- {
- HBufC* apps = appName.AllocLC();
- iApps.AppendL(apps);
- CleanupStack::Pop(apps);
- }
- else
- {
- SetTestStepResult(EFail);
- // the string must exist, otherwise the config is invalid
- ERR_PRINTF2(_L("Missing apps name for key '%S'"), &keyBuf);
- }
- }
- }
- return TestStepResult();
- }
-
-/**
- * Override of base class pure virtual
- * Demonstrates reading configuration parameters from an ini file section
- * @return TVerdict code
- */
-TVerdict CTestToolGetTrustAppsStep::doTestStepL()
- {
- if (TestStepResult() != EPass)
- {
- return TestStepResult();
- }
-
- CActiveScheduler* sched = NULL;
- sched = new (ELeave) CActiveScheduler;
- CleanupStack::PushL(sched);
- CActiveScheduler::Install(sched);
- CTestToolEngine* activeEngine = CTestToolEngine::NewLC();
- iVerdict = activeEngine->CheckApps(iApps, iExpectedLabel);
-
- CleanupStack::PopAndDestroy(2, sched);
- if (iVerdict == EFail)
- {
- INFO_PRINTF1(_L("Certificate is not trusted for the applicaion"));
- }
- SetTestStepResult(iVerdict);
-
- return TestStepResult();
- }
-
-/**
- * Override of base class virtual
- * @return TVerdict code
- */
-TVerdict CTestToolGetTrustAppsStep::doTestStepPostambleL()
- {
- CActiveScheduler::Install(NULL);
- return TestStepResult();
- }
-
-//
-// CTestToolListKeyStep
-//
-
-CTestToolListKeyStep::~CTestToolListKeyStep()
- {
- }
-
-
-CTestToolListKeyStep::CTestToolListKeyStep()
- {
- // Call base class method to set up the human readable name for logging
- SetTestStepName(KTestToolListKeyStep);
- }
-
-/**
- * Override of base class virtual. Prepares for the test run of Filetokens
- * @return TVerdict code
- */
-TVerdict CTestToolListKeyStep::doTestStepPreambleL()
- {
- // construct name of the key
-
- GetStringFromConfig(ConfigSection(), KActualOutput, iActualOutput);
- if (!GetIntFromConfig(ConfigSection(), KExpectedListStore, iListStoreExist))
- {
- iListStoreExist = 0;
- }
- if(!GetIntFromConfig(ConfigSection(), KStore, iExpectedStore))
- {
- iExpectedStore = -1;
- }
- if(!GetIntFromConfig(ConfigSection(), KExpectedNumLabel, iExpectedNumLabel))
- {
- iExpectedNumLabel = 1;
- }
- if (GetStringFromConfig(ConfigSection(), KExpectedLabel1, iExpectedLabel1))
- {
- iLabel1Exist = 1;
- }
- if (GetStringFromConfig(ConfigSection(), KExpectedLabel2, iExpectedLabel2))
- {
- iLabel2Exist = 1;
- }
- return TestStepResult();
- }
-
-/**
- * Override of base class pure virtual
- * Demonstrates reading configuration parameters from an ini file section
- * @return TVerdict code
- */
-TVerdict CTestToolListKeyStep::doTestStepL()
- {
- if (TestStepResult() != EPass)
- {
- return TestStepResult();
- }
-
- CActiveScheduler* sched = NULL;
- sched = new (ELeave) CActiveScheduler;
- CleanupStack::PushL(sched);
- CActiveScheduler::Install(sched);
- CTestToolEngine* activeEngine = CTestToolEngine::NewLC();
- if (iLabel1Exist && !iLabel2Exist)
- {
- iVerdict = activeEngine->ListKeys(iExpectedLabel1, iExpectedNumLabel);
- }
- else if (iLabel2Exist && iLabel1Exist)
- {
- iVerdict = activeEngine->ListKeys(iExpectedLabel1, iExpectedLabel2, iExpectedNumLabel);
- }
- else
- {
- RPointerArray<HBufC> KeyList;
- CleanupStack::PushL(TCleanupItem(ResetAndDestroyHBufCList, &KeyList));
- HBufC8* fileContents = ParseOutputFileLC(iActualOutput);
- if (iListStoreExist)
- {
- _LIT8(KLabel1, "label:");
- TLex8 lex(*fileContents);
- while(!lex.Eos())
- {
- TPtrC8 token = lex.NextToken();
- if(token.CompareF(KLabel1) == KErrNone)
- {
- TInt offset = lex.Offset();
- TChar c = lex.Get();
- while(c != KCarriageReturn && c != KLineReturn)
- {
- c = lex.Get();
- }
- TInt end = lex.Offset();
- TPtrC8 newtoken;
- TInt tokenLen = end-offset-1;
- newtoken.Set(&fileContents->Des()[offset], tokenLen);
-
- HBufC* tmp = HBufC::NewLC(tokenLen);
- tmp->Des().Copy(newtoken);
- tmp->Des().Trim();
- KeyList.Append(tmp);
- CleanupStack::Pop(tmp);
- }
- }
- CleanupStack::PopAndDestroy(fileContents);
- iVerdict = activeEngine->ListStoreKey(KeyList);
- }
- else
- {
- ConstuctExpectedArrayL(KeyList, fileContents->Des(), EFalse);
- CleanupStack::PopAndDestroy(fileContents);
- if (iExpectedStore != -1)
- {
- iVerdict = activeEngine->ListKeys(KeyList, iExpectedStore);
- }
- else
- {
- iVerdict = activeEngine->ListKeys(KeyList);
- }
- }
- CleanupStack::PopAndDestroy(&KeyList);
- }
-
- CleanupStack::PopAndDestroy(2, sched);
-
- if (iVerdict == EFail)
- {
- INFO_PRINTF1(_L("Exptected Keys are not Exist"));
- }
- SetTestStepResult(iVerdict);
-
- return TestStepResult();
- }
-
-/**
- * Override of base class virtual
- * @return TVerdict code
- */
-TVerdict CTestToolListKeyStep::doTestStepPostambleL()
- {
- CActiveScheduler::Install(NULL);
- return TestStepResult();
- }
-
-
-//
-// CTestToolGetPolicyStep
-//
-
-CTestToolGetPolicyStep::~CTestToolGetPolicyStep()
- {
- }
-
-
-CTestToolGetPolicyStep::CTestToolGetPolicyStep()
- {
- // Call base class method to set up the human readable name for logging
- SetTestStepName(KTestToolGetPolicyStep);
- }
-
-/**
- * Override of base class virtual. Prepares for the test run of Filetokens
- * @return TVerdict code
- */
-TVerdict CTestToolGetPolicyStep::doTestStepPreambleL()
- {
- // construct name of the key
- if (GetStringFromConfig(ConfigSection(), KExpectedLabel1, iExpectedLabel))
- {
- iLabelExist = 1;
- }
- if (!GetStringFromConfig(ConfigSection(), KExpectedUser, iExpectedUser))
- {
- INFO_PRINTF1(_L("policy user name is missing"));
- SetTestStepResult(EFail);
- }
- if (!GetIntFromConfig(ConfigSection(), KExpectedUserExist, iExpectedUserExist))
- {
- iExpectedUserExist = 0;
- }
- return TestStepResult();
- }
-
-/**
- * Override of base class pure virtual
- * Demonstrates reading configuration parameters from an ini file section
- * @return TVerdict code
- */
-TVerdict CTestToolGetPolicyStep::doTestStepL()
- {
- if (TestStepResult() != EPass)
- {
- return TestStepResult();
- }
-
- CActiveScheduler* sched = NULL;
- sched = new (ELeave) CActiveScheduler;
- CleanupStack::PushL(sched);
- CActiveScheduler::Install(sched);
- CTestToolEngine* activeEngine = CTestToolEngine::NewLC();
- if (iLabelExist)
- {
- iVerdict = activeEngine->GetPolicy(iExpectedLabel, iExpectedUser, iExpectedUserExist);
- }
-
- CleanupStack::PopAndDestroy(2, sched);
- if (iVerdict == EFail)
- {
- INFO_PRINTF1(_L("Exptected Keys are not Exist"));
- }
- SetTestStepResult(iVerdict);
-
- return TestStepResult();
- }
-
-/**
- * Override of base class virtual
- * @return TVerdict code
- */
-TVerdict CTestToolGetPolicyStep::doTestStepPostambleL()
- {
- CActiveScheduler::Install(NULL);
- return TestStepResult();
- }
-
-
-
-//
-// CTestToolParseFileStep
-//
-
-CTestToolParseFileStep::~CTestToolParseFileStep()
- {
- iArgs.ResetAndDestroy();
- }
-
-
-CTestToolParseFileStep::CTestToolParseFileStep()
- {
- // Call base class method to set up the human readable name for logging
- SetTestStepName(KTestToolParseFileStep);
- }
-
-/**
- * Override of base class virtual. Prepares for the test run of Filetokens
- * @return TVerdict code
- */
-TVerdict CTestToolParseFileStep::doTestStepPreambleL()
- {
- _LIT(KNumLines, "numlines"); // this specifies how many commands to read
- _LIT(KLineBase, "line"); // + number (0-based) = file to check for
-
-
- TInt numlines = 0;
- if (GetIntFromConfig(ConfigSection(), KNumLines, numlines) && numlines!=0)
- {
- TPtrC lineContent;
- for (TInt i=0; i<numlines; i++)
- {
- // construct name of the key
- const TInt KKeyBufSize=64;
- TBuf<KKeyBufSize> keyBuf(KLineBase);
- keyBuf.AppendNum(i);
-
- if (GetStringFromConfig(ConfigSection(), keyBuf, lineContent))
- {
- HBufC* line = lineContent.AllocLC();
- line->Des().Trim();
- iArgs.AppendL(line);
- CleanupStack::Pop(line);
- }
- else
- {
- SetTestStepResult(EFail);
- // the string must exist, otherwise the config is invalid
- ERR_PRINTF2(_L("Missing apps name for key '%S'"), &keyBuf);
- }
- }
- }
- if (!GetStringFromConfig(ConfigSection(), KActualOutput, iActualOutput))
- {
- INFO_PRINTF1(_L("actual output filename is missing"));
- SetTestStepResult(EFail);
- }
- if (numlines == 0)
- {
- if (!GetStringFromConfig(ConfigSection(), KExpectedError, iExpectedError))
- {
- INFO_PRINTF1(_L("error value is missing"));
- SetTestStepResult(EFail);
- }
- }
- return TestStepResult();
- }
-
-/**
- * Override of base class pure virtual
- * Demonstrates reading configuration parameters from an ini file section
- * @return TVerdict code
- */
-TVerdict CTestToolParseFileStep::doTestStepL()
- {
- if (TestStepResult() != EPass)
- {
- return TestStepResult();
- }
- if (iArgs.Count() == 0)
- {
- HBufC8* fileContents = ParseOutputFileLC(iActualOutput);
- HBufC8* actualError = GetErrorFromOutputFileLC(*fileContents);
- if (actualError == NULL)
- {
- INFO_PRINTF1(_L("Failed to parse the output File"));
- SetTestStepResult(EFail);
- }
-
- HBufC* actual16 = HBufC::NewLC(actualError->Length());
- actual16->Des().Copy(*actualError);
-
- if (iExpectedError.CompareF(*actual16) != KErrNone)
- {
- INFO_PRINTF1(_L("Exptected Error is Different from Actual"));
- SetTestStepResult(EFail);
- }
- CleanupStack::PopAndDestroy(3, fileContents); //actual16, actualError, fileContents
- }
- else
- {
- HBufC8* fileContents = ParseOutputFileLC(iActualOutput);
- RPointerArray<HBufC> actualoutput;
- CleanupStack::PushL(TCleanupItem(ResetAndDestroyHBufCList, &actualoutput));
- ConstuctExpectedArrayL(actualoutput, fileContents->Des(), EFalse, ETrue);
- TBool result = EFalse;
- for (TInt i = 0; i < iArgs.Count(); i++)
- {
- result = EFalse;
- for (TInt j = 5; j < actualoutput.Count(); j++)
- {
- if (iArgs[i]->Des().CompareF(actualoutput[j]->Des()) == KErrNone)
- {
- result = ETrue;
- break;
- }
- }
- if (!result)
- {
- break;
- }
- }
- if (!result)
- {
- INFO_PRINTF1(_L("expected output and actual output is not matching"));
- SetTestStepResult(EFail);
- }
- CleanupStack::PopAndDestroy(2, fileContents); // fileContents ,actualoutput
- }
-
- return TestStepResult();
- }
-
-
-HBufC8* CTestToolParseFileStep::GetErrorFromOutputFileLC(const TDesC8& aBuffer)
- {
- _LIT8(KOutput, "output");
- TInt readPos = 0;
- TPtrC8 wordContents;
-
- HBufC8* wordBuf = NULL;
- while (!ReadWordL(aBuffer, readPos, wordContents))
- {
- wordBuf = wordContents.AllocLC();
- wordBuf->Des().Trim();
- if (wordBuf->Des().CompareF(KOutput) == KErrNone)
- {
- readPos+=1;
- if (!ReadWordL(aBuffer, readPos, wordContents))
- {
- CleanupStack::PopAndDestroy(wordBuf);
- wordBuf = wordContents.AllocLC();
- wordBuf->Des().Trim();
- break;
- }
- }
- CleanupStack::PopAndDestroy(wordBuf);
- }
- return wordBuf;
- }
-
-/**
- * Override of base class virtual
- * @return TVerdict code
- */
-TVerdict CTestToolParseFileStep::doTestStepPostambleL()
- {
- CActiveScheduler::Install(NULL);
- return TestStepResult();
- }
-
-
-
-//
-// global public methods
-//
-
-// Reads the words from the Buffer either ended with : or \n
-// if the word is "label", then read the next word and add to the array
-// if the word is not label read upto the end of the line then go to next loop
-// if exception is on , reads the entire line
-void ConstuctExpectedArrayL(RPointerArray<HBufC>& aArray, const TDesC8& aBuffer,TBool aCheck, TBool aException)
- {
- TInt readPos = 0;
- TPtrC8 wordContents;
-
- TInt bufferLength = aBuffer.Length();
- while (!ReadWordL(aBuffer, readPos, wordContents))
- {
- HBufC8* wordBuf = wordContents.AllocLC();
- wordBuf->Des().Trim();
- if (aException)
- {
- HBufC* currentLabel = HBufC::NewLC(wordBuf->Length());
- currentLabel->Des().Copy(*wordBuf);
- currentLabel->Des().Trim();
- aArray.AppendL(currentLabel);
- CleanupStack::Pop(currentLabel);
- }
- else if (wordBuf->Des().CompareF(KLabel) == KErrNone)
- {
- if (!ReadWordL(aBuffer, readPos, wordContents))
- {
- TPtrC8 word;
- TInt len = wordContents.Length();
- // aCheck is on for reading the certool output file,because the output will be like this
- // label: abc format:.... , so we need to exclude format
- if (aCheck) // certdetails
- {
- len = len - 6;
- }
- word.Set(wordContents.Ptr(), len);
- HBufC* currentLabel = HBufC::NewLC(word.Length());
- currentLabel->Des().Copy(word);
- currentLabel->Des().Trim();
- aArray.AppendL(currentLabel);
- CleanupStack::Pop(currentLabel);
- }
- else
- {
- break;
- }
- }
- else
- {
- readPos--;
- while (readPos < bufferLength)
- {
- TChar c = aBuffer[readPos];
-
- if (c == KCarriageReturn || c == KLineReturn)
- {
- readPos += 1;
- break;
- }
- readPos++;
- }
- }
- CleanupStack::PopAndDestroy(wordBuf);
- }
- }
-
-// Reads the output file and return into the buffer.
-HBufC8* ParseOutputFileLC(const TPtrC& aFileName)
- {
- RFs fs;
- RFile file;
- User::LeaveIfError(fs.Connect());
- CleanupClosePushL(fs);
- User::LeaveIfError(file.Open(fs, aFileName, EFileRead));
- CleanupClosePushL(file);
- TInt fSize;
- file.Size(fSize);
-
- HBufC8* fileContents = HBufC8::NewLC(fSize);
- TPtr8 ptr(fileContents->Des());
- ptr.SetLength(fSize);
-
- // create file stream and Read the content from the file
- RFileReadStream inputFileStream(file);
- CleanupClosePushL(inputFileStream);
- inputFileStream.ReadL(ptr, fSize);
- CleanupStack::PopAndDestroy(&inputFileStream);
- CleanupStack::Pop(fileContents);
- CleanupStack::PopAndDestroy(2, &fs);
- CleanupStack::PushL(fileContents);
-
- return fileContents;
- }
-
-// Reads the words from the aBuffer either ended with : or \n or \r
-TInt ReadWordL(const TDesC8& aBuffer, TInt& aPos, TPtrC8& aLine)
- {
- TBool endOfBuffer = EFalse;
-
- TInt bufferLength = aBuffer.Length();
- if ( aPos > bufferLength || aPos < 0 )
- {
- return ETrue; // End of buffer
- }
-
- TInt endPos = aPos;
- // find the position of the next delimeter
- endPos = aPos;
- while (endPos < bufferLength)
- {
- TChar c = aBuffer[endPos];
-
- if (c == KCarriageReturn || c == KLineReturn || c == KDelemeter)
- {
- // exception when comes like c:\filename
- if ((bufferLength > (endPos + 1)) && aBuffer[endPos+1] != '\\')
- {
- break;
- }
- }
- endPos++;
- }
-
- if (endPos != aPos)
- {
- TInt tokenLen = endPos - aPos;
- aLine.Set(&aBuffer[aPos], tokenLen);
- endPos += 1;
- }
- else if (endPos == bufferLength)
- {
- return ETrue; // End of buffer
- }
- else
- {
- endPos++;
- }
- aPos = endPos;
- return endOfBuffer;
- }
-
-
-void ResetAndDestroyHBufCList(TAny* aList)
- {
- RPointerArray<HBufC>* list = static_cast<RPointerArray<HBufC>*>(aList);
-
- list->ResetAndDestroy();
- list->Close();
- }
-
-
-
-
-
-
-
-
-
-//
-// CTestToolGetTrustStep
-//
-
-CTestToolGetTrustStep::~CTestToolGetTrustStep()
- {
-
- }
-
-
-CTestToolGetTrustStep::CTestToolGetTrustStep()
- {
- // Call base class method to set up the human readable name for logging
- SetTestStepName(KTestToolGetTrustStep);
- }
-
-/**
- * Override of base class virtual. Prepares for the test run of Filetokens
- * @return TVerdict code
- */
-TVerdict CTestToolGetTrustStep::doTestStepPreambleL()
- {
-
- if (!GetStringFromConfig(ConfigSection(), KExpectedLabel1, iExpectedLabel))
- {
- INFO_PRINTF1(_L("label name is missing"));
- SetTestStepResult(EFail);
- }
- if (!GetIntFromConfig(ConfigSection(), KExpectedTrust, iExpectedTrust))
- {
- INFO_PRINTF1(_L("Expected trust is missing"));
- SetTestStepResult(EFail);
- }
- return TestStepResult();
- }
-
-/**
- * Override of base class pure virtual
- * Demonstrates reading configuration parameters from an ini file section
- * @return TVerdict code
- */
-TVerdict CTestToolGetTrustStep::doTestStepL()
- {
- if (TestStepResult() != EPass)
- {
- return TestStepResult();
- }
-
- CActiveScheduler* sched = NULL;
- sched = new (ELeave) CActiveScheduler;
- CleanupStack::PushL(sched);
- CActiveScheduler::Install(sched);
- CTestToolEngine* activeEngine = CTestToolEngine::NewLC();
- iVerdict = activeEngine->CheckTrust(iExpectedLabel,iExpectedTrust);
- CleanupStack::PopAndDestroy(2, sched);
- if (iVerdict == EFail)
- {
- INFO_PRINTF1(_L("Certificate is not trusted for the applicaion"));
- }
- SetTestStepResult(iVerdict);
-
- return TestStepResult();
- }
-
-/**
- * Override of base class virtual
- * @return TVerdict code
- */
-TVerdict CTestToolGetTrustStep::doTestStepPostambleL()
- {
- CActiveScheduler::Install(NULL);
- return TestStepResult();
- }
-
-;
-
-// End of file
+/*
+* Copyright (c) 2007-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:
+* test tool step implementation
+*
+*/
+
+
+/**
+ @file
+*/
+
+
+#include <e32std.h>
+#include "ttesttoolstep.h"
+
+_LIT8(KLabel,"label");
+
+const TChar KCarriageReturn = '\r';
+const TChar KLineReturn = '\n';
+const TChar KDelemeter = ':';
+
+HBufC8* ParseOutputFileLC(const TPtrC& aFileName);
+TInt ReadWordL(const TDesC8& aBuffer, TInt& aPos, TPtrC8& aLine);
+void ConstuctExpectedArrayL(RPointerArray<HBufC>& aArray, const TDesC8& aBuffer,TBool aCheck, TBool aException = EFalse);
+void ResetAndDestroyHBufCList(TAny* aList);
+
+//
+// CTestToolListCertStep
+//
+
+CTestToolListCertStep::~CTestToolListCertStep()
+ {
+
+ }
+
+
+CTestToolListCertStep::CTestToolListCertStep()
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KTestToolListCertStep);
+ }
+
+/**
+ * Override of base class virtual. Prepares for the test run of Filetokens
+ * @return TVerdict code
+ */
+TVerdict CTestToolListCertStep::doTestStepPreambleL()
+ {
+ _LIT(KActualOutput, "actualoutput");
+ GetStringFromConfig(ConfigSection(), KActualOutput, iActualOutput);
+
+ // construct name of the cert
+ if (GetStringFromConfig(ConfigSection(), KExpectedOwner, iExpectedOwner))
+ {
+ iOwnerExist = 1;
+ }
+ if (!GetIntFromConfig(ConfigSection(), KExpectedListStore, iListStoreExist))
+ {
+ iListStoreExist = 0;
+ }
+ if(!GetIntFromConfig(ConfigSection(), KStore, iExpectedStore))
+ {
+ iExpectedStore = -1;
+ }
+ if(!GetIntFromConfig(ConfigSection(), KExpectedNumLabel, iExpectedNumLabel))
+ {
+ iExpectedNumLabel = 1;
+ }
+ if (GetStringFromConfig(ConfigSection(), KExpectedLabel1, iExpectedLabel1))
+ {
+ iLabel1Exist = 1;
+ }
+ if (GetStringFromConfig(ConfigSection(), KExpectedLabel2, iExpectedLabel2))
+ {
+ iLabel2Exist = 1;
+ }
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class pure virtual
+ * Demonstrates reading configuration parameters from an ini file section
+ * @return TVerdict code
+ */
+TVerdict CTestToolListCertStep::doTestStepL()
+ {
+ if (TestStepResult() != EPass)
+ {
+ return TestStepResult();
+ }
+
+ CActiveScheduler* sched = NULL;
+ sched = new (ELeave) CActiveScheduler;
+ CleanupStack::PushL(sched);
+ CActiveScheduler::Install(sched);
+ CTestToolEngine* activeEngine = CTestToolEngine::NewLC();
+
+ if (iLabel1Exist && !iLabel2Exist)
+ {
+ iVerdict = activeEngine->ListCerts(iExpectedLabel1, iExpectedNumLabel);
+ }
+ else if (iLabel2Exist && iLabel1Exist)
+ {
+ iVerdict = activeEngine->ListCerts(iExpectedLabel1, iExpectedLabel2, iExpectedNumLabel);
+ }
+ else
+ {
+ RPointerArray<HBufC> CertList;
+ CleanupStack::PushL(TCleanupItem(ResetAndDestroyHBufCList, &CertList));
+ HBufC8* fileContents = ParseOutputFileLC(iActualOutput);
+ if (iListStoreExist)
+ {
+ _LIT8(KLabel1, "label:");
+ TLex8 lex(*fileContents);
+ while(!lex.Eos())
+ {
+ TPtrC8 token = lex.NextToken();
+ if(token.CompareF(KLabel1) == KErrNone)
+ {
+ TInt offset = lex.Offset();
+ TChar c = lex.Get();
+ while(c != KCarriageReturn && c != KLineReturn)
+ {
+ c = lex.Get();
+ }
+ TInt end = lex.Offset();
+ TPtrC8 newtoken;
+ TInt tokenLen = end-offset-1;
+ newtoken.Set(&fileContents->Des()[offset], tokenLen);
+
+ HBufC* tmp = HBufC::NewLC(tokenLen);
+ tmp->Des().Copy(newtoken);
+ tmp->Des().Trim();
+ CertList.Append(tmp);
+ CleanupStack::Pop(tmp);
+ }
+ }
+ CleanupStack::PopAndDestroy(fileContents);
+ iVerdict = activeEngine->ListStore(CertList);
+ }
+ else
+ {
+ ConstuctExpectedArrayL(CertList, fileContents->Des(), ETrue);
+ CleanupStack::PopAndDestroy(fileContents);
+ if (iOwnerExist)
+ {
+ iVerdict = activeEngine->ListCerts(CertList, iExpectedOwner);
+ }
+ else if (iExpectedStore != -1)
+ {
+ iVerdict = activeEngine->ListCerts(CertList, iExpectedStore);
+ }
+ else
+ {
+ iVerdict = activeEngine->ListCerts(CertList);
+ }
+ }
+ CleanupStack::PopAndDestroy(&CertList);
+ }
+
+
+ CleanupStack::PopAndDestroy(2, sched);
+
+ if (iVerdict == EFail)
+ {
+ INFO_PRINTF1(_L("Expected Certificate does not Exist"));
+ }
+ SetTestStepResult(iVerdict);
+
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class virtual
+ * @return TVerdict code
+ */
+TVerdict CTestToolListCertStep::doTestStepPostambleL()
+ {
+ CActiveScheduler::Install(NULL);
+ return TestStepResult();
+ }
+
+
+//
+// CTestToolGetTrustAppsStep
+//
+
+CTestToolGetTrustAppsStep::~CTestToolGetTrustAppsStep()
+ {
+ iApps.ResetAndDestroy();
+ }
+
+
+CTestToolGetTrustAppsStep::CTestToolGetTrustAppsStep()
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KTestToolGetTrustAppsStep);
+ }
+
+/**
+ * Override of base class virtual. Prepares for the test run of Filetokens
+ * @return TVerdict code
+ */
+TVerdict CTestToolGetTrustAppsStep::doTestStepPreambleL()
+ {
+ _LIT(KNumApps, "numapps"); // this specifies how many commands to read
+ _LIT(KAppsBase, "apps"); // + number (0-based) = file to check for
+
+ if (!GetStringFromConfig(ConfigSection(), KExpectedLabel1, iExpectedLabel))
+ {
+ INFO_PRINTF1(_L("label name is missing"));
+ SetTestStepResult(EFail);
+ }
+ TInt numApps = 0;
+ if (GetIntFromConfig(ConfigSection(), KNumApps, numApps) && numApps!=0)
+ {
+ TPtrC appName;
+ for (TInt i=0; i<numApps; i++)
+ {
+ // construct name of the key
+ const TInt KKeyBufSize=64;
+ TBuf<KKeyBufSize> keyBuf(KAppsBase);
+ keyBuf.AppendNum(i);
+
+ if (GetStringFromConfig(ConfigSection(), keyBuf, appName))
+ {
+ HBufC* apps = appName.AllocLC();
+ iApps.AppendL(apps);
+ CleanupStack::Pop(apps);
+ }
+ else
+ {
+ SetTestStepResult(EFail);
+ // the string must exist, otherwise the config is invalid
+ ERR_PRINTF2(_L("Missing apps name for key '%S'"), &keyBuf);
+ }
+ }
+ }
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class pure virtual
+ * Demonstrates reading configuration parameters from an ini file section
+ * @return TVerdict code
+ */
+TVerdict CTestToolGetTrustAppsStep::doTestStepL()
+ {
+ if (TestStepResult() != EPass)
+ {
+ return TestStepResult();
+ }
+
+ CActiveScheduler* sched = NULL;
+ sched = new (ELeave) CActiveScheduler;
+ CleanupStack::PushL(sched);
+ CActiveScheduler::Install(sched);
+ CTestToolEngine* activeEngine = CTestToolEngine::NewLC();
+ iVerdict = activeEngine->CheckApps(iApps, iExpectedLabel);
+
+ CleanupStack::PopAndDestroy(2, sched);
+ if (iVerdict == EFail)
+ {
+ INFO_PRINTF1(_L("Certificate is not trusted for the applicaion"));
+ }
+ SetTestStepResult(iVerdict);
+
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class virtual
+ * @return TVerdict code
+ */
+TVerdict CTestToolGetTrustAppsStep::doTestStepPostambleL()
+ {
+ CActiveScheduler::Install(NULL);
+ return TestStepResult();
+ }
+
+//
+// CTestToolListKeyStep
+//
+
+CTestToolListKeyStep::~CTestToolListKeyStep()
+ {
+ }
+
+
+CTestToolListKeyStep::CTestToolListKeyStep()
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KTestToolListKeyStep);
+ }
+
+/**
+ * Override of base class virtual. Prepares for the test run of Filetokens
+ * @return TVerdict code
+ */
+TVerdict CTestToolListKeyStep::doTestStepPreambleL()
+ {
+ // construct name of the key
+
+ GetStringFromConfig(ConfigSection(), KActualOutput, iActualOutput);
+ if (!GetIntFromConfig(ConfigSection(), KExpectedListStore, iListStoreExist))
+ {
+ iListStoreExist = 0;
+ }
+ if(!GetIntFromConfig(ConfigSection(), KStore, iExpectedStore))
+ {
+ iExpectedStore = -1;
+ }
+ if(!GetIntFromConfig(ConfigSection(), KExpectedNumLabel, iExpectedNumLabel))
+ {
+ iExpectedNumLabel = 1;
+ }
+ if (GetStringFromConfig(ConfigSection(), KExpectedLabel1, iExpectedLabel1))
+ {
+ iLabel1Exist = 1;
+ }
+ if (GetStringFromConfig(ConfigSection(), KExpectedLabel2, iExpectedLabel2))
+ {
+ iLabel2Exist = 1;
+ }
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class pure virtual
+ * Demonstrates reading configuration parameters from an ini file section
+ * @return TVerdict code
+ */
+TVerdict CTestToolListKeyStep::doTestStepL()
+ {
+ if (TestStepResult() != EPass)
+ {
+ return TestStepResult();
+ }
+
+ CActiveScheduler* sched = NULL;
+ sched = new (ELeave) CActiveScheduler;
+ CleanupStack::PushL(sched);
+ CActiveScheduler::Install(sched);
+ CTestToolEngine* activeEngine = CTestToolEngine::NewLC();
+ if (iLabel1Exist && !iLabel2Exist)
+ {
+ iVerdict = activeEngine->ListKeys(iExpectedLabel1, iExpectedNumLabel);
+ }
+ else if (iLabel2Exist && iLabel1Exist)
+ {
+ iVerdict = activeEngine->ListKeys(iExpectedLabel1, iExpectedLabel2, iExpectedNumLabel);
+ }
+ else
+ {
+ RPointerArray<HBufC> KeyList;
+ CleanupStack::PushL(TCleanupItem(ResetAndDestroyHBufCList, &KeyList));
+ HBufC8* fileContents = ParseOutputFileLC(iActualOutput);
+ if (iListStoreExist)
+ {
+ _LIT8(KLabel1, "label:");
+ TLex8 lex(*fileContents);
+ while(!lex.Eos())
+ {
+ TPtrC8 token = lex.NextToken();
+ if(token.CompareF(KLabel1) == KErrNone)
+ {
+ TInt offset = lex.Offset();
+ TChar c = lex.Get();
+ while(c != KCarriageReturn && c != KLineReturn)
+ {
+ c = lex.Get();
+ }
+ TInt end = lex.Offset();
+ TPtrC8 newtoken;
+ TInt tokenLen = end-offset-1;
+ newtoken.Set(&fileContents->Des()[offset], tokenLen);
+
+ HBufC* tmp = HBufC::NewLC(tokenLen);
+ tmp->Des().Copy(newtoken);
+ tmp->Des().Trim();
+ KeyList.Append(tmp);
+ CleanupStack::Pop(tmp);
+ }
+ }
+ CleanupStack::PopAndDestroy(fileContents);
+ iVerdict = activeEngine->ListStoreKey(KeyList);
+ }
+ else
+ {
+ ConstuctExpectedArrayL(KeyList, fileContents->Des(), EFalse);
+ CleanupStack::PopAndDestroy(fileContents);
+ if (iExpectedStore != -1)
+ {
+ iVerdict = activeEngine->ListKeys(KeyList, iExpectedStore);
+ }
+ else
+ {
+ iVerdict = activeEngine->ListKeys(KeyList);
+ }
+ }
+ CleanupStack::PopAndDestroy(&KeyList);
+ }
+
+ CleanupStack::PopAndDestroy(2, sched);
+
+ if (iVerdict == EFail)
+ {
+ INFO_PRINTF1(_L("Expected Keys do not Exist"));
+ }
+ SetTestStepResult(iVerdict);
+
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class virtual
+ * @return TVerdict code
+ */
+TVerdict CTestToolListKeyStep::doTestStepPostambleL()
+ {
+ CActiveScheduler::Install(NULL);
+ return TestStepResult();
+ }
+
+
+//
+// CTestToolGetPolicyStep
+//
+
+CTestToolGetPolicyStep::~CTestToolGetPolicyStep()
+ {
+ }
+
+
+CTestToolGetPolicyStep::CTestToolGetPolicyStep()
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KTestToolGetPolicyStep);
+ }
+
+/**
+ * Override of base class virtual. Prepares for the test run of Filetokens
+ * @return TVerdict code
+ */
+TVerdict CTestToolGetPolicyStep::doTestStepPreambleL()
+ {
+ // construct name of the key
+ if (GetStringFromConfig(ConfigSection(), KExpectedLabel1, iExpectedLabel))
+ {
+ iLabelExist = 1;
+ }
+ if (!GetStringFromConfig(ConfigSection(), KExpectedUser, iExpectedUser))
+ {
+ INFO_PRINTF1(_L("policy user name is missing"));
+ SetTestStepResult(EFail);
+ }
+ if (!GetIntFromConfig(ConfigSection(), KExpectedUserExist, iExpectedUserExist))
+ {
+ iExpectedUserExist = 0;
+ }
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class pure virtual
+ * Demonstrates reading configuration parameters from an ini file section
+ * @return TVerdict code
+ */
+TVerdict CTestToolGetPolicyStep::doTestStepL()
+ {
+ if (TestStepResult() != EPass)
+ {
+ return TestStepResult();
+ }
+
+ CActiveScheduler* sched = NULL;
+ sched = new (ELeave) CActiveScheduler;
+ CleanupStack::PushL(sched);
+ CActiveScheduler::Install(sched);
+ CTestToolEngine* activeEngine = CTestToolEngine::NewLC();
+ if (iLabelExist)
+ {
+ iVerdict = activeEngine->GetPolicy(iExpectedLabel, iExpectedUser, iExpectedUserExist);
+ }
+
+ CleanupStack::PopAndDestroy(2, sched);
+ if (iVerdict == EFail)
+ {
+ INFO_PRINTF1(_L("Exptected Keys are not Exist"));
+ }
+ SetTestStepResult(iVerdict);
+
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class virtual
+ * @return TVerdict code
+ */
+TVerdict CTestToolGetPolicyStep::doTestStepPostambleL()
+ {
+ CActiveScheduler::Install(NULL);
+ return TestStepResult();
+ }
+
+
+
+//
+// CTestToolParseFileStep
+//
+
+CTestToolParseFileStep::~CTestToolParseFileStep()
+ {
+ iArgs.ResetAndDestroy();
+ }
+
+
+CTestToolParseFileStep::CTestToolParseFileStep()
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KTestToolParseFileStep);
+ }
+
+/**
+ * Override of base class virtual. Prepares for the test run of Filetokens
+ * @return TVerdict code
+ */
+TVerdict CTestToolParseFileStep::doTestStepPreambleL()
+ {
+ _LIT(KNumLines, "numlines"); // this specifies how many commands to read
+ _LIT(KLineBase, "line"); // + number (0-based) = file to check for
+
+
+ TInt numlines = 0;
+ if (GetIntFromConfig(ConfigSection(), KNumLines, numlines) && numlines!=0)
+ {
+ TPtrC lineContent;
+ for (TInt i=0; i<numlines; i++)
+ {
+ // construct name of the key
+ const TInt KKeyBufSize=64;
+ TBuf<KKeyBufSize> keyBuf(KLineBase);
+ keyBuf.AppendNum(i);
+
+ if (GetStringFromConfig(ConfigSection(), keyBuf, lineContent))
+ {
+ HBufC* line = lineContent.AllocLC();
+ line->Des().Trim();
+ iArgs.AppendL(line);
+ CleanupStack::Pop(line);
+ }
+ else
+ {
+ SetTestStepResult(EFail);
+ // the string must exist, otherwise the config is invalid
+ ERR_PRINTF2(_L("Missing apps name for key '%S'"), &keyBuf);
+ }
+ }
+ }
+ if (!GetStringFromConfig(ConfigSection(), KActualOutput, iActualOutput))
+ {
+ INFO_PRINTF1(_L("actual output filename is missing"));
+ SetTestStepResult(EFail);
+ }
+ if (numlines == 0)
+ {
+ if (!GetStringFromConfig(ConfigSection(), KExpectedError, iExpectedError))
+ {
+ INFO_PRINTF1(_L("error value is missing"));
+ SetTestStepResult(EFail);
+ }
+ }
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class pure virtual
+ * Demonstrates reading configuration parameters from an ini file section
+ * @return TVerdict code
+ */
+TVerdict CTestToolParseFileStep::doTestStepL()
+ {
+ if (TestStepResult() != EPass)
+ {
+ return TestStepResult();
+ }
+ if (iArgs.Count() == 0)
+ {
+ HBufC8* fileContents = ParseOutputFileLC(iActualOutput);
+ HBufC8* actualError = GetErrorFromOutputFileLC(*fileContents);
+ if (actualError == NULL)
+ {
+ INFO_PRINTF1(_L("Failed to parse the output File"));
+ SetTestStepResult(EFail);
+ }
+
+ HBufC* actual16 = HBufC::NewLC(actualError->Length());
+ actual16->Des().Copy(*actualError);
+
+ if (iExpectedError.CompareF(*actual16) != KErrNone)
+ {
+ INFO_PRINTF1(_L("Exptected Error is Different from Actual"));
+ SetTestStepResult(EFail);
+ }
+ CleanupStack::PopAndDestroy(3, fileContents); //actual16, actualError, fileContents
+ }
+ else
+ {
+ HBufC8* fileContents = ParseOutputFileLC(iActualOutput);
+ RPointerArray<HBufC> actualoutput;
+ CleanupStack::PushL(TCleanupItem(ResetAndDestroyHBufCList, &actualoutput));
+ ConstuctExpectedArrayL(actualoutput, fileContents->Des(), EFalse, ETrue);
+ TBool result = EFalse;
+ for (TInt i = 0; i < iArgs.Count(); i++)
+ {
+ result = EFalse;
+ for (TInt j = 5; j < actualoutput.Count(); j++)
+ {
+ if (iArgs[i]->Des().CompareF(actualoutput[j]->Des()) == KErrNone)
+ {
+ result = ETrue;
+ break;
+ }
+ }
+ if (!result)
+ {
+ break;
+ }
+ }
+ if (!result)
+ {
+ INFO_PRINTF1(_L("expected output and actual output is not matching"));
+ SetTestStepResult(EFail);
+ }
+ CleanupStack::PopAndDestroy(2, fileContents); // fileContents ,actualoutput
+ }
+
+ return TestStepResult();
+ }
+
+
+HBufC8* CTestToolParseFileStep::GetErrorFromOutputFileLC(const TDesC8& aBuffer)
+ {
+ _LIT8(KOutput, "output");
+ TInt readPos = 0;
+ TPtrC8 wordContents;
+
+ HBufC8* wordBuf = NULL;
+ while (!ReadWordL(aBuffer, readPos, wordContents))
+ {
+ wordBuf = wordContents.AllocLC();
+ wordBuf->Des().Trim();
+ if (wordBuf->Des().CompareF(KOutput) == KErrNone)
+ {
+ readPos+=1;
+ if (!ReadWordL(aBuffer, readPos, wordContents))
+ {
+ CleanupStack::PopAndDestroy(wordBuf);
+ wordBuf = wordContents.AllocLC();
+ wordBuf->Des().Trim();
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy(wordBuf);
+ }
+ return wordBuf;
+ }
+
+/**
+ * Override of base class virtual
+ * @return TVerdict code
+ */
+TVerdict CTestToolParseFileStep::doTestStepPostambleL()
+ {
+ CActiveScheduler::Install(NULL);
+ return TestStepResult();
+ }
+
+
+
+//
+// global public methods
+//
+
+// Reads the words from the Buffer either ended with : or \n
+// if the word is "label", then read the next word and add to the array
+// if the word is not label read upto the end of the line then go to next loop
+// if exception is on , reads the entire line
+void ConstuctExpectedArrayL(RPointerArray<HBufC>& aArray, const TDesC8& aBuffer,TBool aCheck, TBool aException)
+ {
+ TInt readPos = 0;
+ TPtrC8 wordContents;
+
+ TInt bufferLength = aBuffer.Length();
+ while (!ReadWordL(aBuffer, readPos, wordContents))
+ {
+ HBufC8* wordBuf = wordContents.AllocLC();
+ wordBuf->Des().Trim();
+ if (aException)
+ {
+ HBufC* currentLabel = HBufC::NewLC(wordBuf->Length());
+ currentLabel->Des().Copy(*wordBuf);
+ currentLabel->Des().Trim();
+ aArray.AppendL(currentLabel);
+ CleanupStack::Pop(currentLabel);
+ }
+ else if (wordBuf->Des().CompareF(KLabel) == KErrNone)
+ {
+ if (!ReadWordL(aBuffer, readPos, wordContents))
+ {
+ TPtrC8 word;
+ TInt len = wordContents.Length();
+ // aCheck is on for reading the certool output file,because the output will be like this
+ // label: abc format:.... , so we need to exclude format
+ if (aCheck) // certdetails
+ {
+ len = len - 6;
+ }
+ word.Set(wordContents.Ptr(), len);
+ HBufC* currentLabel = HBufC::NewLC(word.Length());
+ currentLabel->Des().Copy(word);
+ currentLabel->Des().Trim();
+ aArray.AppendL(currentLabel);
+ CleanupStack::Pop(currentLabel);
+ }
+ else
+ {
+ break;
+ }
+ }
+ else
+ {
+ readPos--;
+ while (readPos < bufferLength)
+ {
+ TChar c = aBuffer[readPos];
+
+ if (c == KCarriageReturn || c == KLineReturn)
+ {
+ readPos += 1;
+ break;
+ }
+ readPos++;
+ }
+ }
+ CleanupStack::PopAndDestroy(wordBuf);
+ }
+ }
+
+// Reads the output file and return into the buffer.
+HBufC8* ParseOutputFileLC(const TPtrC& aFileName)
+ {
+ RFs fs;
+ RFile file;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ User::LeaveIfError(file.Open(fs, aFileName, EFileRead));
+ CleanupClosePushL(file);
+ TInt fSize;
+ file.Size(fSize);
+
+ HBufC8* fileContents = HBufC8::NewLC(fSize);
+ TPtr8 ptr(fileContents->Des());
+ ptr.SetLength(fSize);
+
+ // create file stream and Read the content from the file
+ RFileReadStream inputFileStream(file);
+ CleanupClosePushL(inputFileStream);
+ inputFileStream.ReadL(ptr, fSize);
+ CleanupStack::PopAndDestroy(&inputFileStream);
+ CleanupStack::Pop(fileContents);
+ CleanupStack::PopAndDestroy(2, &fs);
+ CleanupStack::PushL(fileContents);
+
+ return fileContents;
+ }
+
+// Reads the words from the aBuffer either ended with : or \n or \r
+TInt ReadWordL(const TDesC8& aBuffer, TInt& aPos, TPtrC8& aLine)
+ {
+ TBool endOfBuffer = EFalse;
+
+ TInt bufferLength = aBuffer.Length();
+ if ( aPos > bufferLength || aPos < 0 )
+ {
+ return ETrue; // End of buffer
+ }
+
+ TInt endPos = aPos;
+ // find the position of the next delimeter
+ endPos = aPos;
+ while (endPos < bufferLength)
+ {
+ TChar c = aBuffer[endPos];
+
+ if (c == KCarriageReturn || c == KLineReturn || c == KDelemeter)
+ {
+ // exception when comes like c:\filename
+ if ((bufferLength > (endPos + 1)) && aBuffer[endPos+1] != '\\')
+ {
+ break;
+ }
+ }
+ endPos++;
+ }
+
+ if (endPos != aPos)
+ {
+ TInt tokenLen = endPos - aPos;
+ aLine.Set(&aBuffer[aPos], tokenLen);
+ endPos += 1;
+ }
+ else if (endPos == bufferLength)
+ {
+ return ETrue; // End of buffer
+ }
+ else
+ {
+ endPos++;
+ }
+ aPos = endPos;
+ return endOfBuffer;
+ }
+
+
+void ResetAndDestroyHBufCList(TAny* aList)
+ {
+ RPointerArray<HBufC>* list = static_cast<RPointerArray<HBufC>*>(aList);
+
+ list->ResetAndDestroy();
+ list->Close();
+ }
+
+
+
+
+
+
+
+
+
+//
+// CTestToolGetTrustStep
+//
+
+CTestToolGetTrustStep::~CTestToolGetTrustStep()
+ {
+
+ }
+
+
+CTestToolGetTrustStep::CTestToolGetTrustStep()
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KTestToolGetTrustStep);
+ }
+
+/**
+ * Override of base class virtual. Prepares for the test run of Filetokens
+ * @return TVerdict code
+ */
+TVerdict CTestToolGetTrustStep::doTestStepPreambleL()
+ {
+
+ if (!GetStringFromConfig(ConfigSection(), KExpectedLabel1, iExpectedLabel))
+ {
+ INFO_PRINTF1(_L("label name is missing"));
+ SetTestStepResult(EFail);
+ }
+ if (!GetIntFromConfig(ConfigSection(), KExpectedTrust, iExpectedTrust))
+ {
+ INFO_PRINTF1(_L("Expected trust is missing"));
+ SetTestStepResult(EFail);
+ }
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class pure virtual
+ * Demonstrates reading configuration parameters from an ini file section
+ * @return TVerdict code
+ */
+TVerdict CTestToolGetTrustStep::doTestStepL()
+ {
+ if (TestStepResult() != EPass)
+ {
+ return TestStepResult();
+ }
+
+ CActiveScheduler* sched = NULL;
+ sched = new (ELeave) CActiveScheduler;
+ CleanupStack::PushL(sched);
+ CActiveScheduler::Install(sched);
+ CTestToolEngine* activeEngine = CTestToolEngine::NewLC();
+ iVerdict = activeEngine->CheckTrust(iExpectedLabel,iExpectedTrust);
+ CleanupStack::PopAndDestroy(2, sched);
+ if (iVerdict == EFail)
+ {
+ INFO_PRINTF1(_L("Certificate is not trusted for the applicaion"));
+ }
+ SetTestStepResult(iVerdict);
+
+ return TestStepResult();
+ }
+
+/**
+ * Override of base class virtual
+ * @return TVerdict code
+ */
+TVerdict CTestToolGetTrustStep::doTestStepPostambleL()
+ {
+ CActiveScheduler::Install(NULL);
+ return TestStepResult();
+ }
+
+CTestToolCheckFileStep::CTestToolCheckFileStep()
+ {}
+
+CTestToolCheckFileStep::~CTestToolCheckFileStep()
+ {}
+
+TVerdict CTestToolCheckFileStep::doTestStepPreambleL()
+ {
+ if (!GetStringFromConfig(ConfigSection(), KFileName,iFileName))
+ {
+ INFO_PRINTF1(_L("file name is missing"));
+ SetTestStepResult(EFail);
+ }
+ if (!GetStringFromConfig(ConfigSection(), KCheckType,iCheckType))
+ {
+ INFO_PRINTF1(_L("chek type for file is missing"));
+ SetTestStepResult(EFail);
+ }
+ return TestStepResult();
+ }
+
+TVerdict CTestToolCheckFileStep::doTestStepPostambleL()
+ {
+ return TestStepResult();
+ }
+
+TVerdict CTestToolCheckFileStep::doTestStepL()
+ {
+ if (TestStepResult() != EPass)
+ {
+ return TestStepResult();
+ }
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ RFile file;
+ CleanupClosePushL(file);
+
+ TInt error = file.Open(fs,iFileName,EFileRead);
+ if( ( iCheckType.Compare(_L("present")) == 0 && error == KErrNone ) ||
+ ( iCheckType.Compare(_L("absent")) == 0 && error == KErrNotFound )
+ )
+ {
+ SetTestStepResult(EPass);
+ }
+ else
+ {
+ SetTestStepResult(EFail);
+ }
+
+ CleanupStack::PopAndDestroy(2,&fs); // file
+ return TestStepResult();
+ }
+// End of file