cryptoservices/certificateandkeymgmt/tasn1/tasn1normaltest.cpp
changeset 0 2c201484c85f
child 8 35751d3474b7
--- /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, "<asn1test>");
+_LIT(KTypeStart, "<type>");
+_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()
+	{
+	}