email/imap4mtm/imapsyncmanager/test/src/ctestimapsyncmanager.cpp
changeset 0 72b543305e3a
--- /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; i<count; i++) 
+		{	
+		iEntry->SetEntry((*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;
+	}
+