--- /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);
+ }
+
+