email/pop3andsmtpmtm/popservermtm/test/src/T_PopFullDsk.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/popservermtm/test/src/T_PopFullDsk.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,742 @@
+// 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_PopFullDsk
+// Component: POPS
+// Owner: NB
+// Brief description of test harness:
+// Tests copying messages in POPS when there is a Full Disk
+// Detailed description of test harness:
+// Implements the following Tests:
+// 1 - Test Copy To Local
+// 2 - Test Copy Within Service
+// 3 - Test Copying from a Local folder to another Local Folder
+// 4 - Test Offline Copy
+// Input files required to run test harness:
+// The following files should be copied to <drive>:\msgtest\pops\
+// T_PopFullDsk_CopyAll.scr
+// T_PopFullDsk_Populate.scr
+// T_PopFullDsk_OfflineCopy.scr
+// T_PopFullDsk_Msg.eml
+// Output files produced by running test harness:
+// <DRIVE>:\msglogs\T_POPSFullDisk.<PLATFORM>.<VARIANT>.LOG.txt
+// Description of how to build test harness:
+// cd \msg\pops\
+// bldmake bldfiles
+// abld test build
+// Description of how to run test harness:
+// (1) You need to create a small partitioned drive (ie less than 20GB) to 
+// run the harness on (eg a Compact Flash Card).
+// (2) For running on the emulator, alter the epoc32\data\epoc.ini 
+// file so that it uses this drive (eg    _EPOC_DRIVE_C E:\   
+// if E:\ is your small partioned drive ).
+// 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_PopFullDsk.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_PopFullDsk.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. Copy \epoc32\wins\c\msgtest\pops\*.* to
+// <DRIVE>:\msgtest\pops\
+// Note that this drive should be a CF card as the test files are large
+// 5. Run T_PopFullDsk.exe on the other platform with the CF card
+// Generic POPS Test Harness
+// 
+//
+
+#include "emailtestutils.h"
+#include "scripttestutils.h"
+#include <miutlog.h>
+#include <miutmsg.h>
+#include <txtrich.h>
+#include <popsmtm.h>
+#include "T_mtmcmd.h"
+#include <cemailaccounts.h>
+
+
+// NOTE:  This is the amout of available Disk Space that we are creating to test
+// the Low Disk Space condition.  It definitely has to be less than KMinimumDiskSpaceForSync
+// and ideally very small, as more space is made available as the operations are performed.
+const TInt KTestDiskSpace = 500;
+
+const TInt KFillDiskTooBigFreeSize		=0x00080000;	// 1/2 Gb in kb
+const TInt KFillDiskOneKByte			=0x400;
+const TInt KFillDiskMaxBlockSize		=1024;
+
+_LIT(KSubFolder,  "LocalFolder");
+_LIT(KSessionPath, "c:\\");
+_LIT(KTestMsgPath, "c:\\msgtest\\pops\\T_PopFullDsk_Msg.eml");  
+_LIT(KMsvTestFillDiskFile,	"c:\\Dummy fill file");
+
+_LIT(K_POPS_COMPONENT_NAME, "POPS");
+
+_LIT(K_SCRIPT_COPY_ALL,		"T_PopFullDsk_CopyAll.scr");
+_LIT(K_SCRIPT_POPULATE_ALL, "T_PopFullDsk_Populate.scr");
+_LIT(K_SCRIPT_OFFLINE_COPY, "T_PopFullDsk_OfflineCopy.scr");
+
+_LIT(KTest1Pass, "Test 1 OK, Copy To Local Failed correctly with KErrDiskFull");
+_LIT(KTest2Pass, "Test 2 OK, Copy Within Service Failed correctly with KErrDiskFull");
+_LIT(KTest3Pass, "Test 3 OK, Local Copy Failed correctly with KErrDiskFull");
+
+_LIT(KTest1Failed, "Test 1 Failed, Copy To Local should NOT have completed");
+_LIT(KTest2Failed, "Test 2 Failed, CopyWithin Service should NOT have completed");
+_LIT(KTest3Failed, "Test 3 Failed, Local Copy should NOT have completed");
+
+const TInt KMsvTestBackgroundDeleteInitialWait	=1000000;
+
+_LIT(KImcmTest, "T_POPSFullDisk - Test Copy when Disk Full");
+RTest test(KImcmTest);
+
+
+class CDelayTimer : public CTimer
+	{
+public:
+	CDelayTimer() : CTimer(EPriorityHigh)
+		{}
+	void ConstructL()
+		{ CTimer::ConstructL(); CActiveScheduler::Add(this); }
+	void RunL(void)
+		{ CActiveScheduler::Stop(); }
+	void Delay(TTimeIntervalMicroSeconds32 anInterval)
+		{ CTimer::After(anInterval); CActiveScheduler::Start(); }
+	};
+
+
+
+//-------------------------------------
+//		CPopsTestHarness
+//-------------------------------------
+class CPopsTestHarness : public CBase
+	{
+public:
+	static CPopsTestHarness* NewLC();
+	~CPopsTestHarness();
+		
+	void RunTestsL();
+	
+
+private:
+	CPopsTestHarness();
+	void ConstructL();
+
+	void InitL();
+	void ResetL();
+	void StartTestL(CMtmTestHarness& aTestCommands);
+	void CopyScriptFileL(const TDesC& aScriptFile);
+	void EndTestL();
+	void EndTestHarnessL();
+
+	// Fns to fill the disk
+	void FillDiskL();
+	TInt CheckDiskSpace(TInt64& aFreeSpace);
+	void TestAvailableSpaceOnDriveL();
+
+	// The Testing Functions
+	void TestCopyToLocalL(const TDesC& aPassText, const TDesC& aFailText);
+	void TestCopyWithinServiceL(const TDesC& aPassText, const TDesC& aFailText);
+	void TestLocalCopyL(const TDesC& aPassText, const TDesC& aFailText);
+	void TestOfflineCopyL(const TDesC& aPassText, const TDesC& aFailText);
+	void DoLocalCopyTestL();
+	void CheckIfTestFailedL(TInt aError, CMtmTestHarness& aTestHarness,const TDesC& aPassText, const TDesC& aFailText);
+	
+	void SetUpTestL(const TDesC& aScriptFile);
+	void SetUpPopServiceL();
+	void CreateTestHarnessesL();
+	void ResetMtmL();
+
+public:
+	CMtmTestHarness*	iConnectAndCopyAll;
+	CMtmTestHarness*	iConnectAndPopulateAll;
+	CMtmTestHarness*	iOfflineCopy;
+
+private:
+	TBool				iRemoveMailFolder;
+	TInt				iTestError;
+	TInt				iTestNumber;
+	TInt				iGlobalError;
+
+	TMsvId				iPop3Service;
+
+	CEmailTestUtils*	iTestUtils;
+	CScriptTestUtils*	iScriptUtils;
+	};
+
+
+//
+
+CPopsTestHarness::CPopsTestHarness() 
+: iGlobalError(KErrNone)
+	{
+	}
+
+CPopsTestHarness::~CPopsTestHarness()
+	{
+	delete iTestUtils;
+
+	delete iScriptUtils;
+	delete iConnectAndCopyAll;
+	delete iConnectAndPopulateAll;
+	delete iOfflineCopy;
+	}
+
+CPopsTestHarness* CPopsTestHarness::NewLC()
+	{
+	CPopsTestHarness* self = new (ELeave) CPopsTestHarness();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+void CPopsTestHarness::ConstructL()
+	{
+	iTestUtils = CEmailTestUtils::NewL(test);
+
+	InitL();
+	}
+
+
+void CPopsTestHarness::SetUpTestL(const TDesC& aScriptFile)
+	{
+	// Delete any old dummy fill files 
+	iTestUtils->FileSession().Delete(KMsvTestFillDiskFile);
+
+	// Reset & Copy the script file before filling the Disk
+	ResetL();
+	CopyScriptFileL(aScriptFile); 
+	}
+
+void CPopsTestHarness::RunTestsL()
+	{
+	iTestNumber = 0;
+	iRemoveMailFolder = ETrue;
+	SetUpPopServiceL();
+
+	// 1 - Test Copy To Local
+	TestCopyToLocalL(KTest1Pass, KTest1Failed);
+
+	// 2 - Test Copy Within Service
+	TestCopyWithinServiceL(KTest2Pass, KTest2Failed);
+
+	// 3 - Test Copying from a Local folder to another Local Folder
+	TestLocalCopyL(KTest3Pass, KTest3Failed);
+
+	// 4 - Test Offline Copy
+//	TestOfflineCopyL(KTest4Pass, KTest4Failed);
+
+	// Enf of the Tests	
+	EndTestHarnessL();
+	}
+
+
+void CPopsTestHarness::TestCopyToLocalL(const TDesC& aPassText, const TDesC& aFailText)
+// ------------------------------------
+// Test Copying To Local
+// ------------------------------------
+	{
+	iTestError = 0;
+	iTestNumber++;
+	SetUpTestL(K_SCRIPT_COPY_ALL);
+	FillDiskL();
+	TRAPD(testError, StartTestL(*iConnectAndCopyAll));
+
+	// Check if the Test Failed
+	CheckIfTestFailedL(testError, *iConnectAndCopyAll, aPassText, aFailText);
+	EndTestL();
+	}
+
+
+
+void CPopsTestHarness::TestCopyWithinServiceL(const TDesC& aPassText, const TDesC& aFailText)
+// ------------------------------------
+// Test Copy Within Service
+// ------------------------------------
+	{
+	iTestError = 0;
+	iTestNumber++;
+	SetUpTestL(K_SCRIPT_POPULATE_ALL);
+	FillDiskL();
+
+	TRAPD(testError, StartTestL(*iConnectAndPopulateAll));
+			
+	// Check if the Test Failed
+	CheckIfTestFailedL(testError, *iConnectAndPopulateAll, aPassText, aFailText);
+	EndTestL();
+	}
+
+
+void CPopsTestHarness::TestLocalCopyL(const TDesC& aPassText, const TDesC& aFailText)
+// ------------------------------------------------------------------
+// Test Copying from a Local folder to another Local Folder
+// ------------------------------------------------------------------
+	{
+	iTestError = 0;
+	iTestNumber++;
+
+	// Reset the harness & run the Test
+	iTestUtils->FileSession().Delete(KMsvTestFillDiskFile);
+	ResetL();
+	iTestUtils->TestStart(iTestNumber);
+	TRAPD(error, DoLocalCopyTestL());
+
+		// Delete the fill file, so we can write to the log
+	iTestUtils->FileSession().Delete(KMsvTestFillDiskFile);
+
+	if (error == KErrDiskFull)
+		{
+		// Test OK = We could not Copy, as the disk was too Full
+		iTestUtils->WriteComment(aPassText);
+		}
+	else if (error == KErrNone)
+		{
+		// ERROR - The Copy completed, even though the Disk was Full
+		iTestUtils->WriteComment(aFailText);
+		iTestError = KErrGeneral;
+		}
+
+	EndTestL();
+	}
+
+
+void CPopsTestHarness::TestOfflineCopyL(const TDesC& aPassText, const TDesC& aFailText)
+// ------------------------------------------------------------------
+// Test Offline Copy - Populate some Messages & then try to create 
+// Offline Ops to copy them locally
+// ------------------------------------------------------------------
+	{
+	iTestError = 0;
+	iTestNumber++;
+
+	// Connect & Populate all the messages first
+	SetUpTestL(K_SCRIPT_POPULATE_ALL);
+	TRAPD(test2Error, StartTestL(*iConnectAndPopulateAll));
+	
+	// Now reset, but DONT delete the Mail directory. 
+	iRemoveMailFolder = EFalse;
+	SetUpTestL(K_SCRIPT_OFFLINE_COPY);
+
+	// Fill the Disk & attempt to do an Offline Copy
+	FillDiskL();
+	TRAPD(error, StartTestL(*iOfflineCopy));
+			
+	// Check if the Test Failed
+	CheckIfTestFailedL(error, *iOfflineCopy, aPassText, aFailText);
+	EndTestL();
+	}
+
+
+void CPopsTestHarness::DoLocalCopyTestL()
+// Test copying a message locally.  ie create a message in the Drafts folder
+// and copy it to a local sub folder
+	{
+	// Create the Message in the Drafts Folder
+	iTestUtils->CreateMessageL(KTestMsgPath, KMsvDraftEntryId, KMsvDraftEntryId);
+	CMsvServerEntry* serverEntry = iTestUtils->iServerEntry;
+	serverEntry->SetEntry(KMsvDraftEntryId);
+	CMsvEntrySelection* newMessageList = new (ELeave)CMsvEntrySelection();
+	CleanupStack::PushL(newMessageList);
+	serverEntry->GetChildren(*newMessageList);
+	TMsvId newMessageId = (*newMessageList)[0];
+
+	// Create  a local folder under the Drafts folder
+	TMsvEntry parentEntry = serverEntry->Entry();
+	TMsvEntry newFolder;
+	newFolder.SetStandardFolder(ETrue);
+	newFolder.iDetails.Set(KSubFolder);
+	newFolder.iType.iUid=KUidMsvFolderEntryValue;
+	newFolder.iMtm=parentEntry.iMtm;
+	newFolder.iServiceId = parentEntry.iServiceId;
+	serverEntry->CreateEntry(newFolder);
+
+	// Fill the Disk Space and attempt to do the Copy
+	FillDiskL();
+
+	// Copy the message into the new LOCAL Sub-Folder
+	CTestActive* active = new(ELeave) CTestActive;
+	CleanupStack::PushL(active);
+	serverEntry->CopyEntryL(newMessageId, newFolder.Id(), active->iStatus);
+	active->StartL();
+	CActiveScheduler::Start();
+
+	CleanupStack::PopAndDestroy(2); // newMessageList, active
+	}
+
+
+void CPopsTestHarness::CheckIfTestFailedL(TInt aError, CMtmTestHarness& aTestHarness,
+										  const TDesC& aPassText, const TDesC& aFailText)
+	{
+	// Delete the fill file, so we can write to the log
+	iTestUtils->FileSession().Delete(KMsvTestFillDiskFile);
+
+	if (aError == KErrDiskFull)
+		{
+		// Test OK = We could not Copy, as the disk was too Full
+		iTestUtils->WriteComment(aPassText);
+		}
+	else if (aError == KErrNone)
+		{
+		// The test returned ok, so check if the Mtm Test Harness returned an error
+		TInt commandError = aTestHarness.CommandError();
+		TInt commandStatus = aTestHarness.iStatus.Int();
+		if (commandError == KErrDiskFull || commandStatus == KErrDiskFull)
+			{
+			// Test OK = We could not Copy as the disk was too Full
+			iTestUtils->WriteComment(aPassText);
+			}
+		else
+			{
+			// ERROR - The Copy completed, even though the Disk was Full
+			iTestUtils->WriteComment(aFailText);
+			iTestError = KErrGeneral;
+			}
+		}
+	}
+
+
+
+void CPopsTestHarness::TestAvailableSpaceOnDriveL()
+//
+// Make sure there is enougth disk space to run the Tests
+//
+	{
+	const TInt64 KMaximumAllowedFreeSpaceOnDrive=10*1024*1024; // 10MB
+
+	// Get drive information.
+	TVolumeInfo volumeInfo;
+	User::LeaveIfError(iTestUtils->FileSession().Volume(volumeInfo, EDriveC));
+
+	// Check that the media is present.
+	test(volumeInfo.iDrive.iType!=EMediaNotPresent);
+
+	// Check that there is not too much free space (ie 20Gb!)
+	test(volumeInfo.iFree<=KMaximumAllowedFreeSpaceOnDrive);
+	}
+
+
+
+TInt CPopsTestHarness::CheckDiskSpace(TInt64& aFreeSpace)
+//
+// Check available disk space.
+//
+	{
+	TVolumeInfo volumeInfo;
+	TInt error = iTestUtils->FileSession().Volume(volumeInfo, EDriveC);
+	aFreeSpace = error?0:volumeInfo.iFree;
+	return(error);
+	}
+
+
+void CPopsTestHarness::FillDiskL()
+//
+// Fill all available space on C: drive leaving aLeaveFreeByes free.
+//
+	{
+	TInt leaveFreeBytes = KTestDiskSpace; 
+
+	// Check that there is a C-drive and that it is less than 10MB in size.
+	TestAvailableSpaceOnDriveL();
+
+	// NOTE: This test harness should be used with a dedicated small partition or 
+	//       subst'ed floppy drive as the EPOC C: drive. As a safety precaution, it
+	//		 tests the free space on the partition to ensure that it does not attempt
+	//       to eat 20 GB of free space and either crash Windows or at least cause a
+	//       headache of some sort...
+
+	// Delete any old dummy fill files - if there is one to delete.
+	iTestUtils->FileSession().Delete(KMsvTestFillDiskFile);
+
+	// Create the delay timer 
+	CDelayTimer* delayTimer = new(ELeave)CDelayTimer;
+	CleanupStack::PushL(delayTimer);
+	delayTimer->ConstructL();
+
+	// Check that available disk space does not exceed the max free space to fill. 
+	// See above...
+	TInt64 freeSpace;
+	TInt64 freeSpaceLeft;
+	TInt error = CheckDiskSpace(freeSpace);
+	TInt reclaimActive = 0;
+	do
+		{
+		delayTimer->Delay(KMsvTestBackgroundDeleteInitialWait);
+		error = CheckDiskSpace(freeSpaceLeft);
+		if (freeSpaceLeft == freeSpace)
+			reclaimActive++;
+		freeSpace = freeSpaceLeft;
+		}
+	while (!error && reclaimActive<3);
+	User::LeaveIfError(error);
+
+	CleanupStack::PopAndDestroy(); //delayTimer
+	
+	// Free space in kb.
+	freeSpace/=KFillDiskOneKByte;
+
+	// Check free space on C: drive is not too big.
+	TInt freeSpaceInKb = I64INT(freeSpace);
+	if (freeSpaceInKb>KFillDiskTooBigFreeSize)
+		User::Leave(KErrTooBig);
+
+	// Fill disk with large file.
+	TBuf8<KFillDiskMaxBlockSize> dummy;
+	dummy.SetMax();
+	dummy.Fill('?');
+
+	// Open dummy file.
+	RFile fillDiskFile;
+	User::LeaveIfError(fillDiskFile.Replace(iTestUtils->FileSession(), KMsvTestFillDiskFile, EFileWrite));
+
+	// Establish required dummy file size.
+	freeSpaceLeft-=leaveFreeBytes;
+	if (freeSpaceLeft<0)
+		// Uh oh, we have less space available than what was asked for... 
+		User::Leave(KErrDiskFull);
+
+	// Write dummy file.
+	while (freeSpaceLeft>0 && error==KErrNone)
+		{
+		dummy.SetLength(Min(KFillDiskMaxBlockSize,I64INT(freeSpaceLeft)));
+		error=fillDiskFile.Write(dummy);
+		freeSpaceLeft-=KFillDiskMaxBlockSize;
+		}
+	fillDiskFile.Close();
+	if (error==KErrDiskFull)
+		error=KErrNone;
+	User::LeaveIfError(error);
+	}
+
+void CPopsTestHarness::ResetMtmL()
+	{
+	// Get server MTM.
+	iTestUtils->Reset();
+	
+	if (iRemoveMailFolder)
+		{
+		iTestUtils->CleanMessageFolderL();
+		}
+	else
+		{
+		iRemoveMailFolder = ETrue;
+		}
+
+	iTestUtils->GoServerSideL();
+	SetUpPopServiceL();
+	iTestUtils->InstantiatePopServerMtmL();
+	}
+
+void CPopsTestHarness::ResetL()
+	{
+	ResetMtmL();
+	CreateTestHarnessesL();
+	}
+
+void CPopsTestHarness::StartTestL(CMtmTestHarness& aTestCommands)
+	{
+	iTestError = KErrNone;
+	iTestUtils->TestStart(iTestNumber);
+
+	// Run the commands.
+	aTestCommands.StartL(_L("T_PopFullDsk - POP Copy Disk Full Test Harness"));
+	}
+
+void CPopsTestHarness::CopyScriptFileL(const TDesC& aScriptFile)
+	{
+	TParse parsedScriptFile;
+	parsedScriptFile.Set(aScriptFile,0,0);
+	if (!parsedScriptFile.DrivePresent())
+		// This isn't a full path name so we need to resolve it
+		{
+		iTestUtils->ResolveFile(K_POPS_COMPONENT_NAME, aScriptFile, parsedScriptFile);
+		}
+	iTestUtils->CopyScriptFileL(parsedScriptFile.FullName(), _L("110"));
+	}
+
+void CPopsTestHarness::EndTestL()
+	{
+	if ((iTestError != KErrNone) && (iGlobalError == KErrNone))
+		{
+		iGlobalError = iTestError;
+		}
+
+	iTestUtils->TestFinish(iTestNumber, iTestError);
+	}
+
+void CPopsTestHarness::EndTestHarnessL()
+	{
+	if (iGlobalError == KErrNone)
+		{
+		iTestUtils->TestHarnessCompleted();
+		}
+	else
+		{
+		iTestUtils->TestHarnessFailed(iGlobalError);
+		}
+	}
+
+void CPopsTestHarness::InitL()
+	{
+	iTestUtils->CreateAllTestDirectories();
+	iTestUtils->FileSession().SetSessionPath(KSessionPath);
+	iTestUtils->CleanMessageFolderL();
+	iTestUtils->GoServerSideL();
+	
+	iScriptUtils = CScriptTestUtils::NewLC(*iTestUtils);
+	CleanupStack::Pop(); // iScriptUtils
+	
+	iTestUtils->FileSession().SetSessionPath(KSessionPath);
+	}
+
+void CPopsTestHarness::SetUpPopServiceL()
+	{
+	// Create the POP3 service and set the settings for this test.
+	iPop3Service = iTestUtils->CreatePopServiceL();
+
+	CImPop3Settings* settings = new(ELeave) CImPop3Settings();
+	CleanupStack::PushL(settings);
+
+	settings->Reset();
+	_LIT(KPopServer, "pop3.demon.co.uk");
+	settings->SetServerAddressL(KPopServer);
+	settings->SetLoginNameL(iTestUtils->MachineName());
+	settings->SetPasswordL(iTestUtils->MachineName());
+	settings->SetPort(110);
+	settings->SetDisconnectedUserMode(ETrue); // eh xxxx, must test this when set to EFalse
+
+	CEmailAccounts* accounts = CEmailAccounts::NewLC();
+ 	TPopAccount popAccount;
+ 	accounts->GetPopAccountL(iPop3Service, popAccount);						
+ 	accounts->SavePopSettingsL(popAccount, *settings);
+	CleanupStack::PopAndDestroy(2, settings); // accounts/store, settings
+
+	test.Printf(_L("\nPerforming Tests\n"));
+	}
+
+
+void CPopsTestHarness::CreateTestHarnessesL()
+	{
+	CMsvEntrySelection* serviceSelection = new (ELeave) CMsvEntrySelection;
+	CleanupStack::PushL(serviceSelection);
+	serviceSelection->AppendL(iPop3Service);
+	TBuf8<128> parameter;
+
+	//--------------------------------------------
+	// Copy To Local
+	//--------------------------------------------
+	delete iConnectAndCopyAll;
+	iConnectAndCopyAll = NULL;
+	iConnectAndCopyAll = CMtmTestHarness::NewL(*(iTestUtils->iPopServerMtm), *iTestUtils);
+	// Connect
+	iConnectAndCopyAll->AddCommandL(CMtmTestStartCommand::NewL(*(iTestUtils->iPopServerMtm), serviceSelection, KPOP3MTMConnect, parameter));
+	// Copy all messages under the service to the local inbox.
+	CMtmTestCommand* copyToLocal = CMtmTestCopyToLocal::NewL(*(iTestUtils->iPopServerMtm), 0, KMsvGlobalInBoxIndexEntryId);
+	iConnectAndCopyAll->AddCommandL(CMtmTestCommandOnAllMessages::NewL(*(iTestUtils->iPopServerMtm), copyToLocal, iPop3Service, *(iTestUtils->iServerEntry)));
+	// Quit
+	iConnectAndCopyAll->AddCommandL(CMtmTestStartCommand::NewL(*(iTestUtils->iPopServerMtm), serviceSelection, KPOP3MTMDisconnect, parameter));
+
+	//--------------------------------------------
+	// Copy Within Service
+	//--------------------------------------------
+	delete iConnectAndPopulateAll;
+	iConnectAndPopulateAll = NULL;
+	iConnectAndPopulateAll = CMtmTestHarness::NewL(*(iTestUtils->iPopServerMtm), *iTestUtils);
+	// Connect
+	iConnectAndPopulateAll->AddCommandL(CMtmTestStartCommand::NewL(*(iTestUtils->iPopServerMtm), serviceSelection, KPOP3MTMConnect, parameter));
+	// Copy all messages under the service to the local service.
+	copyToLocal = CMtmTestCopyWithinService::NewL(*(iTestUtils->iPopServerMtm), 0, iPop3Service);
+	iConnectAndPopulateAll->AddCommandL(CMtmTestCommandOnAllMessages::NewL(*(iTestUtils->iPopServerMtm), copyToLocal, iPop3Service, *(iTestUtils->iServerEntry)));
+	// Quit
+	iConnectAndPopulateAll->AddCommandL(CMtmTestStartCommand::NewL(*(iTestUtils->iPopServerMtm), serviceSelection, KPOP3MTMDisconnect, parameter));
+
+
+	//--------------------------------------------
+	// Offline Copy
+	//--------------------------------------------
+	CMsvServerEntry* serverEntry = iTestUtils->iServerEntry;
+	serverEntry->SetEntry(iPop3Service);
+	CMsvEntrySelection* newMessageList = new (ELeave)CMsvEntrySelection();
+	CleanupStack::PushL(newMessageList);
+	serverEntry->GetChildren(*newMessageList);
+	delete iOfflineCopy;
+	iOfflineCopy = NULL;
+	iOfflineCopy = CMtmTestHarness::NewL(*(iTestUtils->iPopServerMtm), *iTestUtils);
+	// Copy all messages under the service to the local inbox.
+	copyToLocal = CMtmTestCopyToLocal::NewL(*(iTestUtils->iPopServerMtm), newMessageList, KMsvGlobalInBoxIndexEntryId);
+	iOfflineCopy->AddCommandL(CMtmTestCommandOnAllMessages::NewL(*(iTestUtils->iPopServerMtm), copyToLocal, iPop3Service, *(iTestUtils->iServerEntry)));
+	// Connect
+	iOfflineCopy->AddCommandL(CMtmTestStartCommand::NewL(*(iTestUtils->iPopServerMtm), serviceSelection, KPOP3MTMConnect, parameter));
+	// Quit
+	iOfflineCopy->AddCommandL(CMtmTestStartCommand::NewL(*(iTestUtils->iPopServerMtm), serviceSelection, KPOP3MTMDisconnect, parameter));
+
+
+	CleanupStack::PopAndDestroy(2); // newMessageList, serviceSelection
+	}
+
+
+//
+
+
+
+LOCAL_C void doMainL()
+	{
+	CActiveScheduler* scheduler;
+	scheduler = new (ELeave) CActiveScheduler;
+	CleanupStack::PushL(scheduler);
+	CActiveScheduler::Install(scheduler);
+
+	// Create the Test Harness & run the Tests
+	CPopsTestHarness* popsTestHarness = CPopsTestHarness::NewLC();
+	popsTestHarness->RunTestsL();
+
+	CleanupStack::PopAndDestroy(2); // popsTestHarness, scheduler
+	}
+
+GLDEF_C TInt E32Main()
+	{	
+	__UHEAP_MARK;
+	test.Start(_L("T_PopFullDsk, POP Copy Disk Full Tests"));
+	CTrapCleanup* theCleanup = CTrapCleanup::New();
+
+	TRAPD(ret,doMainL());
+	test(ret==KErrNone);
+	delete theCleanup;	
+	test.End();
+	test.Close();
+	__UHEAP_MARKEND;
+	User::Heap().Check();
+	return(KErrNone);
+	}
+
+
+
+
+
+
+
+
+
+
+
+
+
+