diff -r 000000000000 -r bde4ae8d615e os/security/cryptoservices/filebasedcertificateandkeystores/test/tcertapps/t_certapps_actions.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/os/security/cryptoservices/filebasedcertificateandkeystores/test/tcertapps/t_certapps_actions.cpp Fri Jun 15 03:10:57 2012 +0200
@@ -0,0 +1,455 @@
+/*
+* 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:
+*
+*/
+
+
+/**
+ @file
+*/
+
+#include "t_certapps_actions.h"
+#include "t_certapps_defs.h"
+#include "t_input.h"
+#include "t_output.h"
+
+#include "certificateapps.h"
+
+/////////////////////////////////////////////////////////////////////////////////
+//CCertAppTestAction base class
+/////////////////////////////////////////////////////////////////////////////////
+
+// singleton instance of the manager
+CCertificateAppInfoManager* CCertAppTestAction::iAppManager = NULL;
+
+CCertAppTestAction::~CCertAppTestAction()
+ {
+ }
+
+
+CCertAppTestAction::CCertAppTestAction(RFs& aFs, CConsoleBase& aConsole,
+ Output& aOut)
+: CTestAction(aConsole, aOut), iFs(aFs)
+ {
+ }
+
+void CCertAppTestAction::ConstructL(const TTestActionSpec& aTestActionSpec)
+ {
+ CTestAction::ConstructL(aTestActionSpec);
+ TInt pos = 0, error = 0;
+ SetExpectedResult(ParseTagString(aTestActionSpec.iActionResult, KReturn, pos, error));
+ }
+
+void CCertAppTestAction::InitialiseL(TBool& /*aMemFailureFlag*/,
+ TBool& /*aCancel*/, TInt& /*aHeapMark*/, TInt& /*aHeapMarkEnd*/)
+ {
+ }
+
+TPtrC8 CCertAppTestAction::ParseTagString(const TDesC8& aBuf, const TDesC8& aTagName, TInt& aPos, TInt& aError)
+ {
+ // wrapper around the Input::ParseElement function. Processes aTagName
+ // and produces and used by ParseElement
+ TBuf8<64> start(0);
+ TBuf8<64> end(0);
+
+ start.Append('<');
+ start.Append(aTagName);
+ start.Append('>');
+
+ end.Append('<');
+ end.Append('/');
+ end.Append(aTagName);
+ end.Append('>');
+
+ return Input::ParseElement(aBuf, start, end, aPos, aError);
+ }
+
+TInt32 CCertAppTestAction::ParseTagInt(const TDesC8& aBuf, const TDesC8& aTagName, TInt& aPos, TInt& aError)
+ {
+ TPtrC8 ptr(ParseTagString(aBuf, aTagName, aPos, aError));
+
+ // Get an integer value out of it
+ TInt32 retVal = 0;
+ TLex8 lex(ptr);
+ lex.Val(retVal);
+ return retVal;
+ }
+
+
+void CCertAppTestAction::SetExpectedResult(const TDesC8& aResult)
+ {
+ if (aResult == _L8("KErrNone") || aResult == KNullDesC8)
+ {
+ iExpectedResult = KErrNone;
+ }
+ else if (aResult == _L8("KErrAccessDenied"))
+ {
+ iExpectedResult = KErrAccessDenied;
+ }
+ else if (aResult == _L8("KErrNotReady"))
+ {
+ iExpectedResult = KErrNotReady;
+ }
+ else if (aResult == _L8("KErrAlreadyExists"))
+ {
+ iExpectedResult = KErrAlreadyExists;
+ }
+ else if (aResult == _L8("KErrInUse"))
+ {
+ iExpectedResult = KErrInUse;
+ }
+ else if (aResult == _L8("KErrNotFound"))
+ {
+ iExpectedResult = KErrNotFound;
+ }
+ else if (aResult == _L8("KErrBadName"))
+ {
+ iExpectedResult = KErrBadName;
+ }
+ else if (aResult == _L8("KErrArgument"))
+ {
+ iExpectedResult = KErrArgument;
+ }
+ else if (aResult == _L8("KErrNotReady"))
+ {
+ iExpectedResult = KErrNotReady;
+ }
+ else if (aResult == _L8("KErrCorrupt"))
+ {
+ iExpectedResult = KErrCorrupt;
+ }
+ else if (aResult == _L8("KErrPermissionDenied"))
+ {
+ iExpectedResult = KErrPermissionDenied;
+ }
+ else
+ {
+ iOut.write(_L("Unrecognised error code: "));
+ iOut.writeString(aResult);
+ iOut.writeNewLine();
+ User::Leave(KErrArgument);
+ }
+ }
+
+void CCertAppTestAction::PerformAction(TRequestStatus& aStatus)
+ {
+ TInt err = KErrNone;
+ TRAP(err, DoPerformActionL());
+
+ if (err != KErrNoMemory)
+ {
+ iFinished = ETrue;
+ }
+
+ TRequestStatus* status = &aStatus;
+ User::RequestComplete(status, err);
+ }
+
+void CCertAppTestAction::DoPerformPrerequisite(TRequestStatus& aStatus)
+ {
+ TInt err = KErrNone;
+
+ // For all tests (with the exception of InitManager which overrides this
+ // method), we check to make sure that the AppManager is set
+ if (iAppManager)
+ {
+ iActionState = EAction;
+ }
+ else
+ {
+ iFinished = ETrue;
+ err = KErrNotFound;
+ }
+
+ TRequestStatus* status = &aStatus;
+ User::RequestComplete(status, err);
+ }
+
+void CCertAppTestAction::DoPerformPostrequisite(TRequestStatus& aStatus)
+ {
+ TRequestStatus* status = &aStatus;
+ User::RequestComplete(status, KErrNone);
+ }
+
+void CCertAppTestAction::PerformCancel()
+ {
+ }
+
+void CCertAppTestAction::Reset()
+ {
+ }
+
+void CCertAppTestAction::DoReportAction()
+ {
+ }
+
+void CCertAppTestAction::DoCheckResult(TInt aError)
+ {
+ iResult = (aError == iExpectedResult);
+ }
+
+
+/////////////////////////////////////////////////////////////////////////////////
+//CInitManager - initialises the singleton manager
+/////////////////////////////////////////////////////////////////////////////////
+CInitManager::CInitManager(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
+: CCertAppTestAction(aFs, aConsole, aOut)
+ {
+ }
+
+void CInitManager::DoPerformPrerequisite(TRequestStatus& aStatus)
+ {
+ TInt err = KErrNone;
+
+ // If it does not exist, then we are OK
+ if (!iAppManager)
+ {
+ iActionState = EAction;
+ }
+ else
+ {
+ iFinished = ETrue;
+ err = KErrAlreadyExists;
+ }
+
+ TRequestStatus* status = &aStatus;
+ User::RequestComplete(status, err);
+ }
+
+void CInitManager::DoPerformActionL()
+ {
+ iAppManager = CCertificateAppInfoManager::NewL();
+ }
+
+/////////////////////////////////////////////////////////////////////////////////
+//CDestroyManager - destroys the singleton manager
+/////////////////////////////////////////////////////////////////////////////////
+CDestroyManager::CDestroyManager(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
+: CCertAppTestAction(aFs, aConsole, aOut)
+ {
+ }
+
+void CDestroyManager::DoPerformActionL()
+ {
+ delete iAppManager;
+ iAppManager = NULL;
+ }
+
+
+/////////////////////////////////////////////////////////////////////////////////
+//CClearAllApps - removes all the applications from the app list
+/////////////////////////////////////////////////////////////////////////////////
+CClearAllApps::CClearAllApps(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
+: CCertAppTestAction(aFs, aConsole, aOut)
+ {
+ }
+
+void CClearAllApps::DoPerformActionL()
+ {
+ for (;;)
+ {
+ // apps is owned by the app manager, don't try accessing it after we've
+ // removed any of the applications though
+
+ RArray apps;
+ apps = iAppManager->Applications();
+ if (apps.Count() == 0)
+ {
+ break;
+ }
+ iAppManager->RemoveL(apps[0].Id());
+ }
+ }
+
+/////////////////////////////////////////////////////////////////////////////////
+//CAddApp - adds applications
+/////////////////////////////////////////////////////////////////////////////////
+CAddApp::CAddApp(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
+: CCertAppTestAction(aFs, aConsole, aOut)
+ {
+ }
+
+CAddApp::~CAddApp()
+ {
+ iAppArray.Close();
+ }
+
+void CAddApp::ConstructL(const TTestActionSpec& aTestActionSpec)
+ {
+ CCertAppTestAction::ConstructL(aTestActionSpec);
+ TInt pos = 0;
+ TInt err = KErrNone;
+
+ // Parse the UID and name for the new app
+ do
+ {
+ TUid uid(TUid::Uid(ParseTagInt(aTestActionSpec.iActionBody, KUid, pos, err)));
+ if (!err)
+ {
+ TName name;
+ name.Copy(ParseTagString(aTestActionSpec.iActionBody, KAppName, pos, err));
+ iAppArray.Append(TCertificateAppInfo(uid, name));
+ }
+ }
+ while (!err);
+ }
+
+void CAddApp::DoPerformActionL()
+ {
+ for (TInt i = 0; i < iAppArray.Count(); ++i)
+ {
+ iAppManager->AddL(iAppArray[i]);
+ }
+ }
+
+/////////////////////////////////////////////////////////////////////////////////
+//CRemoveApp - removes an application
+/////////////////////////////////////////////////////////////////////////////////
+CRemoveApp::CRemoveApp(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
+: CCertAppTestAction(aFs, aConsole, aOut)
+ {
+ }
+
+void CRemoveApp::ConstructL(const TTestActionSpec& aTestActionSpec)
+ {
+ CCertAppTestAction::ConstructL(aTestActionSpec);
+ TInt pos = 0;
+ TInt err = KErrNone;
+
+ // Parse the UID
+ iUid = TUid::Uid(ParseTagInt(aTestActionSpec.iActionBody, KUid, pos, err));
+ }
+
+void CRemoveApp::DoPerformActionL()
+ {
+ iAppManager->RemoveL(iUid);
+ }
+
+/////////////////////////////////////////////////////////////////////////////////
+//CAppCount - Gets the number of applications
+/////////////////////////////////////////////////////////////////////////////////
+CAppCount::CAppCount(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
+: CCertAppTestAction(aFs, aConsole, aOut)
+ {
+ }
+
+void CAppCount::ConstructL(const TTestActionSpec& aTestActionSpec)
+ {
+ CCertAppTestAction::ConstructL(aTestActionSpec);
+ TInt pos = 0;
+ TInt err = KErrNone;
+
+ // Parse the expected number of applications
+ iCount = ParseTagInt(aTestActionSpec.iActionBody, KCount, pos, err);
+ }
+
+void CAppCount::DoPerformActionL()
+ {
+ if (iCount != iAppManager->Applications().Count())
+ User::Leave(KErrArgument);
+ }
+
+/////////////////////////////////////////////////////////////////////////////////
+//CGetApp - Gets an application with a given ID
+/////////////////////////////////////////////////////////////////////////////////
+CGetApp::CGetApp(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
+: CCertAppTestAction(aFs, aConsole, aOut)
+ {
+ }
+
+void CGetApp::ConstructL(const TTestActionSpec& aTestActionSpec)
+ {
+ CCertAppTestAction::ConstructL(aTestActionSpec);
+ TInt pos = 0;
+ TInt err = KErrNone;
+
+ // Parse the UID to retrieve and the name to expect
+ iUid = TUid::Uid(ParseTagInt(aTestActionSpec.iActionBody, KUid, pos, err));
+ iName.Copy(ParseTagString(aTestActionSpec.iActionBody, KAppName, pos, err));
+ }
+
+void CGetApp::DoPerformActionL()
+ {
+ TCertificateAppInfo app;
+ TInt index;
+ app = iAppManager->ApplicationL(iUid, index);
+
+ if (app.Name() != iName)
+ User::Leave(KErrCorrupt);
+ }
+
+/////////////////////////////////////////////////////////////////////////////////
+//CGetApplications - Gets the applications and compares with what is expected
+/////////////////////////////////////////////////////////////////////////////////
+CGetApplications::CGetApplications(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
+: CCertAppTestAction(aFs, aConsole, aOut)
+ {
+ }
+
+CGetApplications::~CGetApplications()
+ {
+ iAppArray.Close();
+ }
+
+void CGetApplications::ConstructL(const TTestActionSpec& aTestActionSpec)
+ {
+ CCertAppTestAction::ConstructL(aTestActionSpec);
+ TInt pos = 0;
+ TInt err = KErrNone;
+
+ // Parse the UID and name for the new app
+ do
+ {
+ TUid uid(TUid::Uid(ParseTagInt(aTestActionSpec.iActionBody, KUid, pos, err)));
+ if (!err)
+ {
+ TName name;
+ name.Copy(ParseTagString(aTestActionSpec.iActionBody, KAppName, pos, err));
+ iAppArray.Append(TCertificateAppInfo(uid, name));
+ }
+ }
+ while (!err);
+ }
+
+void CGetApplications::DoPerformActionL()
+ {
+ const RArray& recArray = iAppManager->Applications();
+ TInt count = iAppArray.Count();
+
+ if (count != recArray.Count())
+ {
+ User::Leave(KErrArgument);
+ }
+
+ for (TInt i = 0 ; i < count ; ++i)
+ {
+ TInt j;
+ for (j = 0 ; j < count ; ++j)
+ {
+ if ((iAppArray[i].Id() == recArray[j].Id()) &&
+ (iAppArray[i].Name() == recArray[j].Name()))
+ {
+ break;
+ }
+ }
+
+ if (j == count)
+ {
+ // If we get to the end of recArray and there is no match then
+ // the arrays definitely do not match
+ User::Leave(KErrArgument);
+ }
+ }
+ }