diff -r 000000000000 -r 2c201484c85f cryptoservices/certificateandkeymgmt/tasn1/tasn1normaltest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptoservices/certificateandkeymgmt/tasn1/tasn1normaltest.cpp Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of 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: +* ASN1TestAction.cpp: implementation of the CASN1NormalTest class. +* +*/ + + + + +/** + @file +*/ + +#include "tasn1normaltest.h" +#include "testnull.h" +#include "testboolean.h" +#include "testint.h" +#include "testbigint.h" +#include "testoctetstr.h" +#include "testoid.h" +#include "testinvalidoid.h" +#include "testgeneralizedtime.h" +#include "testsequence.h" +#include "testexplicittag.h" +#include "testimplicittag.h" +#include "testoutput.h" +#include "testbitstr.h" +#include "t_input.h" + +////////////////////////////////////////////////////////////////////// +// Construction/Destruction +////////////////////////////////////////////////////////////////////// +TInt CASN1NormalTest::iReportCount = 1; + +_LIT(KASN1TestStart, ""); +_LIT(KTypeStart, ""); +_LIT(KIntType, "int"); +_LIT(KBigIntType, "bigint"); +_LIT(KBooleanType, "boolean"); +_LIT(KNullType, "null"); +_LIT(KExplicitTagType, "explicittag"); +_LIT(KImplicitTagType, "implicittag"); +_LIT(KGeneralizedTimeType, "generalizedtime"); +_LIT(KOctetStringType, "octetstring"); +_LIT(KObjectIDType, "objectid"); +_LIT(KInvaidObjectIDType, "invalidobjectid"); +_LIT(KSequenceType, "sequence"); +_LIT(KOutputType, "output"); +_LIT(KBitStrType, "bitstring"); + +CASN1NormalTest::~CASN1NormalTest() + { + delete iTestType; + } + +CASN1NormalTest::CASN1NormalTest(RFs& /*aFs*/, + CConsoleBase& aConsole, + Output& aOut) +: CTestAction(aConsole, aOut), iTestType(0), iPercentReported(-1), iReportNumber(iReportCount++) + { + } + +CTestAction* CASN1NormalTest::NewL(RFs& aFs, + CConsoleBase& aConsole, + Output& aOut, + const TTestActionSpec& aTestActionSpec) + { + CTestAction* self = CASN1NormalTest::NewLC(aFs, aConsole, + aOut, aTestActionSpec); + CleanupStack::Pop(self); + return self; + } + +CTestAction* CASN1NormalTest::NewLC(RFs& aFs, + CConsoleBase& aConsole, + Output& aOut, + const TTestActionSpec& aTestActionSpec) + { + CASN1NormalTest* self = new(ELeave) CASN1NormalTest(aFs, aConsole, aOut); + CleanupStack::PushL(self); + self->ConstructL(aTestActionSpec); + return self; + } + + +void CASN1NormalTest::ConstructL(const TTestActionSpec& aTestActionSpec) + { + CTestAction::ConstructL(aTestActionSpec); + HBufC* body = HBufC::NewLC(aTestActionSpec.iActionBody.Length()); + + body->Des().Copy(aTestActionSpec.iActionBody); + TPtrC rootCert = Input::ParseElement(*body, KASN1TestStart); + TPtrC iType = Input::ParseElement(rootCert, KTypeStart); + + // constucts correct class depending on string + if(iType.CompareF(KIntType)==0) + iTestType = CTestInt::NewL(*this); + else if(iType.CompareF(KBigIntType)==0) + iTestType = CTestBigInt::NewL(*this); + else if(iType.CompareF(KBooleanType)==0) + iTestType = CTestBoolean::NewL(*this); + else if(iType.CompareF(KNullType)==0) + iTestType = CTestNull::NewL(*this); + else if(iType.CompareF(KExplicitTagType)==0) + iTestType = CTestExplicitTag::NewL(*this); + else if(iType.CompareF(KImplicitTagType)==0) + iTestType = CTestImplicitTag::NewL(*this); + else if(iType.CompareF(KGeneralizedTimeType)==0) + iTestType = CTestGeneralizedTime::NewL(*this); + else if(iType.CompareF(KOctetStringType)==0) + iTestType = CTestOctetString::NewL(*this); + else if(iType.CompareF(KObjectIDType)==0) + iTestType = CTestOID::NewL(*this); + else if(iType.CompareF(KSequenceType)==0) + iTestType = CTestSequence::NewL(*this); + else if(iType.CompareF(KOutputType)==0) + iTestType = CTestOutput::NewL(*this); + else if(iType.CompareF(KBitStrType)==0) + iTestType = CTestBitStr::NewL(*this); + else if(iType.CompareF(KInvaidObjectIDType)==0) + iTestType = CTestInvalidOID::NewL(*this); + + if(iTestType) + SetScriptError(iTestType->ConstructL(aTestActionSpec), iTestType->iSyntaxErrorDescription); + + CleanupStack::PopAndDestroy(); // body + } + +void CASN1NormalTest::PerformAction(TRequestStatus& aStatus) + { + TRAPD(err, iResult = iTestType->PerformTestsL(iConsole)); + if (err==KErrNoMemory) + User::Leave(err); + else + { + iActionState = EPostrequisite; + TRequestStatus* status = &aStatus; + User::RequestComplete(status, err); + } + } + + +void CASN1NormalTest::ReportProgressL(const TInt aError, const TInt aCount, const TInt aMax) + { + if(aMax == 0) return; + TInt newPercentage = aCount * 100 / aMax; + + if (newPercentage > iPercentReported && iResult == 0) + { + iPercentReported = newPercentage; + + iConsole.Printf(_L(" %d"), iPercentReported); + + if (iPercentReported == 100) + { + iConsole.Write(_L("%")); + iConsole.Write(_L(" Completed:\n")); + CheckResult(aError); + iPercentReported = -1; + } + } + if(aError != 0) + { + iFinished = ETrue; + iResult = EFalse; + } + } + +void CASN1NormalTest::DoCheckResult(TInt aError) + { + if(aError == 0 && !iFinished) + { + iFinished = ETrue; + iResult = ETrue; + } + } + + +void CASN1NormalTest::DoReportAction() + { + HBufC *tmp = HBufC::NewMaxLC(iNameInfo->Length()); + + // converts name to unicode (if necessary) and dumps it out to screen + tmp->Des().Copy(*iNameInfo); + iConsole.Printf(_L("\n")); + iConsole.Printf(_L("Report %d - "), iReportNumber); + iConsole.Write(*tmp); + iConsole.Printf(_L("\n")); + + CleanupStack::PopAndDestroy(); // tmp + } + +TBool CASN1NormalTest::TestResult(TInt /*aError*/) + { + return 0; + } + +void CASN1NormalTest::PerformCancel() + { + } + +void CASN1NormalTest::Reset() + { + }