diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/servermtmutils/test/src/T_SECURESOCKETS.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/pop3andsmtpmtm/servermtmutils/test/src/T_SECURESOCKETS.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,313 @@ +// 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 of IMSK using POP commands +// Input files required to run test harness: +// The following files should be copied to :\msgtest\imut\ +// scriptwithSSLTLS.scr +// scriptwitoutSSLTLS.scr +// Output files produced by running test harness: +// :\msglogs\T_SECURESOCKETS...LOG.txt +// Description of how to build test harness: +// cd \messaging\msg\imut\ +// bldmake bldfiles +// abld test build t_SECURESOCKETS +// 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_SECURESOCKETS.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_SECURESOCKETS.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\imut\*.scr to +// :\msgtest\imut\ +// Note that this drive should be a CF card as the test files are large +// 5. Run T_SECURESOCKETS.exe on the other platform with the CF card +// +// + +#include + +#include +#include +#include + +#include "emailtestutils.h" + +TInt EBufferNotTerminated= -9999; +LOCAL_D RTest test(_L("CImTextServerSession SSL/TLS Test using scripts")); +LOCAL_D CTrapCleanup* theCleanup; + +LOCAL_D RFs theFs; +LOCAL_D CActiveScheduler* scheduler; +LOCAL_D CEmailTestUtils* testUtils; + +_LIT(T_SSLSCRIPT, "scriptwithSSLTLS.scr"); +_LIT(T_WITOUTSSLSCRIPT, "scriptwithoutSSLTLS.scr"); + +#define EActivePriorityLow -1 + +// create an active object to send the message + +class CSendMessage : public CActive + { +public: // functions + // construct/destruct + CSendMessage(); + static CSendMessage *NewL(); + static CSendMessage *NewLC(); + void ConstructL(); + ~CSendMessage(); + void ChangeStateL(); + void RunL(); + void DoCancel(); + void SetTestNumber(TInt aTestNo); + +private: + CImTextServerSession* iImSocket; + TInt iSessionState; + CImIAPPreferences* iPrefs; + TInt iTestNo; + TBuf8<512> iReceive; + +private: + enum // States of "session" state machine + { + EConnecting, + EWaitingForReply, + ERequestingTLS, + EAuthorisingUser, + EAuthorisingPass, + ESelectInbox, + EStat, + EDisconnect + }; + + }; + +CSendMessage::CSendMessage() // construct high-priority active object + : CActive(EActivePriorityLow) + { + } + +CSendMessage *CSendMessage::NewLC() + { + CSendMessage* self=new (ELeave) CSendMessage(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CSendMessage *CSendMessage::NewL() + { + CSendMessage* self=NewLC(); + CleanupStack::Pop(); + return self; + } + +void CSendMessage::ConstructL() + { + CActiveScheduler::Add(this); // add to active scheduler + iImSocket= CImTextServerSession::NewL(); + iSessionState=EConnecting; + } + +CSendMessage::~CSendMessage() + { + Cancel(); // make sure we're cancelled + delete iPrefs; + delete iImSocket; + } + +void CSendMessage::SetTestNumber(TInt aTestNo) + {iTestNo=aTestNo;} + +void CSendMessage::DoCancel() + { + iImSocket->Cancel(); + } + + +void CSendMessage::RunL() + { + if (iStatus.Int()!=KErrNone) + { + if (iStatus.Int()==KImskSSLTLSNegotiateFailed) + testUtils->TestFinish(iTestNo,KErrNone); + else + testUtils->TestFinish(iTestNo,iStatus.Int()); + CActiveScheduler::Stop(); + return; + } + switch (iSessionState) + { + case EConnecting: + iSessionState=EWaitingForReply; + break; + case EWaitingForReply: + iSessionState=ERequestingTLS; + break; + case ERequestingTLS: + iSessionState=EAuthorisingUser; + break; + case EAuthorisingUser: + iSessionState=EAuthorisingPass; + break; + case EAuthorisingPass: + iSessionState=EStat; + break; + case EDisconnect: + testUtils->TestFinish(iTestNo,iStatus.Int()); + CActiveScheduler::Stop(); + return; + default: + iSessionState=EDisconnect; + break; + }; + ChangeStateL(); + } + + +void CSendMessage::ChangeStateL() + { + switch (iSessionState) + { + case EConnecting: + iPrefs = CImIAPPreferences::NewLC(); + CleanupStack::Pop(iPrefs); + iImSocket->QueueConnectL(iStatus,_L("abc.def.uk"),110,*iPrefs); + break; + case EWaitingForReply: + iImSocket->QueueReceiveNextTextLine(iStatus); + break; + case ERequestingTLS: + iImSocket->SetSSLTLSResponseL(_L8("+OK")); + iImSocket->SendQueueReceive(iStatus,_L8("STLS\r\n")); + break; + case EAuthorisingUser: + iImSocket->SendQueueReceive(iStatus, _L8("USER abcd\r\n")); + break; + case EAuthorisingPass: + iImSocket->SendQueueReceive(iStatus,_L8("PASS efgh\r\n")); + break; + case EStat: + iImSocket->SendQueueReceive(iStatus,_L8("STAT\r\n")); + break; + case EDisconnect: + iImSocket->SendQueueReceive(iStatus,_L8("QUIT\r\n")); + break; + default: + iImSocket->Disconnect(); + break; + } + SetActive(); + } + + +LOCAL_C void CopyScriptFileL(const TDesC& aScriptFile,TInt aPortNo) + { + TParse parsedScriptFile; + parsedScriptFile.Set(aScriptFile,0,0); + if (!parsedScriptFile.DrivePresent()) + // This isn't a full path name so we need to resolve it + { + testUtils->ResolveFile(_L("IMUT"), aScriptFile, parsedScriptFile); + } + if (aPortNo==143) + testUtils->CopyScriptFileL(parsedScriptFile.FullName(), _L("143")); + else if (aPortNo==110) + testUtils->CopyScriptFileL(parsedScriptFile.FullName(), _L("110")); + else + testUtils->CopyScriptFileL(parsedScriptFile.FullName(), _L("25")); + } + +// + +LOCAL_C void Init() + { + scheduler = new (ELeave) CActiveScheduler; + CActiveScheduler::Install( scheduler ); + + User::LeaveIfError(theFs.Connect()); + theFs.SetSessionPath(_L("C:\\")); + } + +LOCAL_C void Closedown() + { + theFs.Close(); + CleanupStack::PopAndDestroy(testUtils); + delete scheduler; + } + + + +// + +LOCAL_C void doMainL() + { + Init(); + theFs.SetSessionPath(_L("c:\\")); + theFs.MkDir(_L("c:\\logs\\")); + theFs.MkDir(_L("c:\\logs\\email\\")); + testUtils = CEmailTestUtils::NewLC(test); + testUtils->WriteComment(_L("T_SECURESOCKETS Testing CImTextServerSesion secure socket")); + + CSendMessage *sendMessage = CSendMessage::NewLC(); + testUtils->TestStart(1,_L("testing for pop using failed secure sockets")); + CopyScriptFileL(T_WITOUTSSLSCRIPT,110); + sendMessage->SetTestNumber(1); + sendMessage->ChangeStateL(); + CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(sendMessage); + sendMessage=NULL; + + sendMessage = CSendMessage::NewLC(); + testUtils->TestStart(2,_L("testing for pop using secure sockets")); + CopyScriptFileL(T_SSLSCRIPT,110); + sendMessage->SetTestNumber(2); + sendMessage->ChangeStateL(); + CActiveScheduler::Start(); + CleanupStack::PopAndDestroy(sendMessage); + + testUtils->WriteComment(_L("********** T_SECURESOCKETS Tests Complete **********")); + testUtils->TestHarnessCompleted(); + + Closedown(); + } + + +GLDEF_C TInt E32Main() + { + test.Title(); + test.Start(_L("Testing CImTextServerSession Secure Sockets")); + __UHEAP_MARK; + + theCleanup=CTrapCleanup::New(); + test (theCleanup!=NULL); + TRAPD(ret,doMainL()); + test (ret==KErrNone); + delete theCleanup; + + __UHEAP_MARKEND; + test.End(); + return 0; + }