--- /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 <drive>:\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:
+// <DRIVE>:\msglogs\T_SMTSSMTPAUTH.<PLATFORM>.<VARIANT>.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\<VARIANT>\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\<PLATFORM>\<VARIANT>\t_SMTSSMTPAUTH.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. Copy \epoc32\wins\c\msgtest\smts\scripts\*.scr to
+// <DRIVE>:\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 <cemailaccounts.h>
+
+// 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<KMaxFileName> logFileName;
+ TBuf<KMaxFileName> 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<TImSmtpProgress> 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, "<smtp@lon-msgtest06.intra>");
+ _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);
+ }