--- /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 <drive>:\msgtest\imut\
+// scriptwithSSLTLS.scr
+// scriptwitoutSSLTLS.scr
+// Output files produced by running test harness:
+// <DRIVE>:\msglogs\T_SECURESOCKETS.<PLATFORM>.<VARIANT>.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\<VARIANT>\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\<PLATFORM>\<VARIANT>\T_SECURESOCKETS.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\imut\*.scr to
+// <DRIVE>:\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 <imsk.h>
+
+#include <s32mem.h>
+#include <s32file.h>
+#include <iapprefs.h>
+
+#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;
+ }