email/email/pop/src/t_verifyheaders.cpp
branchSymbian3
changeset 18 147b85a37c23
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/email/pop/src/t_verifyheaders.cpp	Fri Mar 05 11:15:10 2010 +0000
@@ -0,0 +1,266 @@
+// 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: Verify email header
+
+// @file
+
+//
+//
+// [TestStep Name]
+// VerifyHeaders
+//
+// [Paramaters]
+// PopAccountName			:		Name of the Pop account
+// ToAddress%d%d			: 		Name of To Address with
+//									First %d for multiple message entries
+//									Seconde %d for multiple email addresses
+// CcAddress%d%d			:		Name of Cc Address with
+//									First %d for multiple message entries
+//									Seconde %d for multiple email addresses
+// BccAddress%d%d			:		Name of Bcc Address with
+//									First %d for multiple message entries
+//									Seconde %d for multiple email addresses
+// FromAddress%d			:		Name of From Address with
+//									First %d for multiple message entries
+// Subject%d				:		Name of Subject with
+//									First %d for multiple message entries
+// ContentType%d			:		Name of ContentType with
+//									First %d for multiple message entries
+// ContentSubType%d			:		Name of ContentSubType with
+//									First %d for multiple message entries
+//
+// [Description]
+// Veriy the email messge header parts
+//
+// [APIs Used]
+// CMsvEntry::ReadStoreL
+// CImHeader::RestoreL
+//
+//
+
+// User includes
+#include "t_verifyheaders.h"
+
+// Epoc includes
+#include <t_utils.h>
+#include <t_utilscentralrepository.h>
+#include <miuthdr.h>
+
+// Literals used
+_LIT(KPopAccountName,"PopAccountName");
+_LIT(KToAddress,"ToAddress%d%d");
+_LIT(KCcAddress,"CcAddress%d%d");
+_LIT(KBccAddress,"BccAddress%d%d");
+_LIT(KFromAddress,"FromAddress%d");
+_LIT(KSubject,"Subject%d");
+
+_LIT(KContentType,"ContentType%d");
+_LIT(KContentSubType,"ContentSubType%d");
+
+/**
+  Function 		: CT_MsgVerifyHeaders
+  Description 	: Constructor
+  @param 		:
+  @return 		: N/A
+*/
+CT_MsgVerifyHeaders::CT_MsgVerifyHeaders(CT_MsgSharedDataPop& aSharedDataPOP)
+:	CT_MsgSyncStepPOP(aSharedDataPOP)
+	{
+	SetTestStepName(KVerifyHeaders);
+	}
+
+/**
+  Function    	: doTestStepL
+  Description 	: Reads the POP account name and the expected header parts from the ini file.
+				  Obtains the header parts of the children entries under the given folder.
+  @return     	: TVerdict - Test step result
+			      EPass, if the header part matches
+			      EFail, if the header part does not match
+*/
+TVerdict CT_MsgVerifyHeaders::doTestStepL()
+	{
+	INFO_PRINTF1(_L("Test Step :VerifyHeaders for POP services "));
+	// Read the POP account name from the ini file
+	TPtrC	popAccountName;
+	if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName))
+		{
+		ERR_PRINTF1(_L("POP account name is not specified"));
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		// Retrieving the POP service Id based on the account name read from ini
+		TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&) popAccountName);
+		if(popServiceId == KMsvNullIndexEntryId)
+			{
+			ERR_PRINTF1(_L("Invalid Pop account name specified"));
+			SetTestStepResult(EFail);
+			}
+		else
+			{
+			// Create a selection of the children entries under the given folder and verify the header parts
+			CMsvEntrySelection* selection = CT_MsgUtils::CreateChildrenSelectionL(iSharedDataPOP.iSession, popServiceId);
+			CleanupStack::PushL(selection);
+			// Verify the header parts
+			TBool status = VerifyImHeaderPartsL(selection);
+			if (status == EFail )
+				{
+				SetTestStepResult(EFail);
+				}
+			// Verify mime header parts
+			status = VerifyMimeHeaderPartsL(selection);
+			if (status == EFail )
+				{
+				SetTestStepResult(EFail);
+				}
+			CleanupStack::PopAndDestroy(selection);
+			}
+		}
+	return TestStepResult();
+	}
+TBool CT_MsgVerifyHeaders::VerifyImHeaderPartsL(CMsvEntrySelection* aEntrySelection)
+	{
+	TBool status = EPass;
+	for(int index = 0; index < aEntrySelection->Count(); ++index)
+		{
+		CMsvEntry* entry = iSharedDataPOP.iSession->GetEntryL(aEntrySelection->At(index));
+		CleanupStack::PushL(entry);
+		CMsvStore* store = entry->ReadStoreL();
+		CleanupStack::PushL(store);
+		CImHeader* header = CImHeader::NewLC();
+		// Retrieve the email message header part from the message store
+		header->RestoreL(*store);
+
+		// Validate the header fields
+		TBuf<256> param;
+
+		for(int indexTo = 0; indexTo < header->ToRecipients().Count(); ++indexTo)
+			{
+			TPtrC toAddress;
+			param.Format(KToAddress, index, indexTo);
+			if(GetStringFromConfig( ConfigSection(), param, toAddress))
+				{
+				TPtrC toAdd = header->ToRecipients()[indexTo];
+				if(toAddress.Compare(header->ToRecipients()[indexTo]))
+					{
+					ERR_PRINTF1(_L(" To Address is not matched"));
+					status = EFail;
+					}
+				}
+			}
+		for(int indexCc = 0; indexCc < header->CcRecipients().Count(); ++indexCc)
+			{
+			TPtrC ccAddress;
+			param.Format(KCcAddress, index, indexCc);
+			if(GetStringFromConfig( ConfigSection(), param, ccAddress))
+				{
+				TPtrC ccAdd = header->CcRecipients()[indexCc];
+				if(ccAddress.Compare(header->CcRecipients()[indexCc]))
+					{
+					ERR_PRINTF1(_L("CC Address is not matched"));
+					status = EFail;
+					}
+				}
+			}
+		for(int indexBcc = 0; indexBcc < header->BccRecipients().Count(); ++indexBcc)
+			{
+			TPtrC bccAddress;
+			param.Format(KBccAddress, index, indexBcc);
+			if(GetStringFromConfig( ConfigSection(), param, bccAddress))
+				{
+				TPtrC bccAdd = header->BccRecipients()[indexBcc];
+				if(bccAddress.Compare(header->BccRecipients()[indexBcc]))
+					{
+					ERR_PRINTF1(_L("BCC Address is not matched"));
+					status = EFail;
+					}
+				}
+			}
+		TPtrC fromAddress;
+		param.Format(KFromAddress, index);
+		if(GetStringFromConfig( ConfigSection(), param, fromAddress))
+			{
+			TPtrC fromAdd = header->From();
+			if(fromAddress.Compare(header->From()))
+				{
+				ERR_PRINTF1(_L("From Address is not matched"));
+				status = EFail;
+				}
+			}
+		TPtrC subject;
+		param.Format(KSubject, index);
+		if(GetStringFromConfig( ConfigSection(), param, subject))
+			{
+			TPtrC tsub = header->Subject();
+			if(subject.Compare(header->Subject()))
+				{
+				ERR_PRINTF1(_L("Subject is not matched"));
+				status = EFail;
+				}
+			}
+		CleanupStack::PopAndDestroy(header);
+		CleanupStack::PopAndDestroy(store);
+		CleanupStack::PopAndDestroy(entry);
+		}
+	return status;
+	}
+TBool CT_MsgVerifyHeaders::VerifyMimeHeaderPartsL(CMsvEntrySelection* aEntrySelection)
+	{
+	TBool status = EPass;
+	for(int index = 0; index < aEntrySelection->Count(); ++index)
+		{
+		CMsvEntry* entry = iSharedDataPOP.iSession->GetEntryL(aEntrySelection->At(index));
+		CleanupStack::PushL(entry);
+		CMsvStore* store = entry->ReadStoreL();
+		CleanupStack::PushL(store);
+		if (store->IsPresentL(KUidMsgFileMimeHeader))
+			{
+			CImMimeHeader* mimeHeader = CImMimeHeader::NewLC();
+			mimeHeader->RestoreL(*store);
+	
+			TBuf<256> param;
+			TPtrC contentType;
+			param.Format(KContentType, index);
+			if(GetStringFromConfig( ConfigSection(), param, contentType))
+				{
+				TPtrC8 content8 = mimeHeader->ContentType();
+				HBufC* content16 = HBufC::NewLC(content8.Length());
+				content16->Des().Copy(content8);
+				if(contentType.Compare(content16->Des()))
+					{
+					ERR_PRINTF1(_L("Content Type is not matched"));
+					status = EFail;
+					}
+				CleanupStack::PopAndDestroy(content16);
+				}
+			TPtrC contentSubType;
+			param.Format(KContentSubType, index);
+			if(GetStringFromConfig( ConfigSection(), param, contentSubType))
+				{
+				TPtrC8 content8 = mimeHeader->ContentSubType();
+				HBufC* content16 = HBufC::NewLC(content8.Length());
+				content16->Des().Copy(content8);
+				if(contentSubType.Compare(content16->Des()))
+					{
+					ERR_PRINTF1(_L("Content Sub Type is not matched"));
+					status = EFail;
+					}
+				CleanupStack::PopAndDestroy(content16);
+				}
+			CleanupStack::PopAndDestroy(mimeHeader);
+			}
+		CleanupStack::PopAndDestroy(store);
+		CleanupStack::PopAndDestroy(entry);
+		}
+	return status;
+	}