1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/security/cryptoservices/certificateandkeymgmt/tasn1/testbase.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,270 @@
1.4 +/*
1.5 +* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* under the terms of the License "Eclipse Public License v1.0"
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description:
1.18 +* Defines methods common to all test classes
1.19 +*
1.20 +*/
1.21 +
1.22 +
1.23 +#include <e32cons.h>
1.24 +#include "testbase.h"
1.25 +#include "t_input.h"
1.26 +
1.27 +_LIT(KParametersStart, "<parameters>");
1.28 +_LIT(KValuesStart, "<values>");
1.29 +_LIT(KRandomStart, "<random>");
1.30 +const TInt KMaxValuesSize = 1024;
1.31 +
1.32 +
1.33 +CTestBase::CTestBase(CASN1NormalTest &aASN1Action)
1.34 +: iASN1Action(aASN1Action)
1.35 + {
1.36 + }
1.37 +
1.38 +CTestBase::~CTestBase()
1.39 + {
1.40 + iParameters->Close();
1.41 + delete iParameters;
1.42 + iValues->ResetAndDestroy();
1.43 + delete iValues;
1.44 + };
1.45 +
1.46 +CTestAction::TScriptError CTestBase::ConstructL(const TTestActionSpec& aTestActionSpec)
1.47 + {
1.48 + CTestAction::TScriptError syntaxError;
1.49 + iParameters = new (ELeave)RArray<CTestParameter::TType>;
1.50 + iValues = new (ELeave)RPointerArray<CTestParameter>;
1.51 + FillParameterArray();
1.52 +
1.53 + HBufC* aBody = HBufC::NewLC(aTestActionSpec.iActionBody.Length());
1.54 +
1.55 + aBody->Des().Copy(aTestActionSpec.iActionBody);
1.56 + TPtrC parameters(Input::ParseElement(*aBody, KParametersStart));
1.57 +
1.58 + syntaxError = CheckValueParametersL(parameters);
1.59 + if(syntaxError==CTestAction::ENone)
1.60 + syntaxError = CheckRandomParametersL(parameters);
1.61 +
1.62 + CleanupStack::PopAndDestroy();
1.63 + return(syntaxError);
1.64 + }
1.65 +
1.66 +
1.67 +CTestAction::TScriptError CTestBase::CheckValueParametersL(const TDesC& aParameters)
1.68 + {
1.69 + TInt dummyPos = 0, valuePos = 0, lastDummy = 0;
1.70 + TBuf<KMaxValueSize> singleValue;
1.71 + CTestParameter *testParameter=0;
1.72 + TBuf<KMaxValuesSize> values;
1.73 +
1.74 + // finds values to run test with
1.75 + do
1.76 + {
1.77 + lastDummy = dummyPos;
1.78 + values = Input::ParseElement(aParameters, KValuesStart, dummyPos);
1.79 +
1.80 + // finds the next group of value
1.81 + if(lastDummy != dummyPos)
1.82 + {
1.83 + // parses each value in group with its expeced type
1.84 + for(TInt parameter = 0; parameter < iParameters->Count(); parameter++)
1.85 + {
1.86 + testParameter = NULL;
1.87 + // checks if its last parameter
1.88 + if(parameter < iParameters->Count() - 1)
1.89 + {
1.90 + // finds it position
1.91 + valuePos = values.Find((_L(",")));
1.92 + if(valuePos > 0)
1.93 + {
1.94 + // fills singleValue with value
1.95 + if(valuePos > KMaxValueSize)
1.96 + {
1.97 + iSyntaxErrorDescription.Copy(_L("value too long"));
1.98 + return(CTestAction::ESyntax);
1.99 + }
1.100 + singleValue.Copy(values.Left(valuePos));
1.101 + values = values.Mid(valuePos + 1);
1.102 + }
1.103 + else
1.104 + {
1.105 + // couldnt find it there is a problem
1.106 + iSyntaxErrorDescription.Copy(_L("Invalid number of parameters"));
1.107 + return(CTestAction::ESyntax);
1.108 + };
1.109 + }
1.110 + else
1.111 + {
1.112 + // its the last value fill singleValue with it
1.113 + if(values.Length() > KMaxValueSize)
1.114 + {
1.115 + iSyntaxErrorDescription.Copy(_L("value too long"));
1.116 + return(CTestAction::ESyntax);
1.117 + }
1.118 + singleValue.Copy(values);
1.119 + };
1.120 +
1.121 + // trims any white space
1.122 + singleValue.Trim();
1.123 + // checks what type its supposed to be
1.124 + switch((*iParameters)[parameter])
1.125 + {
1.126 + case CTestParameter::EInt:
1.127 + {
1.128 + // its an int, check to see if its a range
1.129 + if(singleValue.Find(_L("..")) == KErrNotFound)
1.130 + testParameter = CIntTestParameter::NewL(singleValue);
1.131 + else
1.132 + testParameter = CIntRangeTestParameter::NewL(singleValue);
1.133 + break;
1.134 + }
1.135 + case CTestParameter::EString:
1.136 + {
1.137 + // its a string
1.138 + testParameter = CStringTestParameter::NewL(singleValue);
1.139 + break;
1.140 + }
1.141 + case CTestParameter::EIntRange:
1.142 + case CTestParameter::ERandom:
1.143 + break; // Nothing to do
1.144 + };
1.145 + // if testparamer is found add it to the list
1.146 + if(testParameter)
1.147 + {
1.148 + if(testParameter->iValid)
1.149 + iValues->Append(testParameter);
1.150 + else
1.151 + {
1.152 + delete testParameter;
1.153 + iSyntaxErrorDescription.Copy(_L("Invalid value "));
1.154 + iSyntaxErrorDescription.Append(singleValue);
1.155 + return(CTestAction::ESyntax);
1.156 + }
1.157 + }
1.158 + };
1.159 + }
1.160 + }
1.161 + while(lastDummy != dummyPos);
1.162 +
1.163 + return(CTestAction::ENone);
1.164 + };
1.165 +
1.166 +CTestAction::TScriptError CTestBase::CheckRandomParametersL(const TDesC& aParameters)
1.167 + {
1.168 + TInt dummyPos = 0, lastDummy = 0;
1.169 + TBuf<KMaxValueSize> singleValue;
1.170 + CTestParameter *testParameter=0;
1.171 + TBuf<KMaxValuesSize> values;
1.172 +
1.173 + // finds any random tests
1.174 + do
1.175 + {
1.176 + lastDummy = dummyPos;
1.177 + values = Input::ParseElement(aParameters, KRandomStart, dummyPos);
1.178 +
1.179 + if(lastDummy != dummyPos)
1.180 + {
1.181 + if(values.Length() > KMaxValueSize)
1.182 + {
1.183 + iSyntaxErrorDescription.Copy(_L("value too long"));
1.184 + return(CTestAction::ESyntax);
1.185 + }
1.186 + singleValue.Copy(values);
1.187 + // found one create a random parameter with its interators
1.188 + testParameter = CRandomTestParameter::NewL(singleValue);
1.189 + // adds it to list
1.190 + if(testParameter)
1.191 + {
1.192 + if(testParameter->iValid)
1.193 + iValues->Append(testParameter);
1.194 + else
1.195 + {
1.196 + delete testParameter;
1.197 + iSyntaxErrorDescription.Copy(_L("Invalid value "));
1.198 + iSyntaxErrorDescription.Append(singleValue);
1.199 + return(CTestAction::ESyntax);
1.200 + }
1.201 + }
1.202 + }
1.203 + }
1.204 + while(lastDummy != dummyPos);
1.205 +
1.206 + return(CTestAction::ENone);
1.207 + };
1.208 +
1.209 +void CTestBase::OutputEncodingL(CConsoleBase& aConsole, TDesC8& aData)
1.210 + {
1.211 + aConsole.Printf(_L("Encoding: Length = "));
1.212 + TBuf<20> bits;
1.213 + bits.AppendNum(aData.Length());
1.214 + bits.Append(_L(", data = "));
1.215 + aConsole.Printf(bits);
1.216 +
1.217 + TInt size = aData.Length();
1.218 + for (TInt i = 0; i < size; ++i)
1.219 + {
1.220 + TBuf<10> tbuf;
1.221 + tbuf.AppendNumFixedWidth(aData[i], EHex, 2);
1.222 + aConsole.Printf(tbuf);
1.223 + }
1.224 +
1.225 + aConsole.Printf(_L("\n"));
1.226 + }
1.227 +
1.228 +TBool CTestBase::CountTests(TInt &totalTests)
1.229 + {
1.230 + CTestParameter* test;
1.231 + TInt totalRandomTests = 0;
1.232 + TInt totalParameters = 0;
1.233 + TInt totalRangeTests = 0;
1.234 +
1.235 + totalTests=0;
1.236 +
1.237 + // counts number of tests to do for type
1.238 + for(TInt pos = 0; pos < iValues->Count(); pos++)
1.239 + {
1.240 + test = (*iValues)[pos];
1.241 + switch(test->GetType())
1.242 + {
1.243 + case CTestParameter::EInt :
1.244 + case CTestParameter::EString :
1.245 + {
1.246 + totalTests++;
1.247 + totalParameters++;
1.248 + break;
1.249 + }
1.250 + case CTestParameter::EIntRange :
1.251 + {
1.252 + CIntRangeTestParameter *rangeInt = REINTERPRET_CAST(CIntRangeTestParameter*, test);
1.253 + totalRangeTests += rangeInt->Range();
1.254 + totalParameters++;
1.255 + break;
1.256 + }
1.257 + case CTestParameter::ERandom :
1.258 + {
1.259 + CRandomTestParameter *randomInt = REINTERPRET_CAST(CRandomTestParameter*, test);
1.260 +
1.261 + totalRandomTests+= randomInt->Interations();
1.262 + break;
1.263 + }
1.264 + };
1.265 + };
1.266 +
1.267 + // only count each test once, remember each test can only have one parameter field of
1.268 + // range or random
1.269 + totalTests = totalRandomTests + totalRangeTests + (totalParameters / iParameters->Count());
1.270 + // checks if tests correct number of parameters for type
1.271 + return((totalParameters % iParameters->Count()) == 0);
1.272 + };
1.273 +