--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/test/src/T_SMTC.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,825 @@
+// Copyright (c) 1998-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_SMTC
+// Component: IMCM
+// Owner: KP
+// Brief description of test harness:
+// Query Capability of the SMTP client and sends plaintext email.
+// Detailed description of test harness:
+// As above.
+// Input files required to run test harness:
+// \MSG\IMCMTSRC\rfc82201.txt <DRIVE>:\msgtest\IMCM\rfc82201.txt
+// Intermediate files produced while running test harness:
+// <DRIVE>:\msglogs\T_SMTC\T_IMCM.log
+// <DRIVE>:\msglogs\T_SMTC\Entry_Structure.txt
+// Output files produced by running test harness:
+// <DRIVE>:\msglogs\T_SMTC.<PLATFORM>.<VARIANT>.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\<VARIANT>\T_SMTC.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\<PLATFORM>\<VARIANT>\T_SMTC.exe onto the other platform
+// 2. Copy \epoc32\release\<PLATFORM>\<VARIANT>\MSVTESTUTILS.DLL into
+// <DRIVE>:\system\libs on the other platform
+// 3. Copy \epoc32\release\<PLATFORM>\<VARIANT>\EMAILTESTUTILS.DLL into
+// <DRIVE>:\system\libs on the other platform
+// 4. Run T_SMTC.exe on the other platform
+//
+//
+
+#include "emailtestutils.h"
+#include <c32comm.h>
+#include <commdb.h>
+#include <mtmuids.h>
+#include <cemailaccounts.h>
+
+#include "TESTENV.h"
+#include <miutlog.h>
+#include "SMTCMTM.H" // CSmtpClientMtm
+#include "SMTPSET.H" // CImSmtpSettings
+#include <bacline.h>
+
+#include <mmsvattachmentmanager.h>
+
+_LIT(KAttachment1, "C:\\mailtest\\IMCM\\plain_text.txt");
+_LIT8(KMimeType, "text/plain");
+
+// 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 //
+
+LOCAL_D RTest test(_L("SMTP.dll Testrig"));
+
+_LIT(KTestParams,"-testparams");
+enum TCmdLineArgs
+ {
+ EArgProgramName,
+ EArgTestParams,
+ EArgServerAddress,
+ EArgEmail,
+ EArgEnd
+ };
+
+LOCAL_D CTrapCleanup* theCleanup;
+
+LOCAL_D CEmailTestUtils* testUtils;
+LOCAL_D CImLog* log;
+LOCAL_D CMsvOperation* msvOperation;
+
+LOCAL_D TMsvId smtpService;
+LOCAL_D TInt testNo = 1;
+
+LOCAL_D TMsvId CreateMessageL();
+
+#define KMsgSmtpRefreshMailboxPriority 1
+#define KPeriod 10000 // period of timer
+
+_LIT(KTestSettingsEmailAddress,"testuser@user");
+const TInt KTestSettingsPort = 111;
+
+//
+
+class TestUiTimer : public CTimer
+ {
+public:
+ static TestUiTimer* NewLC(CConsoleBase* aConsole, CImEmailOperation* aEmailOperation);
+
+ void RunL();
+ void DoCancel();
+ void ConstructL();
+ void IssueRequest();
+ TPtrC Progress(TInt progressNumber);
+
+ CConsoleBase* iConsole;
+ CImEmailOperation* iEmailOperation;
+ TTimeIntervalMicroSeconds32 period;
+protected:
+ TInt iCount;
+ TBool iClosing;
+ TestUiTimer(CConsoleBase* aConsole, CImEmailOperation* aEmailOperation);
+ };
+
+//
+// Progress timer
+//
+TestUiTimer* TestUiTimer::NewLC(CConsoleBase* aConsole, CImEmailOperation* aEmailOperation)
+ {
+ TestUiTimer* self = new(ELeave) TestUiTimer(aConsole, aEmailOperation);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+TestUiTimer::TestUiTimer(CConsoleBase* aConsole, CImEmailOperation* aEmailOperation)
+ : CTimer(EPriorityStandard+3), iEmailOperation(aEmailOperation)
+ {
+ iConsole = aConsole;
+ period = KPeriod;
+ iClosing = EFalse;
+ iCount = 0;
+ }
+
+void TestUiTimer::ConstructL()
+ {
+ CTimer::ConstructL();
+ CActiveScheduler::Add(this);
+ }
+
+void TestUiTimer::IssueRequest()
+ {
+ After(period);
+ }
+
+void TestUiTimer::DoCancel()
+ {
+ CTimer::DoCancel();
+ }
+
+TPtrC TestUiTimer::Progress(TInt progressNumber)
+ {
+ switch (progressNumber)
+ {
+ case EConnectingToSmtp:
+ return _L("Connecting ");
+ case 1:
+ return _L("Waiting for reply ");
+ case 2:
+ return _L("Authorising Smtp ");
+ case 3:
+ return _L("Sending StartTls ");
+ case 4:
+ return _L("Setting Security ");
+ case 5:
+ return _L("Sending Email ");
+ case 6:
+ return _L("Log Data Event ");
+ case 7:
+ return _L("Closing Smtp ");
+ default:
+ return _L("Unknown Progress ");
+ }
+ }
+
+void TestUiTimer::RunL()
+ {
+ // display the current progress
+ if(iEmailOperation!=NULL)
+ {
+ TImSmtpProgress temp;
+ TPckgC<TImSmtpProgress> paramPack(temp);
+ paramPack.Set(iEmailOperation->ProgressL());
+ TImSmtpProgress progress=paramPack();
+
+ iConsole->SetPos(0, 12);
+ TBuf<80> progressBuf = Progress(progress.iSendFileProgress.iSessionState);
+ iConsole->Printf(TRefByValue<const TDesC>_L(" Operation Progress : %S "), &progressBuf);
+ iConsole->SetPos(0, 13);
+ iConsole->Printf(TRefByValue<const TDesC>_L(" Progress: %d/%d %d/%d \n"),
+ progress.MsgNo() + 1,
+ progress.SendTotal(),
+ progress.iSendFileProgress.iBytesSent,
+ progress.iSendFileProgress.iBytesSent + progress.iSendFileProgress.iBytesToSend);
+ iConsole->SetPos(0, 15);
+ iConsole->Printf(TRefByValue<const TDesC>_L(" Error: %d \n"), progress.Error());
+ }
+ IssueRequest();
+ };
+
+class CSmtpTimer : public CTimer
+ {
+public:
+ static CSmtpTimer* NewL(CTestActive& aActive);
+ void StartL();
+private:
+ CSmtpTimer(CTestActive& aActive);
+ void RunL();
+ CTestActive& iSmtpActive;
+ };
+
+CSmtpTimer::CSmtpTimer(CTestActive& aActive)
+: CTimer(EPriorityLow), iSmtpActive(aActive)
+ {}
+
+
+CSmtpTimer* CSmtpTimer::NewL(CTestActive& aActive)
+ {
+ CSmtpTimer* self = new(ELeave) CSmtpTimer(aActive);
+ CleanupStack::PushL(self);
+ CActiveScheduler::Add(self);
+ CleanupStack::Pop();
+ return self;
+ }
+
+void CSmtpTimer::StartL()
+ {
+ CTimer::ConstructL();
+ TRequestStatus* status=&iStatus;
+ User::RequestComplete(status,KErrNone);
+ SetActive();
+ }
+
+void CSmtpTimer::RunL()
+ {
+ test.Console()->SetPos(0, 10);
+
+ if (!iSmtpActive.IsActive()) //this is how you check if the MTM is finished or not!
+ {
+ iSmtpActive.Cancel();
+ CActiveScheduler::Stop();
+ return;
+ }
+ else
+ After(400);
+ }
+
+LOCAL_C void TestStoreSettingsL()
+//
+// Dummy settings for checking that StoreSettingsL work for the client mtm
+//
+ {
+ CImSmtpSettings *smtpSettings = new(ELeave)CImSmtpSettings;
+ CleanupStack::PushL(smtpSettings);
+
+ CEmailAccounts* accounts = CEmailAccounts::NewLC();
+ TSmtpAccount smtpAccountId;
+ accounts->GetSmtpAccountL(smtpService, smtpAccountId);
+ accounts->LoadSmtpSettingsL(smtpAccountId, *smtpSettings);
+ CleanupStack::PopAndDestroy(accounts);
+ smtpSettings->SetEmailAddressL(KTestSettingsEmailAddress);
+ smtpSettings->SetPort(KTestSettingsPort);
+ testUtils->iSmtpClientMtm->SetSettingsL(*smtpSettings);
+ TRAPD(err,testUtils->iSmtpClientMtm->StoreSettingsL());
+ CleanupStack::PopAndDestroy(smtpSettings);
+ test(err==KErrNone);
+
+ //To Improve Coverage.
+ TMsvPartList partList = KMsvMessagePartBody;
+ testUtils->iSmtpClientMtm->ValidateMessage(partList);
+ void AddAddresseeL(const TDesC& aRealAddress, const TDesC& aAlias);
+ TBufC<1> tt;
+ TRAP_IGNORE(testUtils->iSmtpClientMtm->AddAddresseeL(tt,tt));
+ TInt ii = 0;
+ testUtils->iSmtpClientMtm->RemoveAddressee(ii);
+
+ TRAP_IGNORE(testUtils->iSmtpClientMtm->RemoveDefaultServiceL());
+ }
+
+LOCAL_C int VerifyStoredSettingsL()
+//
+// Comparison of the settings stored to see that the client commits after storing
+//
+ {
+ TRAPD(err,testUtils->iSmtpClientMtm->RestoreSettingsL());
+ test(err==KErrNone);
+ CImSmtpSettings *smtpSettings = new(ELeave)CImSmtpSettings;
+ CleanupStack::PushL(smtpSettings);
+ smtpSettings->CopyL(testUtils->iSmtpClientMtm->Settings());
+
+ TInt result=0;
+ result += smtpSettings->EmailAddress().Compare(KTestSettingsEmailAddress);
+ result += smtpSettings->Port() - KTestSettingsPort;
+
+ testUtils->iSmtpClientMtm->SetSettingsL(*smtpSettings);
+ TRAP(err,testUtils->iSmtpClientMtm->StoreSettingsL());
+ test(err==KErrNone);
+
+ CleanupStack::PopAndDestroy(smtpSettings);
+ return result;
+ }
+
+LOCAL_C void TestSendingMessagesL()
+ {
+ CTestActive* testActive = new (ELeave) CTestActive();
+ CleanupStack::PushL(testActive);
+
+ testUtils->iMsvEntry->SetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ CMsvEntrySelection* sendSel = testUtils->iMsvEntry->ChildrenL();
+ CleanupStack::PushL(sendSel);
+ TInt count=sendSel->Count();
+ if (!count)
+ {
+ log->AppendComment(_L8("\t No messages to send in the outbox"));
+ CleanupStack::PopAndDestroy(2); //testActive, sendsel
+ return;
+ }
+ log->AppendError(_L8("\t messages to send in the outbox -"), count);
+ testUtils->iSmtpClientMtm->SetCurrentEntryL(testUtils->iMsvSession->GetEntryL(KMsvGlobalOutBoxIndexEntryId));
+ msvOperation = testUtils->iSmtpClientMtm->Entry().CopyL(*sendSel, smtpService, testActive->iStatus);
+ CleanupStack::PushL(msvOperation);
+ CSmtpTimer* timer = CSmtpTimer::NewL(*testActive);
+ CleanupStack::PushL(timer);
+
+ testActive->StartL();
+ timer->StartL();
+ CActiveScheduler::Start();
+ //check progress
+ log->AppendError(_L8("\t CopyL completed with "), testActive->iStatus.Int());
+ TImSmtpProgress temp;
+ TPckgC<TImSmtpProgress> paramPack(temp);
+
+ const TDesC8& progBuf = msvOperation->ProgressL();
+ paramPack.Set(progBuf);
+ TImSmtpProgress progress=paramPack();
+ log->AppendError(_L8("\t Progress error ="), progress.Error());
+ CleanupStack::PopAndDestroy(4); //testActive, sendsel, timer, msvOperation
+ }
+
+LOCAL_C void TestForwardMessageL()
+ {
+ TMsvId messageId = CreateMessageL();
+
+ CTestActive* testActive = new (ELeave) CTestActive();
+ CleanupStack::PushL(testActive);
+
+ TMsvPartList partList = KMsvMessagePartBody | KMsvMessagePartAttachments | KMsvMessagePartDescription | KMsvMessagePartOriginator;
+ testUtils->iSmtpClientMtm->SetCurrentEntryL(testUtils->iMsvSession->GetEntryL(messageId));
+ testUtils->iSmtpClientMtm->LoadMessageL();
+ msvOperation = testUtils->iSmtpClientMtm->ForwardL(KMsvDraftEntryId, partList, testActive->iStatus);
+ CleanupStack::PushL(msvOperation);
+ CSmtpTimer* timer = CSmtpTimer::NewL(*testActive);
+ CleanupStack::PushL(timer);
+
+ testActive->StartL();
+ timer->StartL();
+ CActiveScheduler::Start();
+ //check progress
+ log->AppendError(_L8("\t ForwardL completed with "), testActive->iStatus.Int());
+ TImSmtpProgress temp;
+ TPckgC<TImSmtpProgress> paramPack(temp);
+
+ const TDesC8& progBuf = msvOperation->ProgressL();
+ paramPack.Set(progBuf);
+ TImSmtpProgress progress=paramPack();
+ log->AppendError(_L8("\t Progress error ="), progress.Error());
+
+ CleanupStack::PopAndDestroy(timer);
+ CleanupStack::PopAndDestroy(msvOperation);
+ CleanupStack::PopAndDestroy(testActive);
+ }
+
+LOCAL_C void TestReplyMessageL()
+ {
+ TMsvId messageId = CreateMessageL();
+
+ CTestActive* testActive = new (ELeave) CTestActive();
+ CleanupStack::PushL(testActive);
+
+ TMsvPartList partList = KMsvMessagePartBody | KMsvMessagePartAttachments | KMsvMessagePartDescription | KMsvMessagePartOriginator;
+ testUtils->iSmtpClientMtm->SetCurrentEntryL(testUtils->iMsvSession->GetEntryL(messageId));
+ testUtils->iSmtpClientMtm->LoadMessageL();
+ msvOperation = testUtils->iSmtpClientMtm->ReplyL(KMsvDraftEntryId, partList, testActive->iStatus);
+ CleanupStack::PushL(msvOperation);
+ CSmtpTimer* timer = CSmtpTimer::NewL(*testActive);
+ CleanupStack::PushL(timer);
+
+ testActive->StartL();
+ timer->StartL();
+ CActiveScheduler::Start();
+ //check progress
+ log->AppendError(_L8("\t ReplyL completed with "), testActive->iStatus.Int());
+ TImSmtpProgress temp;
+ TPckgC<TImSmtpProgress> paramPack(temp);
+
+ const TDesC8& progBuf = msvOperation->ProgressL();
+ paramPack.Set(progBuf);
+ TImSmtpProgress progress=paramPack();
+ log->AppendError(_L8("\t Progress error ="), progress.Error());
+
+ CleanupStack::PopAndDestroy(timer);
+ CleanupStack::PopAndDestroy(msvOperation);
+ CleanupStack::PopAndDestroy(testActive);
+ }
+
+// Menu Selection,Main and Init Functions //
+
+LOCAL_C void TestCapabilityL()
+ {
+ TInt response = 0;
+ test(testUtils->iSmtpClientMtm->QueryCapability(KUidMtmQuerySupportedBody, response) == KErrNone);
+ test(testUtils->iSmtpClientMtm->QueryCapability(KUidMtmQuerySupportAttachments, response) == KErrNone);
+ test(testUtils->iSmtpClientMtm->QueryCapability(KUidMtmQuerySupportSubject, response) == KErrNone);
+ test(testUtils->iSmtpClientMtm->QueryCapability(KUidMtmQuerySupportsFolder, response) == KErrNotSupported);
+ test(testUtils->iSmtpClientMtm->QueryCapability(KUidMtmQueryOffLineAllowed, response) == KErrNotSupported);
+ test(testUtils->iSmtpClientMtm->QueryCapability(KUidMtmQueryCanSendMsg, response) == KErrNone);
+ test(testUtils->iSmtpClientMtm->QueryCapability(KUidMtmQueryCanReceiveMsg, response) == KErrNotSupported);
+ test(testUtils->iSmtpClientMtm->QueryCapability(KUidMtmQuerySendAsRequiresRenderedImage, response) == KErrNotSupported);
+ test(testUtils->iSmtpClientMtm->QueryCapability(KUidMtmQueryMaxRecipientCount, response) == KErrNotSupported);
+ }
+
+LOCAL_C void InitL()
+ {
+ CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(scheduler);
+ CleanupStack::PushL(scheduler);
+
+ testUtils = CEmailTestUtils::NewLC(test);
+ testUtils->FileSession().SetSessionPath(_L("C:\\"));
+ testUtils->CleanMessageFolderL();
+ testUtils->ClearEmailAccountsL();
+ testUtils->CreateAllTestDirectories();
+ testUtils->GoClientSideL();
+
+ smtpService = testUtils->CreateSmtpServiceL();
+ testUtils->CreatePopServiceL();
+
+ log = CImLog::NewL(_L("c:\\logs\\email\\T_IMCM.log"), EAppend);
+ CleanupStack::PushL(log);
+ log->AppendComment(_L8("********** T_SMTC Test SMTP Client MTM **********"));
+ TBuf8<80> buf;
+#if defined(__WINS__)
+ buf.Append(_L8("WINS "));
+#else
+ buf.Append(_L8("MARM "));
+#endif
+#if defined(_UNICODE)
+ buf.Append(_L8("U"));
+#endif
+#if defined(_DEBUG)
+ buf.Append(_L8("DEB"));
+#else
+ buf.Append(_L8("REL"));
+#endif
+ log->AppendComment(buf);
+ }
+
+LOCAL_C void Closedown()
+ {
+ log->AppendComment(_L8("********** T_SMTC Tests Complete **********"));
+ log->AppendComment(_L8(""));
+
+ CleanupStack::PopAndDestroy(3); //testUtils, log, scheduler
+ }
+
+LOCAL_C TMsvId CreateMessageL()
+ {
+ // 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;
+ }
+
+ testUtils->TestStart(testNo++);
+ CTestActive* testActive = new (ELeave) CTestActive();
+ CleanupStack::PushL(testActive);
+
+ TMsvPartList partList = KMsvMessagePartBody | KMsvMessagePartAttachments | KMsvMessagePartDescription | KMsvMessagePartOriginator;
+ TMsvEmailTypeList msvEmailTypeList = 0;
+ CImEmailOperation* emailOperation = CImEmailOperation::CreateNewL(testActive->iStatus, *(testUtils->iMsvSession), KMsvGlobalOutBoxIndexEntryId, partList, msvEmailTypeList, KUidMsgTypeSMTP);
+ CleanupStack::PushL(emailOperation);
+
+ TestUiTimer* testUiTimer = TestUiTimer::NewLC(test.Console(), emailOperation);
+ testActive->StartL();
+ testUiTimer->IssueRequest();
+ CActiveScheduler::Start();
+
+ TMsvId temp;
+ TPckgC<TMsvId> paramPack(temp);
+ const TDesC8& progBuf = emailOperation->ProgressL();
+ paramPack.Set(progBuf);
+ TMsvId messageId=paramPack();
+ TInt error = emailOperation->iStatus.Int();
+
+ CleanupStack::PopAndDestroy(3, testActive); // testActive, emailOperation, testUiTimer
+ testUtils->TestFinish(testNo-1, error);
+ log->AppendComment(_L8(" Messages created in the outbox"));
+
+ // fill in details for email message
+ testUtils->iMsvEntry->SetEntryL(messageId);
+ CMsvStore* store = testUtils->iMsvEntry->EditStoreL();
+ CleanupStack::PushL(store);
+ CImHeader* header = CImHeader::NewLC();
+ header->RestoreL(*store);
+
+ if (isCmdLine)
+ {
+ TBuf<100> buf;
+ TLex lex(cmdLineArg->Arg(EArgEmail));
+ buf=lex.NextToken();
+ header->ToRecipients().AppendL(buf);
+ }
+ else
+ header->ToRecipients().AppendL(_L("t_smtc@lon-msgtest06.intra"));
+
+ header->SetSubjectL(_L("Message from T_SMTC Typhoon!!"));
+ header->StoreL(*store);
+ store->CommitL();
+ CleanupStack::PopAndDestroy(3, cmdLineArg); // cmdLineArg, header, store
+
+ //store some body text!!
+ CParaFormatLayer* paraFormatLayer=CParaFormatLayer::NewL();
+ CleanupStack::PushL(paraFormatLayer);
+
+ CCharFormatLayer* charFormatLayer=CCharFormatLayer::NewL();
+ CleanupStack::PushL(charFormatLayer);
+
+ CRichText* bodyText=CRichText::NewL(paraFormatLayer, charFormatLayer, CEditableText::EFlatStorage, 256);
+ CleanupStack::PushL(bodyText);
+
+ TBuf<100> bodyContents = _L("Test body contents so that we can test the store body text code.");
+ bodyText->InsertL(0, bodyContents);
+
+ // store the body text
+ testActive = new (ELeave) CTestActive();
+ CleanupStack::PushL(testActive);
+
+ CImEmailMessage* imEmailMessage = CImEmailMessage::NewLC(*(testUtils->iMsvEntry));
+ imEmailMessage->StoreBodyTextL(messageId, *bodyText, testActive->iStatus);
+ testActive->StartL();
+ CActiveScheduler::Start(); // wait for the asynch operation to complete
+ CleanupStack::PopAndDestroy(5, paraFormatLayer); // imEmailMessage, testActive, bodyText, charFormatLayer, paraFormatLayer
+
+ // Add an attachment
+ testActive = new (ELeave) CTestActive();
+ CleanupStack::PushL(testActive);
+
+ imEmailMessage = CImEmailMessage::NewLC(*(testUtils->iMsvEntry));
+ CMsvAttachment* attachmentInfo = CMsvAttachment::NewL(CMsvAttachment::EMsvFile);
+ CleanupStack::PushL(attachmentInfo);
+ imEmailMessage->AttachmentManager().AddAttachmentL(KAttachment1,attachmentInfo,testActive->iStatus);
+ CleanupStack::Pop(attachmentInfo);
+ testActive->StartL();
+ CActiveScheduler::Start(); // wait for the asynch operation to complete
+ CleanupStack::PopAndDestroy(2, testActive);
+
+ return messageId;
+ }
+
+LOCAL_C void OverwriteSmtpSettingsL(TBool aRequestReceipt)
+ {
+ // 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;
+ }
+
+ testUtils->iMsvEntry->SetEntryL(smtpService);
+ //overwrite the setings 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(smtpService, smtpAccountId);
+ accounts->LoadSmtpSettingsL(smtpAccountId, *settings);
+
+ 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
+ {
+ _LIT(KSmtpServer, "lon-msgtest06.intra");
+ settings->SetServerAddressL(KSmtpServer);
+ }
+
+ if (isCmdLine)
+ {
+ TBuf<100> buf;
+ TLex lex(cmdLineArg->Arg(EArgEmail));
+ buf=lex.NextToken();
+ test.Printf(_L("Email: %S\n"),&buf);
+ settings->SetEmailAddressL(buf);
+ settings->SetReplyToAddressL(buf);
+ settings->SetReceiptAddressL(buf);
+ }
+ else
+ {
+ _LIT(KSmtpEmailAddress, "<t_smtc@lon-msgtest06.intra>");
+ settings->SetEmailAddressL(KSmtpEmailAddress);
+ settings->SetReplyToAddressL(KSmtpEmailAddress);
+ settings->SetReceiptAddressL(KSmtpEmailAddress);
+ }
+ settings->SetEmailAliasL(_L("SMTP Test1"));
+ settings->SetBodyEncoding(EMsgOutboxMIME);
+ settings->SetRequestReceipts(aRequestReceipt);
+ settings->SetPort(25);
+ accounts->SaveSmtpSettingsL(smtpAccountId, *settings);
+ CleanupStack::PopAndDestroy(2); // store/accounts, settings
+ CleanupStack::PopAndDestroy(); // cmdLineArg
+
+ CTestTimer* timer = CTestTimer::NewL();
+ timer->After(5000000);
+ CActiveScheduler::Start();
+ delete timer;
+ }
+
+LOCAL_C void CreateNewEmailMessageL()
+ {
+ testUtils->WriteComment(_L("CreateNewEmailMessageL"));
+ CTestActive* testActive = new (ELeave) CTestActive();
+ CleanupStack::PushL(testActive);
+
+ TMsvPartList partList = KMsvMessagePartBody | KMsvMessagePartAttachments | KMsvMessagePartDescription | KMsvMessagePartOriginator;
+ TMsvEmailTypeList msvEmailTypeList = 0;
+ CImEmailOperation* emailOperation = CImEmailOperation::CreateNewL(testActive->iStatus, *(testUtils->iMsvSession), KMsvGlobalOutBoxIndexEntryId, partList, msvEmailTypeList, KUidMsgTypeSMTP);
+ CleanupStack::PushL(emailOperation);
+
+ TestUiTimer* testUiTimer = TestUiTimer::NewLC(test.Console(), emailOperation);
+ testActive->StartL();
+ testUiTimer->IssueRequest();
+ CActiveScheduler::Start();
+
+ TMsvId temp;
+ TPckgC<TMsvId> paramPack(temp);
+ const TDesC8& progBuf = emailOperation->ProgressL();
+ paramPack.Set(progBuf);
+ TMsvId messageId=paramPack();
+ TInt error = emailOperation->iStatus.Int();
+
+ CleanupStack::PopAndDestroy(3, testActive); // testActive, emailOperation, testUiTimer
+
+ // fill in details for email message
+ testUtils->iMsvEntry->SetEntryL(messageId);
+ CMsvStore* store = testUtils->iMsvEntry->EditStoreL();
+ CleanupStack::PushL(store);
+ CImHeader* header = CImHeader::NewLC();
+ header->RestoreL(*store);
+ header->SetSubjectL(_L("Message from T_SMTC Typhoon!!"));
+ header->StoreL(*store);
+ store->CommitL();
+ CleanupStack::PopAndDestroy(2, store); // header, store
+
+ //store some body text!!
+ CParaFormatLayer* paraFormatLayer=CParaFormatLayer::NewL();
+ CleanupStack::PushL(paraFormatLayer);
+
+ CCharFormatLayer* charFormatLayer=CCharFormatLayer::NewL();
+ CleanupStack::PushL(charFormatLayer);
+
+ CRichText* bodyText=CRichText::NewL(paraFormatLayer, charFormatLayer, CEditableText::EFlatStorage, 256);
+ CleanupStack::PushL(bodyText);
+
+ TBuf<100> bodyContents = _L("Test body contents so that we can test the store body text code.");
+ bodyText->InsertL(0, bodyContents);
+
+ // store the body text
+ testActive = new (ELeave) CTestActive();
+ CleanupStack::PushL(testActive);
+
+ CImEmailMessage* imEmailMessage = CImEmailMessage::NewLC(*(testUtils->iMsvEntry));
+ imEmailMessage->StoreBodyTextL(messageId, *bodyText, testActive->iStatus);
+ testActive->StartL();
+ CActiveScheduler::Start(); // wait for the asynch operation to complete
+ CleanupStack::PopAndDestroy(5, paraFormatLayer); // imEmailMessage, testActive, bodyText, charFormatLayer, paraFormatLayer }
+ }
+
+LOCAL_C void TestCancelAttachmentOperationL()
+ {
+ CreateNewEmailMessageL();
+ testUtils->WriteComment(_L("TestCancelAttachmentOperationL"));
+
+ // Add an attachment
+ CTestActive* testActive = new (ELeave) CTestActive();
+ CleanupStack::PushL(testActive);
+
+ TRAPD(error, testUtils->iSmtpClientMtm->AddAttachmentL(KAttachment1(), KMimeType(), 0, testActive->iStatus));
+
+ testUtils->WriteComment(_L("Cancel the Attachment Operation"));
+ testUtils->iSmtpClientMtm->CancelAttachmentOperation();
+ testUtils->WriteComment(_L("Attachment Operation cancelled"));
+
+ testActive->StartL();
+ CActiveScheduler::Start();// wait for the asynch operation to complete
+ test(testActive->iStatus.Int() == KErrCancel);
+ CleanupStack::PopAndDestroy(testActive);
+ }
+
+
+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);
+
+
+ test.Printf(_L("\nPerforming Tests\n"));
+ testUtils->iMsvEntry->SetEntryL(smtpService);
+// testUtils->DeleteScriptFilesFromLogsDirL();
+
+ CTestTimer* timer = CTestTimer::NewL();
+ timer->After(5000000);
+ CActiveScheduler::Start();
+ delete timer;
+
+ // store service as default service
+ CEmailAccounts* accounts = CEmailAccounts::NewLC();
+ TSmtpAccount smtpAccountId;
+ accounts->GetSmtpAccountL(smtpService, smtpAccountId);
+ accounts->SetDefaultSmtpAccountL(smtpAccountId);
+ CleanupStack::PopAndDestroy(accounts);
+
+ OverwriteSmtpSettingsL(EFalse);
+ CreateMessageL();
+
+ // Create a message that will request a receipt
+ OverwriteSmtpSettingsL(ETrue);
+ CreateMessageL();
+
+ testUtils->InstantiateSmtpClientMtmL();
+
+ timer = CTestTimer::NewL();
+ timer->After(5000000);
+ CActiveScheduler::Start();
+ delete timer;
+
+ // testing the CSmtpClientMtm::StoreSettingsL() method making sure it commits its settings
+ testUtils->TestStart(testNo++);
+ TestStoreSettingsL();
+ TInt result = VerifyStoredSettingsL();
+ test(result == KErrNone);
+ testUtils->TestFinish(testNo-1);
+ OverwriteSmtpSettingsL(ETrue);
+
+ testUtils->TestStart(testNo++);
+ TestSendingMessagesL();
+ testUtils->TestFinish(testNo-1);
+
+ testUtils->TestStart(testNo++);
+ TestForwardMessageL();
+ testUtils->TestFinish(testNo-1);
+
+ testUtils->TestStart(testNo++);
+ TestReplyMessageL();
+ testUtils->TestFinish(testNo-1);
+
+ testUtils->TestStart(testNo++);
+ TestCapabilityL();
+ testUtils->TestFinish(testNo-1);
+
+ testUtils->TestStart(testNo++);
+ TestCancelAttachmentOperationL();
+ testUtils->TestFinish(testNo-1);
+
+ testUtils->TestHarnessCompleted();
+ Closedown();
+ }
+
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ test.Start(_L("T_SMTC - Test Harness"));
+ theCleanup=CTrapCleanup::New();
+ TRAPD(ret,doMainL());
+ test(ret==KErrNone);
+ delete theCleanup;
+ test.Console()->SetPos(0, 13);
+ test.End();
+ test.Close();
+ __UHEAP_MARKEND;
+ return(KErrNone);
+ }