email/pop3andsmtpmtm/imapservermtm/test/src/T_impssecuresocket.cpp
changeset 25 84d9eb65b26f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/imapservermtm/test/src/T_impssecuresocket.cpp	Mon May 03 12:29:07 2010 +0300
@@ -0,0 +1,384 @@
+// 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 IMPS
+// Input files required to run test harness:
+// None
+// Output files produced by running test harness:
+// <DRIVE>:\msglogs\T_IMPSSECURESOCKET.<PLATFORM>.<VARIANT>.LOG.txt
+// Description of how to build test harness:
+// cd \messaging\msg\imps\
+// bldmake bldfiles
+// abld test build T_IMPSSECURESOCKET
+// 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_IMPSSECURESOCKET.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_IMPSSECURESOCKET.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
+// 5. Run T_IMPSSECURESOCKET.exe on the other platform with the CF card
+// 
+//
+
+#include "EmailTestUtils.h"
+#include <miutmsg.h>
+#include "impsmtm.h"
+#include <securesocket.h>
+#include <bacline.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
+
+
+LOCAL_D CTrapCleanup* theCleanup;
+LOCAL_D CEmailTestUtils* testUtils; 
+LOCAL_D CActiveScheduler* scheduler;
+LOCAL_D RFs theFs;	
+LOCAL_D TMsvId	imapService;
+
+
+_LIT(KImpsTest, "T_IMPSSECURESOCKET - IMPS SecureSockets Functionality Testing");
+
+RTest test(KImpsTest);
+
+_LIT(KTestParams,"-testparams");
+enum TCmdLineArgs
+	{
+	EArgProgramName,
+	EArgTestParams,
+	EArgServerAddress,
+	EArgLogin,
+	EArgPassword,
+	EArgEnd
+	};
+
+
+LOCAL_C TInt readConsoleLineBuf(const TDesC& aPrompt, TDes& aBuf)
+	{
+	test.Printf(_L("\n "));
+	TBool quit = EFalse;
+	_LIT(KDeleteChar, "\b \b");
+
+	test.Printf(aPrompt);
+	while (!quit)
+		{
+		TKeyCode k = test.Getch();
+		TChar key = k;
+		switch (key)
+			{
+		case EKeyBackspace:
+			if (aBuf.Length() > 0)
+				{
+				test.Printf(KDeleteChar);
+				aBuf = aBuf.Left(aBuf.Length() - 1);
+				}
+			break;
+		case EKeyEnter:
+			if (aBuf.Length())
+				quit = ETrue;
+			else
+				test.Printf(_L("\nLogin, password and server address cannot be zero length "));
+			break;
+		default:
+			test.Printf(_L("%c"), key);
+			aBuf.Append(key);
+			break;
+			}
+		}
+	return(KErrNone);
+	}
+
+
+
+class CImpsTestHarness : public CActive
+	{
+public:
+	static CImpsTestHarness* NewLC();
+	void SetUpImpsServiceL();
+	~CImpsTestHarness();
+	void StartTestL();
+	void EndTestL();
+	void RunL();
+	void DoCancel();
+private:
+	CImpsTestHarness();
+	void ConstructL();
+private:
+	TInt				iTestError;
+	TInt				iTestNumber;
+	CImap4ServerMtm*	imapServerMtm;
+	CMsvEntrySelection* iSel;
+	TImap4Cmds iCommand;
+	};
+
+
+//
+
+CImpsTestHarness  *CImpsTestHarness::NewLC()
+	{
+	CImpsTestHarness* self=new (ELeave) CImpsTestHarness();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CImpsTestHarness::~CImpsTestHarness()
+	{
+	delete iSel;
+	}
+
+CImpsTestHarness::CImpsTestHarness()
+	: CActive(-1)
+	{
+	}
+
+void CImpsTestHarness::ConstructL()
+	{
+	CActiveScheduler::Add(this); // add to active scheduler
+	testUtils->CreateAllTestDirectories();
+	testUtils->FileSession().SetSessionPath(_L("C:\\"));
+	testUtils->CleanMessageFolderL();
+	testUtils->GoServerSideL();
+	// Get server MTM.
+	testUtils->Reset();
+	testUtils->CleanMessageFolderL();
+	testUtils->GoServerSideL();
+	SetUpImpsServiceL();
+	testUtils->InstantiateImapServerMtmL();
+	imapServerMtm=(CImap4ServerMtm*)testUtils->iImapServerMtm;
+	}
+
+void CImpsTestHarness::SetUpImpsServiceL()
+	{
+	// Handle command line arguments
+	CCommandLineArguments* cmdLineArg=CCommandLineArguments::NewLC();
+	TInt count = cmdLineArg->Count();
+	TBool isCmdLine=FALSE;
+	if (count>2)	// Command line arguments?
+		{
+		if ((!(cmdLineArg->Arg(EArgTestParams).Compare(KTestParams))) && count==EArgEnd)
+			isCmdLine=TRUE;
+		}	
+
+	imapService=testUtils->CreateImapServiceL();
+	testUtils->iServerEntry->SetEntry(imapService);
+
+	CImImap4Settings* settings = new(ELeave) CImImap4Settings();
+	CleanupStack::PushL(settings);
+	settings->Reset();
+
+
+	TBuf<100> buf;
+	if (isCmdLine)
+		{
+		TLex lex(cmdLineArg->Arg(EArgServerAddress));
+		buf=lex.NextToken();
+		test.Printf(_L("Server address: %S\n"),&buf);
+		}
+	else
+		{
+		readConsoleLineBuf(_L("Server address: "),buf);
+		}
+	settings->SetServerAddressL(buf);
+	buf.Zero();
+	if (isCmdLine)
+		{
+		TLex lex(cmdLineArg->Arg(EArgLogin));
+		buf=lex.NextToken();
+		test.Printf(_L("Login: %S\n"),&buf);
+		}
+	else
+		{
+		readConsoleLineBuf(_L("login: "),buf);
+		}
+	TBuf8<64> data;
+	data.Copy(buf);
+	settings->SetLoginNameL(testUtils->MachineName());
+	data.Zero();
+	buf.Zero();
+	if (isCmdLine)
+		{
+		TLex lex(cmdLineArg->Arg(EArgPassword));
+		buf=lex.NextToken();
+		test.Printf(_L("Password: %S\n"),&buf);
+		}
+	else
+		{
+		readConsoleLineBuf(_L("password: "),buf);
+		}
+	data.Copy(buf);
+	settings->SetPasswordL(testUtils->MachineName());
+
+	settings->SetFolderPathL(_L8(""));
+	settings->SetPort(143);
+	settings->SetPathSeparator('/');
+	settings->SetDisconnectedUserMode(ETrue);
+	settings->SetDeleteEmailsWhenDisconnecting(ETrue);
+	settings->SetGetMailOptions(EGetImap4EmailBodyTextAndAttachments);
+	settings->SetSecureSockets(ETrue); 
+	settings->SetSubscribe(EUpdateNeither);
+	settings->SetSynchronise(EUseCombination);
+	
+	CEmailAccounts* accounts = CEmailAccounts::NewLC();
+ 	TImapAccount imapAccount;
+ 	accounts->GetImapAccountL(imapService, imapAccount);						
+ 	accounts->SaveImapSettingsL(imapAccount, *settings);
+	CleanupStack::PopAndDestroy(3, settings); // accounts, settings, cmdLineArg
+	}
+
+void CImpsTestHarness::StartTestL()
+	{
+	testUtils->TestStart(1);
+	iSel = new (ELeave) CMsvEntrySelection;
+	iSel->AppendL(imapService);
+	TBuf8<128> parameter;
+	testUtils->WriteComment(_L("Calling KIMAP4MTMConnect ")); 
+	iCommand=KIMAP4MTMConnect;
+	imapServerMtm->StartCommandL(*iSel, iCommand, parameter, iStatus);
+	SetActive();
+	}
+
+void CImpsTestHarness::EndTestL()
+	{
+	testUtils->TestFinish(1, iTestError);
+	}
+
+
+void  CImpsTestHarness::DoCancel()
+	{
+	imapServerMtm->Cancel();
+	}
+
+void CImpsTestHarness::RunL()
+	{
+	TImap4CompoundProgress temp;	
+	TPckgC<TImap4CompoundProgress> paramPack(temp);
+
+	const TDesC8& progBuf = imapServerMtm->Progress();	
+	paramPack.Set(progBuf);
+	TImap4CompoundProgress progress=paramPack();	
+	TInt err=progress.iGenericProgress.iErrorCode;
+
+	if (iStatus.Int()!=KErrNone || iCommand==KIMAP4MTMDisconnect || err)
+		{
+		testUtils->TestFinish(1,err);
+		CActiveScheduler::Stop();
+		return;
+		}
+	if (iCommand==KIMAP4MTMConnect)
+		{
+		testUtils->WriteComment(_L("Calling KIMAP4MTMInboxNewSync ")); 
+		iCommand=KIMAP4MTMInboxNewSync;
+		TBuf8<128> parameter;
+		imapServerMtm->StartCommandL(*iSel, iCommand, parameter, iStatus);
+		SetActive();
+		return;
+		}
+
+	if (iCommand==KIMAP4MTMInboxNewSync)
+		{
+		iCommand=KIMAP4MTMDisconnect;
+		TBuf8<128> parameter;
+		imapServerMtm->StartCommandL(*iSel, iCommand, parameter, iStatus);
+		SetActive();
+		return;
+
+		}
+	}
+
+//
+
+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;
+	CSecureSocketLibraryLoader::Unload();
+	}
+
+
+LOCAL_C void doMainL()
+	{
+	Init();
+
+
+	// Load the serial comms device drivers.  If this is not done,
+	// connecting via NT-RAS returns KErrNotFound (-1).
+	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);
+
+
+	theFs.SetSessionPath(_L("c:\\"));
+	theFs.MkDir(_L("c:\\logs\\"));
+	theFs.MkDir(_L("c:\\logs\\email\\"));
+	testUtils = CEmailTestUtils::NewLC(test);
+	testUtils->WriteComment(_L("T_IMPSECURESOCKETS  - Testing IMPS secure sockets"));
+	testUtils->WriteComment(_L("Before you run this test harness, please create commdb dat file ")); 
+	testUtils->WriteComment(_L("with server details which supports TLS."));
+	CImpsTestHarness* impsTestHarness = CImpsTestHarness::NewLC();
+	impsTestHarness->StartTestL();
+ 	CActiveScheduler::Start();
+	testUtils->TestHarnessCompleted();
+	CleanupStack::PopAndDestroy(impsTestHarness); 
+	Closedown();
+	}
+
+
+GLDEF_C TInt E32Main()
+	{
+	test.Title();
+	test.Start(_L("Testing IMPS Secure Socket connection"));
+	__UHEAP_MARK;
+
+	theCleanup=CTrapCleanup::New();
+	test (theCleanup!=NULL);
+	TRAPD(ret,doMainL());		
+	test (ret==KErrNone);
+	delete theCleanup;
+
+	__UHEAP_MARKEND;
+	test.End();
+	return 0;
+	}
+