email/pop3andsmtpmtm/servermtmutils/test/src/T_IMSK01.cpp
changeset 0 72b543305e3a
child 76 60a8a215b0ec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/servermtmutils/test/src/T_IMSK01.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,509 @@
+// Copyright (c) 1998-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:
+//
+
+#include "testenv.h"
+#include <agentclient.h>
+#include "nd_err.h"
+
+#include "imsk.h"
+
+#include <s32mem.h>
+#include <s32file.h>
+#include <iapprefs.h>
+#include "EmailTestUtils.h"
+
+const TInt KMaxSizeOfBinaryData = 200;
+LOCAL_D RTest test(_L("IMSK CImTextServerSession Test"));
+LOCAL_D CTrapCleanup* theCleanup;
+LOCAL_D TBuf8<KMaxSizeOfBinaryData> someBinaryData=_L8("");
+
+LOCAL_D RFs theFs;	
+LOCAL_D CActiveScheduler* scheduler;
+
+LOCAL_D CEmailTestUtils* testUtils; 
+
+
+#define EActivePriorityLow		-1
+const TUid KUidMsvMessageDriveStream={0x1000163E};
+
+LOCAL_C void DisplayErrorReason(TInt& aReason)
+	{
+	if (aReason!=KErrNone)
+		{
+		testUtils->WriteComment(_L("\nERROR - "));
+		}
+
+	TBuf<64> logString;
+	switch (aReason)
+		{
+	case KErrNone:
+		testUtils->WriteComment(_L("Session completed successfully"));
+		break;
+	case KErrCancel:
+		testUtils->WriteComment(_L("Session cancelled"));
+		logString.Format(_L(" Session Cancelled %d"),KErrCancel);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tSession Cancelled"),KErrCancel);
+		break;
+	case KErrAlreadyExists:
+		testUtils->WriteComment(_L(" something Already Exists"));
+		logString.Format(_L(" something Already Exists %d"),KErrAlreadyExists);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tsomething Already Exists"),KErrAlreadyExists);
+		break;
+	case KErrEof:
+		testUtils->WriteComment(_L("No messages to send"));
+		logString.Format(_L(" No messages to send %d"),KErrEof);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tNo messages to send"),KErrEof);
+		break;
+	case KErrNoMemory:
+		testUtils->WriteComment(_L("No memory"));
+		logString.Format(_L(" No Memory %d"),KErrNoMemory);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tNo Memory"),KErrNoMemory);
+		break;
+	case KErrAccessDenied:
+		testUtils->WriteComment(_L("Switch link off"));
+		logString.Format(_L(" Switch link off %d"),KErrAccessDenied);
+		testUtils->WriteComment(logString);
+	//	log->AppendError(_L8("\t\tSwitch link off"),KErrAccessDenied);
+		break;
+	case KErrExitNoModem:
+		testUtils->WriteComment(_L("No modem"));
+		logString.Format(_L(" No Modem %d"),KErrExitNoModem);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tNo Modem"),KErrExitNoModem);
+		break;
+	case KErrExitLoginFail:
+		testUtils->WriteComment(_L("Login failed"));
+		logString.Format(_L(" Login Failed %d"),KErrExitLoginFail);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tLogin Failed"),KErrExitLoginFail);
+		break;
+	case KErrExitModemError:
+		testUtils->WriteComment(_L("Modem error"));
+		logString.Format(_L(" Modem Error %d"),KErrExitModemError);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tModem Error"),KErrExitModemError);
+		break;
+	case KErrExitScriptError:
+		testUtils->WriteComment(_L("Script error"));
+		logString.Format(_L(" Script Error %d"),KErrExitScriptError);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tScript Error"),KErrExitScriptError);
+		break;
+	case KImskErrorDNSNotFound:
+		testUtils->WriteComment(_L("Failed to find SMTP server"));
+		logString.Format(_L(" Failed to find SMTP server %d"),KImskErrorDNSNotFound);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tFailed to find SMTP server"),KImskErrorDNSNotFound);
+		break;
+	case KErrTimedOut:
+		testUtils->WriteComment(_L("Timed out waiting to communicate to server"));
+		logString.Format(_L(" Timed out waiting to communicate to server %d"),KErrTimedOut);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tTimed out waiting to communicate to server"),KErrTimedOut);
+		break;
+	case KErrDisconnected:
+		testUtils->WriteComment(_L("Server disconnected from socket"));
+		logString.Format(_L(" Server disconnected from socket %d"),KErrDisconnected);
+		testUtils->WriteComment(logString);
+//		log->AppendError(_L8("\t\tServer disconnected from socket"),KErrDisconnected);
+		break;
+	default:
+		// unknown error 
+//		testUtils->WriteComment(TRefByValue<const TDesC>_L("%d"),aReason);
+		logString.Format(_L(" Error %d"),aReason);
+		testUtils->WriteComment(logString);
+	//	log->AppendError(_L8("\t\tError"),aReason);
+		break;
+		}
+	}
+
+// create our own active scheduler class
+
+class CExampleScheduler : public CActiveScheduler
+	{
+public:
+	void Error (TInt aError) const;
+	};
+
+void CExampleScheduler::Error(TInt aError) const
+	{
+	DisplayErrorReason(aError);
+//	User::Panic(_L("CExampleScheduler-error"),aError);
+	}
+
+
+// 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();
+	// issue request
+	void RequestSendL();
+	void QueueNextReceive();
+	
+	void RunL();
+	void DoCancel();
+
+private:
+	CImTextServerSession*	iImSocket;
+	TInt					iCtr;
+	TStreamId				iId;
+	HBufC*					iBuf;
+	TInt					iCurrentState;
+	TInt					iLineStatus;
+	TBool					iReceive;
+	TSockXfrLength			iLen;
+	CImIAPPreferences*		iIAPPreferences;
+	};
+
+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()
+	{
+	iCtr=0;
+	CActiveScheduler::Add(this); // add to active scheduler
+	iImSocket= CImTextServerSession::NewL();
+	iReceive=EFalse;
+	}
+
+CSendMessage::~CSendMessage()
+	{ 
+	Cancel(); // make sure we're cancelled
+	delete iImSocket;
+	delete iBuf;
+	delete iIAPPreferences;
+	}
+
+void  CSendMessage::DoCancel()
+	{
+	iImSocket->Cancel();
+	}
+
+void  CSendMessage::RunL()
+	{
+	TBuf<64> logString;
+	TInt error;
+	TInt length=0;
+	switch (iCtr)
+		{
+	case 0:	// iSocket.Connect()
+		if(iStatus.Int()!=KErrNone)
+			{
+			error=iStatus.Int();
+			DisplayErrorReason(error);
+			CActiveScheduler::Stop();
+			}
+		else
+			{	
+			iReceive=ETrue;
+			QueueNextReceive();
+			iCtr++;
+			}
+		break;
+
+	case 4:	// have set encryption
+		iReceive=EFalse;
+		RequestSendL();
+		iCtr++;
+		break;
+
+	case 3:
+		iCtr++;
+	case 1:	// response from sending user name
+	case 2:	// response from sending password
+	//case 3:
+	case 5:
+		someBinaryData=_L8("");
+		if(iStatus.Int()!=KErrNone)
+			{
+//			testUtils->WriteComment(TRefByValue<const TDesC>_L("Error during receipt %d"),iStatus.Int());
+			logString.Format(_L(" Error during receipt%d"),iStatus.Int());
+			testUtils->WriteComment(logString);
+	//		log->AppendError(_L8("\t\tError during receipt"),iStatus.Int());
+			CActiveScheduler::Stop();
+			}
+		else
+			{
+			TBuf8<40> buffer;
+			TBuf<40> buffer16;
+			iLineStatus=iImSocket->GetCurrentTextLine(buffer);
+			buffer16.Copy(buffer);
+			test.Printf(TRefByValue<const TDesC>_L("%S"),&buffer16);
+			if(iReceive)
+				{
+				if(iLineStatus==EBufferTooSmall)
+					{
+					while(iLineStatus!=ECRLFTerminated)
+						{
+						iLineStatus=iImSocket->GetCurrentTextLine(buffer);
+						test.Printf(TRefByValue<const TDesC>_L("%S"),&buffer);
+						}
+					}
+				iReceive=EFalse;
+				RequestSendL();
+				iCtr++;
+				}
+			else
+				{
+				iReceive=ETrue;
+ 				QueueNextReceive();
+				}
+			}
+		break;
+
+	case 6:	// test BinaryDataReceive()
+		if(iStatus.Int()!=KErrNone)
+			{
+			test.Printf(TRefByValue<const TDesC>_L("Error during receipt %d"),iStatus.Int());
+			logString.Format(_L(" Error during receipt%d"),iStatus.Int());
+			testUtils->WriteComment(logString);
+//			log->AppendError(_L8("\t\tError during receipt"),iStatus.Int());
+			CActiveScheduler::Stop();
+			break;
+			}
+
+		length=someBinaryData.Length();
+		if (length>2)
+			{
+			TBuf<KMaxSizeOfBinaryData> buffer16;
+			buffer16.Copy(someBinaryData);
+			test.Printf(TRefByValue<const TDesC>_L("%S"),&buffer16);
+			if ((someBinaryData[length-3]=='.' && someBinaryData[length-2]==0x0D && someBinaryData[length-1]==0x0A)
+				||(someBinaryData[length-3]=='-' && someBinaryData[length-2]=='E' && someBinaryData[length-1]=='R'))
+				{
+				// got ".CRLF" string (-ERR string) from LIST command, so go onto next state
+				iReceive=EFalse;
+				RequestSendL();
+				iCtr++;
+				break;
+				}
+			}
+		// queue a read
+		iReceive=ETrue;
+		iImSocket->ReceiveBinaryData(iStatus,someBinaryData,someBinaryData.MaxLength());
+		SetActive();
+		break;
+
+	default:
+		iCtr=6;
+		RequestSendL();
+		break;
+	case 7:
+		iImSocket->LogError(_L8("\t\tEnd of POP3 test session; completion code="),iStatus.Int());
+		TBuf8<KImMailMaxBufferSize> buffer;
+		iLineStatus=iImSocket->GetCurrentTextLine(buffer);
+		test.Printf(TRefByValue<const TDesC>_L("Final %S\n "),&buffer);
+		CActiveScheduler::Stop();
+		TInt error=iStatus.Int();
+		DisplayErrorReason(error);
+		if (error==KErrNone)
+			testUtils->WriteComment(_L("PASSED test"));
+		else
+			testUtils->WriteComment(_L("FAILED test"));
+		break;
+		} // end of switch
+	}
+
+
+void CSendMessage::RequestSendL()
+	{
+	_LIT8(KImUser,"USER abf75\r\n");
+	_LIT8(KImPass,"PASS oodifama\r\n");
+	_LIT8(KImStat,"STAT\r\n");
+	_LIT8(KImList,"LIST\r\n");
+	_LIT8(KImQuit,"QUIT\r\n");
+
+	TRequestStatus* p=&iStatus;
+	switch(iCtr)
+		{
+	case 0:
+		test.Next(_L("QueueConnect"));
+		delete iIAPPreferences;
+		iIAPPreferences = 0;
+		iIAPPreferences = CImIAPPreferences::NewLC();
+		CleanupStack::Pop(); // iIAPPrefernces
+		// Add IAP's to iIAPPreferences
+		TImIAPChoice iap;
+		iap.iIAP = 3;
+		iap.iDialogPref = ECommDbDialogPrefPrompt;
+//		iIAPPreferences->AddIAPL(iap,0);
+		iap.iIAP = 3;
+		iap.iDialogPref = ECommDbDialogPrefPrompt;
+//		iIAPPreferences->AddIAPL(iap,1);
+		iImSocket->QueueConnectL(iStatus,_L("158.43.128.67"),110,*iIAPPreferences);
+//		iImSocket->QueueConnectL(iStatus,_L("0:0:0:0:0:0:194.217.242.23"),110,*iIAPPreferences);
+		test.Next(_L("Connect Queued"));
+		testUtils->WriteComment(_L("Connect Queued"));
+		break;
+	case 1:
+//        iImSocket->LogText(_L8("First IAP should fail (scripted)"));
+ //       iImSocket->LogText(_L8("Second IAP should fail (iap 30 doesn't exist)"));
+  //      iImSocket->LogText(_L8("Third should work iap 3 demon"));
+        testUtils->WriteComment(_L("IP address of client is "));
+        testUtils->WriteComment(iImSocket->LocalName());
+//        test.Printf(_L("\n"));
+
+		TUint32 convalue;
+		TInt err;
+		err=iImSocket->GetIAPValue(convalue);
+		if(err==KErrNone)
+			test.Printf(_L("GetIAPValue returned %u\n"),convalue);
+		else 
+			test.Printf(_L("GetIAPValue error %d\n"),err);
+		err=iImSocket->GetIAPBearer(convalue);
+		if(err==KErrNone)
+			test.Printf(_L("GetIAPBearer returned %u\n"),convalue);
+		else 
+			test.Printf(_L("GetIAPBearer error %d\n"),err);
+		iImSocket->Send(iStatus,KImUser());
+		testUtils->WriteComment(_L("\tSent Message USER abf75"));
+		break;
+	case 2:
+		iImSocket->Send(iStatus,KImPass());
+		testUtils->WriteComment(_L("\tSent Message PASS oodifama"));
+		break;
+	case 3:
+/*		iImSocket->SetSecurity(EImskEncryptionTLS1);
+		iImSocket->LogText(_L8("**************************************"));
+		iImSocket->LogText(_L8("Testing the logging code"));
+		iImSocket->LogText(_L8("You can add your own logging text to this log file"));
+		iImSocket->LogText(_L8("**************************************"));
+*/		User::RequestComplete(p,KErrNone);
+		break;
+	case 4:
+		iImSocket->Send(iStatus,KImStat());
+		testUtils->WriteComment(_L("\tSent Message STAT"));
+		break;
+	case 5:
+		iImSocket->Send(iStatus,KImList());
+		testUtils->WriteComment(_L("\tSent Message LIST"));
+		break;
+	case 6:
+		iImSocket->Send(iStatus,KImQuit());
+		testUtils->WriteComment(_L("\tSent Message QUIT"));
+		break;
+		}
+	
+	SetActive();
+	}
+
+void CSendMessage::QueueNextReceive()
+	{
+	iImSocket->QueueReceiveNextTextLine(iStatus);
+	SetActive();
+	}
+
+//
+
+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( );
+	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_IMSK01 Testing Imail Text Socket"));
+	testUtils->WriteComment(_L("Please make sure that pipex is the default IAP."));
+
+//	log=CImLog::NewL(_L("c:\\logs\\email\\T_IMSK.log"),EAppend);
+//	CleanupStack::PushL(log);
+
+//	log->AppendComment(_L8("********** T_IMSK01 Testing Imail Text Socket **********"));
+//	log->AppendComment(_L8("\tInit() Completed"));
+
+	// Set up the timeout in the comms database as it is needed by imsk.
+	TUint32 timeoutInMts = 5; // ( five minutes )
+	
+	
+
+//	TBuf<64> logString;
+//	logString.Format(_L(" IAP is %u"),IAP);
+//	testUtils->WriteComment(logString);
+
+	CSendMessage *aSendMessage = CSendMessage::NewLC();
+	aSendMessage->RequestSendL();
+
+ 	CActiveScheduler::Start();
+
+	testUtils->WriteComment(_L("**********       T_IMSK Tests Complete       **********"));
+	testUtils->TestHarnessCompleted();
+
+	CleanupStack::PopAndDestroy(aSendMessage);
+	CleanupStack::PopAndDestroy(testUtils);
+	Closedown();
+	}
+
+
+GLDEF_C TInt E32Main()
+	{
+	test.Title();
+	test.Start(_L("Testing Imail Text Socket"));
+	__UHEAP_MARK;
+
+	theCleanup=CTrapCleanup::New();
+	test (theCleanup!=NULL);
+	TRAPD(ret,doMainL());		
+	test (ret==KErrNone);
+	delete theCleanup;
+
+	__UHEAP_MARKEND;
+	test.End();
+	return 0;
+	}