diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/smtpservermtm/test/src/T_SMTSSECURESOCKETS.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/smtpservermtm/test/src/T_SMTSSECURESOCKETS.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,364 @@ +// 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 SSL/TLS functionality in SMTS +// Input files required to run test harness: +// The following files should be copied to :\msgtest\smts\scripts +// t_smtsTlsNotSupported.scr +// t_smtsTlsTempFail.scr +// t_smtsTlsOk.scr +// t_smtsTlsSyntaxError.scr +// t_smtsTlsNoServices.scr +// t_smtsTlsRefused.scr +// t_smtsTlsStopResponding.scr +// t_smtsTlsNewSession.scr +// Output files produced by running test harness: +// :\msglogs\T_SMTSSECURESOCKETS...LOG.txt +// Description of how to build test harness: +// cd \messaging\msg\smts\ +// bldmake bldfiles +// abld test build t_SMTSSECURESOCKETS +// 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_SMTSSECURESOCKETS.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_SMTSSECURESOCKETS.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_SMTSSECURESOCKETS.exe on the other platform with the CF card +// +// + +#include "emailtestutils.h" +#include "scripttestutils.h" +#include + +_LIT(KSmtsTest, "Testing SMTS secure connection with script files"); +_LIT(KSmtsComponent,"SMTS"); + +// Script Files for the Tests +_LIT(KTest1ScriptFile, "scripts\\t_smtsTlsNotSupported.scr"); +_LIT(KTest1Desc, "Test 1 connects to a server which doesn't support SSLTLS."); +_LIT(KTest1Result, "Test 1 should finish with -246 (SMTP TLS Negotiate Failed)."); + +_LIT(KTest2ScriptFile, "scripts\\t_smtsTlsTempFail.scr"); +_LIT(KTest2Desc, "Test 2 connects to a server which supports SSLTLS, but TLS is not available due to temporary reason."); +_LIT(KTest2Result, "Test 2 should finish with -185 (SSL TLS Negotiate Failed)."); + +_LIT(KTest3ScriptFile, "scripts\\t_smtsTlsOk.scr"); +_LIT(KTest3Desc, "Test 3 connects to a server which supports SSLTLS."); +_LIT(KTest3Result, "Test 3 should complete with no error."); + +_LIT(KTest4ScriptFile, "scripts\\t_smtsTlsSyntaxError.scr"); +_LIT(KTest4Desc, "Test 4 connects to a server which supports SSLTLS, but returns an Error."); +_LIT(KTest4Result, "Test 4 should finish with -185 (SSL TLS Negotiate Failed)."); + +_LIT(KTest5ScriptFile, "scripts\\t_smtsTlsNoServices.scr"); +_LIT(KTest5Desc, "Test 5 connects to a server which supports SSLTLS, starts TLS, but the server returns no supported services."); +_LIT(KTest5Result, "Test 5 should finish with -185 (SSL TLS Negotiate Failed)."); + +_LIT(KTest6ScriptFile, "scripts\\t_smtsTlsRefused.scr"); +_LIT(KTest6Desc, "Test 6 connects to a server which supports SSLTLS, but then refuses connection, due to lack of security"); +_LIT(KTest6Result, "Test 6 should finish with -244 (SMTP Login Refused)."); + +_LIT(KTest8ScriptFile, "scripts\\t_smtsTlsNewSession.scr"); +_LIT(KTest8Desc, "Test 8 - After TLS handshake, the server tries to start new session, by returning STARTTLS"); +_LIT(KTest8Result, "Test 8 should complete with no error, as MTM ignores this command."); + +RTest test(KSmtsTest); + +LOCAL_D CTrapCleanup* theCleanup; +LOCAL_D CEmailTestUtils* testUtils; +LOCAL_D TMsvId smtpService; +LOCAL_D CBaseServerMtm* serverMtm; +LOCAL_D TInt testError; + + +// Class to hold the data required for a Test +class TTestData + { + public: + TInt iTestNumber; + TBuf<50> iTestFile; + TBuf<200> iTestDescription; + TBuf<200> iTestResult; + }; + + +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 ResetSettingsL(TBool aSecureSocket) + { + _LIT(KSmtpServer, "smtp.demon.co.uk"); + _LIT(KSmtpEmailAlias, "SMTP STARTTLS"); + _LIT(KSmtpEmailAddress, ""); + + // 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->SetPort(25); + + accounts->SaveSmtpSettingsL(smtpAccountId, *settings); + + CleanupStack::PopAndDestroy(2, settings); //settings, store/accounts + } + +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(); + ResetSettingsL(ETrue); + CleanupStack::PopAndDestroy(testUtils); + testUtils = CEmailTestUtils::NewLC(test, ETuGoServerSide); + testUtils->InstantiateSmtpServerMtmL(); + serverMtm=testUtils->iSmtpServerMtm; + testUtils->WriteComment(_L("Smtp server created")); + } + +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) + { + // 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")); + testUtils->TestStart(aTestData.iTestNumber); + testUtils->WriteComment(aTestData.iTestDescription); + testUtils->WriteComment(aTestData.iTestResult); + + // Run the Test & check the error + TestSendingMessagesL(); + } + + +LOCAL_C void RunAllTestsL() + { + + // Create a Message to Send + CreateMsgToSendL(); + + //------------------------------- + // Test 1 - TLS Not Supported + //------------------------------- + TTestData testData; + testData.iTestNumber = 1; + testData.iTestFile = KTest1ScriptFile; + testData.iTestDescription = KTest1Desc; + testData.iTestResult = KTest1Result; + RunTestL(testData); + testError=(testError==-246)? 0 : testError; + testUtils->TestFinish(testData.iTestNumber, testError); + + //----------------------------------------------------------------- + // Test 2 - TLS Not Available due to Temp Reason (ie 454 responce) + //----------------------------------------------------------------- + testData.iTestNumber = 2; + testData.iTestFile = KTest2ScriptFile; + testData.iTestDescription = KTest2Desc; + testData.iTestResult = KTest2Result; + RunTestL(testData); + testError=(testError==-185)? 0 : testError; + testUtils->TestFinish(testData.iTestNumber, testError); + + //------------------------------------------------------ + // Test 3 - TLS Supported & Msg Sent (ie 220 responce) + //------------------------------------------------------ + testData.iTestNumber = 3; + testData.iTestFile = KTest3ScriptFile; + testData.iTestDescription = KTest3Desc; + testData.iTestResult = KTest3Result; + RunTestL(testData); + testError=(testError==0)? 0 : testError; + testUtils->TestFinish(testData.iTestNumber, testError); + + // Create a Message to Send, as the previous one was sent by Test 3 + CreateMsgToSendL(); + + //--------------------------------------------- + // Test 4 - TLS Syntax Error (ie 501 responce) + //--------------------------------------------- + testData.iTestNumber = 4; + testData.iTestFile = KTest4ScriptFile; + testData.iTestDescription = KTest4Desc; + testData.iTestResult = KTest4Result; + RunTestL(testData); + testError=(testError==-185)? 0 : testError; + testUtils->TestFinish(testData.iTestNumber, testError); + + //-------------------------------------------------------------------------------------- + // Test 5 - No Supported Services (After Handshake, Server sends no Supported Services) + //-------------------------------------------------------------------------------------- + testData.iTestNumber = 5; + testData.iTestFile = KTest5ScriptFile; + testData.iTestDescription = KTest5Desc; + testData.iTestResult = KTest5Result; + RunTestL(testData); + testError=(testError==-185)? 0 : testError; + testUtils->TestFinish(testData.iTestNumber, testError); + + //---------------------------------------- + // Test 6 - TLS Refusal (ie 554 responce) + //---------------------------------------- + testData.iTestNumber = 6; + testData.iTestFile = KTest6ScriptFile; + testData.iTestDescription = KTest6Desc; + testData.iTestResult = KTest6Result; + RunTestL(testData); + testError=(testError==-244)? 0 : testError; + testUtils->TestFinish(testData.iTestNumber, testError); + + //---------------------------------------- + // Test 7 - Server Stops Responding + //---------------------------------------- +/* testData.iTestNumber = 7; + testData.iTestFile = KTest7ScriptFile; + testData.iTestDescription = KTest7Desc; + testData.iTestResult = KTest7Result; + RunTestL(testData);*/ + + //-------------------------------------------------------------------------- + // Test 8 - Session Already Active (Server sends STARTTLS after handshake) + //-------------------------------------------------------------------------- + testData.iTestNumber = 8; + testData.iTestFile = KTest8ScriptFile; + testData.iTestDescription = KTest8Desc; + testData.iTestResult = KTest8Result; + RunTestL(testData); + testError=(testError==0)? 0 : testError; + testUtils->TestFinish(testData.iTestNumber, testError); + } + + +LOCAL_C void doMainL() + { + InitL(); + testUtils->iServerEntry->SetEntry(smtpService); + + // Set the Setting to use Secure Sockets & Run the Tests + _LIT(KSecurityOn, "------Set Security On------"); + testUtils->WriteComment(KSecurityOn); + RunAllTestsL(); + + // End of the Tests + ClosedownL(); + } + + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + test.Start(_L("T_SMTSSECURESOCKETS Test SMTP server MTM secure connection")); + theCleanup=CTrapCleanup::New(); + TRAPD(ret,doMainL()); + test(ret==KErrNone); + delete theCleanup; + test.End(); + test.Close(); + __UHEAP_MARKEND; + User::Heap().Check(); + return(KErrNone); + }