email/pop3andsmtpmtm/clientmtms/test/src/T_MIUT10A.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/clientmtms/test/src/T_MIUT10A.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,355 @@
+// 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_MIUT10A
+// Component: IMCM
+// Owner: 
+// Brief description of test harness:
+// Cachemanager tests - Automatic test that proves that the cachemanager 
+// recursively prunes bodytext and attachment data.
+// This is identical to T_MIUT10, except that it starts the cachemanager
+// with a selection of message entries to prune instead of a service entry.
+// Written as part of the fix for DEF043085, propagated from Hurricane (DEF042552).
+// Detailed description of test harness:
+// As above.
+// Input files required to run test harness:
+// \MSG\IMCMTSRC\plain_text.txt				<DRIVE>:\msgtest\IMCM\rfc822\plain_text.txt
+// \MSG\IMCMTSRC\html_with_attachment.txt		<DRIVE>:\msgtest\IMCM\rfc822\html_with_attachment.txt
+// Intermediate files produced while running test harness:
+// <DRIVE>:\msglogs\T_MIUT10A\Entry_822Headers.txt
+// <DRIVE>:\msglogs\T_MIUT10A\Entry_MimeHeaders.txt
+// <DRIVE>:\msglogs\T_MIUT10A\Entry_RichTextBodies.txt
+// <DRIVE>:\msglogs\T_MIUT10A\Entry_Structure.txt
+// Output files produced by running test harness:
+// <DRIVE>:\msglogs\T_MIUT10A.<PLATFORM>.<VARIANT>.LOG.txt
+// Description of how to build test harness:
+// cd \msg\imcm\
+// bldmake bldfiles
+// abld test build
+// Description of how to run test harness:
+// 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_MIUT10A.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_MIUT10A.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. Run T_MIUT10A.exe on the other platform
+// 
+//
+
+#include "emailtestutils.h"
+#include <miutlog.h>
+#include <cacheman.h>
+
+// local variables etc //
+
+// Message file names
+_LIT(K_T_MIUT10_PLAIN_MSG, "c:\\mailtest\\rfc822\\plain_text.txt");
+_LIT(K_T_MIUT10_HTML_ATTACHMENT_MSG, "c:\\mailtest\\rfc822\\html_with_attachment.txt" );
+
+// Logging strings
+_LIT(K_T_MIUT10_TEST_INFO, "MIUT10A - Cache Management Tests");
+_LIT(K_T_MIUT10_TEXT_LEFT, "The text stream on entry was not removed.");
+_LIT(K_T_MIUT10_ATTACHMENT_LEFT, "The attachment on entry was not removed.");
+_LIT(K_T_MIUT10_FILTER_FAILED, "The filter didn't work.");
+_LIT(K_T_MIUT10_DESCRIPTION, "Testing pruning of a remote service containing plain test and MHTML mails.");
+_LIT(K_T_MIUT10_PROGRESS, "   Messages pruned %d/%d		\n");
+
+RTest test(K_T_MIUT10_TEST_INFO);
+
+#define DONT_PRUNE_ID 0x100002
+#define KErrBodyTextNotRemoved 5599
+#define KErrAttachmentNotRemoved 5600
+#define KErrFilterNotWorking 5601
+#define KPeriod 10000	// period of timer
+LOCAL_D TMsvId pop3Service;
+
+LOCAL_D CTrapCleanup* theCleanup;
+LOCAL_D CEmailTestUtils* testUtils;
+
+class CFilteredCacheManager : public CImCacheManager
+	{
+public:
+	CFilteredCacheManager(CMsvSession& aSession, TRequestStatus& aObserverRequestStatus);
+	static CFilteredCacheManager* NewL(CMsvSession& aSession, TRequestStatus& aObserverRequestStatus);
+
+private:
+	TBool Filter() const;
+	};
+
+CFilteredCacheManager::CFilteredCacheManager(CMsvSession& aSession, TRequestStatus& aObserverRequestStatus) : CImCacheManager(aSession, aObserverRequestStatus)
+	{
+	}
+
+CFilteredCacheManager* CFilteredCacheManager::NewL(CMsvSession& aSession, TRequestStatus& aObserverRequestStatus)
+	{
+	CFilteredCacheManager* self = new (ELeave) CFilteredCacheManager(aSession, aObserverRequestStatus);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(); // self
+	return self;
+	}
+
+TBool CFilteredCacheManager::Filter() const
+	{
+	return (iCurrentEntry->Entry().Id() == DONT_PRUNE_ID) ? EFalse : ETrue;
+	}
+
+
+//
+
+
+class CImCacheManager;
+class TestUiTimer : public CTimer
+	{
+public:
+	static TestUiTimer* NewLC(CConsoleBase* aConsole, CImCacheManager* aCacheManager);
+	void RunL();
+	void DoCancel();
+	void ConstructL();
+	void IssueRequest();
+	
+	CConsoleBase*				iConsole;
+	CImCacheManager*			iCacheManager;
+	TTimeIntervalMicroSeconds32 period;
+protected:
+	TInt iCount;
+	TBool iClosing;
+	TestUiTimer(CConsoleBase* aConsole, CImCacheManager* aCacheManager);
+	};
+
+//
+// Progress timer
+//	  
+TestUiTimer* TestUiTimer::NewLC(CConsoleBase* aConsole, CImCacheManager* aCacheManager)
+	{
+	TestUiTimer* self = new(ELeave) TestUiTimer(aConsole, aCacheManager);
+	CleanupStack::PushL(self);
+	self->iCacheManager = aCacheManager;
+	self->ConstructL();
+	return self;
+	}
+
+TestUiTimer::TestUiTimer(CConsoleBase* aConsole, CImCacheManager* aCacheManager)
+	: CTimer(EPriorityStandard+3), iCacheManager(aCacheManager)
+	{
+//	counter =0;
+	iConsole = aConsole;
+	period = KPeriod;
+	iClosing = EFalse;
+	iCount = 0;
+	}
+
+void TestUiTimer::ConstructL()
+	{
+	CTimer::ConstructL();
+	CActiveScheduler::Add(this);
+	}
+
+void TestUiTimer::IssueRequest()
+	{
+	After(period);
+	}
+
+void TestUiTimer::DoCancel()
+	{
+	CTimer::DoCancel();
+	}
+
+void TestUiTimer::RunL()
+	{
+	// display the current progress
+	TImCacheManagerProgress temp;	
+	TPckgC<TImCacheManagerProgress> paramPack(temp);
+
+	const TDesC8& progBuf = iCacheManager->ProgressL();	
+	paramPack.Set(progBuf);
+	TImCacheManagerProgress progress=paramPack();	
+
+
+	test.Console()->SetPos(0, 10);
+
+	TBuf<128> strProgress;
+	strProgress.Format(K_T_MIUT10_PROGRESS, progress.iMessagesProcessed,
+				progress.iTotalMessages);
+	test.Printf(strProgress);
+	
+	testUtils->WriteComment(strProgress);
+
+	IssueRequest();
+	};
+
+//
+
+LOCAL_C void Init()
+	{
+	CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+	CActiveScheduler::Install(scheduler);
+	CleanupStack::PushL(scheduler);
+
+	testUtils = CEmailTestUtils::NewLC(test);
+	testUtils->CreateAllTestDirectories();
+
+	testUtils->WriteComment(K_T_MIUT10_TEST_INFO);
+	
+	testUtils->FileSession().SetSessionPath(_L("C:\\"));
+	testUtils->CleanMessageFolderL();
+	testUtils->GoServerSideL();
+	}
+	
+LOCAL_C void Closedown()
+	{
+	CleanupStack::PopAndDestroy(2);  //testUtils, scheduler
+	}
+
+LOCAL_C void doMainL()
+	{
+	Init();
+	TInt globalError = KErrNone;
+	testUtils->FileSession().SetSessionPath(_L("c:\\"));
+
+	testUtils->CreateSmtpServiceL();
+	pop3Service = testUtils->CreatePopServiceL();
+
+	testUtils->CreateMessageL(K_T_MIUT10_PLAIN_MSG, pop3Service, pop3Service);
+	testUtils->CreateMessageL(K_T_MIUT10_PLAIN_MSG, pop3Service, pop3Service);
+	testUtils->CreateMessageL(K_T_MIUT10_HTML_ATTACHMENT_MSG, pop3Service, pop3Service);
+
+	test.Printf(_L("\nPerforming Cache Management Tests\n"));
+	
+	testUtils->GoClientSideL();
+
+	testUtils->iMsvEntry->SetEntryL(pop3Service);
+	TMsvEntry entry = testUtils->iMsvEntry->Entry();
+	entry.SetVisible(ETrue);
+	testUtils->iMsvEntry->ChangeL(entry);
+
+
+	// create a selection of message entries to pass to the cache manager
+	CMsvEntrySelection* mySelection = testUtils->iMsvEntry->ChildrenL();
+	CleanupStack::PushL(mySelection);
+	ASSERT(mySelection->Count() == 3);
+
+
+	TRequestStatus observerStatus;
+	CImCacheManager* cacheManager = CFilteredCacheManager::NewL(*testUtils->iMsvSession, observerStatus);
+	CleanupStack::PushL(cacheManager);
+	TestUiTimer* testUiTimer = TestUiTimer::NewLC(test.Console(), cacheManager);
+	CTestActive* testActive = new (ELeave) CTestActive();
+	CleanupStack::PushL(testActive);
+
+	testActive->StartL();
+	testUiTimer->IssueRequest();
+
+	testUtils->TestStart(0, K_T_MIUT10_DESCRIPTION);
+
+	cacheManager->StartL(*mySelection, testActive->iStatus);
+
+	CActiveScheduler::Start();
+
+	testUtils->FindChildrenL(KMsvRootIndexEntryId);
+	CMsvStore* store=NULL;
+	// added HasStore check for: DEF049479 CImCacheManager doesn't remove CMsvStores 
+	// Check that the items have been removed...
+	if (testUtils->iMsvEntry->HasStoreL())
+		{
+		testUtils->iMsvEntry->SetEntryL(0x100004);
+		CMsvStore* store = testUtils->iMsvEntry->ReadStoreL();
+		CleanupStack::PushL(store);
+
+		// Check that body text has been removed
+		if (store->HasBodyTextL())
+			{
+			// Body text hasn't been removed.
+			testUtils->WriteComment(K_T_MIUT10_TEXT_LEFT);
+			globalError = KErrBodyTextNotRemoved;
+			// User::Leave(KErrBodyTextNotRemoved);
+			}
+		CleanupStack::PopAndDestroy(store); 
+		store=NULL;
+		}
+	test.Printf(_L("\nBody Text Removed\n"));
+
+	if (testUtils->iMsvEntry->HasStoreL())
+		{
+		store = testUtils->iMsvEntry->ReadStoreL();
+		CleanupStack::PushL(store);
+	// Check that empty directory exists (try deleting it)
+		if (testUtils->FileSession().RmDir(_L("c:\\private\\mail\\1000484b\\mail\\00100001_S\\b\\")) != KErrNone)	
+			{
+			// Attachment data hasn't been removed.
+			testUtils->WriteComment(K_T_MIUT10_ATTACHMENT_LEFT);
+			globalError = KErrAttachmentNotRemoved;
+			}
+			CleanupStack::PopAndDestroy(store); 
+		}
+	test.Printf(_L("\nAttachment Removed\n"));
+	store=NULL;
+
+	if (testUtils->iMsvEntry->HasStoreL())
+		{
+		testUtils->iMsvEntry->SetEntryL(0x100003);
+		store=testUtils->iMsvEntry->ReadStoreL();
+		CleanupStack::PushL(store);
+		if (!(store->HasBodyTextL()))
+			{
+			// The filter hasn't worked
+			testUtils->WriteComment(K_T_MIUT10_FILTER_FAILED);
+			globalError = KErrFilterNotWorking;
+			}
+		CleanupStack::PopAndDestroy(store);
+		store=NULL;
+		}
+	testUtils->TestFinish(0, globalError);
+
+	if (globalError == KErrNone)
+		{
+		testUtils->TestHarnessCompleted();
+		}
+	else
+		{
+		testUtils->TestHarnessFailed(globalError);
+		}
+
+	CleanupStack::PopAndDestroy(4); // mySelection, testActive, testUiTimer, cacheManager
+
+	Closedown();
+	}
+
+GLDEF_C TInt E32Main()
+	{	
+	__UHEAP_MARK;
+	test.Start(_L("T_MIUT10A Test CImCacheManager class\n"));
+	theCleanup=CTrapCleanup::New();
+	TRAPD(ret,doMainL());		
+	test(ret==KErrNone);
+	delete theCleanup;	
+	test.End();
+	test.Close();
+	__UHEAP_MARKEND;
+	User::Heap().Check();
+	return(KErrNone);
+	}
+