diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/smtpservermtm/test/src/t_smtssmtpauth.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/smtpservermtm/test/src/t_smtssmtpauth.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,790 @@ +// Copyright (c) 2001-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: +// Brief description of test harness: +// Tests SMTP AUTH functionality in SMTS +// Input files required to run test harness: +// The following files should be copied to :\msgtest\smts\scripts +// imsk25_tls_no_smtp_auth_on_server.scr +// imsk25_tls_no_smtp_auth.scr +// imsk25_tls_login.scr +// imsk25_no_tls_wrong_username.scr +// imsk25_no_tls_wrong_password.scr +// imsk25_no_tls_plain.scr +// imsk25_no_tls_login.scr +// imsk25_no_tls_cram_md5.scr +// imsk25_no_tls_no_smtp_auth_on_server.scr +// Output files produced by running test harness: +// :\msglogs\T_SMTSSMTPAUTH...LOG.txt +// Description of how to build test harness: +// cd \messaging\msg\smts\ +// bldmake bldfiles +// abld test build t_SMTSSMTPAUTH +// Description of how to run test harness: +// The following instructions are the same for all platforms: +// 2. Build the test utilities: +// cd \messaging\msg\testutils\group\ +// bldmake bldfiles +// abld build +// WINS running instructions: +// 1. \epoc32\release\wins\\t_SMTSSMTPAUTH.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\\\t_SMTSSMTPAUTH.exe onto the other platform +// 2. Copy \epoc32\release\\\MSVTESTUTILS.DLL into +// :\system\libs on the other platform +// 3. Copy \epoc32\release\\\EMAILTESTUTILS.DLL into +// :\system\libs on the other platform +// 4. Copy \epoc32\wins\c\msgtest\smts\scripts\*.scr to +// :\msgtest\smts\scripts\ +// Note that this drive should be a CF card as the test files are large +// 5. Run t_SMTSSMTPAUTH.exe on the other platform with the CF card +// Once the test is run, run logtoscr from the command prompt. This will generate a number of .out +// files in the c:\logs\email directory of the environment you are using. To check the test have +// completed correctly compare these files with the files of the same name in the +// c:\msgtest\smts\checkagainst directory. +// // Note : For dial up tests do the following: +// 1) The server names used in function ResetSettingsL() are dummy +// Need to use right server names for testing for dial up testing. +// However,they have been tested by giving the right server names. +// 2) Uncomment the line "testUtils->DeleteScriptFilesFromLogsDirL()" +// in function RunTestL(). +// +// + +#include "emailtestutils.h" +#include "scripttestutils.h" +#include + +// For loading the serial comms device drivers +#if defined (__WINS__) + #define PDD_NAME _L("ECDRV") + #define LDD_NAME _L("ECOMM") +#else + #define PDD_NAME _L("EUART1") + #define LDD_NAME _L("ECOMM") +#endif + +_LIT(KSmtsTest, "Testing SMTS smtp authentication with script files"); +_LIT(KSmtsComponent,"SMTS"); + +// Script Files for the Tests + +_LIT(KTest3ScriptFile, "scripts\\imsk25_tls_login.scr"); +_LIT(KTest3Desc, "Tls should handshake, Authentication takes place using Login Mechanism."); +_LIT(KTest3Result, "Mail is sent."); + +_LIT(KTest4ScriptFile, "scripts\\imsk25_no_tls_wrong_username.scr"); +_LIT(KTest4Desc, "No Tls, Wrong username used "); +_LIT(KTest4Result, "Mail is sent."); + +_LIT(KTest5ScriptFile, "scripts\\imsk25_no_tls_wrong_password.scr"); +_LIT(KTest5Desc, "No Tls, Wrong password used"); +_LIT(KTest5Result, "Mail is sent."); + +_LIT(KTest6ScriptFile, "scripts\\imsk25_no_tls_plain.scr"); +_LIT(KTest6Desc, "No Tls, authenticates using Plain Mechanism."); +_LIT(KTest6Result, "Mail is sent."); + +_LIT(KTest7ScriptFile, "scripts\\imsk25_no_tls_login.scr"); +_LIT(KTest7Desc, "No Tls, authenticates using Login Mechanism"); +_LIT(KTest7Result, "Mail is sent."); + +_LIT(KTest8ScriptFile, "scripts\\imsk25_no_tls_cram_md5.scr"); +_LIT(KTest8Desc, "No Tls, authenticates using CRAM-MD5 Mechanism."); +_LIT(KTest8Result, "Mail is sent."); + +_LIT(KTest9ScriptFile, "scripts\\imsk25_no_tls_no_smtp_auth_on_server.scr"); +_LIT(KTest9Desc, "No Tls, No AUTH command sent from Server."); +_LIT(KTest9Result, "Mail is sent."); + +_LIT(KTest10ScriptFile, "scripts\\imsk25_ehlo_fail_conitnue_with_helo.scr"); +_LIT(KTest10Desc, "Smtp Auth with EHLO fail, Tls Off, Continue with HELO Command"); +_LIT(KTest10Result, "Mail is sent."); + +_LIT(KTest11ScriptFile, "scripts\\imsk25_ehlo_fail_quit_if_tls_on.scr"); +_LIT(KTest11Desc, "Smtp Auth with EHLO fail, Quit if TLS on"); +_LIT(KTest11Result, "Mail is not sent."); + +_LIT(KTest12ScriptFile, "scripts\\imsk25_tls_cram.scr"); +_LIT(KTest12Desc, "Tls should handshake, Authentication takes place using CRAM-MD5 Mechanism."); +_LIT(KTest12Result, "Mail is sent."); + +_LIT(KTest13ScriptFile, "scripts\\imsk25_ehlo_fail_conitnue_with_hostname.scr"); +_LIT(KTest13Desc, "Smtp Auth with EHLO fail, Tls Off, Continue with hostname and then HELO"); +_LIT(KTest13Result, "Mail is sent."); + +#ifdef _DEBUG +_LIT(KLogFilePath, "c:\\logs\\email\\ImLog25.txt"); +#endif + +_LIT(KScriptFilePath, "c:\\logs\\email\\imsk25.scr\\"); + +// Class to hold the data required for a Test +class TTestData + { + public: + TInt iTestNumber; + TBuf<100> iTestFile; + TBuf<200> iTestDescription; + TBuf<200> iTestResult; + }; + +enum TImStripLogType + { + EImMakeInFile, + EImMakeOutFile, + EImEndMakeFile + }; + +RTest test(KSmtsTest); + +LOCAL_D CTrapCleanup* theCleanup; +LOCAL_D CEmailTestUtils* testUtils; +LOCAL_D TMsvId smtpService; +LOCAL_D CBaseServerMtm* serverMtm; +LOCAL_D TInt testError; +LOCAL_D TTestData testData; + +LOCAL_C void ClearOutboxL() + { + testUtils->iServerEntry->SetEntry(KMsvGlobalOutBoxIndexEntryId); + CMsvEntrySelection* sel = new(ELeave) CMsvEntrySelection(); + CleanupStack::PushL(sel); + testUtils->iServerEntry->GetChildrenWithMtm(KUidMsgTypeSMTP, *sel); + + TInt count = sel->Count(); + + while (count--) + { + testUtils->iServerEntry->DeleteEntry(sel->At(count)); + } + + CleanupStack::PopAndDestroy(sel); + } + +#ifdef _DEBUG + +LOCAL_C TBool CompareFilesL(TFileName aLogFile) + { + RFs& fs = testUtils->FileSession(); + + // Need to create the create filename + TFileName name = _L("imsk"); + TInt pos = 5; // set to skip passed the "imlog" part + + while( aLogFile[pos] != '.' ) + { + name.Append(aLogFile[pos]); + ++pos; + } + name.Append(_L(".out")); + + // Load up the two files to compare. + fs.SetSessionPath(_L("c:\\logs\\email\\")); + + RFile newFile; + if( newFile.Open(fs, name, KEntryAttReadOnly) != KErrNone ) + { + return EFalse; + } + CleanupClosePushL(newFile); + + fs.SetSessionPath(_L("c:\\msgtest\\smts\\checkagainst\\")); + RFile oldFile; + if( oldFile.Open(fs, name, KEntryAttReadOnly) != KErrNone ) + { + CleanupStack::PopAndDestroy(&newFile); + return EFalse; + } + CleanupClosePushL(oldFile); + + // Compare the files... + HBufC8* line1Buffer = HBufC8::NewLC(1024); + TPtr8 line1 = line1Buffer->Des(); + TBuf8<1> aChar1; + + HBufC8* line2Buffer = HBufC8::NewLC(1024); + TPtr8 line2 = line2Buffer->Des(); + TBuf8<1> aChar2; + TBool finished1 = EFalse; + TBool finished2 = EFalse; + TBool done = EFalse; + + do { + line1.FillZ(); + line1.SetLength(0); + // compile the lines one char at a time + do { + User::LeaveIfError(newFile.Read(aChar1, 1)); + if( aChar1.Length() > 0 ) + line1.Append(aChar1); + else + { + finished1 = ETrue; + break; + } + // stop at the end of line or no more data + } + while( (aChar1[0]!=0x0A)&&(line1.Length()<1024) ); + + line2.FillZ(); + line2.SetLength(0); + do { + User::LeaveIfError(oldFile.Read(aChar2, 1)); + if( aChar2.Length() > 0 ) + line2.Append(aChar2); + else + { + finished2 = ETrue; + break; + } + // stop at the end of line or no more data + } + while( (aChar2[0]!=0x0A)&&(line2.Length()<1024) ); + + if( finished1 || finished2 ) + { + // Check that both files have been completely read. + if( finished1 && finished2 ) + { + // Yep - done. + done = ETrue; + } + else + { + // Files are of different length - failed! + CleanupStack::PopAndDestroy(4, &newFile); + return EFalse; + } + } + else + { + // get rid of white space + line1.TrimRight(); + line2.TrimRight(); + + if( line1.Compare(line2) != 0 ) + { + CleanupStack::PopAndDestroy(4, &newFile); + return EFalse; + } + } + } + while(!done); + + CleanupStack::PopAndDestroy(4, &newFile); + + return ETrue; + } + +LOCAL_C void ParseLogFileL(TFileName aLogFile) + { + RFs& fs = testUtils->FileSession(); + fs.SetSessionPath(_L("c:\\logs\\email\\")); + + CScriptTestUtils* scriptTestUtils = CScriptTestUtils::NewLC(*testUtils); + + TInt portStringCounter; + TBufC logFileName; + TBuf scriptFileName; + + // First create the script file, then create the output test file. + + TImStripLogType lineType = EImMakeInFile; + while ((lineType == EImMakeInFile) + || (lineType == EImMakeOutFile)) + { + logFileName = aLogFile; + + // Get the name of the destination script file. + scriptFileName = _L("imsk"); + portStringCounter = 5; + + while (logFileName[portStringCounter] != L'.') + { + scriptFileName.Append(logFileName[portStringCounter]); + portStringCounter++; + } + + if (EImMakeInFile == lineType) + { + scriptFileName.Append(_L(".scr")); + } + else if (EImMakeOutFile == lineType) + { + scriptFileName.Append(_L(".out")); + } + + if (lineType == EImMakeInFile) + scriptTestUtils->LogToInputFileL(logFileName, scriptFileName, EFalse); + else + scriptTestUtils->LogToOutputFileL(logFileName, scriptFileName, ETrue); + + // If we have just created the script file the create the output test file. + if (EImMakeInFile == lineType) + { + lineType = EImMakeOutFile; + } + else + { + lineType = EImEndMakeFile; + } + } + + CleanupStack::PopAndDestroy(); // scriptTestUtils + } + +LOCAL_C void renameLogL(TTestData& aTestData, TFileName& aLogFile) + { + TFileName destPath = aTestData.iTestFile; + + // Make the destination file name. + destPath.Delete(0,15); + destPath.Delete(destPath.Length()-4,4); + TFileName destPath1 = (_L("c:\\logs\\email\\Imlog25_")); + destPath1.Append(destPath); + destPath1.Append(_L(".txt")); + + aLogFile.Zero(); + aLogFile.Append(_L("Imlog25_")); + aLogFile.Append(destPath); + aLogFile.Append(_L(".txt")); + + RFs aFs; + User::LeaveIfError(aFs.Connect()); + + TInt err = aFs.Delete(destPath1); + + __ASSERT_ALWAYS((err == KErrNone) || (err == KErrNotFound), User::Panic(_L("smts_auth_test"),KErrGeneral)); + + // Copy the file. + CFileMan* fileMan = CFileMan::NewL(aFs); + CleanupStack::PushL(fileMan); + fileMan->Rename(KLogFilePath, destPath1); + aFs.Close(); + CleanupStack::PopAndDestroy(fileMan); + } + +#endif + +LOCAL_C TInt TestSendingMessagesL() + { + testError = 0; + + CTestActive* testActive = new (ELeave) CTestActive(); + CleanupStack::PushL(testActive); + + CMsvEntrySelection* sendSel = new(ELeave) CMsvEntrySelection(); + CleanupStack::PushL(sendSel); + + testUtils->iServerEntry->SetEntry(KMsvGlobalOutBoxIndexEntryId); + User::LeaveIfError(testUtils->iServerEntry->GetChildren(*sendSel)); + TInt count=sendSel->Count(); + if (!count) + { + testUtils->WriteComment(_L("\t No messages to send in the outbox")); + CleanupStack::PopAndDestroy(2); //testActive, sendsel + testError = KErrNotFound; + } + else + { + serverMtm->CopyFromLocalL(*sendSel,smtpService, testActive->iStatus); + + testActive->StartL(); + CActiveScheduler::Start(); + TImSmtpProgress temp; + TPckgC paramPack(temp); + + const TDesC8& progBuf =serverMtm->Progress(); + paramPack.Set(progBuf); + TImSmtpProgress progress=paramPack(); + CleanupStack::PopAndDestroy(2); //testActive, sendsel + testError = progress.Error(); + } + + return testError; + } + +LOCAL_C void ClosedownL() + { + testUtils->TestHarnessCompleted(); + CleanupStack::PopAndDestroy(2); //testUtils, ischeduler + } + +LOCAL_C void InitL() + { + CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; + CleanupStack::PushL(scheduler); + CActiveScheduler::Install( scheduler ); + + testUtils = CEmailTestUtils::NewLC(test); + testUtils->WriteComment(KSmtsTest); + + testUtils->CleanMessageFolderL(); + testUtils->ClearEmailAccountsL(); + + testUtils->GoClientSideL(); + smtpService = testUtils->CreateSmtpServiceL(); + CleanupStack::PopAndDestroy(testUtils); + + //explicitly close the message server so that a new instance of CEmailTestUtils can be created (waits for the server to close) + TMsvDummyObserver* dummyObserver = new (ELeave) TMsvDummyObserver; + CMsvSession* msvSession = CMsvSession::OpenSyncL(*dummyObserver); + msvSession->CloseMessageServer(); + delete msvSession; + delete dummyObserver; + + testUtils = CEmailTestUtils::NewLC(test, ETuGoServerSide); + testUtils->InstantiateSmtpServerMtmL(); + serverMtm=testUtils->iSmtpServerMtm; + + testUtils->WriteComment(_L("Smtp server created")); + } + +LOCAL_C void ResetSettingsL(TBool aSecureSocket, TBool aSmtpAuth) + { + _LIT(KSmtpEmailAlias, "SMTP AUTH"); + _LIT(KSmtpServer, "lon-msgtest06.intra"); + _LIT(KSmtpEmailAddress, ""); + _LIT8(KSmtpUserName, "smtp-bad"); + _LIT8(KSmtpPassword, "password-bad"); + + TPtrC8 userName(KSmtpUserName); + TPtrC8 password(KSmtpPassword); + + CleanupStack::PopAndDestroy(testUtils); + + // Overwrite the setings with test code one. Don't want the default settings. + CImSmtpSettings* settings = new(ELeave) CImSmtpSettings(); + CleanupStack::PushL(settings); + CEmailAccounts* accounts = CEmailAccounts::NewLC(); + TSmtpAccount smtpAccountId; + accounts->GetSmtpAccountL(smtpService,smtpAccountId); + accounts->LoadSmtpSettingsL(smtpAccountId, *settings); + settings->SetServerAddressL(KSmtpServer); + settings->SetEmailAliasL(KSmtpEmailAlias); + settings->SetEmailAddressL(KSmtpEmailAddress); + settings->SetReplyToAddressL(KSmtpEmailAddress); + settings->SetBodyEncoding(EMsgOutboxMIME); + settings->SetReceiptAddressL(KSmtpEmailAddress); + settings->SetSecureSockets(aSecureSocket); + settings->SetSMTPAuth(aSmtpAuth); + settings->SetLoginNameL(userName); + settings->SetPasswordL(password); + + settings->SetPort(25); + accounts->SaveSmtpSettingsL(smtpAccountId, *settings); + + CleanupStack::PopAndDestroy(2, settings); //settings, store/accounts + + //explicitly close the message server so that a new instance of CEmailTestUtils can be created (waits for the server to close) + TMsvDummyObserver* dummyObserver = new (ELeave) TMsvDummyObserver; + CMsvSession* msvSession = CMsvSession::OpenSyncL(*dummyObserver); + msvSession->CloseMessageServer(); + delete msvSession; + delete dummyObserver; + + testUtils = CEmailTestUtils::NewLC(test, ETuGoServerSide); + testUtils->InstantiateSmtpServerMtmL(); + serverMtm=testUtils->iSmtpServerMtm; + } + +LOCAL_C void CreateMsgToSendL() +// Create a message to send & place it in the outbox + { + TParse scriptFile; + _LIT(KSmtsRfcFile, "RFC822\\rfc82201.txt"); + testUtils->ResolveFile(KSmtsComponent, KSmtsRfcFile, scriptFile); + testUtils->CreateMessageL(scriptFile.FullName(), smtpService, KMsvGlobalOutBoxIndexEntryId); + testUtils->WriteComment(_L(" Message created in the outbox")); + testUtils->WriteComment(_L("\nPerforming Tests\n")); + } + +LOCAL_C void RunTestL(TTestData& aTestData) + { + testUtils->FileSession().RmDir(KScriptFilePath); + // Add a blank line to the Log file before the new Test + _LIT(KBlankLine, ""); + testUtils->WriteComment(KBlankLine); + + TParse scriptFile; + testUtils->ResolveFile(KSmtsComponent, aTestData.iTestFile, scriptFile); + testUtils->CopyScriptFileL(scriptFile.FullName(), _L("25")); + +// For dial up tests, ucomment the below line +// testUtils->DeleteScriptFilesFromLogsDirL(); + + testUtils->TestStart(aTestData.iTestNumber); + testUtils->WriteComment(aTestData.iTestDescription); + testUtils->WriteComment(aTestData.iTestResult); + + // Run the Test & check the error + if( TestSendingMessagesL() == KErrNone ) + { +#ifdef _DEBUG + // Test was executed ok - check to see if result was correct + TFileName logFile; + renameLogL(testData, logFile); + ParseLogFileL(logFile); + + if( !CompareFilesL(logFile) ) + testError = KErrNotFound; +#else + // Cannot compare logs on REL builds, since the log file is not generated + testUtils->WriteComment(_L("!!!! Logs comparison skipped on REL builds !!!!")); + testUtils->WriteComment(_L("!!!! Run on DEB build for complete test !!!!")); +#endif + } + } + +LOCAL_C void RunAllTestsL() + { + +/* //--------------------------------------------------- + // Test 1 - TLS On, Smtp Auth On, No Smtp on Server + //--------------------------------------------------- + ResetSettingsL(ETrue, ETrue); + testData.iTestNumber = 1; + testData.iTestFile = KTest1ScriptFile; + testData.iTestDescription = KTest1Desc; + testData.iTestResult = KTest1Result; + RunTestL(testData); + testError=(testError==-1)? 0 : testError; + testUtils->TestFinish(testData.iTestNumber, testError); + + //CreateMsgToSendL(); + renameLogL(testData); + + //----------------------------------------------------------------- + // Test 2 - TLS on, SMTP Auth Off, Smtp on Server + //----------------------------------------------------------------- + ResetSettingsL(ETrue, EFalse); + testData.iTestNumber = 2; + testData.iTestFile = KTest2ScriptFile; + testData.iTestDescription = KTest2Desc; + testData.iTestResult = KTest2Result; + RunTestL(testData); + testError=(testError==-1)? 0 : testError; + testUtils->TestFinish(testData.iTestNumber, testError); + //CreateMsgToSendL(); + renameLogL(testData); +*/ + + //------------------------------------------------------ + // Test 3 - TLS on, SMTP Auth On, Login Mechanism used + //------------------------------------------------------ + ResetSettingsL(ETrue, ETrue); + CreateMsgToSendL(); + testData.iTestNumber = 3; + testData.iTestFile = KTest3ScriptFile; + testData.iTestDescription = KTest3Desc; + testData.iTestResult = KTest3Result; + RunTestL(testData); + testUtils->TestFinish(testData.iTestNumber, testError); + + + //--------------------------------------------- + // Test 4 - TLS off, SMTP Auth On, Wrong UserName + //--------------------------------------------- + ResetSettingsL(EFalse, ETrue); + CreateMsgToSendL(); + testData.iTestNumber = 4; + testData.iTestFile = KTest4ScriptFile; + testData.iTestDescription = KTest4Desc; + testData.iTestResult = KTest4Result; + RunTestL(testData); + testUtils->TestFinish(testData.iTestNumber, testError); + + + //-------------------------------------------------------------------------------------- + // Test 5 - TLS off, SMTP Auth On, Wrong Password + //-------------------------------------------------------------------------------------- + ResetSettingsL(EFalse, ETrue); + CreateMsgToSendL(); + testData.iTestNumber = 5; + testData.iTestFile = KTest5ScriptFile; + testData.iTestDescription = KTest5Desc; + testData.iTestResult = KTest5Result; + RunTestL(testData); + testUtils->TestFinish(testData.iTestNumber, testError); + + + //---------------------------------------- + // Test 6 - TLS off, SMTP Auth On, Plain Mechanism used + //---------------------------------------- + ResetSettingsL(EFalse, ETrue); + CreateMsgToSendL(); + testData.iTestNumber = 6; + testData.iTestFile = KTest6ScriptFile; + testData.iTestDescription = KTest6Desc; + testData.iTestResult = KTest6Result; + RunTestL(testData); + testUtils->TestFinish(testData.iTestNumber, testError); + + //-------------------------------------------------------------------------- + // Test 7 - TLS off, SMTP Auth On, Login Mechanism used + //-------------------------------------------------------------------------- + ResetSettingsL(EFalse, ETrue); + CreateMsgToSendL(); + testData.iTestNumber = 7; + testData.iTestFile = KTest7ScriptFile; + testData.iTestDescription = KTest7Desc; + testData.iTestResult = KTest7Result; + RunTestL(testData); + testUtils->TestFinish(testData.iTestNumber, testError); + + + //-------------------------------------------------------------------------- + // Test 8 - TLS off, SMTP Auth On, CRAM-MD5 Mechanism used + //-------------------------------------------------------------------------- + ResetSettingsL(EFalse, ETrue); + CreateMsgToSendL(); + testData.iTestNumber = 8; + testData.iTestFile = KTest8ScriptFile; + testData.iTestDescription = KTest8Desc; + testData.iTestResult = KTest8Result; + RunTestL(testData); + testUtils->TestFinish(testData.iTestNumber, testError); + + //---------------------------------------- + // Test 9 - TLS off, SMTP Auth On, No SMTP on Server + //---------------------------------------- + ResetSettingsL(EFalse, ETrue); + CreateMsgToSendL(); + testData.iTestNumber = 9; + testData.iTestFile = KTest9ScriptFile; + testData.iTestDescription = KTest9Desc; + testData.iTestResult = KTest9Result; + RunTestL(testData); + testUtils->TestFinish(testData.iTestNumber, testError); + + //--------------------------------------------------------------------- + // Test 10 - SMTP Auth with Ehlo is not supported, Conitnue using Helo Command + //--------------------------------------------------------------------- + + ResetSettingsL(EFalse, ETrue); + CreateMsgToSendL(); + + testData.iTestNumber = 10; + testData.iTestFile = KTest10ScriptFile; + testData.iTestDescription = KTest10Desc; + testData.iTestResult = KTest10Result; + RunTestL(testData); + testUtils->TestFinish(testData.iTestNumber, testError); + + //--------------------------------------------------------------------- + // Test 11 - SMTP Auth with Ehlo is not supported, Quit if Tls On + //--------------------------------------------------------------------- + + ResetSettingsL(ETrue, ETrue); + CreateMsgToSendL(); + + testData.iTestNumber = 11; + testData.iTestFile = KTest11ScriptFile; + testData.iTestDescription = KTest11Desc; + testData.iTestResult = KTest11Result; + RunTestL(testData); + // This test is slightly different - an error code is expected. + if( testError == KErrSmtpTLSNegotiateFailed ) + { +#ifdef _DEBUG + testError = KErrNone; + // Test was executed ok - check to see if result was correct + TFileName logFile; + renameLogL(testData, logFile); + ParseLogFileL(logFile); + + if( !CompareFilesL(logFile) ) + testError = KErrNotFound; +#else + // Cannot compare logs on REL builds, since the log file is not generated + testUtils->WriteComment(_L("!!!! Logs comparison skipped on REL builds !!!!")); + testUtils->WriteComment(_L("!!!! Run on DEB build for complete test !!!!")); +#endif + } + else + { + if( testError == KErrNone ) + testError = KErrNotFound; // it should have been an error! (Although unlikely to get here as log comparison will fail!) + } + testUtils->TestFinish(testData.iTestNumber, testError); + + ClearOutboxL(); + + //------------------------------------------------------ + // Test 12 - TLS on, SMTP Auth On, CRAM-MD5 Mechanism used + //------------------------------------------------------ + ResetSettingsL(ETrue, ETrue); + CreateMsgToSendL(); + testData.iTestNumber = 12; + testData.iTestFile = KTest12ScriptFile; + testData.iTestDescription = KTest12Desc; + testData.iTestResult = KTest12Result; + RunTestL(testData); + testUtils->TestFinish(testData.iTestNumber, testError); + + //--------------------------------------------------------------------- + // Test 13 - SMTP Auth with Ehlo is not supported, Conitnue with hostname and then HELO + //--------------------------------------------------------------------- + + ResetSettingsL(EFalse, ETrue); + CreateMsgToSendL(); + + testData.iTestNumber = 13; + testData.iTestFile = KTest13ScriptFile; + testData.iTestDescription = KTest13Desc; + testData.iTestResult = KTest13Result; + RunTestL(testData); + testUtils->TestFinish(testData.iTestNumber, testError); + + // Delete the script file generated in C:\logs\email directory + testUtils->DeleteScriptFilesFromLogsDirL(); + } + +LOCAL_C void doMainL() + { + InitL(); + + TInt driverErr; + driverErr=User::LoadPhysicalDevice(PDD_NAME); + if (driverErr!=KErrNone && driverErr!=KErrAlreadyExists) + User::Leave(driverErr); + driverErr=User::LoadLogicalDevice(LDD_NAME); + if (driverErr!=KErrNone && driverErr!=KErrAlreadyExists) + User::Leave(driverErr); + + testUtils->iServerEntry->SetEntry(smtpService); + + ResetSettingsL(ETrue,ETrue); + testUtils->DeleteScriptFilesFromLogsDirL(); + RunAllTestsL(); + + // End of the Tests + ClosedownL(); + } + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + test.Start(_L("T_SMTSSMTPAUTH Test SMTP server MTM - SMTP AUTH")); + theCleanup=CTrapCleanup::New(); + TRAPD(ret,doMainL()); + test(ret==KErrNone); + delete theCleanup; + test.End(); + test.Close(); + __UHEAP_MARKEND; + User::Heap().Check(); + return(KErrNone); + }