diff -r 000000000000 -r 72b543305e3a email/imap4mtm/imapsyncmanager/test/src/ctestimapsyncmanager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imap4mtm/imapsyncmanager/test/src/ctestimapsyncmanager.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,259 @@ +// 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: +// + +#include "ctestimapsyncmanager.h" + +#include "cactivewaiter.h" +#include "moutputstream.h" +#include "cimapsettings.h" + +#define KSyncLimit 10 + +_LIT(KImapSyncManagerTest,"test"); +RTest test(KImapSyncManagerTest); + +_LIT(KImapServer, "msexchange2k.closedtest.intra"); + +#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 + + +CTestImapSyncManager::CTestImapSyncManager() +: iActiveWaiter(NULL), + iTestUtils( NULL ) + {} + +CTestImapSyncManager::~CTestImapSyncManager() + { + delete iSel; + delete iImapSettings1; + delete iImapSettings; + delete iActiveWaiter; + iActiveWaiter = NULL; + delete iTestUtils; + iTestUtils = NULL; + } + +void CTestImapSyncManager::SetupL() + { + TInt err; + err=User::LoadPhysicalDevice(PDD_NAME); + if (err!=KErrNone && err!=KErrAlreadyExists) + User::Leave(err); + err=User::LoadLogicalDevice(LDD_NAME); + if (err!=KErrNone && err!=KErrAlreadyExists) + User::Leave(err); + + iTestUtils = CEmailTestUtils::NewL(test); + iTestUtils->ClearEmailAccountsL( ); + iTestUtils->CreateAllTestDirectories( ); + iTestUtils->FileSession( ).SetSessionPath( _L( "C:\\" ) ); + + iActiveWaiter = new(ELeave)CActiveWaiter(); + iTestUtils->GoServerSideL(); + iTestUtils->DeleteImapServiceL(); + + iTestUtils->GoClientSideL(); + CEmailAccounts* account = CEmailAccounts::NewLC(); + iImapSettings1 = new(ELeave) CImImap4Settings(); + + CImIAPPreferences* imapIAP = CImIAPPreferences::NewLC(); + account->PopulateDefaultImapSettingsL(*iImapSettings1, *imapIAP); + + iImapSettings1->SetServerAddressL(KImapServer); + iImapSettings1->SetLoginNameL(iTestUtils->MachineName()); + iImapSettings1->SetPasswordL(iTestUtils->MachineName()); + iImapSettings1->SetPort(143); + iImapSettings1->SetImapIdle(ETrue); + iImapSettings1->SetSubscribe(EUpdateRemote); + iImapSettings1->SetSynchronise(EUseRemote); + iImapSettings1->SetInboxSynchronisationLimit(KSyncLimit); + iImapSettings1->SetMailboxSynchronisationLimit(KSyncLimit); + + _LIT(KTxtAccountName, "testAccount"); + iImapAccount = account->CreateImapAccountL(KTxtAccountName, *iImapSettings1, *imapIAP, EFalse); + + CleanupStack::PopAndDestroy(2, account); // imapIAP, account + + iTestUtils->GoServerSideL(); + iEntry = iTestUtils->iServerEntry; + + iServiceId = iImapAccount.iImapService; + + iTestUtils->InstantiateImapServerMtmL(); + + iImapServerMtm=(CImap4ServerMtm*)iTestUtils->iImapServerMtm; + iEntry = iTestUtils->iServerEntry; + + iImapSettings = CImapSettings::NewL(*iEntry); + iImapSettings->LoadSettingsL(iServiceId); + iSel = new (ELeave) CMsvEntrySelection; +} + + +void CTestImapSyncManager::ChangeSyncLimitL(TInt limit) + { + CEmailAccounts* newaccount = CEmailAccounts::NewLC(); + iTestUtils->GoClientSideL(); + + newaccount->GetImapAccountL(iServiceId, iImapAccount); + newaccount->LoadImapSettingsL(iImapAccount, *iImapSettings1); + + iImapSettings1->SetInboxSynchronisationLimit(limit); + iImapSettings1->SetMailboxSynchronisationLimit(limit); + newaccount->SaveImapSettingsL(iImapAccount, *iImapSettings1); + CleanupStack::PopAndDestroy(newaccount); + iTestUtils->GoServerSideL(); + + iTestUtils->InstantiateImapServerMtmL(); + + iImapServerMtm=(CImap4ServerMtm*)iTestUtils->iImapServerMtm; + + iEntry = iTestUtils->iServerEntry; + + // load the new impsettings... + iImapSettings = CImapSettings::NewL(*iEntry); + iImapSettings->LoadSettingsL(iServiceId); + delete iSel; + iSel = new (ELeave) CMsvEntrySelection; + } + +void CTestImapSyncManager::ConnectToRemoteServerL() + { + TBuf8<128> parameter; + iSel->AppendL(iServiceId); + + iImapServerMtm->StartCommandL(*iSel, KIMAP4MTMConnect, parameter, iActiveWaiter->iStatus); + iActiveWaiter->WaitActive(); + ASSERT_EQUALS( iActiveWaiter->iStatus.Int( ), KErrNone ); + } + +void CTestImapSyncManager::DisconnectL() + { + TBuf8<128> parameter; + iSel->AppendL(iServiceId); + iImapServerMtm->StartCommandL(*iSel, KIMAP4MTMDisconnect, parameter, iActiveWaiter->iStatus); + iActiveWaiter->WaitActive(); + ASSERT_EQUALS( iActiveWaiter->iStatus.Int( ), KErrNone ); + } + + +void CTestImapSyncManager::CreateFolderL( const TDesC& aName,TMsvId iEntry1) + { + iEntry->SetEntry(iEntry1); + TMsvEmailEntry newEntry; + newEntry.iType=KUidMsvFolderEntry; + newEntry.iMtm=iEntry->Entry().iMtm; + newEntry.iServiceId=iServiceId; + newEntry.iSize=0; + newEntry.iDetails.Set(aName); + newEntry.SetMailbox(ETrue); + newEntry.SetValidUID(EFalse); + newEntry.SetComplete(ETrue); + newEntry.SetVisible(ETrue); + User::LeaveIfError(iEntry->CreateEntry(newEntry)); + iImapServerMtm->CreateL(newEntry,iActiveWaiter->iStatus); + iActiveWaiter->WaitActive(); + ASSERT_EQUALS( iActiveWaiter->iStatus.Int( ), KErrNone ); + } + +void CTestImapSyncManager::DeleteFolderL(const TDesC& aName) + { + TBuf8<128> parameter; + TMsvId id = FindFolderL(aName); + // delete + CMsvEntrySelection* msvEntrySelection = new (ELeave) CMsvEntrySelection; + msvEntrySelection->AppendL(id); + iImapServerMtm->DeleteAllL(*msvEntrySelection,iActiveWaiter->iStatus); + iActiveWaiter->WaitActive(); + delete msvEntrySelection; + } + + + +TMsvId CTestImapSyncManager::FindFolderL(const TDesC& aName, TBool aCaseSensitive) + { + TMsvId remoteId = KErrNotFound; + iEntry->SetEntry(iServiceId); + CMsvEntrySelection* msvEntrySelection = new (ELeave) CMsvEntrySelection; + iEntry->GetChildren(*msvEntrySelection); + TPtrC iEntryName = aName; + TInt count = msvEntrySelection->Count(); + for (TInt i=0; iSetEntry((*msvEntrySelection)[i]); + + if (aCaseSensitive) + { + if (iEntryName.Compare(iEntry->Entry().iDetails ) == 0) + { + remoteId = (*msvEntrySelection)[i]; + break; + } + } + else if ((iEntryName.CompareF(iEntry->Entry().iDetails) == 0)) + { + remoteId = (*msvEntrySelection)[i]; + break; + } + } + delete msvEntrySelection; + return remoteId; + } + +void CTestImapSyncManager::SetSubscriptionL(const TDesC& aName) + { + TBuf8<128> parameter; + TMsvId id = FindFolderL(aName); + CMsvEntrySelection* msvEntrySelection = new (ELeave) CMsvEntrySelection; + msvEntrySelection->Reset(); + msvEntrySelection->AppendL(id); + iImapServerMtm->StartCommandL(*msvEntrySelection, KIMAP4MTMLocalSubscribe, parameter, iActiveWaiter->iStatus); + iActiveWaiter->WaitActive(); + TBool sub = ((TMsvEmailEntry)iEntry->Entry()).LocalSubscription(); + delete msvEntrySelection; + } + +void CTestImapSyncManager::SendMessageL() + { + //Create a message in the local OUTBOX which can be send to server. + iTestUtils->CreateMessageL(_L("c:\\msgtest\\testdata\\t_unit_imapsyncmanager_test_9.txt"),iServiceId,KMsvGlobalOutBoxIndexEntryId ); + // Send a Message to remote INBOX + CMsvEntrySelection* sendSel = new(ELeave) CMsvEntrySelection(); + iEntry->SetEntry(KMsvGlobalOutBoxIndexEntryId); + iEntry->GetChildren(*sendSel); + TMsvId id0 = FindFolderL(_L("INBOX")); + // copy message to remote server inbox + iImapServerMtm->MoveFromLocalL(*sendSel, id0, iActiveWaiter->iStatus); + iActiveWaiter->WaitActive(); + delete sendSel; + } + +void CTestImapSyncManager::TearDownL() + { + delete iSel; + delete iImapSettings1; + delete iImapSettings; + delete iActiveWaiter; + iActiveWaiter = NULL; + delete iTestUtils; + iTestUtils = NULL; + } +