buildverification/autosmoketest/messaging/Src/TestMessProcessor.cpp
branchRCL_3
changeset 11 493058e57c8c
parent 0 9736f095102e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildverification/autosmoketest/messaging/Src/TestMessProcessor.cpp	Wed Sep 01 12:30:50 2010 +0100
@@ -0,0 +1,288 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+// This contains CTestMessProcessor which an active object utility
+// used for send/recieving or any time consuming 
+// 
+//
+
+#include "TestMessProcessor.h"
+#include "TestMessBase.h"
+
+CTestMessProcessor* CTestMessProcessor::NewL(CTestStep& aTestStep, CMsvSession& aSession)
+	{
+	CTestMessProcessor*	self=new(ELeave) CTestMessProcessor(aTestStep, aSession);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+CTestMessProcessor::CTestMessProcessor(CTestStep& aTestStep, CMsvSession& aSession)
+:	CActive(EPriorityStandard)
+,	iState(EStatePrepareToSendMsg)
+,	iTestStep(aTestStep)
+,	iSession(aSession)
+,	iEntry(NULL)
+,	iMsgId(KMsvRootIndexEntryId)
+,	iClient(NULL)
+,	iMsvOperation(NULL)
+,	iCancelSms(EFalse)
+	{
+	}
+
+CTestMessProcessor::~CTestMessProcessor()
+	{
+	delete iEntry;
+	iEntry=NULL;
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	}
+
+void CTestMessProcessor::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CTestMessProcessor::DoCancel()
+	{
+	iTestStep.INFO_PRINTF1(_L("Cancel operation"));
+	iMsvOperation->Cancel();
+	}
+
+void CTestMessProcessor::DisplayProgress()
+	{
+	// display the current progress
+	switch(iState)
+		{
+	case EStatePrepareToSendMsg:
+		{
+		TMsvLocalOperationProgress			temp;
+		TPckgC<TMsvLocalOperationProgress>	progress(temp);
+
+		progress.Set(iMsvOperation->ProgressL());
+		iTestStep.INFO_PRINTF1(_L("   Progress"));
+		iTestStep.INFO_PRINTF2(_L("       Operation              :%d"), progress().iType);
+		iTestStep.INFO_PRINTF2(_L("       Total Number Of Entries:%d"), progress().iTotalNumberOfEntries);
+		iTestStep.INFO_PRINTF2(_L("       Number Completed       :%d"), progress().iNumberCompleted);
+		iTestStep.INFO_PRINTF2(_L("       Number Failed          :%d"), progress().iNumberFailed);
+		iTestStep.INFO_PRINTF2(_L("       Number Remaining       :%d"), progress().iNumberRemaining);
+		iTestStep.INFO_PRINTF2(_L("       Error                  :%d"), progress().iError);
+		iTestStep.INFO_PRINTF2(_L("       Id                     :%x"), progress().iId);
+		}
+		break;
+	case EStateRequest:
+		iClient->DisplayProgressL(EFalse, iMsvOperation);
+		break;
+	default:
+		break;
+		}
+	}
+
+void CTestMessProcessor::SendEmailMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient)
+	{
+	iMsgId=aMsgId;
+	iClient=aClient;
+	iState=EStatePrepareToSendMsg;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iMsgEntry=iEntry->Entry();
+	iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	iMsvOperation=iEntry->ChangeL(iMsgEntry, iStatus);
+	SetActive();
+	}
+
+/**
+ Sends the sms message. It sets the fields of the enty.
+ @param aMsgId - TMsvId of the message
+ @param aClient - Pointer to the MTestMessProcessClient
+ @param aCancelSms - Bool value for the Cancel sms flag
+*/
+void CTestMessProcessor::SendSmsMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient, TBool aCancelSms)
+	{
+	iMsgId=aMsgId;
+	iClient=aClient;
+	iState=EStatePrepareToSendMsg;
+	iCancelSms = aCancelSms;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iMsgEntry=iEntry->Entry();
+	iMsgEntry.SetConnected(ETrue);
+	iMsgEntry.SetFailed(EFalse);
+	iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+	iMsgEntry.iError = KErrNone;
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	iMsvOperation=iEntry->ChangeL(iMsgEntry, iStatus);
+	SetActive();
+	}
+
+void CTestMessProcessor::SendMmsMessageL(TMsvId aMsgId, MTestMessProcessorClient* aClient)
+	{
+	iMsgId=aMsgId;
+	iClient=aClient;
+	iState=EStatePrepareToSendMsg;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iMsgEntry=iEntry->Entry();
+	iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	iMsvOperation=iEntry->ChangeL(iMsgEntry, iStatus);
+	SetActive();
+	}
+
+void CTestMessProcessor::MtmRequestL(TMsvId aAccountId, MTestMessProcessorClient* aClient)
+	{
+	iMsgId=aAccountId;
+	iClient=aClient;
+	iState=EStateRequest;
+
+	delete iEntry;
+	iEntry=NULL;
+	iEntry=iSession.GetEntryL(iMsgId);
+	iStatus = KRequestPending;
+	delete iMsvOperation;
+	iMsvOperation=NULL;
+	TRAPD(err, iMsvOperation=iClient->CreateOperationL(iStatus));
+	if ( iTestStep.TestStepResult() == EPass && err==KErrNone )
+		{
+		SetActive();
+		}
+	}
+
+void CTestMessProcessor::RunL()
+	{
+	switch(iState)
+		{
+	case EStatePrepareToSendMsg:
+		switch (iStatus.Int())
+			{
+		case KErrNone:
+			{
+			delete iMsvOperation;
+			iMsvOperation=NULL;
+			delete iEntry;
+			iEntry=NULL;
+			iEntry=iSession.GetEntryL(iMsgId);
+			iMsgEntry=iEntry->Entry();
+			iMsgEntry.SetSendingState(KMsvSendStateWaiting);
+			iEntry->ChangeL(iMsgEntry);
+			if ( iMsgEntry.SendingState() == KMsvSendStateWaiting )
+				{
+				iState=EStateRequest;
+				iStatus = KRequestPending;
+				TRAPD(err, iMsvOperation=iClient->CreateOperationL(iStatus));
+				if ( iTestStep.TestStepResult() == EPass && err==KErrNone )
+					{
+					SetActive();
+					}
+				else
+					{
+					CActiveScheduler::Stop();
+					}
+				}
+			else
+				{
+				iTestStep.ERR_PRINTF2(_L("Sending State not Waiting :%d"), iMsgEntry.SendingState());
+				iTestStep.SetTestStepResult(EFail);
+				CActiveScheduler::Stop();
+				}
+			}
+			break;
+		case KErrCancel:
+			{
+			if(iCancelSms)
+				{
+				iTestStep.INFO_PRINTF1(_L("Sending of the mesage Cancelled successfully"));
+				}
+			else
+				{
+				iTestStep.ERR_PRINTF2(_L("Message failed to Send, Error = %d"), iStatus.Int());
+				iTestStep.SetTestStepResult(EFail);
+				}
+			CActiveScheduler::Stop();
+			break;
+			}
+		default:
+			iTestStep.ERR_PRINTF2(_L("Unknown Event :%d"), iStatus.Int());
+			iTestStep.SetTestStepResult(EFail);
+			CActiveScheduler::Stop();
+			}
+		break;
+	case EStateRequest:
+		switch (iStatus.Int())
+			{
+		case KErrNone:
+			{
+			TInt	error=iClient->DisplayProgressL(ETrue, iMsvOperation);
+			if ( error != KErrNone )
+				{
+				iTestStep.ERR_PRINTF2(_L("Progress Error:%d"), error);
+				iTestStep.SetTestStepResult(EFail);
+				}
+			delete iMsvOperation;
+			iMsvOperation=NULL;
+
+			//	Is there another operation
+			if ( iClient->MoreOperations() )
+				{
+				iStatus = KRequestPending;
+				TRAPD(err, iMsvOperation=iClient->CreateOperationL(iStatus));
+				if ( iTestStep.TestStepResult() == EPass && err==KErrNone )
+					{
+					SetActive();
+					}
+				else
+					{
+					CActiveScheduler::Stop();
+					}
+				}
+			else
+				{
+				CActiveScheduler::Stop();
+				}
+			}
+			break;
+		case KErrServerTerminated:
+			{
+			TInt	error=iClient->DisplayProgressL(ETrue, iMsvOperation);
+			if ( error != KErrServerTerminated )
+				{
+				iTestStep.ERR_PRINTF2(_L("Progress Error:%d"), error);
+				iTestStep.SetTestStepResult(EFail);
+				}
+			delete iMsvOperation;
+			iMsvOperation=NULL;
+			CActiveScheduler::Stop();
+			}
+		default:
+			iTestStep.ERR_PRINTF2(_L("Unknown Event :%d"), iStatus.Int());
+			iTestStep.SetTestStepResult(EFail);
+			CActiveScheduler::Stop();
+			}
+		break;
+	default:
+		iTestStep.ERR_PRINTF1(_L("No handler found in CTestMessProcessor class"));
+		iTestStep.SetTestStepResult(EFail);
+		CActiveScheduler::Stop();
+		}
+	}