diff -r 0e6c5a9328b5 -r deec7e509f66 authenticationservices/authenticationserver/test/tAuthSvr/src/step_multithreaded.cpp --- a/authenticationservices/authenticationserver/test/tAuthSvr/src/step_multithreaded.cpp Thu Aug 19 11:18:56 2010 +0530 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,233 +0,0 @@ -/* -* Copyright (c) 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: Multi threaded tests on AuthServer. -* -*/ - - -#include "tAuthSvrStep.h" -#include "authserver/authclient.h" -#include "authserver/authmgrclient.h" - - - -using namespace AuthServer; - -//Active object for registration -class CMultiThreadedRegisterActive : public CActive - { - public: - CMultiThreadedRegisterActive(RAuthMgrClient& aClient, HBufC* aIdentityString, CIdentity*& aResult) : - CActive(EPriorityNormal), - iFirstTime(true), - iClient(aClient), - iResult(aResult), - iIdentityString(aIdentityString), - iErr(KErrNone) - { - CActiveScheduler::Add(this); - } - ~CMultiThreadedRegisterActive() - { - delete iIdentityString; - } - 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, *iIdentityString, iStatus); - iFirstTime = false; - } - else - { - iErr = iStatus.Int(); - RDebug::Printf("iErr = %d", iErr); - CActiveScheduler::Stop(); - } - } - - TBool iFirstTime; - RAuthMgrClient& iClient; - CIdentity*& iResult; - HBufC* iIdentityString; - TInt iErr; - }; - -CTMultiThreaded::~CTMultiThreaded() - {} - -CTMultiThreaded::CTMultiThreaded(CTAuthSvrServer& aParent): iParent(aParent) - - { - - SetTestStepName(KTMultiThreadedTest); - } - -TVerdict CTMultiThreaded::doTestStepPreambleL() - - { - CTStepActSch::doTestStepPreambleL(); - return TestStepResult(); - } - -TVerdict CTMultiThreaded::doTestStepPostambleL() - - { - - CTStepActSch::doTestStepPostambleL(); - return TestStepResult(); - } - -TVerdict CTMultiThreaded::doTestStepL() - { - SetTestStepResult(EPass); - Logger().ShareAuto(); - //Initialize AuthServer. - InitAuthServerFromFileL(); - - - //Setup two threads which request for registration concurrently. - //Create first thread. - RThread firstThread; - TInt err(0); - TThreadParams firstThreadParams; - err = firstThread.Create( _L("First Thread"), (TThreadFunction)runMultiThreadedTest, - KDefaultStackSize, KMinHeapSize, 1024*1024 /*Max heap size*/, &firstThreadParams); - if(err != KErrNone) - { - ERR_PRINTF2(_L("Couldn't start first thread. Error = %d"), err); - SetTestStepResult(EFail); - return TestStepResult(); - } - - // Setup the requeststatus for firstThread completion notification. - TRequestStatus firstThreadFinishStatus; - firstThread.Logon(firstThreadFinishStatus); - - - - //Setup the second thread similarly. - RThread secondThread; - TThreadParams secondThreadParams; - err = secondThread.Create( _L("Second Thread"), (TThreadFunction)runMultiThreadedTest, - KDefaultStackSize, KMinHeapSize, 1024*1024 /*Max heap size*/, &secondThreadParams); - if(err != KErrNone) - { - ERR_PRINTF2(_L("Couldn't start second thread. Error = %d"), err); - SetTestStepResult(EFail); - return TestStepResult(); - } - - // Setup the requeststatus for secondThread completion notification. - TRequestStatus secondThreadFinishStatus; - secondThread.Logon(secondThreadFinishStatus); - - //Resume both threads. - firstThread.Resume(); - secondThread.Resume(); - - //Wait for either request to complete. - User::WaitForRequest(firstThreadFinishStatus, secondThreadFinishStatus ); - - //Now, wait for the unfinished thread. - User::WaitForRequest(firstThreadFinishStatus == KRequestPending? firstThreadFinishStatus:secondThreadFinishStatus); - - INFO_PRINTF1(_L("Both Threads completed.")); - INFO_PRINTF2(_L("First thread completed with %d."), firstThreadParams.result); - INFO_PRINTF2(_L("Second thread completed with %d."), secondThreadParams.result); - - if((firstThreadParams.result != KErrServerBusy && secondThreadParams.result != KErrNone) && - (firstThreadParams.result != KErrNone && secondThreadParams.result != KErrServerBusy)) - { - SetTestStepResult(EFail); - } - firstThread.Close(); - secondThread.Close(); - return TestStepResult(); - } - - - -void CTMultiThreaded::runMultiThreadedTest(TThreadParams* aParams) - { - CTrapCleanup* cleanup = CTrapCleanup::New(); - CActiveScheduler* sched(0); - - TRAPD(err, sched = new (ELeave) CActiveScheduler); - if(err != KErrNone) - { - delete cleanup; - User::Exit(err); - } - CActiveScheduler::Install(sched); - - - /* Switch case can be added here to generalize this function to run any method. - * For now, only registration is called. - */ - - TRAPD(ret,doRegisterL(*aParams)); - - RDebug::Printf("doRegisterL returned %d", ret); - - delete cleanup; - delete sched; - } - - -void CTMultiThreaded::doRegisterL(TThreadParams& aParams) - { - _LIT(KIdString, "User1"); - - RAuthMgrClient client; - User::LeaveIfError(client.Connect()); - CleanupClosePushL(client); - - HBufC* identityString = KIdString().AllocLC(); - CIdentity* identity1 = 0; - - CMultiThreadedRegisterActive* active = new (ELeave)CMultiThreadedRegisterActive(client, identityString, identity1); - CleanupStack::PushL(active); - active->doReg(); - CActiveScheduler::Start(); - - //Store the error code in aParams. - aParams.result = active->iErr; - if(aParams.result == KErrNone) - { - RDebug::Printf("Registered new Identity! Id = %x", identity1->Id()); - } - else - { - RDebug::Printf("Registration Failed !"); - } - - delete identity1; - - CleanupStack::Pop(3, &client); - } -