diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/clientmtms/test/src/T_PartialFetch.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/clientmtms/test/src/T_PartialFetch.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,1879 @@ +// Copyright (c) 2004-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: +// Name of test harness: T_PARTIALFETCH +// Component: IMCM +// Owner: KP +// Brief description of test harness: +// Tests CImImap4GetMail - tests combination of Partial populate +// new/all/selection when the user is already connected; connects, does +// operation, disconnects; connects, does operation and stays online. +// Detailed description of test harness: +// As above. +// Input files required to run test harness: +// None +// Output files produced by running test harness: +// :\msglogs\T_PARTIALFETCH...LOG.txt +// Description of how to build test harness: +// cd \msg\imcm\ +// bldmake bldfiles +// abld test build +// Description of how to run test harness: +// The following instructions are the same for all platforms: +// 1. Build T_DB test harness from COMMDB component: +// cd \commdb\group +// bldmake bldfiles +// abld test build t_db +// 2. Build the test utilities: +// cd \msg\testutils\group\ +// bldmake bldfiles +// abld build +// WINS running instructions: +// 1. \epoc32\release\wins\\T_PARTIALFETCH.exe can be used at the command prompt +// or executable can be run from Windows Explorer. +// All other platform running instructions: +// 1. Copy \epoc32\release\\\T_PARTIALFETCH.exe onto the other platform +// 2. Copy \epoc32\release\\\MSVTESTUTILS.DLL into +// :\system\libs on the other platform +// 3. Copy \epoc32\release\\\EMAILTESTUTILS.DLL into +// :\system\libs on the other platform +// 4. Run T_PARTIALFETCH.exe on the other platform +// +// + +#include "emailtestutils.h" +#include +#include +#include "TESTENV.h" +#include +#include +#include + +// For loading the serial comms device drivers +#if defined (__WINS__) + #define PDD_NAME _L("ECDRV") + #define LDD_NAME _L("ECOMM") +#else + #define PDD_NAME _L("EUART1") + #define LDD_NAME _L("ECOMM") +#endif + +// local variables etc // + +class CDummyConnectionObserver : public MMsvImapConnectionObserver + { + void HandleImapConnectionEvent(TImapConnectionEvent aConnectionEvent); + }; + +void CDummyConnectionObserver::HandleImapConnectionEvent(TImapConnectionEvent) + { + } + + +_LIT(KImcmTest, "T_PARTIALFETCH - Testing CImImap4GetMail"); +RTest test(KImcmTest); + +_LIT(KTestParams,"-testparams"); +enum TCmdLineArgs + { + EArgProgramName, + EArgTestParams, + EArgServerAddress, + EArgLogin, + EArgPassword, + EArgFolderPath, + EArgEnd + }; + +LOCAL_D TMsvId imap4Service; +LOCAL_D TMsvId smtpService; +LOCAL_D TInt globalError; + +LOCAL_D CTrapCleanup* theCleanup; +LOCAL_D CEmailTestUtils* testUtils; + +LOCAL_D CMsvOperation* msvOperation; +LOCAL_D CMsvEntrySelection* msvSelection; +LOCAL_D CConsoleBase* console; + +class COperationActive; +LOCAL_D COperationActive* opActive; + +#if 1 +_LIT(KImapServer, "lon-msgtest06.intra"); +_LIT8(KFolderPath, ""); + +#else +_LIT(KImapServer, "utter.chaos.org.uk"); +_LIT8(KLoginName, "test"); +_LIT8(KPassword, "testtest"); +_LIT8(KFolderPath, "~/mail"); +#endif + +// +class TestUiTimer : public CTimer + { +public: + static TestUiTimer* NewLC(CConsoleBase* aConsole); + ~TestUiTimer(); + + void RunL(); + void DoCancel(); + void ConstructL(); + void IssueRequest(); + void SetOperation(CMsvOperation* aOperation); + TTimeIntervalMicroSeconds32 period; + TPtrC Progress(TInt progressNumber); + void SetCancelState(TInt aState); +protected: + TestUiTimer(CConsoleBase* aConsole); + + CConsoleBase* iConsole; +public: + CMsvOperation* iOperation; +private: + TInt iCancelState; + }; + +// +TestUiTimer* TestUiTimer::NewLC(CConsoleBase* aConsole) + { + TestUiTimer* self = new(ELeave) TestUiTimer(aConsole); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +TestUiTimer::TestUiTimer(CConsoleBase* aConsole) + : CTimer(1), iCancelState(200) + { + iConsole = aConsole; + period = 10000; + } + +TestUiTimer::~TestUiTimer() + { + delete iOperation; + } + +void TestUiTimer::ConstructL() + { + CTimer::ConstructL(); + CActiveScheduler::Add(this); + } + +void TestUiTimer::IssueRequest() + { + After(period); + } + +void TestUiTimer::SetOperation(CMsvOperation* aOperation) + { + if(iOperation) + { + delete iOperation; + iOperation=NULL; + } + iOperation = aOperation; + } + +void TestUiTimer::DoCancel() + { + CTimer::DoCancel(); + } + +TPtrC TestUiTimer::Progress(TInt progressNumber) + { + switch (progressNumber) + { + case 0: + return _L("Disconnected "); + case 1: + return _L("Connecting "); + case 2: + return _L("Idle "); + case 3: + return _L("Selecting "); + case 4: + return _L("Fetching "); + case 5: + return _L("Appending "); + case 6: + return _L("Copying "); + case 7: + return _L("Deleting "); + case 8: + return _L("Syncing "); + case 9: + return _L("Disconnecting "); + case 10: + return _L("Busy "); + case 11: + return _L("Moving "); + case 12: + return _L("Copying New Mail "); + case 13: + return _L("Moving New Mail "); + case 14: + return _L("Copying Mail Selection "); + case 15: + return _L("Moving Mail Selection "); + case 16: + return _L("Copying All Mail "); + case 17: + return _L("Moving All Mail "); + case 18: + return _L("Populating New Mail "); + case 19: + return _L("Populating All Mail "); + case 20: + return _L("Populating Mail Selection "); + default: + return _L("Unknown Progress "); + } + } + +void TestUiTimer::SetCancelState(TInt aState) + { + iCancelState = aState; + } + +void TestUiTimer::RunL() + { + // display the current progress + if(iOperation!=NULL) + { + TImap4GenericProgress temp; + TPckgC paramPack(temp); + paramPack.Set(iOperation->ProgressL()); + TImap4GenericProgress progress=paramPack(); + + if (iCancelState == progress.iImap4SubStateProgress) + { + iConsole->Printf(_L(" Calling Cancel\n")); + iOperation->Cancel(); + } + + iConsole->SetPos(0, 12); + TBuf<80> progressBuf = Progress(progress.iState); + iConsole->Printf(TRefByValue_L(" Super Operation Progress: %S "), &progressBuf); + iConsole->SetPos(0, 13); + progressBuf = Progress(progress.iImap4SubStateProgress); + iConsole->Printf(TRefByValue_L(" Sub Operation Progress : %S "), &progressBuf); + iConsole->SetPos(0, 14); + iConsole->Printf(TRefByValue_L(" Progress: %d/%d %d/%d Total:%d \n"), + progress.iMsgsDone, + progress.iMsgsToDo, + progress.iBytesDone, + progress.iBytesToDo, + progress.iTotalSize); + + iConsole->SetPos(0, 15); + iConsole->Printf(TRefByValue_L(" Error: %d \n"), progress.iErrorCode); + if (!globalError && progress.iErrorCode) + globalError=progress.iErrorCode; + } + IssueRequest(); + }; + +// + +class COperationActive : public CActive + { +public: + COperationActive(); + ~COperationActive(); + static COperationActive* NewL(); + void StartL(); + void SetOperation(CMsvOperation*); + void SetCancelState(TInt aCancelState); + +protected: + void DoCancel(); + void RunL(); +public: + TestUiTimer* iTimer; +private: + TBool iSetActive; + }; + +// +COperationActive::COperationActive() +: CActive(0) + { + } + +COperationActive::~COperationActive() + { + Cancel(); + delete iTimer; + } + +COperationActive* COperationActive::NewL() + { + COperationActive* self = new (ELeave) COperationActive; + CActiveScheduler::Add(self); + + self->iSetActive = ETrue; + self->iTimer = TestUiTimer::NewLC(test.Console()); + CleanupStack::Pop(); + return self; + } + +void COperationActive::DoCancel() + { + iTimer->DoCancel(); + } + +void COperationActive::StartL() + { + globalError=0; + iTimer->IssueRequest(); // Start the connect observation timer + SetActive(); + test.Console()->SetPos(0, 17); + test.Printf(TRefByValue_L("Operation TRequestStatus %d"), iStatus); + } + +void COperationActive::SetOperation(CMsvOperation *aOperation) + { + iTimer->SetOperation(aOperation); + } + +void COperationActive::SetCancelState(TInt aCancelState) + { + iTimer->SetCancelState(aCancelState); + } + +void COperationActive::RunL() + { + iTimer->Cancel(); + test.Console()->SetPos(25, 17); + test.Printf(_L(" ")); + test.Console()->SetPos(0, 17); + test.Printf(TRefByValue_L("Operation TRequestStatus %d"), iStatus); + CActiveScheduler::Stop(); + } + +// +LOCAL_C void CreateMailSelection(CMsvEntrySelection& aSelection) + { +// Create a selection of all IMAP4 messages in the parent folder. + testUtils->iMsvEntry->SetEntryL(imap4Service+1); +// testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service+1); + CMsvEntrySelection* selection = testUtils->iMsvEntry->ChildrenWithTypeL(KUidMsvMessageEntry); + + for(TInt i=0 ; iCount(); i++) + aSelection.AppendL(selection->At(i)); + testUtils->iMsvEntry->SetEntryL(imap4Service); + } + +LOCAL_C void ConnectAndSyncCompleteL() + { + testUtils->WriteComment(_L("Inside ConnectAndSyncCompleteL ")); + + testUtils->WriteComment(_L("Connecting to the IMAP4 server")); + + CDummyConnectionObserver *dummyObserver = new(ELeave)CDummyConnectionObserver; + //CleanupStack::PushL(dummyObserver); + + TPckg aParameter(dummyObserver); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndSyncCompleteAfterDisconnect, *msvSelection, aParameter, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the connect active object + testUtils->WriteComment(_L("End of ConnectAndSyncCompleteL ")); + } + + +LOCAL_C void ConnectToServerL() + { + testUtils->WriteComment(_L("Connecting to the IMAP4 server")); + TBuf8<1> aParameter; + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMConnect, *msvSelection, aParameter, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the connect active object + } + +LOCAL_C void SynchronizeRemoteInbox() + { + testUtils->WriteComment(_L("Synchronizing Remote Inbox")); + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + + TImImap4GetMailInfo imap4GetMailInfo; + imap4GetMailInfo.iMaxEmailSize = KMaxTInt; + imap4GetMailInfo.iDestinationFolder = KMsvGlobalInBoxIndexEntryIdValue; + imap4GetMailInfo.iGetMailBodyParts = EGetImap4EmailBodyText;//EGetImap4EmailBodyTextAndAttachments; + TPckgBuf package(imap4GetMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMFullSync, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the active object + } + +LOCAL_C void DisconnectFromServerL() + { + testUtils->WriteComment(_L("Disconnecting from the IMAP4 server")); + TBuf8<1> aParameter; + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMDisconnect, *msvSelection, aParameter, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the disconnect active object + } + +// +// Get Mail when already Connected tests +// +LOCAL_C void PopulateNewMessagesPartiallyWhenAlreadyConnectedL() + { + testUtils->WriteComment(_L("Populating new messages when already connected")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + msvSelection->AppendL(imap4Service+1); // remote inbox + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=EBodyTextAndAttachments; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iBodyTextSizeLimit = 7000; + imapGetPartialMailInfo.iAttachmentSizeLimit = 7000; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMPopulateNewMailWhenAlreadyConnected, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the populate new mail active object + } + +LOCAL_C void PopulateAllMessagesPartiallyWhenAlreadyConnectedL() + { + testUtils->WriteComment(_L("Populating all messages partially when already connected")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + msvSelection->AppendL(imap4Service+1); // remote inbox + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=EBodyTextAndAttachments; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iBodyTextSizeLimit = 7000; + imapGetPartialMailInfo.iAttachmentSizeLimit = 5000; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMPopulateAllMailWhenAlreadyConnected, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the populate all mail active object + } + +LOCAL_C void PopulateAllMessagesWithCumulativeOption() + { + testUtils->WriteComment(_L("Populating all messages partially when already connected with TImImap4PartialMailOptions = ECumulative")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + msvSelection->AppendL(imap4Service+1); // remote inbox + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=ECumulative; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMPopulateAllMailWhenAlreadyConnected, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the populate all mail active object + } + +LOCAL_C void PopulateAllMessagesWithNoSizeLimitOption() + { + testUtils->WriteComment(_L("Populating all messages with no size limits")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + msvSelection->AppendL(imap4Service+1); // remote inbox + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=ENoSizeLimits; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iBodyTextSizeLimit = 7000; + imapGetPartialMailInfo.iAttachmentSizeLimit = 7000; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMPopulateAllMailWhenAlreadyConnected, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the populate all mail active object + } + + +LOCAL_C void PopulateMessageSelectionPartiallyWhenAlreadyConnectedL() + { + testUtils->WriteComment(_L("Populate mail selection partially when already connected")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + CreateMailSelection(*msvSelection); // message in the remote inbox (to populate) + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=EBodyTextAndAttachments; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iBodyTextSizeLimit = 7000; + imapGetPartialMailInfo.iAttachmentSizeLimit = 7000; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMPopulateMailSelectionWhenAlreadyConnected, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the populate message selection active object + } + + +// +// Connect, Get Mail and Disconnect tests +// +LOCAL_C void ConnectAndPopulateNewMailPartiallyAndDisconnectL() + { + testUtils->WriteComment(_L("Connect, Populate New Mail, Disconnect")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + msvSelection->AppendL(imap4Service+1); // remote inbox + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=EBodyTextAndAttachments; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iBodyTextSizeLimit = 7000; + imapGetPartialMailInfo.iAttachmentSizeLimit = 7000; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndPopulateNewMailAndDisconnect, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the Populate new mail active object + } + +LOCAL_C void ConnectAndPopulateAllMailPartiallyAndDisconnectL() + { + testUtils->WriteComment(_L("Connect, Populate All Mail Partially, Disconnect")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + msvSelection->AppendL(imap4Service+1); // remote inbox + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=EBodyTextAndAttachments; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iBodyTextSizeLimit = 7000; + imapGetPartialMailInfo.iAttachmentSizeLimit = 7000; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndPopulateAllMailAndDisconnect, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the Populate all mail active object + } + + +LOCAL_C void ConnectAndPopulateAllMailAndDisconnectL() + { + testUtils->WriteComment(_L("Full download after partial download \n")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + msvSelection->AppendL(imap4Service+1); // remote inbox + + TImImap4GetMailInfo imap4GetMailInfo; + imap4GetMailInfo.iMaxEmailSize = KMaxTInt; + imap4GetMailInfo.iDestinationFolder = imap4Service+2; // service + imap4GetMailInfo.iGetMailBodyParts = EGetImap4EmailBodyTextAndAttachments; + TPckgBuf package(imap4GetMailInfo); + + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndPopulateAllMailAndDisconnect, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the Populate all mail active object + } + +LOCAL_C void ConnectAndPopulateMailSelectionPartiallyAndDisconnectL() + { + testUtils->WriteComment(_L("Connect, Populating remote msg, Disconnect")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + CreateMailSelection(*msvSelection); // message in the remote inbox (to populate) + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=EBodyTextAndAttachments; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iBodyTextSizeLimit = 7000; + imapGetPartialMailInfo.iAttachmentSizeLimit = 7000; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndPopulateMailSelectionAndDisconnect, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the populate message selection active object + } + +// +// Connect, Get Mail and Stay Online tests +// +LOCAL_C void ConnectAndPopulateNewMailPartiallyAndStayOnlineL() + { + testUtils->WriteComment(_L("Connect, Populate New Mail, Stay Online")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + msvSelection->AppendL(imap4Service+1); // remote inbox + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=EBodyTextAndAttachments; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iBodyTextSizeLimit = 7000; + imapGetPartialMailInfo.iAttachmentSizeLimit = 7000; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndPopulateNewMailAndStayOnline, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the Populate new mail active object + } + +LOCAL_C void ConnectAndPopulateAllMailPartiallyAndStayOnlineL() + { + testUtils->WriteComment(_L("Connect, Populate All Mail, Stay Online")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + msvSelection->AppendL(imap4Service+1); // remote inbox + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=EBodyTextAndAttachments; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iBodyTextSizeLimit = 7000; + imapGetPartialMailInfo.iAttachmentSizeLimit = 7000; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndPopulateAllMailAndStayOnline, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the Populate all mail active object + } + +LOCAL_C void ConnectAndPopulateMailSelectionAndStayOnlineL() + { + testUtils->WriteComment(_L("Connect, Populating remote msg, Stay Online")); + + msvSelection->ResizeL(0); + msvSelection->AppendL(imap4Service); + CreateMailSelection(*msvSelection); // message in the remote inbox (to populate) + + TImImap4GetPartialMailInfo imapGetPartialMailInfo; + imapGetPartialMailInfo.iPartialMailOptions=EBodyTextAndAttachments; + imapGetPartialMailInfo.iDestinationFolder = imap4Service+1;//KMsvGlobalInBoxIndexEntryIdValue; + imapGetPartialMailInfo.iBodyTextSizeLimit = 7000; + imapGetPartialMailInfo.iAttachmentSizeLimit = 7000; + imapGetPartialMailInfo.iTotalSizeLimit = 9000; + TPckgBuf package(imapGetPartialMailInfo); + + opActive->iStatus = KRequestPending; + msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndPopulateMailSelectionAndStayOnline, *msvSelection, package, opActive->iStatus); + opActive->SetOperation(msvOperation); + opActive->StartL(); // Start the populate message selection active object + } + +// + +LOCAL_C void ConnectAndSyncRemoteInboxAndDisconnectL() + { + console->SetPos(0, 6); + test.Printf(_L("\nPerforming Tests\n")); + console->SetPos(0, 7); + test.Printf(_L("Connecting to IMAP server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + return; + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Synchronize Remote Inbox \n")); + SynchronizeRemoteInbox(); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + return; + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + + CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + return; + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("ConnectAndSyncCompletedAfterDisconnect \n")); + + ConnectAndSyncCompleteL(); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + return; + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + + CActiveScheduler::Start(); + if (globalError) + return; + } + +// + +LOCAL_C void DeleteAndCreateServicesL() + { + // Handle command line arguments + CCommandLineArguments* cmdLineArg=CCommandLineArguments::NewLC(); + TInt count = cmdLineArg->Count(); + TBool isCmdLine=FALSE; + if (count>2) // Command line arguments? + { + if ((!(cmdLineArg->Arg(EArgTestParams).Compare(KTestParams))) && count==EArgEnd) + isCmdLine=TRUE; + } + // delete services + testUtils->iMsvEntry->SetEntryL(KMsvRootIndexEntryId); + testUtils->iMsvEntry->DeleteL(imap4Service); + testUtils->iMsvEntry->DeleteL(smtpService); + + // delete all messages in the Inbox + testUtils->iMsvEntry->SetEntryL(KMsvGlobalInBoxIndexEntryId); + CMsvEntrySelection* children = testUtils->iMsvEntry->ChildrenL(); + CleanupStack::PushL(children); + TInt total = children->Count(); + for (TInt i=0; iiMsvEntry->DeleteL((*children)[i]); + CleanupStack::PopAndDestroy(children); + + // Create Services + smtpService = testUtils->CreateSmtpServiceL(); + imap4Service = testUtils->CreateImapServiceL(); + + testUtils->iMsvEntry->SetEntryL(imap4Service); + + //overwrite the settings with test code one. Don't want the default settings. + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + + CImImap4Settings* settings = new(ELeave) CImImap4Settings(); + CleanupStack::PushL(settings); + settings->Reset(); + + if (isCmdLine) + { + TBuf<100> buf; + TLex lex(cmdLineArg->Arg(EArgServerAddress)); + buf=lex.NextToken(); + settings->SetServerAddressL(buf); + } + else + settings->SetServerAddressL(KImapServer); + + settings->SetDeleteEmailsWhenDisconnecting(ETrue); + settings->SetAcknowledgeReceipts(ETrue); + settings->SetAutoSendOnConnect(ETrue); + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgLogin)); + buf=lex.NextToken(); + data.Copy(buf); + settings->SetLoginNameL(data); + } + else + settings->SetLoginNameL(testUtils->MachineName()); + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgPassword)); + buf=lex.NextToken(); + data.Copy(buf); + settings->SetPasswordL(data); + } + else + settings->SetPasswordL(testUtils->MachineName()); + + settings->SetPort(143); + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgFolderPath)); + buf=lex.NextToken(); + data.Copy(buf); + settings->SetFolderPathL(data); + } + else + settings->SetFolderPathL(KFolderPath); + + TImapAccount imapAccount; + accounts->GetImapAccountL(imap4Service, imapAccount); + accounts->SaveImapSettingsL(imapAccount, *settings); + + CleanupStack::PopAndDestroy(2); //settings, store/accounts + CleanupStack::PopAndDestroy(); // cmdLineArg + } + +LOCAL_C void CreateServicesL() + { + // Handle command line arguments + CCommandLineArguments* cmdLineArg=CCommandLineArguments::NewLC(); + TInt count = cmdLineArg->Count(); + TBool isCmdLine=FALSE; + if (count>2) // Command line arguments? + { + if ((!(cmdLineArg->Arg(EArgTestParams).Compare(KTestParams))) && count==EArgEnd) + isCmdLine=TRUE; + } + + //overwrite the settings with test code one. Don't want the default settings. + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + + CImImap4Settings* settings = new(ELeave) CImImap4Settings(); + CleanupStack::PushL(settings); + settings->Reset(); + + if (isCmdLine) + { + TBuf<100> buf; + TLex lex(cmdLineArg->Arg(EArgServerAddress)); + buf=lex.NextToken(); + settings->SetServerAddressL(buf); + } + else + settings->SetServerAddressL(KImapServer); + + settings->SetDeleteEmailsWhenDisconnecting(EFalse); + settings->SetAcknowledgeReceipts(ETrue); + settings->SetAutoSendOnConnect(ETrue); + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgLogin)); + buf=lex.NextToken(); + data.Copy(buf); + settings->SetLoginNameL(data); + } + else + settings->SetLoginNameL(testUtils->MachineName()); + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgPassword)); + buf=lex.NextToken(); + data.Copy(buf); + settings->SetPasswordL(data); + } + else + settings->SetPasswordL(testUtils->MachineName()); + + settings->SetPort(143); + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgFolderPath)); + buf=lex.NextToken(); + data.Copy(buf); + settings->SetFolderPathL(data); + } + else + settings->SetFolderPathL(KFolderPath); + + TImapAccount imapAccount; + accounts->GetImapAccountL(testUtils->iMsvEntry->EntryId(), imapAccount); + accounts->SaveImapSettingsL(imapAccount, *settings); + + CleanupStack::PopAndDestroy(2); //settings, store/accounts + CleanupStack::PopAndDestroy(); // cmdLineArg + } + + +LOCAL_C void InitL() + { + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CActiveScheduler::Install(scheduler); + CleanupStack::PushL(scheduler); + + testUtils = CEmailTestUtils::NewLC(test); + console = test.Console(); + testUtils->FileSession().SetSessionPath(_L("C:\\")); + testUtils->CleanMessageFolderL(); + testUtils->GoClientSideL(); + + console->SetPos(0, 3); + test.Printf(_L("Create Services ")); + testUtils->WriteComment(_L("Create Services ")); + // Create Services + smtpService = testUtils->CreateSmtpServiceL(); + imap4Service = testUtils->CreateImapServiceL(); + + testUtils->WriteComment(_L("********** T_PARTIALFETCH Test **********")); + } + +LOCAL_C void Closedown() + { + CleanupStack::PopAndDestroy(2); //testUtils, scheduler + } + +// + +LOCAL_C TPtrC Progress(TInt progressNumber) + { + switch (progressNumber) + { + case 0: + return _L("Disconnected "); + case 1: + return _L("Connecting "); + case 2: + return _L("Idle "); + case 3: + return _L("Selecting "); + case 4: + return _L("Fetching "); + case 5: + return _L("Appending "); + case 6: + return _L("Copying "); + case 7: + return _L("Deleting "); + case 8: + return _L("Syncing "); + case 9: + return _L("Disconnecting "); + case 10: + return _L("Busy "); + case 11: + return _L("Moving "); + case 12: + return _L("Copying New Mail "); + case 13: + return _L("Moving New Mail "); + case 14: + return _L("Copying Mail Selection "); + case 15: + return _L("Moving Mail Selection "); + case 16: + return _L("Copying All Mail "); + case 17: + return _L("Moving All Mail "); + case 18: + return _L("Populating New Mail "); + case 19: + return _L("Populating All Mail "); + case 20: + return _L("Populating Mail Selection "); + default: + return _L("Unknown Progress "); + } + } + + +LOCAL_C void doMainL() + { + InitL(); + + // Load the serial comms device drivers. If this is not done, + // connecting via NT-RAS returns KErrNotFound (-1). + TInt driverErr; + driverErr=User::LoadPhysicalDevice(PDD_NAME); + if (driverErr!=KErrNone && driverErr!=KErrAlreadyExists) + User::Leave(driverErr); + driverErr=User::LoadLogicalDevice(LDD_NAME); + if (driverErr!=KErrNone && driverErr!=KErrAlreadyExists) + User::Leave(driverErr); + + testUtils->FileSession().SetSessionPath(_L("c:\\")); + // Delete any *.scr files in c:\logs\email directory. + testUtils->DeleteScriptFilesFromLogsDirL(); + + testUtils->iMsvEntry->SetEntryL(imap4Service); + + // Handle command line arguments + CCommandLineArguments* cmdLineArg=CCommandLineArguments::NewLC(); + TInt count = cmdLineArg->Count(); + TBool isCmdLine=FALSE; + if (count>2) // Command line arguments? + { + if ((!(cmdLineArg->Arg(EArgTestParams).Compare(KTestParams))) && count==EArgEnd) + isCmdLine=TRUE; + } + + //overwrite the settings with test code one. Don't want the default settings. + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + + CImImap4Settings* settings = new(ELeave) CImImap4Settings(); + CleanupStack::PushL(settings); + settings->Reset(); + + if (isCmdLine) + { + TBuf<100> buf; + TLex lex(cmdLineArg->Arg(EArgServerAddress)); + buf=lex.NextToken(); + test.Printf(_L("Server address: %S\n"),&buf); + settings->SetServerAddressL(buf); + } + else + settings->SetServerAddressL(KImapServer); + + settings->SetDeleteEmailsWhenDisconnecting(EFalse); + settings->SetAcknowledgeReceipts(ETrue); +// settings->SetAutoSendOnConnect(ETrue); + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgLogin)); + buf=lex.NextToken(); + test.Printf(_L("Login: %S\n"),&buf); + data.Copy(buf); + settings->SetLoginNameL(data); + } + else + settings->SetLoginNameL(testUtils->MachineName()); + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgPassword)); + buf=lex.NextToken(); + test.Printf(_L("Password: %S\n"),&buf); + data.Copy(buf); + settings->SetPasswordL(data); + } + else + settings->SetPasswordL(testUtils->MachineName()); + + settings->SetPort(143); + + if (isCmdLine) + { + TBuf<100> buf; + TBuf8<64> data; + TLex lex(cmdLineArg->Arg(EArgFolderPath)); + buf=lex.NextToken(); + test.Printf(_L("Folder Path: %S\n"),&buf); + data.Copy(buf); + settings->SetFolderPathL(data); + } + else + settings->SetFolderPathL(KFolderPath); + + TImapAccount imapAccount; + accounts->GetImapAccountL(imap4Service, imapAccount); + accounts->SaveImapSettingsL(imapAccount, *settings); + + CleanupStack::PopAndDestroy(2); //settings, store/accounts + CleanupStack::PopAndDestroy(); // cmdLineArg + + console->SetPos(0, 3); + test.Printf(_L("Instantiating IMAP4 Client MTM")); + testUtils->WriteComment(_L("Instantiating IMAP4 Client MTM")); + testUtils->InstantiateImapClientMtmL(); +// Tests start here + +// +// +// Test 1 +// Populating all mail partially when already connected +// +// + + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + testUtils->TestStart(1); + // connect, do full sync and then disconnect so that the inbox can be synced + ConnectAndSyncRemoteInboxAndDisconnectL(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to IMAP server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Populating all mails partially when already connected \n")); + PopulateAllMessagesPartiallyWhenAlreadyConnectedL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(1,globalError); + CleanupStack::PopAndDestroy(2); // opActive, msvSelection + if (globalError) + { + Closedown(); + return; + } + +// +// +// Test 2 +// Populate new mails partially when already connected to server +// +// + + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + testUtils->TestStart(2); + // connect, do full sync and then disconnect so that the inbox can be synced + ConnectAndSyncRemoteInboxAndDisconnectL(); + + if (globalError) + { + Closedown(); + return; + } + + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to IMAP server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Populate new mails partially when already connected to server \n")); + PopulateNewMessagesPartiallyWhenAlreadyConnectedL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(2,globalError); + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + if (globalError) + { + Closedown(); + return; + } + +// +// +// Test 3 +// Populate mail selection partially when already connected to server +// +// + + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + testUtils->TestStart(3); + // connect, do full sync and then disconnect so that the inbox can be synced + ConnectAndSyncRemoteInboxAndDisconnectL(); + + // Populate mail selection when already connected to server + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to IMAP server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Populate mail selection partially when already connected to server\n")); + PopulateMessageSelectionPartiallyWhenAlreadyConnectedL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(3,globalError); + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + if (globalError) + { + Closedown(); + return; + } + +// +// +// Test 4 +// Connect and populate new mails partially and disconnect +// +// + + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + ConnectAndSyncRemoteInboxAndDisconnectL(); + + testUtils->TestStart(4); + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Populate New Mails Partially, Disconnect \n")); + ConnectAndPopulateNewMailPartiallyAndDisconnectL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(4,globalError); + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + if (globalError) + { + Closedown(); + return; + } + +// +// +// Test 5 +// Connect and populate all mails partially and disconnect +// +// + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + ConnectAndSyncRemoteInboxAndDisconnectL(); + + testUtils->TestStart(5); + // Connect, Populate All Mail and then disconnect + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Populate All Mails Partially, Disconnect \n")); + ConnectAndPopulateAllMailPartiallyAndDisconnectL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(5,globalError); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + if (globalError) + { + Closedown(); + return; + } + +// +// +// Test 6 +// Connect, Populate Mail Selection Partially, Stay Online +// +// + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + // connect, do full sync and then disconnect so that the inbox can be synced + ConnectAndSyncRemoteInboxAndDisconnectL(); + + testUtils->TestStart(6); + // Connect, Populate Mail Selection and Stay Online + CleanupStack::PopAndDestroy(); // opActive + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Populate Mail Selection Partially, Stay Online \n")); + ConnectAndPopulateMailSelectionAndStayOnlineL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + testUtils->TestFinish(6,globalError); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + if (globalError) + { + Closedown(); + return; + } + +// +// +// Test 7 +// Connect, Populate New Mails Partially, Stay Online +// +// + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + // connect, do full sync and then disconnect so that the inbox can be synced + ConnectAndSyncRemoteInboxAndDisconnectL(); + + testUtils->TestStart(7); + // Connect, Populate New Mail and Stay Online + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Populate New Mails Partially, Stay Online \n")); + ConnectAndPopulateNewMailPartiallyAndStayOnlineL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + testUtils->TestFinish(7,globalError); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + if (globalError) + { + Closedown(); + return; + } +// +// +// Test 8 +// Connect, Populate All Mails partially, Stay Online +// +// + + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + // connect, do full sync and then disconnect so that the inbox can be synced + ConnectAndSyncRemoteInboxAndDisconnectL(); + + testUtils->TestStart(8); + // Connect, Populate All Mail and Stay Online + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Populate All Mails Partially, Stay Online \n")); + ConnectAndPopulateAllMailPartiallyAndStayOnlineL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + testUtils->TestFinish(8,globalError); + + // cleanup for next test + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + if (globalError) + { + Closedown(); + return; + } + +// +// +// Test 9 +// Populating all mails partially when already connected with TImImap4PartialMailOptions = ENoSizeLimits +// +// + + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + testUtils->TestStart(9); + // connect, do full sync and then disconnect so that the inbox can be synced + ConnectAndSyncRemoteInboxAndDisconnectL(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to IMAP server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Populating all mails with No Size Limits \n")); + PopulateAllMessagesWithNoSizeLimitOption(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(9,globalError); + CleanupStack::PopAndDestroy(2); // opActive,msvSelection + if (globalError) + { + Closedown(); + return; + } + +// +// +// Test 10 +// Populating all mails partially when already connected with TImImap4PartialMailOptions = ECumulative +// +// + + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + testUtils->TestStart(10); + // connect, do full sync and then disconnect so that the inbox can be synced + ConnectAndSyncRemoteInboxAndDisconnectL(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connecting to IMAP server \n")); + ConnectToServerL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Populating all mails partially when already connected with TImImap4PartialMailOptions = ECumulative \n")); + PopulateAllMessagesWithCumulativeOption(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Disconnecting from the server \n")); + DisconnectFromServerL(); + CActiveScheduler::Start(); + + testUtils->TestFinish(10,globalError); + CleanupStack::PopAndDestroy(2); // opActive,msvSelection + if (globalError) + { + Closedown(); + return; + } + +// +// +// Test 11 +// Test for full download of emails after partial download +// +// + + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + // Populating all mails partially when already connected + testUtils->TestStart(11); + // connect, do full sync and then disconnect so that the inbox can be synced + ConnectAndSyncRemoteInboxAndDisconnectL(); + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Populating all mails partially when already connected \n")); + + ConnectAndPopulateAllMailPartiallyAndDisconnectL(); + + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + + testUtils->WriteComment(_L("Doing full download of emails after partial download")); + // Now do a full download of emails after partial download + CreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Full download all mail when already connected \n")); + + ConnectAndPopulateAllMailAndDisconnectL(); + + CActiveScheduler::Start(); + + testUtils->TestFinish(11,globalError); + CleanupStack::PopAndDestroy(2); // opActive,msvSelection + if (globalError) + { + Closedown(); + return; + } + +// +// +// Test 12 +// Connect and populate mail selection Partially and disconnect +// +// + + DeleteAndCreateServicesL(); + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + + msvSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + + // connect, do full sync and then disconnect so that the inbox can be synced + ConnectAndSyncRemoteInboxAndDisconnectL(); + + testUtils->TestStart(12); + // Connect, Populate Mail Selection and then disconnect + CleanupStack::PopAndDestroy(); // opActive + if (globalError) + { + Closedown(); + return; + } + opActive = COperationActive::NewL(); + CleanupStack::PushL(opActive); + console->SetPos(0, 7); + test.Printf(_L("Connect, Populate Mail Selection Partially, Disconnect \n")); + ConnectAndPopulateMailSelectionPartiallyAndDisconnectL(); + CActiveScheduler::Start(); + +// check that final progress showing the correct information + TPckgBuf progress; + progress.Copy(opActive->iTimer->iOperation->FinalProgress()); + + console->SetPos(0, 11); + console->Printf(_L("Final Progress: ")); + console->SetPos(0, 12); + TBuf<80> progressBuf = Progress(progress().iState); + console->Printf(TRefByValue_L(" Super Operation Progress: %S "), &progressBuf); + console->SetPos(0, 13); + progressBuf = Progress(progress().iImap4SubStateProgress); + console->Printf(TRefByValue_L(" Sub Operation Progress : %S "), &progressBuf); + console->SetPos(0, 14); + console->Printf(TRefByValue_L(" Progress: %d/%d %d/%d Total:%d \n"), + progress().iMsgsDone, + progress().iMsgsToDo, + progress().iBytesDone, + progress().iBytesToDo, + progress().iTotalSize); + console->SetPos(0, 15); + console->Printf(TRefByValue_L(" Error: %d \n"), progress().iErrorCode); + + // wait 5 seconds so that user can see the final progess! + CTestTimer* timer = CTestTimer::NewL(); + timer->After(5000000); + CActiveScheduler::Start(); + delete timer; + +// testUtils->FindChildrenL(KMsvRootIndexEntryId, EFalse, EFalse); + testUtils->TestFinish(12,globalError); + if (globalError) + testUtils->TestHarnessFailed(globalError); + else + testUtils->TestHarnessCompleted(); + + CleanupStack::PopAndDestroy(2); //msvSelection, opActive, + + testUtils->Reset(); + Closedown(); + } + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + test.Start(_L("T_PARTIALFETCH Test for partial fetch of emails")); + theCleanup=CTrapCleanup::New(); + TRAPD(ret,doMainL()); + test(ret==KErrNone); + delete theCleanup; + test.End(); + test.Close(); + __UHEAP_MARKEND; + User::Heap().Check(); + return(KErrNone); + }