--- /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;
+ }
+