diff -r 000000000000 -r 8e480a14352b messagingfw/msgtest/integration/email/src/poptests.cpp --- /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 +#include + +// 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 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 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 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 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); + } + +