diff -r 000000000000 -r 8e480a14352b messagingfw/msgtest/integration/email/src/smtptests.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtest/integration/email/src/smtptests.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -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 +#include + +// 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 paramPack(temp); + paramPack.Set(iTestHarness.CurrentOperation().ProgressL()); + TImSmtpProgress progress=paramPack(); + + if (progress.Error() != iExpectedStatus) + { + TBuf 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 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 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 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() + { + } + + +