messagingfw/msgtest/integration/email/src/smtptests.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/integration/email/src/smtptests.cpp	Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,317 @@
+// 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 "smtptests.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(KErrOperation,  "Operation didn't complete as expected. Expected status: [%d], actual status: [%d]");
+_LIT(KPopAccountName, "POP");
+
+const TInt KMaxErrorText = 100;
+
+//
+//
+// CSmtpClientTest
+//
+
+CSmtpClientTest* CSmtpClientTest::NewL(CEmailTestUtils& aTestUtils, RTest& aTest)
+	{
+	CSmtpClientTest* self = new (ELeave) CSmtpClientTest(aTestUtils, aTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CSmtpClientTest::~CSmtpClientTest()
+	{
+	}
+
+void CSmtpClientTest::ConstructL()
+	{
+	CEmailClientTest::ConstructL();
+	}
+
+CSmtpClientTest::CSmtpClientTest(CEmailTestUtils& aTestUtils, RTest& aTest) : CEmailClientTest(aTestUtils, aTest)
+	{
+	}
+
+
+
+//
+//
+// CCreateSmtpService
+//
+
+void CCreateSmtpService::StartL(TRequestStatus& aStatus)
+	{
+	// create pop account (pop account also creates smtp service)
+	CEmailAccounts* account = CEmailAccounts::NewLC();
+
+	CImIAPPreferences* smtpIAP = CImIAPPreferences::NewLC();
+				
+	TSmtpAccount accountId = account->CreateSmtpAccountL(*iDetails,*iSettings, *smtpIAP, EFalse);
+
+	// get pop service for the account
+	TMsvId service = accountId.iSmtpService;
+	
+	// select this service
+	CMsvEntry& msvEntry = *(iTestHarness.EmailTestUtils().iMsvEntry);
+	msvEntry.SetEntryL(service);
+	iEntry = msvEntry.Entry();
+	iEntry.SetVisible(ETrue);
+	iTestHarness.iCurrentServiceId = service;
+	iTestHarness.EmailTestUtils().iSmtpServiceId = service;
+
+	CleanupStack::PopAndDestroy(2, account); // smtpIAP, account
+
+	// If the SMTP Client MTM doesn't already exist, then Instantiate it 
+	if (!iTestHarness.EmailTestUtils().iSmtpClientMtm)
+		iTestHarness.EmailTestUtils().InstantiateSmtpClientMtmL();
+
+	TRequestStatus* status = &aStatus;
+	User::RequestComplete(status, KErrNone);
+	}
+
+CCreateSmtpService* CCreateSmtpService::NewL(CEmailClientTest& aTestHarness)
+	{
+	CCreateSmtpService* self = new (ELeave) CCreateSmtpService(aTestHarness);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CCreateSmtpService::CCreateSmtpService(CEmailClientTest& aTestHarness) : CCreateEmailService(aTestHarness), iTestHarness(aTestHarness)
+	{
+	}
+
+void CCreateSmtpService::ConstructL()
+	{
+	iSettings = new(ELeave) CImSmtpSettings();
+	}
+
+CCreateSmtpService::~CCreateSmtpService()
+	{
+	delete iSettings;
+	}
+
+CImSmtpSettings& CCreateSmtpService::Settings()
+	{
+	return *iSettings;
+	}
+
+
+//
+//
+// CCreateSmtpClientMtm
+//
+
+CCreateSmtpClientMtm::CCreateSmtpClientMtm(CEmailClientTest& aTest) : iTest(aTest)
+	{
+	}
+
+void CCreateSmtpClientMtm::StartL(TRequestStatus& aStatus)
+	{
+	iTest.EmailTestUtils().InstantiatePopClientMtmL();
+	TRequestStatus* status = &aStatus;
+	User::RequestComplete(status, KErrNone);
+	}
+
+
+
+//
+//
+// CCheckSmtpOperation
+//
+
+CCheckSmtpOperation::CCheckSmtpOperation(TInt aExpectedStatus, CSmtpClientTest& aTestHarness) : iTestHarness(aTestHarness), iExpectedStatus(aExpectedStatus)
+	{
+	}
+
+void CCheckSmtpOperation::StartL(TRequestStatus& aStatus)
+	{
+	TInt err = KErrNone;
+
+	TImSmtpProgress temp;	
+	TPckgC<TImSmtpProgress> paramPack(temp);
+	paramPack.Set(iTestHarness.CurrentOperation().ProgressL());
+	TImSmtpProgress progress=paramPack();	
+
+	if (progress.Error() != iExpectedStatus)
+		{
+		TBuf<KMaxErrorText> logString;
+		logString.Format(KErrOperation, iExpectedStatus, progress.Error());
+		iTestHarness.LogComment(logString);
+		err = KErrUnknown;
+		}
+
+	TRequestStatus* status = &aStatus;
+	User::RequestComplete(status, err);
+	}
+
+
+//
+//
+// CSmtpUseService
+//
+
+CSmtpUseService::CSmtpUseService(CSmtpClientTest& aTestHarness) : iTestHarness(aTestHarness)
+	{
+	}
+
+void CSmtpUseService::StartL(TRequestStatus& aStatus)
+	{
+	TInt err = KErrNone;
+
+	// Select current folder
+	CMsvEntry& entry = *(iTestHarness.EmailTestUtils().iMsvEntry);
+	entry.SetEntryL(iTestHarness.iSelectedFolder);
+		
+	// Check it is a service which is selected
+	if(entry.Entry().iType == KUidMsvServiceEntry)
+		{
+		// Make sure that the Root folder is selected
+		iTestHarness.iSelectedFolder = KMsvRootIndexEntryId;
+
+		// Change the Harness & Test Utils to use this SMTP service id
+		iTestHarness.EmailTestUtils().iSmtpServiceId = entry.Entry().Id();
+		iTestHarness.iCurrentServiceId = entry.Entry().Id();
+
+		// If the Smtp Client MTM doesn't already exist, then Instantiate it 
+		if (!iTestHarness.EmailTestUtils().iSmtpClientMtm)
+			iTestHarness.EmailTestUtils().InstantiateSmtpClientMtmL();
+		}
+	else
+		{
+		TBuf<KMaxErrorText> logString;
+		logString.Format(KErrUseService, iDebugInfo.LineNumber());
+		iTestHarness.LogComment(logString);
+
+		err = KErrUnknown;
+		}
+
+	TRequestStatus* status = &aStatus;
+	User::RequestComplete(status, err);
+	}
+
+//
+//
+// CCopySelectionAndMonitor
+//
+CCopySelectionAndMonitor::CCopySelectionAndMonitor(CEmailClientTest& aParentTestHarness, TBool aSynchronise) : CActive(EPriorityNormal), iParentTestHarness(aParentTestHarness), iSynchronise(aSynchronise)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+
+
+void CCopySelectionAndMonitor::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 CCopySelectionAndMonitor::StartL(TRequestStatus& aStatus)
+	{
+	iParentTestHarness.MsvTestUtils().iMsvEntry->SetEntryL(iParentTestHarness.iSelectedFolder);
+	iReportStatus = &aStatus;
+	iParentTestHarness.SetCurrentOperation(iParentTestHarness.MsvTestUtils().iMsvEntry->CopyL(*(iParentTestHarness.iCurrentSelection), iParentTestHarness.iDestinationFolder, 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
+	
+	//initialise to unused values
+	TInt progressState = KInvalidState;
+	TInt connectState = KInvalidState;
+	TInt iap = KInvalidIAP;
+	TInt connection_progress_state = 0;
+
+	do
+		{
+		TImSmtpProgress temp;	
+		TPckgC<TImSmtpProgress> paramPack(temp);
+		paramPack.Set(iParentTestHarness.CurrentOperation().ProgressL());
+		TImSmtpProgress progress = paramPack();	
+
+		progressState = progress.Status();
+		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 500 microseconds and then re-test progress!
+		timer.After(timerStatus,500);
+		User::WaitForRequest(timerStatus); 
+
+	
+		} while (progressState == EMsgOutboxProgressConnecting);
+
+	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;
+		}
+
+	aStatus = KRequestPending;
+	SetActive();
+	}
+
+void CCopySelectionAndMonitor::RunL()
+	{
+	if (iConnectionError)
+		User::RequestComplete(iReportStatus, KErrUnknown);	
+	else
+		User::RequestComplete(iReportStatus, iStatus.Int());
+	}
+
+void CCopySelectionAndMonitor::DoCancel()
+	{
+	iParentTestHarness.CurrentOperation().Cancel();
+	}
+
+
+CCopySelectionAndMonitor::~CCopySelectionAndMonitor()
+	{
+	}
+
+
+