--- a/authenticationservices/authenticationserver/test/tAuthSvr/src/step_oom.cpp Thu Aug 19 11:18:56 2010 +0530
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,861 +0,0 @@
-/*
-* Copyright (c) 2008-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:
-*
-*/
-
-
-#include "tAuthSvrStep.h"
-
-#include "authserver/authclient.h"
-#include "authserver/authmgrclient.h"
-#include "authrepository.h"
-#include <scs/cleanuputils.h>
-
-using namespace AuthServer;
-class CAuthOomActive : public CActive
- {
- public:
- CAuthOomActive(RAuthMgrClient& aClient, CAuthExpression* aExpression,
- TInt aFresh, TBool aClientSpecific, TBool aAuthViaAlias, const TDesC& aClientMessage, TBool aStop = ETrue) :
- CActive(EPriorityNormal),
- iClient(aClient),
- iResult(EFail),
- iRunCount(0),
- iAe(aExpression),
- iStop(aStop),
- iFresh(aFresh),
- iIdToStore(0),
- iClientSpecific(aClientSpecific),
- iAuthViaAlias(aAuthViaAlias),
- iClientMessage(aClientMessage)
- {
- CActiveScheduler::Add(this);
- }
-
- void doAuth()
- {
- SetActive();
- TRequestStatus* status = &iStatus;
- User::RequestComplete(status, KErrNone);
- iRunCount = 0;
- }
- void DoCancel()
- {
- }
-
- TInt RunError(TInt aError)
- {
- TRequestStatus* status = &iStatus;
- if(iStatus.Int() == KErrNoMemory)
- {
- CActiveScheduler::Stop();
- User::Leave(aError);
-
- }
- else if (iStatus == KRequestPending)
- {
- User::RequestComplete(status, aError);
- CActiveScheduler::Stop();
- User::Leave(aError);
- }
-
- CActiveScheduler::Stop();
- if(aError == KErrNoMemory)
- {
- User::Leave(aError);
- }
- return KErrNone;
- }
-
- void RunL()
- {
- iErr = iStatus.Int();
- TUid val = TUid::Uid(0);
- switch (iRunCount)
- {
- case 0:
- {
- iId = 0;
-
- TUid uid = TUid::Uid(0);
-
-
- iClient.AuthenticateL(*iAe, iFresh, iClientSpecific, val, EFalse, iClientMessage, iId, iStatus);
-
- SetActive();
-
- break;
- }
-
- case 1:
- if (0 != iId)
- {
- iIdToStore = iId->Id();
- delete iId;
- iId = NULL;
- }
-
- iResult = iStatus == KErrNone ? EPass : EFail;
- iErr = iStatus.Int();
- if(iErr == KErrNoMemory)
- {
- User::Leave(KErrNoMemory);
- }
- if (iStop)
- {
- CActiveScheduler::Stop();
- }
-
- break;
-
- default:
- iResult = EFail;
-
- if (iStop)
- {
- CActiveScheduler::Stop();
- }
- }
- ++iRunCount;
- }
-
- ~CAuthOomActive()
- {
- if(iId != NULL)
- delete iId;
- }
-
-
- RAuthMgrClient& iClient;
- TVerdict iResult;
- TInt iRunCount;
- CAuthExpression* iAe;
- CIdentity* iId;
- TBool iStop;
- TInt iErr;
- TInt iFresh;
- TIdentityId iIdToStore;
- TBool iClientSpecific;
- TBool iAuthViaAlias;
- const TDesC& iClientMessage;
- };
-
-class CRegOomActive : public CActive
- {
- public:
- CRegOomActive(RAuthMgrClient& aClient, CIdentity*& aResult) :
- CActive(EPriorityNormal),
- iFirstTime(true),
- iClient(aClient),
- iResult(aResult),
- iErr(KErrNone)
- {
- CActiveScheduler::Add(this);
- }
- void doReg()
- {
- SetActive();
- TRequestStatus* status = &iStatus;
- User::RequestComplete(status, KErrNone);
- iFirstTime = ETrue;
- }
- void DoCancel()
- {
- }
- void RunL()
- {
- iErr = iStatus.Int();
- if (iFirstTime)
- {
- SetActive();
- iStatus = KRequestPending;
- iClient.RegisterIdentityL(iResult, _L("SOMENAME"), iStatus);
- iFirstTime = false;
- }
- else
- {
- iErr = iStatus.Int();
-
- if (iErr == KErrNoMemory)
- {
- User::Leave(KErrNoMemory);
- }
- CActiveScheduler::Stop();
- }
- }
- TInt RunError(TInt error)
- {
-
- TRequestStatus* status = &iStatus;
- if(iStatus.Int() == KErrNoMemory)
- {
- CActiveScheduler::Stop();
- User::Leave(error);
-
- }
- else if (iStatus == KRequestPending)
- {
- User::RequestComplete(status, error);
- CActiveScheduler::Stop();
- User::Leave(error);
- }
-
- CActiveScheduler::Stop();
- User::Leave(error);
- return KErrNone;
- }
-
- ~CRegOomActive()
- {
- Cancel();
- }
-
- TBool iFirstTime;
- RAuthMgrClient& iClient;
- CIdentity*& iResult;
- TInt iErr;
- };
-
-class CTrainOomActive : public CActive
- {
- public:
- CTrainOomActive(RAuthMgrClient& aClient, TPluginId plugin1IdValue, TIdentityId iIdFromFile, TBool aStop = ETrue) :
- CActive(EPriorityNormal),
- iClient(aClient),
- iResult(EFail),
- iRunCount(0),
- iStop(aStop),
- pluginIdVal(plugin1IdValue),
- idToTrain (iIdFromFile)
- {
- CActiveScheduler::Add(this);
- }
- void doTrain()
- {
-
- SetActive();
- TRequestStatus* status = &iStatus;
- User::RequestComplete(status, KErrNone);
- iRunCount = 0;
- }
- void DoCancel()
- {
- }
- void RunL()
- {
- iErr = iStatus.Int();
- if (iStatus.Int() != KErrNone)
- {
- }
- switch (iRunCount)
- {
- case 0:
- iStatus = KRequestPending;
- iClient.TrainPlugin(idToTrain, pluginIdVal, iStatus);
- SetActive();
- break;
-
- case 1:
- iResult = iStatus.Int() == KErrNone ? EPass : EFail;
- iErr = iStatus.Int();
- if (iErr == KErrNoMemory)
- {
- User::Leave(KErrNoMemory);
- }
- if (iStop)
- {
- CActiveScheduler::Stop();
- }
-
- break;
-
- default:
- iResult = EFail;
- if (iErr == KErrNoMemory)
- {
- User::Leave(KErrNoMemory);
- }
- if (iStop)
- {
- CActiveScheduler::Stop();
- }
- }
- ++iRunCount;
- }
- TInt RunError(TInt error)
- {
-
- TRequestStatus* status = &iStatus;
- if(iStatus.Int() == KErrNoMemory)
- {
- CActiveScheduler::Stop();
- User::Leave(error);
-
- }
- else if (iStatus == KRequestPending)
- {
- User::RequestComplete(status, error);
- CActiveScheduler::Stop();
- User::Leave(error);
- }
-
- CActiveScheduler::Stop();
- User::Leave(error);
- return KErrNone;
-
- }
- RAuthMgrClient& iClient;
- TVerdict iResult;
- TInt iRunCount;
- TBool iStop;
- TInt iErr;
- TPluginId pluginIdVal;
- TIdentityId idToTrain;
- };
-
-CAuthSvrOom::~CAuthSvrOom()
-/**
- Destructor
- */
- {}
-
-CAuthSvrOom::CAuthSvrOom(CTAuthSvrServer& aParent): iParent(aParent)
-/**
- Constructor
- */
- {
-
- SetTestStepName(KTAuthServerOom);
- }
-
-TVerdict CAuthSvrOom::doTestStepPreambleL()
-/**
- @return - TVerdict code
-
- */
- {
- CTStepActSch::doTestStepPreambleL();
- CActiveScheduler::Install(iActSchd);
- return TestStepResult();
- }
-
-
-TVerdict CAuthSvrOom::doTestStepL()
- {
-
- //Client side/Server side OOM test or Performance test??
-
- TInt testType(0);
- GetIntFromConfig(ConfigSection(), _L("TestType"), testType);
- ReadTestConfigurationL();
- switch(testType)
- {
- case 1: doClientOOMTestL();
- break;
-
- case 2: doServerOOMTestL();
- break;
-
- case 3: doPerformanceTestL();
- break;
-
- default:
- //Should not reach here !
- break;
- }
-
- return TestStepResult();
- }
-TVerdict CAuthSvrOom::doClientOOMTestL()
-/**
- * Runs the test step under OOM Conditions checking that each heap allocation is fail safe
- */
- {
- // Pre and Post test heap cell allocation counts
- TInt cellCountAfter = 0;
- TInt cellCountBefore = 0;
-
- /**
- * The loop tests each heap allocation under out of memory conditions to determine whether
- * the framework cleans up correctly without leaking memory.
- *
- * The 'for' loop does not have any completion criteria, so the loop breaks out as soon
- * as any of the following events occur:
- * a) The pre and post heap cell counts mismatch signalling a memory leakage
- * b) An unexpected leave (any leave with an error code other than 'KErrNoMemory')
- * c) All heap allocations have been tested and the test returns 'KErrNone'
- */
- for (TInt testCount = 0; ; ++testCount)
- {
- __UHEAP_RESET;
- __UHEAP_MARK;
-
-__UHEAP_SETFAIL(RHeap::EDeterministic, testCount+1);
- cellCountBefore = User::CountAllocCells();
- AuthServer::RAuthMgrClient authMgrClient;
- CleanupClosePushL(authMgrClient);
- authMgrClient.Connect();
-
- TRAPD(err, doTestL(authMgrClient));
- authMgrClient.ShutdownServer();
- CleanupStack::PopAndDestroy(&authMgrClient);
-
- cellCountAfter = User::CountAllocCells();
- __UHEAP_MARKEND;
-
-
- if (err == KErrNone)
- {
- INFO_PRINTF1(_L("Client OOM Test Finished"));
- break;
- }
- else if(err == KErrNoMemory)
- {
-
- if (cellCountBefore != cellCountAfter)
- {
- ERR_PRINTF2(_L("OOM Test Result: Failed - Memory leakage on iteration %d"), testCount);
- SetTestStepResult(EFail);
- break;
- }
- else
- {
- INFO_PRINTF2(_L("OOM Pass %d"), testCount);
- }
- }
- else
- {
- User::Leave(err);
- break;
- }
- }
-
-
- return TestStepResult();
- }
-
-TVerdict CAuthSvrOom::doServerOOMTestL()
- {
-
- TInt err(0),err2(0);
- AuthServer::RAuthMgrClient authMgrClient;
- CleanupClosePushL(authMgrClient);
- authMgrClient.Connect();
- // Pre and Post test heap cell allocation counts
- for (TInt testCount=0; ; ++testCount)
- {
-
- err = authMgrClient.SetServerHeapFail(testCount+1);
- if(KErrNoMemory == err)
- {
- ERR_PRINTF1(_L("ReInitializing..."));
- authMgrClient.ResetServerHeapFail();
- continue;
- }
-
- TRAPD(retStepVal, doTestL(authMgrClient));
- err2 = authMgrClient.ResetServerHeapFail();
- if((err == KErrServerTerminated) || (err2 == KErrServerTerminated))
- {
- INFO_PRINTF1(_L("AuthServer Terminated"));
- SetTestStepResult(EFail);
- break;
- }
-
- if(KErrNone != err)
- {
- SetTestStepResult(EFail);
- break;
- }
-
-
- if(KErrNoMemory == retStepVal)
- {
- INFO_PRINTF2(_L("OOM Pass %d"), testCount);
- }
- else if (KErrNone == retStepVal)
- {
- INFO_PRINTF1(_L("Server OOM Test Finished"));
- break;
- }
- else
- {
- // Propagate all errors apart from KErrNoMemory
- User::Leave(retStepVal);
- }
-
-
- }// for
- CleanupStack::PopAndDestroy(&authMgrClient);
- WaitForServerToReleaseDb();
- return TestStepResult();
- }
-
-
-TVerdict CAuthSvrOom::doTestL(AuthServer::RAuthMgrClient& ac)
- {
- TInt oomValue;
- GetIntFromConfig(ConfigSection(), _L("OOMTest"), oomValue);
-
- switch(oomValue)
- {
- case 1:
-
- break;
-
- case 2:
- //Registration API check
- doRegOOMTestL(ac);
- break;
-
- case 3:
- //Synchronous Authenticate API check
- doSyncAuthOOMTestL(ac);
- break;
-
- case 4:
- //Asynchronous Authenticate API check
- doAsyncAuthOOMTestL(ac);
- break;
-
- case 5:
- //Set preffered plugin type check
- doSetPreferredTypeL(ac);
- break;
-
- case 6:
- //Check Remove Identity API
- doRemoveIdentityL(ac);
- break;
- case 7:
- //Check forget plugin API
- doForgetPluginL(ac);
- break;
- case 8:
- //Check Retrain Plugin API
- doRetrainPluginL(ac);
- break;
- case 9:
- //Check List PluginsL API
- doListPluginsL(ac);
- break;
- case 10:
- //Check List Active Plugins API
- doListActivePluginsL(ac);
- break;
- case 11:
- //Check List Plugins of type API
- doListPluginsOfTypeL(ac);
- break;
- case 12:
- //Check List Plugins With Training status API
- doListPluginsWithTrainingStatusL(ac);
- break;
- case 13:
- //Check List Authentication aliases API
- doListAuthStrengthAliasesL(ac);
- break;
- case 14:
- // Check the reset API (all plugins)
- doResetAll(ac);
- break;
- case 15:
- // Check the reset API (plugins of specified type)
- doResetType(ac);
- break;
- case 16:
- // Check the reset API (specified plugins)
- doResetList(ac);
- break;
- default:
- //Should never reach here
- break;
- }
- return TestStepResult();
- }
-
-void CAuthSvrOom::doStartupTestL()
- {
- RAuthClient r1;
- CleanupClosePushL(r1);
- r1.Connect();
- CleanupStack::PopAndDestroy(&r1);
- }
-
-void CAuthSvrOom::doRegOOMTestL(AuthServer::RAuthMgrClient &ac)
- {
-
- CIdentity* identity1 = 0;
- CRegOomActive active(ac, identity1);
- active.doReg();
- CActiveScheduler::Start();
- delete identity1;
- }
-
-void CAuthSvrOom::doSyncAuthOOMTestL(AuthServer::RAuthMgrClient &ac)
- {
- TUid val = TUid::Uid(0);
- CIdentity* id = 0;
- CAuthExpression* expr = CreateAuthExprLC(iExprString);
- id = ac.AuthenticateL(*expr, iFreshnessVal, iClientSpecificKeyVal, val, EFalse, iMessage);
-
- delete id;
- id = 0;
- CleanupStack::PopAndDestroy(expr);
- }
-
-void CAuthSvrOom::doAsyncAuthOOMTestL(AuthServer::RAuthMgrClient &ac)
- {
- CAuthExpression* expr = ac.CreateAuthExpressionL(iExprString);
- CleanupStack::PushL(expr);
-
- CAuthOomActive active(ac, expr, iFreshnessVal, iClientSpecificKeyVal, EFalse, iMessage);
- active.doAuth();
- CActiveScheduler::Start();
-
- if(expr)
- {
- CleanupStack::PopAndDestroy(expr);
- }
- }
-
-void CAuthSvrOom::doSetPreferredTypeL(AuthServer::RAuthMgrClient &ac)
- {
- TInt plugin(0);
- GetHexFromConfig(ConfigSection(),KKnowledgePrefsTag, plugin);
- TPluginId id = plugin;
- ac.SetPreferredTypePluginL(EAuthKnowledge, id);
- }
-
-void CAuthSvrOom::doRemoveIdentityL(AuthServer::RAuthMgrClient &ac)
- {
- TInt plugin1IdValue = 0;
- GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue);
-
- //Read the identityId to be removed
- TIdentityId idToRemove = getLastAuthId();
- ac.RemoveIdentityL(idToRemove);
- }
-
-void CAuthSvrOom::doForgetPluginL(AuthServer::RAuthMgrClient &ac)
- {
- TInt plugin1IdValue = 0;
- GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue);
-
- //Read the identityId to be forgotten
- TIdentityId idToForget = getLastAuthId();
- ac.ForgetPluginL( idToForget , plugin1IdValue);
- }
-
-void CAuthSvrOom::doRetrainPluginL(AuthServer::RAuthMgrClient &ac)
- {
- TInt plugin1IdValue = 0;
- GetHexFromConfig(ConfigSection(),_L("plugin1Id"), plugin1IdValue);
-
- TIdentityId idToTrain = getLastAuthId();
- //Train the plugin again with this identity.
- CTrainOomActive active(ac, plugin1IdValue, idToTrain);
- active.doTrain();
- CActiveScheduler::Start();
- }
-
-void CAuthSvrOom::doListPluginsL(AuthServer::RAuthMgrClient &ac)
- {
- RPluginDescriptions pluginList1;
- TCleanupItem cleanup(CleanupEComArray, &pluginList1);
- CleanupStack::PushL(cleanup);
- ac.PluginsL(pluginList1);
- CleanupStack::PopAndDestroy(&pluginList1);
-
- }
-
-void CAuthSvrOom::doListActivePluginsL(AuthServer::RAuthMgrClient &ac)
- {
- RPluginDescriptions pluginList1;
- TCleanupItem cleanup(CleanupEComArray, &pluginList1);
- CleanupStack::PushL(cleanup);
- ac.ActivePluginsL(pluginList1);
- CleanupStack::PopAndDestroy(&pluginList1);
- }
-
-void CAuthSvrOom::doListPluginsOfTypeL(AuthServer::RAuthMgrClient &ac)
- {
- RCPointerArray<const CPluginDesc> pluginsList;
- CleanupClosePushL(pluginsList);
- TAuthPluginType t1 = EAuthKnowledge;
- ac.PluginsOfTypeL(t1, pluginsList);
- CleanupStack::PopAndDestroy(&pluginsList);
- }
-
-void CAuthSvrOom::doListPluginsWithTrainingStatusL(AuthServer::RAuthMgrClient &ac)
- {
- RCPointerArray<const CPluginDesc> pluginsList;
- CleanupClosePushL(pluginsList);
- TAuthTrainingStatus t1 = EAuthTrained;
- ac.PluginsWithTrainingStatusL(t1, pluginsList);
- CleanupStack::PopAndDestroy(&pluginsList);
- }
-
-void CAuthSvrOom::doListAuthStrengthAliasesL(AuthServer::RAuthMgrClient &ac)
- {
- RPointerArray<HBufC> aliasList;
- CleanupResetAndDestroyPushL(aliasList);
- ac.ListAuthAliasesL(aliasList);
- CleanupStack::PopAndDestroy(&aliasList);
- }
-
-// Check the reset API (all plugins)
-void CAuthSvrOom::doResetAll(AuthServer::RAuthMgrClient& ac)
- {
- TIdentityId identity = getLastAuthId(); // Anything but 0 since client does sanity check
- ac.ResetIdentityL(identity, _L("1234"));
- }
-
-// Check the reset API (plugins of specified type)
-void CAuthSvrOom::doResetType(AuthServer::RAuthMgrClient& ac)
- {
- TIdentityId identity = getLastAuthId(); // Anything but 0 since client does sanity check
- ac.ResetIdentityL(identity, EAuthKnowledge, _L("2342"));
- }
-
-// Check the reset API (specified plugins)
-void CAuthSvrOom::doResetList(AuthServer::RAuthMgrClient& ac)
- {
- TIdentityId identity = getLastAuthId(); // Anything but 0 since client does sanity check
- TInt pluginId(0);
- GetHexFromConfig(ConfigSection(),_L("plugin1Id"), pluginId);
- RArray<TPluginId> pluginList;
- CleanupClosePushL(pluginList);
- RPointerArray<const HBufC> regDataList;
- CleanupResetAndDestroyPushL(regDataList);
- pluginList.AppendL(pluginId);
- regDataList.AppendL(_L("1344").AllocL());
- ac.ResetIdentityL(identity, pluginList, regDataList);
- CleanupStack::PopAndDestroy(2, &pluginList);
- }
-
-void CAuthSvrOom::ReadTestConfigurationL()
- {
-
- TPtrC displayMessage;
- TBool messageSent = (GetStringFromConfig(ConfigSection(),_L("DisplayMessage"), displayMessage) != EFalse);
- iMessage = displayMessage;
- ClientMessage(messageSent, displayMessage);
- if(!messageSent)
- {
- iMessage = KNullDesC();
- }
-
- TPinValue pinValue = GetPinFromOutputFileL();
- CreatePinPluginInputFileL(EPinPluginIdentify, pinValue);
-
-
- GetStringFromConfig(ConfigSection(),_L("pluginId"), iExprString);
-
-
- //Retrieve the value of 'freshness' from the ini file, but if it's absent use the default value
- if(GetIntFromConfig(ConfigSection(),_L("freshness"), iFreshnessVal) == EFalse)
- {
- iFreshnessVal = 10;
- }
-
- iClientSpecificKeyVal = EFalse;
- //Retrieve the value of 'clientSpecificKey' from the ini file, but if it's absent use the default value
- if(GetBoolFromConfig(ConfigSection(),_L("clientSpecificKey"), iClientSpecificKeyVal) == EFalse)
- {
- iClientSpecificKeyVal = EFalse;
- }
-
- iDefaultpluginusage = EFalse;
- if(GetBoolFromConfig(ConfigSection(),_L("defaultpluginusage"), iDefaultpluginusage ) == EFalse)
- {
- iDefaultpluginusage = EFalse;
- }
-
- }
-
-
-TVerdict CAuthSvrOom::doTestStepPostambleL()
-/**
- @return - TVerdict code
-
- */
- {
-
- CTStepActSch::doTestStepPostambleL();
- return TestStepResult();
- }
-
-TVerdict CAuthSvrOom::doPerformanceTestL()
-/**
- * Runs the test step under OOM Conditions checking that each heap allocation is fail safe
- */
- {
- TInt oomValue;
- GetIntFromConfig(ConfigSection(), _L("OOMTest"), oomValue);
- GetIntFromConfig(ConfigSection(), _L("iterationCount"), iIterationCount);
- StartTimer();
-
- for (TInt i = 0; i < iIterationCount; ++i)
- {
-
- AuthServer::RAuthMgrClient authMgrClient;
- CleanupClosePushL(authMgrClient);
- authMgrClient.Connect();
-
- TRAPD(err, doTestL(authMgrClient));
- authMgrClient.ShutdownServer();
- CleanupStack::PopAndDestroy(&authMgrClient);
- if(err != KErrNone)
- {
- User::Leave(err);
- break;
- }
-
- ReadTestConfigurationL();
- if (oomValue == 2)
- {
- RemoveExistingDbL();
- }
- }
-
- StopTimerAndPrintResultL();
- return TestStepResult();
- }
-
-void CAuthSvrOom::PrintPerformanceLog(TTime aTime)
- {
- TDateTime timer = aTime.DateTime();
- INFO_PRINTF6(_L("%S,%d:%d:%d:%d"), &KPerformanceTestInfo(), timer.Hour(), timer.Minute(), timer.Second(), timer.MicroSecond());
- }
-
-void CAuthSvrOom::StartTimer()
- {
- iStartTime.HomeTime();
- PrintPerformanceLog(iStartTime);
- }
-
-void CAuthSvrOom::StopTimerAndPrintResultL()
- {
- TTime endTime;
- endTime.HomeTime();
- PrintPerformanceLog(endTime);
-
- TTimeIntervalMicroSeconds duration = endTime.MicroSecondsFrom(iStartTime);
- TInt actualDuration = (I64INT(duration.Int64())/1000)/iIterationCount; // in millisecond
-
- INFO_PRINTF3(_L("%S,%d"), &KActualTestCaseDuration(), actualDuration);
- }
-