--- /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;
+ }