--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/integration/email/src/smtptests.cpp Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,317 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "smtptests.h"
+#include <cemailaccounts.h>
+#include <iapprefs.h>
+
+// Strings....
+_LIT(KErrUseService, "[%4d] Error! you have to select a service for use before you can access it!");
+_LIT(KErrOperation, "Operation didn't complete as expected. Expected status: [%d], actual status: [%d]");
+_LIT(KPopAccountName, "POP");
+
+const TInt KMaxErrorText = 100;
+
+//
+//
+// CSmtpClientTest
+//
+
+CSmtpClientTest* CSmtpClientTest::NewL(CEmailTestUtils& aTestUtils, RTest& aTest)
+ {
+ CSmtpClientTest* self = new (ELeave) CSmtpClientTest(aTestUtils, aTest);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CSmtpClientTest::~CSmtpClientTest()
+ {
+ }
+
+void CSmtpClientTest::ConstructL()
+ {
+ CEmailClientTest::ConstructL();
+ }
+
+CSmtpClientTest::CSmtpClientTest(CEmailTestUtils& aTestUtils, RTest& aTest) : CEmailClientTest(aTestUtils, aTest)
+ {
+ }
+
+
+
+//
+//
+// CCreateSmtpService
+//
+
+void CCreateSmtpService::StartL(TRequestStatus& aStatus)
+ {
+ // create pop account (pop account also creates smtp service)
+ CEmailAccounts* account = CEmailAccounts::NewLC();
+
+ CImIAPPreferences* smtpIAP = CImIAPPreferences::NewLC();
+
+ TSmtpAccount accountId = account->CreateSmtpAccountL(*iDetails,*iSettings, *smtpIAP, EFalse);
+
+ // get pop service for the account
+ TMsvId service = accountId.iSmtpService;
+
+ // select this service
+ CMsvEntry& msvEntry = *(iTestHarness.EmailTestUtils().iMsvEntry);
+ msvEntry.SetEntryL(service);
+ iEntry = msvEntry.Entry();
+ iEntry.SetVisible(ETrue);
+ iTestHarness.iCurrentServiceId = service;
+ iTestHarness.EmailTestUtils().iSmtpServiceId = service;
+
+ CleanupStack::PopAndDestroy(2, account); // smtpIAP, account
+
+ // If the SMTP Client MTM doesn't already exist, then Instantiate it
+ if (!iTestHarness.EmailTestUtils().iSmtpClientMtm)
+ iTestHarness.EmailTestUtils().InstantiateSmtpClientMtmL();
+
+ TRequestStatus* status = &aStatus;
+ User::RequestComplete(status, KErrNone);
+ }
+
+CCreateSmtpService* CCreateSmtpService::NewL(CEmailClientTest& aTestHarness)
+ {
+ CCreateSmtpService* self = new (ELeave) CCreateSmtpService(aTestHarness);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CCreateSmtpService::CCreateSmtpService(CEmailClientTest& aTestHarness) : CCreateEmailService(aTestHarness), iTestHarness(aTestHarness)
+ {
+ }
+
+void CCreateSmtpService::ConstructL()
+ {
+ iSettings = new(ELeave) CImSmtpSettings();
+ }
+
+CCreateSmtpService::~CCreateSmtpService()
+ {
+ delete iSettings;
+ }
+
+CImSmtpSettings& CCreateSmtpService::Settings()
+ {
+ return *iSettings;
+ }
+
+
+//
+//
+// CCreateSmtpClientMtm
+//
+
+CCreateSmtpClientMtm::CCreateSmtpClientMtm(CEmailClientTest& aTest) : iTest(aTest)
+ {
+ }
+
+void CCreateSmtpClientMtm::StartL(TRequestStatus& aStatus)
+ {
+ iTest.EmailTestUtils().InstantiatePopClientMtmL();
+ TRequestStatus* status = &aStatus;
+ User::RequestComplete(status, KErrNone);
+ }
+
+
+
+//
+//
+// CCheckSmtpOperation
+//
+
+CCheckSmtpOperation::CCheckSmtpOperation(TInt aExpectedStatus, CSmtpClientTest& aTestHarness) : iTestHarness(aTestHarness), iExpectedStatus(aExpectedStatus)
+ {
+ }
+
+void CCheckSmtpOperation::StartL(TRequestStatus& aStatus)
+ {
+ TInt err = KErrNone;
+
+ TImSmtpProgress temp;
+ TPckgC<TImSmtpProgress> paramPack(temp);
+ paramPack.Set(iTestHarness.CurrentOperation().ProgressL());
+ TImSmtpProgress progress=paramPack();
+
+ if (progress.Error() != iExpectedStatus)
+ {
+ TBuf<KMaxErrorText> logString;
+ logString.Format(KErrOperation, iExpectedStatus, progress.Error());
+ iTestHarness.LogComment(logString);
+ err = KErrUnknown;
+ }
+
+ TRequestStatus* status = &aStatus;
+ User::RequestComplete(status, err);
+ }
+
+
+//
+//
+// CSmtpUseService
+//
+
+CSmtpUseService::CSmtpUseService(CSmtpClientTest& aTestHarness) : iTestHarness(aTestHarness)
+ {
+ }
+
+void CSmtpUseService::StartL(TRequestStatus& aStatus)
+ {
+ TInt err = KErrNone;
+
+ // Select current folder
+ CMsvEntry& entry = *(iTestHarness.EmailTestUtils().iMsvEntry);
+ entry.SetEntryL(iTestHarness.iSelectedFolder);
+
+ // Check it is a service which is selected
+ if(entry.Entry().iType == KUidMsvServiceEntry)
+ {
+ // Make sure that the Root folder is selected
+ iTestHarness.iSelectedFolder = KMsvRootIndexEntryId;
+
+ // Change the Harness & Test Utils to use this SMTP service id
+ iTestHarness.EmailTestUtils().iSmtpServiceId = entry.Entry().Id();
+ iTestHarness.iCurrentServiceId = entry.Entry().Id();
+
+ // If the Smtp Client MTM doesn't already exist, then Instantiate it
+ if (!iTestHarness.EmailTestUtils().iSmtpClientMtm)
+ iTestHarness.EmailTestUtils().InstantiateSmtpClientMtmL();
+ }
+ else
+ {
+ TBuf<KMaxErrorText> logString;
+ logString.Format(KErrUseService, iDebugInfo.LineNumber());
+ iTestHarness.LogComment(logString);
+
+ err = KErrUnknown;
+ }
+
+ TRequestStatus* status = &aStatus;
+ User::RequestComplete(status, err);
+ }
+
+//
+//
+// CCopySelectionAndMonitor
+//
+CCopySelectionAndMonitor::CCopySelectionAndMonitor(CEmailClientTest& aParentTestHarness, TBool aSynchronise) : CActive(EPriorityNormal), iParentTestHarness(aParentTestHarness), iSynchronise(aSynchronise)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+
+
+void CCopySelectionAndMonitor::LogCommentFormat(TRefByValue<const TDesC> format,...)
+ {
+ // Build parameter list.
+ VA_LIST list;
+ VA_START(list, format);
+ TBuf<0x100> buf;
+ buf.FormatList(format, list);
+
+ // Log the debug buffer.
+ iParentTestHarness.EmailTestUtils().WriteComment(buf);
+ }
+
+
+void CCopySelectionAndMonitor::StartL(TRequestStatus& aStatus)
+ {
+ iParentTestHarness.MsvTestUtils().iMsvEntry->SetEntryL(iParentTestHarness.iSelectedFolder);
+ iReportStatus = &aStatus;
+ iParentTestHarness.SetCurrentOperation(iParentTestHarness.MsvTestUtils().iMsvEntry->CopyL(*(iParentTestHarness.iCurrentSelection), iParentTestHarness.iDestinationFolder, iStatus));
+
+ // Call funtion to return IAP and Poll to find connection state
+ RTimer timer;
+ TRequestStatus timerStatus; // Request status associated with timer
+ timer.CreateLocal(); // Create for this thread
+
+ //initialise to unused values
+ TInt progressState = KInvalidState;
+ TInt connectState = KInvalidState;
+ TInt iap = KInvalidIAP;
+ TInt connection_progress_state = 0;
+
+ do
+ {
+ TImSmtpProgress temp;
+ TPckgC<TImSmtpProgress> paramPack(temp);
+ paramPack.Set(iParentTestHarness.CurrentOperation().ProgressL());
+ TImSmtpProgress progress = paramPack();
+
+ progressState = progress.Status();
+ if((connectState != progress.ConnectionState()) || (iap != progress.ConnectionIAP()) )
+ {
+ connectState = progress.ConnectionState();
+ iap = progress.ConnectionIAP();
+ LogCommentFormat(_L("[%4d] Progress state = %d, Connect State = %d, IAP = %d"), iDebugInfo.LineNumber(), progressState, connectState, iap);
+
+ //Check that the relevant states are reached in the correct order
+ if ((connectState == ECsdStartingDialling) || (connectState == ECsdStartingConnect))
+ connection_progress_state = 1;
+ if (connectState == ECsdConnectionOpen && connection_progress_state == 1)
+ connection_progress_state = 2;
+ if (connectState == KLinkLayerOpen && connection_progress_state == 2)
+ connection_progress_state = 3;
+
+ }
+
+
+ // wait 500 microseconds and then re-test progress!
+ timer.After(timerStatus,500);
+ User::WaitForRequest(timerStatus);
+
+
+ } while (progressState == EMsgOutboxProgressConnecting);
+
+ timer.Close();
+
+ if (connection_progress_state != 3)
+ {
+ LogCommentFormat(_L("[%4d] Local Connection Progress state = %d, Connect State = %d, IAP = %d"), iDebugInfo.LineNumber(), connection_progress_state, connectState, iap);
+ iConnectionError = ETrue;
+ }
+
+ aStatus = KRequestPending;
+ SetActive();
+ }
+
+void CCopySelectionAndMonitor::RunL()
+ {
+ if (iConnectionError)
+ User::RequestComplete(iReportStatus, KErrUnknown);
+ else
+ User::RequestComplete(iReportStatus, iStatus.Int());
+ }
+
+void CCopySelectionAndMonitor::DoCancel()
+ {
+ iParentTestHarness.CurrentOperation().Cancel();
+ }
+
+
+CCopySelectionAndMonitor::~CCopySelectionAndMonitor()
+ {
+ }
+
+
+