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