common/tools/ats/smoketest/email/email/smtp/src/T_CreateSmtpMessageFromEmailFile.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/common/tools/ats/smoketest/email/email/smtp/src/T_CreateSmtpMessageFromEmailFile.cpp Fri Oct 30 09:36:23 2009 +0000
@@ -0,0 +1,284 @@
+// 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 the License "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// [TestStep Name]
+// CreateSmtpMessageFromEmailFile
+// [Paramaters]
+// ParentFolderName : Name of the local folder under which the message
+// needs to be created
+// EmailFileName : Email file from which the message is to be created
+// KilobytesExtra : Number of lines of 1024 characters to add to body text
+// Default value is 0.
+// [Test Step Description]
+// Creates an Email message reading the contents from the email file specified
+// from the config file.
+// [APIs Used]
+// CMsvEntry::SetEntryL
+//
+//
+
+
+
+/**
+ @file
+*/
+
+// User include
+#include "ImCltCvRecv.h"
+#include <t_utilscentralrepository.h>
+#include "T_CreateSmtpMessageFromEmailFile.h"
+#include <t_utilsenumconverter.h>
+
+
+// Literals Used
+_LIT(KEmailFileName, "EmailFileName");
+_LIT(KParentFolderName,"ParentFolderName");
+_LIT(KKilobytesExtra, "KilobytesExtra");
+_LIT(KOverRideAddress, "OverRideAddress");
+
+// Maximum length of a line read from Email file
+const TInt KMaxLenghtOfLine = 1024;
+const TInt KMaxLenghtOfChar = 1;
+
+/**
+CT_MsgCreateSmtpMessageFromEmailFile()
+Sets the test step name to KCreateSmtpMessageFromEmailFile
+
+@param aSharedDataSMTP
+
+*/
+CT_MsgCreateSmtpMessageFromEmailFile::CT_MsgCreateSmtpMessageFromEmailFile(CT_MsgSharedDataSmtp& aSharedDataSMTP)
+: CT_MsgSyncStepSMTP(aSharedDataSMTP)
+ {
+ SetTestStepName(KCreateSmtpMessageFromEmailFile);
+ }
+
+
+/**
+NewL()
+Static factory constructor. Uses two phase
+construction.
+
+@param aSharedDataSMTP
+@leave KErrNoMemory
+@return
+A pointer to the newly created CT_MsgCreateSmtpMessageFromEmailFile object.
+*/
+CT_MsgCreateSmtpMessageFromEmailFile* CT_MsgCreateSmtpMessageFromEmailFile::NewL(CT_MsgSharedDataSmtp& aSharedDataSMTP)
+ {
+ CT_MsgCreateSmtpMessageFromEmailFile* self = new(ELeave) CT_MsgCreateSmtpMessageFromEmailFile(aSharedDataSMTP);
+ CleanupStack::PushL(self);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+/**
+~CT_MsgCreateSmtpMessageFromEmailFile()
+Destructor
+*/
+CT_MsgCreateSmtpMessageFromEmailFile::~CT_MsgCreateSmtpMessageFromEmailFile()
+ {
+ }
+
+
+/**
+doTestStepL()
+Reads the name of the email file,parent foldername from the ini file
+Parses the email file to generate a message under the parent folder
+mentioned.If the number of lines is mentioned in the ini file then adds it to the
+message.If not mentioned takes a default of 0.
+
+@return
+Returns the test step result
+*/
+TVerdict CT_MsgCreateSmtpMessageFromEmailFile::doTestStepL()
+ {
+ INFO_PRINTF1(_L("Test Step: CreateSmtpMessageFrom email file"));
+ TPtrC emailFileName;
+ // Read the name of the email file from the ini
+ if(!GetStringFromConfig(ConfigSection(),KEmailFileName,emailFileName))
+ {
+ ERR_PRINTF1(_L("Email file name not specified"));
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ TInt numKilobytesExtra = 0;
+ GetIntFromConfig( ConfigSection(), KKilobytesExtra, numKilobytesExtra);
+
+ TPtrC parentFolderName;
+ if(!GetStringFromConfig( ConfigSection(), KParentFolderName, parentFolderName))
+ {
+ ERR_PRINTF1(_L("Parent Folder is not specified"));
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ // Retrieves the folder Id based on the local folder name read from the ini file
+ TMsvId parentFolderId = CT_MsgUtilsEnumConverter::FindFolderIdByName(parentFolderName);
+ if( parentFolderId == KErrNotFound)
+ {
+ ERR_PRINTF1(_L("Invalid local folder name specified"));
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ INFO_PRINTF2(_L("The parent folder Id is %d"),parentFolderId );
+
+ // Retrieve the default Smtp service Id
+ TMsvId smtpServiceId(0);
+ TRAPD(err,smtpServiceId = CT_MsgUtilsCentralRepository::GetDefaultSmtpServiceIdL());
+ if(smtpServiceId == KMsvNullIndexEntryId)
+ {
+ ERR_PRINTF1(_L("Invalid account name specified"));
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ if(err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Failure while getting the default SMTP Service Id. error = %d"),err);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ INFO_PRINTF2(_L("The default Smtp serviceId is %d"),smtpServiceId );
+
+ // Set the context to the folder in which message has to be created
+ CMsvEntry* entry = CMsvEntry::NewL(*iSharedDataSMTP.iSession,parentFolderId,TMsvSelectionOrdering());
+ CleanupStack::PushL(entry);
+ entry->SetEntryL(parentFolderId);
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CImCltRecvConvert* recvConvert = CImCltRecvConvert::NewLC(fs,entry,KUidMsgTypeSMTP,
+ smtpServiceId);
+ recvConvert->SetMsvId(parentFolderId);
+
+ // Read one line of text from the file, parse the line and set the fields of the email
+ // message based on the contents of the parsed line.
+
+ // Open the Email file in read mode
+ RFile file;
+ User::LeaveIfError(file.Open(fs,emailFileName,EFileRead));
+ CleanupClosePushL(file);
+
+ TBuf8<KMaxLenghtOfLine> line;
+ TBuf8<KMaxLenghtOfChar> aChar; // To read one character from the file
+ TBool finished = FALSE;
+
+ recvConvert->ResetL();
+
+ // Parse each line from the
+
+ do
+ {
+ line.FillZ();
+ line.SetLength(0);
+ // Read one line from email file
+ do
+ {
+ file.Read(aChar, 1);
+ if(aChar.Length())
+ {
+ line.Append(aChar);
+ }
+ else
+ {
+ finished = TRUE;
+ }
+ }while(aChar.Length() && aChar[0] != 0x0A);
+ if(!line.Length())
+ {
+ break;
+ }
+ // Parse the line for the fields of the email and store them
+ recvConvert->ParseNextFieldL(line);
+ }while(!finished);
+
+ // For a large email, pad the email with extra characters
+ if(numKilobytesExtra > 0)
+ {
+ const TChar KPadChar = 'L';
+ line.Fill(KPadChar, 1024);
+ for(TInt i = 0; i < numKilobytesExtra; i++)
+ {
+ recvConvert->ParseNextFieldL(line);
+ }
+ }
+
+ // Complete the message creation by setting all the required fields and
+ // storing the email on to the message store.
+ // The created email's ID is returned by MessageCompelteL function
+ //
+
+ TMsvId messageId;
+ messageId = recvConvert->MessageCompleteL();
+
+ if(messageId == 0)
+ {
+ User::Leave(KErrUnknown);
+ }
+ TBool overrideAddr = ETrue; // Default is to override.
+ GetBoolFromConfig(ConfigSection(), KOverRideAddress, overrideAddr);
+ // If the recipients email address in the message need to be changed to SMTP service's
+ // email address field, "overrideAddr" should be set to ETrue.
+ if(overrideAddr)
+ {
+ CImSmtpSettings* settings = new(ELeave) CImSmtpSettings();
+ CleanupStack::PushL(settings);
+
+ CEmailAccounts* accounts = CEmailAccounts::NewLC();
+ TSmtpAccount smtpAccount;
+ accounts->GetSmtpAccountL(smtpServiceId, smtpAccount);
+ accounts->LoadSmtpSettingsL(smtpAccount, *settings);
+ CleanupStack::PopAndDestroy(accounts);
+
+ HBufC* emailAddress=settings->EmailAddress().AllocL();
+ CleanupStack::PushL(emailAddress);
+
+ entry->SetEntryL(messageId);
+ CMsvStore* store = entry->EditStoreL();
+ CleanupStack::PushL(store);
+
+ CImHeader* header = CImHeader::NewLC();
+
+ header->RestoreL(*store); // Retrieves the email message header
+
+ header->ToRecipients().Reset();
+ header->ToRecipients().AppendL(*emailAddress); // Modification of the e-mail ID
+
+ header->StoreL(*store);
+ store->CommitL();
+
+ CleanupStack::PopAndDestroy(3, emailAddress);
+ CleanupStack::PopAndDestroy(settings);
+ }
+ INFO_PRINTF2(_L("Created a email from file %S"),&emailFileName);
+ INFO_PRINTF2(_L("The id of the message created is %d"),messageId);
+
+ CleanupStack::PopAndDestroy(4, entry); // file, recvConvert, fs, entry
+ }
+ }
+ }
+ }
+ }
+ return TestStepResult();
+ }
+
+
+
+