diff -r 238255e8b033 -r 84d9eb65b26f email/pop3andsmtpmtm/imapservermtm/test/src/T_ConnectAndSyncAfterDisconnect.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/imapservermtm/test/src/T_ConnectAndSyncAfterDisconnect.cpp Mon May 03 12:29:07 2010 +0300 @@ -0,0 +1,356 @@ +// Copyright (c) 2006-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_ConnectAndSyncAfterDisconnect.cpp +// Component: imapservermtm +// Output files produced by running test harness: +// :\msglogs\T_ConnectAndSyncAfterDisconnect.WINSCW.DEB.LOG +// +// + + +#include "EmailTestUtils.h" +#include +#include + + +_LIT(KAt ,"@"); +_LIT8(KFolderPath, ""); +_LIT(KServer, ".intra"); +_LIT(KConnectAndSyncAfterDisconnect, " Testing ConnectAndSyncAfterDisconnect"); +_LIT(KMsgCompleted, "\t CopyL completed with : %d"); +_LIT(KMsgSend, "\t messages to send in the outbox = : %d"); +_LIT(KProgressError, "\t Progress error = %d"); + +RTest test(KConnectAndSyncAfterDisconnect); +TImapAccount imapAccount; +LOCAL_D TMsvId imap4Service; +LOCAL_D TMsvId smtpService; +LOCAL_D CEmailTestUtils* testUtils; +LOCAL_D CTrapCleanup* theCleanup; + +#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 TDummySessionObserver : public CBase , public MMsvSessionObserver + { +public: + void HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) + {} + }; + + +class CDummyConnectionObserver : public MMsvImapConnectionObserver + { + void HandleImapConnectionEvent(TImapConnectionEvent /*aConnectionEvent*/) + {} + }; + +// Disconnect from ImapServer +LOCAL_C void DisconnectImapServerL() + { + test.Printf(_L("DisConnecting to IMAP server \n")); + CTestActive* testActive = new (ELeave) CTestActive(); + CleanupStack::PushL(testActive); + + CMsvEntrySelection *msvSelection = new(ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + msvSelection->AppendL(imap4Service); + + TBuf8 <1> aParameter; + CMsvOperation* msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMDisconnect,*msvSelection, aParameter, testActive->iStatus); + testUtils->WriteComment(_L("Dissconnect from IMAP server ")); + CleanupStack::PushL(msvOperation); + + testActive->StartL(); + CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(3,testActive);//msvOperation,msvSelection,children,testActive + } + + +LOCAL_C void ConnectAndFullSyncImapServerL() + { + CTestActive* testActive = new(ELeave) CTestActive(); + CleanupStack::PushL(testActive); + + CMsvEntrySelection * msvSelection = new(ELeave) CMsvEntrySelection; + CleanupStack::PushL(msvSelection); + + test.Printf(_L("Connecting to IMAP server \n")); + msvSelection->AppendL(imap4Service); + + CDummyConnectionObserver *dummyObserver = new(ELeave)CDummyConnectionObserver; + CleanupStack::PushL(dummyObserver); + TPckg aParameter(dummyObserver); + + CMsvOperation* msvOperation = testUtils->iImapClientMtm->InvokeAsyncFunctionL(KIMAP4MTMConnectAndSyncCompleteAfterDisconnect,*msvSelection, aParameter, testActive->iStatus); + testUtils->WriteComment(_L(" Connect to Imap server and Sync the mails ")); + CleanupStack::PushL(msvOperation); + + testActive->StartL(); + CActiveScheduler::Start(); + + CleanupStack::PopAndDestroy(4,testActive);//msvOperation,dummyObserver,msvSelection,testActive + } + + +// +LOCAL_C void CreateNewSmtpSettingsL() + { + testUtils->iMsvEntry->SetEntryL(smtpService); + TMsvId serviceId = smtpService; + //overwrite the settings with test code one. Don't want the default settings. + CImSmtpSettings* settings = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(settings); + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + TSmtpAccount smtpAccountId; + accounts->GetSmtpAccountL( serviceId, smtpAccountId); + accounts->LoadSmtpSettingsL(smtpAccountId, *settings); + TInt serverLength = testUtils->MachineName().Length(); + HBufC* serverad = HBufC::NewL(serverLength + 7 ); // 7 is the length of KServerAddress + CleanupStack::PushL(serverad); + serverad->Des().Copy(testUtils->MachineName()); + serverad->Des().Append(KServer); + settings->SetServerAddressL(*serverad); + HBufC* emailaddress = HBufC::NewL(serverLength + 8 + serverad->Des().Length() + 1 ); + CleanupStack::PushL(emailaddress); + emailaddress->Des().Copy(testUtils->MachineName()); + emailaddress->Des().Append(KAt); + emailaddress->Des().Append(*serverad); + settings->SetEmailAddressL(*emailaddress); + settings->SetReplyToAddressL(*emailaddress); + settings->SetReceiptAddressL(*emailaddress); + settings->SetEmailAliasL(_L("Test Account")); + settings->SetBodyEncoding(EMsgOutboxMIME); + settings->SetRequestReceipts(EFalse); + settings->SetPort(25); + TSmtpAccount smtpAccount; + accounts->GetSmtpAccountL(smtpService, smtpAccount); + accounts->SaveSmtpSettingsL(smtpAccount, *settings); + CleanupStack::PopAndDestroy(emailaddress); + CleanupStack::PopAndDestroy(serverad); + CleanupStack::PopAndDestroy(2,settings); + testUtils->WriteComment(_L("Created New SmtpSettings ")); + + } +LOCAL_C void CreateNewPlaintextMessageL() + { + CTestActive* testActive = new(ELeave) CTestActive(); + CleanupStack::PushL(testActive); + TMsvEmailTypeList msvEmailTypeList = 0; + TMsvPartList partList = (KMsvMessagePartBody | KMsvMessagePartAttachments); + CImEmailOperation* emailOperation = CImEmailOperation::CreateNewL(testActive->iStatus, *(testUtils->iMsvSession),KMsvGlobalOutBoxIndexEntryId, partList, msvEmailTypeList, KUidMsgTypeSMTP); + CleanupStack::PushL(emailOperation); + TestMsvOperationTimer* testMsvOperationTimer = TestMsvOperationTimer::NewLC(test.Console(), emailOperation, test); + testActive->StartL(); + testMsvOperationTimer->IssueRequest(); + CActiveScheduler::Start(); + //check progress + TMsvId temp; + TPckgC paramPack(temp); + const TDesC8& progBuf = emailOperation->ProgressL(); + paramPack.Set(progBuf); + TMsvId newMessageId; + newMessageId = paramPack(); + test(newMessageId != NULL); + testUtils->WriteComment(_L("\t Created New plaintext message")); + testUtils->iMsvEntry->SetEntryL(newMessageId); + CMsvStore* store = testUtils->iMsvEntry->EditStoreL(); + CleanupStack::PushL(store); + CImHeader* header = CImHeader::NewLC(); + header->RestoreL(*store); + + TInt serverLength = testUtils->MachineName().Length(); + HBufC* serverad = HBufC::NewL(serverLength + 7 ); // 7 is the length of KServerAddress + CleanupStack::PushL(serverad); + serverad->Des().Copy(testUtils->MachineName()); + serverad->Des().Append(KServer); + HBufC* emailaddress = HBufC::NewL(serverLength + 8 + serverad->Des().Length() + 1 ); + CleanupStack::PushL(emailaddress); + emailaddress->Des().Copy(testUtils->MachineName()); + emailaddress->Des().Append(KAt); + emailaddress->Des().Append(*serverad); + header->ToRecipients().AppendL(*emailaddress); + + header->SetSubjectL(_L("Test sending message using CMsvEntry::CopyL!!")); + header->StoreL(*store); + store->CommitL(); + CleanupStack::PopAndDestroy(emailaddress); + CleanupStack::PopAndDestroy(serverad); + CleanupStack::PopAndDestroy(5,testActive); // header,store,testMsvOperationTimer,emailOperation,testActive + + + } +LOCAL_C void SendSmtpMessageL() + { + CTestActive* testActive = new (ELeave) CTestActive(); + CleanupStack::PushL(testActive); + testUtils->iMsvEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryId); + testUtils->InstantiateSmtpClientMtmL(); + CMsvEntrySelection* sendSel = testUtils->iMsvEntry->ChildrenL(); + CleanupStack::PushL(sendSel); + TInt count = sendSel->Count(); + test(count >= 1); + testUtils->Printf(KMsgSend, count); + testUtils->iSmtpClientMtm->SetCurrentEntryL(testUtils->iMsvSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId)); + CMsvOperation* msvOperation = testUtils->iSmtpClientMtm->Entry().CopyL(*sendSel, smtpService, testActive->iStatus); + CleanupStack::PushL(msvOperation); + testActive->StartL(); + CActiveScheduler::Start(); + + //check progress + testUtils->Printf(KMsgCompleted, testActive->iStatus.Int()); + + CMsvEntrySelection* sendSelc = testUtils->iMsvEntry->ChildrenL(); + TInt noOfMessages = sendSelc->Count(); + + // Check Whether the mails in Outbox is Zero (i.e. mails has been sent..). + test(noOfMessages == 0); + delete sendSelc; + TImSmtpProgress temp; + TPckgC paramPack(temp); + const TDesC8& progBuf = msvOperation->ProgressL(); + paramPack.Set(progBuf); + TImSmtpProgress progress = paramPack(); + + testUtils->Printf(KProgressError, progress.Error()); + + test(progress.Error()==0); + CleanupStack::PopAndDestroy(3,testActive); //msvOperation,sendsel,testActive + } + +LOCAL_C void CreateandSendMessageL() + { + test.Next(_L("Test sending message to server ")); + CreateNewSmtpSettingsL(); + testUtils->iMsvEntry->SetEntryL(smtpService); + CreateNewPlaintextMessageL(); + SendSmtpMessageL(); + } + +LOCAL_C void TestConnectAndSyncAfterDisconnectL() + { + CreateandSendMessageL(); + // Tests start here + testUtils->iImapClientMtm->SwitchCurrentEntryL(imap4Service); + // connect, do full sync and then so that the inbox can be synced + test.Printf(_L("Connecting to IMAP server \n")); + ConnectAndFullSyncImapServerL(); + //Check if disconnects immediately + DisconnectImapServerL(); + } + +LOCAL_C void 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); + + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CActiveScheduler::Install(scheduler); + CleanupStack::PushL(scheduler); + testUtils = CEmailTestUtils::NewLC(test); + testUtils->CreateAllTestDirectories(); + testUtils->FileSession().SetSessionPath(_L("C:\\")); + testUtils->CleanMessageFolderL(); + testUtils->GoServerSideL(); + testUtils->ClearEmailAccountsL(); + test.Next(_L("Create Data Component FileStores")); + testUtils->CreateSmtpServerMtmRegL(); + // Loading the DLLs + testUtils->CreateRegistryObjectAndControlL(); + testUtils->InstallSmtpMtmGroupL(); + testUtils->GoClientSideL(); + // Create Services + smtpService = testUtils->CreateSmtpServiceL(); + imap4Service = testUtils->CreateImapServiceL(); + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + TSmtpAccount smtpAccount; + accounts->GetSmtpAccountL(smtpService, smtpAccount); + accounts->SetDefaultSmtpAccountL(smtpAccount); + testUtils->WriteComment(_L("Create Imap Services ")); + // Delete any *.scr files in c:\logs\email directory. + testUtils->DeleteScriptFilesFromLogsDirL(); + + testUtils->iMsvEntry->SetEntryL(imap4Service); + //overwrite the settings with test code one. Don't want the default settings. + CImImap4Settings* settings = new(ELeave) CImImap4Settings(); + CleanupStack::PushL(settings); + settings->Reset(); + TInt serverLength = testUtils->MachineName().Length(); + HBufC* serverad = HBufC::NewL(serverLength + 7 ); // 7 is the length of KServerAddress + CleanupStack::PushL(serverad); + serverad->Des().Copy(testUtils->MachineName()); + serverad->Des().Append(KServer); + settings->SetServerAddressL(*serverad); + CleanupStack::PopAndDestroy(serverad); + settings->SetDeleteEmailsWhenDisconnecting(ETrue); + settings->SetAcknowledgeReceipts(ETrue); + settings->SetAutoSendOnConnect(ETrue); + settings->SetLoginNameL(testUtils->MachineName()); + settings->SetPasswordL(testUtils->MachineName()); + settings->SetPort(143); + settings->SetFolderPathL(KFolderPath); + accounts->GetImapAccountL(imap4Service, imapAccount); + accounts->SaveImapSettingsL(imapAccount, *settings); + CleanupStack::PopAndDestroy(2,accounts); //accounts,settings + test.Printf(_L("Instantiating IMAP4 Client MTM")); + testUtils->InstantiateImapClientMtmL(); + } + +LOCAL_C void Closedown() + { + + CleanupStack::PopAndDestroy(2); //testUtils, scheduler + } + +LOCAL_C void doMainL() + { + test.Start(_L("Test - ConnectAndSyncAfterDisconnect")); + InitL(); + testUtils->TestStart(1); + TestConnectAndSyncAfterDisconnectL(); + testUtils->TestFinish(1); + + testUtils->TestHarnessCompleted(); + + Closedown(); + } + + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + theCleanup=CTrapCleanup::New(); + TRAPD(ret,doMainL()); + test(ret==KErrNone); + delete theCleanup; + test.Console()->SetPos(0, 13); + test.End(); + test.Close(); + __UHEAP_MARKEND; + return(KErrNone); + } +