messagingfw/msgtest/integration/email/src/poptests.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/integration/email/src/poptests.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,480 @@
+// Copyright (c) 1999-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:
+//
+
+#include "poptests.h"
+#include <cemailaccounts.h>
+#include <iapprefs.h>
+
+// Strings....
+_LIT(KErrUseService, "[%4d] Error! you have to select a service for use before you can access it!");
+_LIT(KPopAccountName, "POP");
+
+//
+//
+// CPop3ClientTest
+//
+
+CPop3ClientTest* CPop3ClientTest::NewL(CEmailTestUtils& aTestUtils, RTest& aTest)
+	{
+	CPop3ClientTest* self = new (ELeave) CPop3ClientTest(aTestUtils, aTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CPop3ClientTest::~CPop3ClientTest()
+	{
+	}
+
+void CPop3ClientTest::ConstructL()
+	{
+	CEmailClientTest::ConstructL();
+	}
+
+CPop3ClientTest::CPop3ClientTest(CEmailTestUtils& aTestUtils, RTest& aTest) : CEmailClientTest(aTestUtils, aTest)
+	{
+	}
+
+
+//
+//
+// CCreatePop3Service
+//
+
+void CCreatePop3Service::StartL(TRequestStatus& aStatus)
+	{
+
+	// create pop account				
+	TPopAccount accountId = iAccount->CreatePopAccountL(*iDetails, *iSettings, *iPopIAP,EFalse);
+	
+	// select this service
+	CMsvEntry& msvEntry = *(iTestHarness.EmailTestUtils().iMsvEntry);
+	msvEntry.SetEntryL(accountId.iPopService);
+	iEntry = msvEntry.Entry();
+
+	iTestHarness.iCurrentServiceId = accountId.iPopService;
+	iTestHarness.EmailTestUtils().iPopServiceId = accountId.iPopService;
+ 
+ 	// If the Pop Client MTM doesn't already exist, then Instantiate it 
+ 	if (!iTestHarness.EmailTestUtils().iPopClientMtm)
+ 		iTestHarness.EmailTestUtils().InstantiatePopClientMtmL();
+ 	
+ 	// The account needs to be deleted to close the session with the message server
+ 	// If this session is kept open, the test will get in an infinite loop when sending
+ 	// an email (because of implementation of CMsvTestUtils::GoServerSideL())
+ 	delete iAccount;
+ 	iAccount = NULL;
+ 
+ 	TRequestStatus* status = &aStatus;
+ 	User::RequestComplete(status, KErrNone);
+
+	}
+
+CCreatePop3Service* CCreatePop3Service::NewL(CEmailClientTest& aTestHarness)
+	{
+	CCreatePop3Service* self = new (ELeave) CCreatePop3Service(aTestHarness);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CCreatePop3Service::CCreatePop3Service(CEmailClientTest& aTestHarness) : CCreateEmailService(aTestHarness), iTestHarness(aTestHarness)
+	{
+	}
+
+void CCreatePop3Service::ConstructL()
+	{
+	iAccount = CEmailAccounts::NewL();
+	iSettings = new(ELeave) CImPop3Settings();		
+	iPopIAP = CImIAPPreferences::NewLC();
+	CleanupStack::Pop();
+	
+	iAccount->PopulateDefaultPopSettingsL(*iSettings, *iPopIAP);
+	iSettings->SetDisconnectedUserMode(ETrue);
+	iSettings->SetDeleteEmailsWhenDisconnecting(ETrue);
+
+	}
+
+CCreatePop3Service::~CCreatePop3Service()
+	{
+	delete iAccount;
+ 	delete iSettings;
+	delete iPopIAP;
+	}
+
+CImPop3Settings& CCreatePop3Service::Settings()
+	{
+	return *iSettings;
+	}
+
+
+
+//
+//
+// CCreatePop3ClientMtm
+//
+
+CCreatePop3ClientMtm::CCreatePop3ClientMtm(CEmailClientTest& aTest) : iTest(aTest)
+	{
+	}
+
+void CCreatePop3ClientMtm::StartL(TRequestStatus& aStatus)
+	{
+	iTest.EmailTestUtils().InstantiatePopClientMtmL();
+	TRequestStatus* status = &aStatus;
+	User::RequestComplete(status, KErrNone);
+	}
+
+
+
+
+//
+//
+// CPop3Connect
+//
+
+CPop3Connect::CPop3Connect(CEmailClientTest& aParentTestHarness) : CActive(EPriorityNormal), iParentTestHarness(aParentTestHarness)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CPop3Connect::StartL(TRequestStatus& aStatus)
+	{
+	TMsvId serviceId = iParentTestHarness.iSelectedFolder;
+	CMsvEntry& msvEntry = *(iParentTestHarness.MsvTestUtils().iMsvEntry);
+	msvEntry.SetEntryL(serviceId);
+	iReportStatus = &aStatus;
+
+	// If the Pop Client MTM doesn't already exist, then Instantiate it 
+	if (!iParentTestHarness.EmailTestUtils().iPopClientMtm)
+		iParentTestHarness.EmailTestUtils().InstantiatePopClientMtmL();
+
+	// check that current entry is a service
+	CPop3ClientMtm& pop3Mtm = *(iParentTestHarness.EmailTestUtils().iPopClientMtm);
+	TBuf8<1> param;
+	CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+	CleanupStack::PushL(selection);
+	selection->AppendL(serviceId);
+	iParentTestHarness.SetCurrentOperation(pop3Mtm.InvokeAsyncFunctionL(KPOP3MTMConnect, *selection, param, iStatus));
+	CleanupStack::PopAndDestroy(selection);
+	aStatus = KRequestPending;
+	SetActive();
+	}
+
+void CPop3Connect::RunL()
+	{
+	User::RequestComplete(iReportStatus, iStatus.Int());
+	}
+
+void CPop3Connect::DoCancel()
+	{
+	iParentTestHarness.CurrentOperation().Cancel();
+	}
+
+
+CPop3Connect::~CPop3Connect()
+	{
+	}
+
+
+
+
+//
+//
+// CPop3Disconnect
+//
+
+CPop3Disconnect::CPop3Disconnect(CEmailClientTest& aParentTestHarness) : CActive(EPriorityNormal), iParentTestHarness(aParentTestHarness)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CPop3Disconnect::StartL(TRequestStatus& aStatus)
+	{
+	TMsvId serviceId = iParentTestHarness.iSelectedFolder;
+	CMsvEntry& msvEntry = *(iParentTestHarness.MsvTestUtils().iMsvEntry);
+	msvEntry.SetEntryL(serviceId);
+	iReportStatus = &aStatus;
+	// check that current entry is a service
+	CPop3ClientMtm& pop3Mtm = *(iParentTestHarness.EmailTestUtils().iPopClientMtm);
+	TBuf8<1> param;
+	CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+	CleanupStack::PushL(selection);
+	selection->AppendL(serviceId);
+	iParentTestHarness.SetCurrentOperation(pop3Mtm.InvokeAsyncFunctionL(KPOP3MTMDisconnect, *selection, param, iStatus));
+	CleanupStack::PopAndDestroy(selection);
+	aStatus = KRequestPending;
+	SetActive();
+	}
+
+void CPop3Disconnect::RunL()
+	{
+	User::RequestComplete(iReportStatus, iStatus.Int());
+	}
+
+void CPop3Disconnect::DoCancel()
+	{
+	iParentTestHarness.CurrentOperation().Cancel();
+	}
+
+
+CPop3Disconnect::~CPop3Disconnect()
+	{
+	}
+
+
+
+
+
+//
+//
+// CCheckPop3Operation
+//
+
+CCheckPop3Operation::CCheckPop3Operation(TInt aExpectedStatus, CPop3ClientTest& aTestHarness) : iTestHarness(aTestHarness), iExpectedStatus(aExpectedStatus)
+	{
+	}
+
+void CCheckPop3Operation::StartL(TRequestStatus& aStatus)
+	{
+	TInt err = KErrNone;
+
+	TPop3Progress temp;	
+	TPckgC<TPop3Progress> paramPack(temp);
+
+	//if(iTestHarness.CurrentOperation().Id() != NULL)
+		{
+		paramPack.Set(iTestHarness.CurrentOperation().ProgressL());
+			
+		TPop3Progress progress=paramPack();	
+
+		if (progress.iErrorCode != iExpectedStatus)
+			{
+			TBuf<100> logString;
+			logString.Format(_L("Operation didn't complete as expected. Expected status: %d, actual status: %d"), iExpectedStatus, progress.iErrorCode);
+			iTestHarness.LogComment(logString);
+			err = KErrUnknown;
+			}
+
+		TRequestStatus* status = &aStatus;
+		User::RequestComplete(status, err);
+		}
+	}
+
+
+//
+//
+// CPop3UseService
+//
+
+CPop3UseService::CPop3UseService(CPop3ClientTest& aTestHarness) : iTestHarness(aTestHarness)
+	{
+	}
+
+void CPop3UseService::StartL(TRequestStatus& aStatus)
+	{
+	TInt err = KErrNone;
+
+	// Select current folder
+	CMsvEntry& entry = *(iTestHarness.EmailTestUtils().iMsvEntry);
+	entry.SetEntryL(iTestHarness.iSelectedFolder);
+		
+	// first make sure it is a service which is selected
+	//  then change the test utils service id
+	if(entry.Entry().iType == KUidMsvServiceEntry)
+		{
+		iTestHarness.EmailTestUtils().iPopServiceId = entry.Entry().Id();
+
+		// If the Pop Client MTM doesn't already exist, then Instantiate it 
+		if (!iTestHarness.EmailTestUtils().iPopClientMtm)
+			iTestHarness.EmailTestUtils().InstantiatePopClientMtmL();
+		}
+	else
+		{
+		TBuf<100> logString;
+		logString.Format(KErrUseService, iDebugInfo.LineNumber());
+		iTestHarness.LogComment(logString);
+
+		err = KErrUnknown;
+		}
+
+	TRequestStatus* status = &aStatus;
+	User::RequestComplete(status, err);
+	}
+
+
+
+//
+//
+//
+//
+// CPop3Connect
+//
+// Connect an monitor connection progress.
+//
+CPop3ConnectAndMonitor::CPop3ConnectAndMonitor(CEmailClientTest& aParentTestHarness, TBool aSynchronise) : CActive(EPriorityNormal), iParentTestHarness(aParentTestHarness), iSynchronise(aSynchronise)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+void CPop3ConnectAndMonitor::LogCommentFormat(TRefByValue<const TDesC> format,...)
+	{
+	// Build parameter list.
+	VA_LIST list;
+	VA_START(list, format);
+	TBuf<0x100> buf;
+	buf.FormatList(format, list);
+
+	// Log the debug buffer.
+	iParentTestHarness.EmailTestUtils().WriteComment(buf);
+	}
+
+void CPop3ConnectAndMonitor::StartL(TRequestStatus& aStatus)
+	{
+	iConnectionError = EFalse;
+	TMsvId serviceId = iParentTestHarness.iSelectedFolder;
+	CMsvEntry& msvEntry = *(iParentTestHarness.MsvTestUtils().iMsvEntry);
+	msvEntry.SetEntryL(serviceId);
+	iReportStatus = &aStatus;
+	// check that current entry is a service
+	CPop3ClientMtm& pop3Mtm = *(iParentTestHarness.EmailTestUtils().iPopClientMtm);
+	TBuf8<1> param;
+	CMsvEntrySelection* selection = new (ELeave) CMsvEntrySelection;
+	CleanupStack::PushL(selection);
+	selection->AppendL(serviceId);
+
+	
+	iParentTestHarness.SetCurrentOperation(pop3Mtm.InvokeAsyncFunctionL(KPOP3MTMConnect, *selection, param, iStatus));
+
+	// Call funtion to return IAP and Poll to find connection state 
+
+	RTimer timer; 
+	TRequestStatus timerStatus; // Request status associated with timer
+	timer.CreateLocal(); // Create for this thread
+
+	TInt progressState = KInvalidState;
+	TInt connectState = KInvalidState;
+	TInt iap = KInvalidIAP;
+	TInt connection_progress_state = 0;
+
+
+	do
+		{
+		TPop3Progress temp;	
+		TPckgC<TPop3Progress> paramPack(temp);
+		paramPack.Set(iParentTestHarness.CurrentOperation().ProgressL());
+		TPop3Progress progress = paramPack();	
+
+		progressState = progress.iPop3Progress;
+				
+		if((connectState != progress.ConnectionState()) || (iap != progress.ConnectionIAP()) )
+			{
+			connectState = progress.ConnectionState();
+			iap = progress.ConnectionIAP();
+			LogCommentFormat(_L("[%4d] Progress state =  %d, Connect State = %d, IAP = %d"), iDebugInfo.LineNumber(), progressState, connectState, iap);
+			
+			//Check that the relevant states are reached in the correct order
+			if ((connectState == ECsdStartingDialling) || (connectState == ECsdStartingConnect))
+					connection_progress_state = 1;
+			if (connectState == ECsdConnectionOpen && connection_progress_state == 1)
+					connection_progress_state = 2;
+			if (connectState == KLinkLayerOpen && connection_progress_state == 2)
+					connection_progress_state = 3;
+				
+			}
+
+		// wait 50 microseconds and then re-test progress!
+		timer.After(timerStatus,50);
+		User::WaitForRequest(timerStatus); 
+	
+		} while (progressState == TPop3Progress::EPopConnecting);
+	
+	    timer.Close();
+
+	if (connection_progress_state != 3)
+		{
+		LogCommentFormat(_L("[%4d] Local Connection Progress state =  %d, Connect State = %d, IAP = %d"), iDebugInfo.LineNumber(), connection_progress_state, connectState, iap);
+		iConnectionError = ETrue;
+		}
+	
+	CleanupStack::PopAndDestroy(selection);
+	aStatus = KRequestPending;
+	SetActive();
+	}
+
+void CPop3ConnectAndMonitor::RunL()
+	{
+	if (iConnectionError)
+		User::RequestComplete(iReportStatus, KErrUnknown);	
+	else
+		User::RequestComplete(iReportStatus, iStatus.Int());
+	}	
+
+void CPop3ConnectAndMonitor::DoCancel()
+	{
+	iParentTestHarness.CurrentOperation().Cancel();
+	}
+
+
+CPop3ConnectAndMonitor::~CPop3ConnectAndMonitor()
+	{
+	}
+// CPop3SetSyncLimits
+//
+
+CPop3SetSyncLimits::CPop3SetSyncLimits(TInt aInboxSyncLimit, CPop3ClientTest& aTestHarness) : 
+	iTestHarness(aTestHarness), iInboxSyncLimit(aInboxSyncLimit)
+	{
+	}
+
+void CPop3SetSyncLimits::LogCommentFormat(TRefByValue<const TDesC> format,...)
+	{
+	// Build parameter list.
+	VA_LIST list;
+	VA_START(list, format);
+	TBuf<0x100> buf;
+	buf.FormatList(format, list);
+
+	// Log the debug buffer.
+	iTestHarness.EmailTestUtils().WriteComment(buf);
+	}
+
+void CPop3SetSyncLimits::StartL(TRequestStatus& aStatus)
+	{
+	// Assumes that Pop3 service currently selected.
+
+	LogCommentFormat(_L("[%4d] Setting sync limits (inbox=%d)"), iDebugInfo.LineNumber(), iInboxSyncLimit);
+
+	CImPop3Settings* settings = new(ELeave) CImPop3Settings();
+	CleanupStack::PushL(settings);
+
+	CEmailAccounts* account = CEmailAccounts::NewLC();				
+
+	TPopAccount popAccountId;
+	account->GetPopAccountL(iTestHarness.EmailTestUtils().iMsvEntry->EntryId(),popAccountId); 
+	account->LoadPopSettingsL(popAccountId, *settings);
+	settings->SetInboxSynchronisationLimit(iInboxSyncLimit);		
+	account->SavePopSettingsL(popAccountId, *settings);
+
+	CleanupStack::PopAndDestroy(account);
+	CleanupStack::PopAndDestroy(settings);
+
+	TRequestStatus* status = &aStatus;
+	User::RequestComplete(status, KErrNone);
+	}
+
+