--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/integration/server/src/t_msgs.cpp Fri Jun 04 10:32:16 2010 +0100
@@ -0,0 +1,430 @@
+// Copyright (c) 2000-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 <e32test.h>
+#include <msvapi.h>
+#include <msvids.h>
+#include "msvtestutils.h"
+#include "msvtestconfig.h"
+#include "msgservertestutils.h"
+#include <miutset.h>
+
+_LIT(KTestName,"Message Server Smoke test");
+RTest tests(KTestName);
+CMsgServerTestUtils* theUtils = NULL;
+
+
+
+
+class TTestSessionObserver: public MMsvSessionObserver
+ {
+public:
+ TTestSessionObserver() : iNumberOfEvents(0) {};
+ virtual void HandleSessionEventL(TMsvSessionEvent aEvent, TAny*, TAny*, TAny*)
+ {
+ iLastEvent=aEvent;
+ iNumberOfEvents++;
+ };
+
+ TInt CheckEvents(TInt aNumber)
+ {
+ _LIT(KNote3,"Checking session observer got the correct number of events\n");
+ theUtils->Printf(KNote3);
+ TInt err=KErrNone;
+ if(iNumberOfEvents!=aNumber)
+ {
+ _LIT(KErrMsg,"Wrong Number of Events, Wanted %d Got %d, last event %d\n");
+ theUtils->Printf(KErrMsg,aNumber,iNumberOfEvents,iLastEvent);
+ err=KErrUnknown;
+ }
+ iNumberOfEvents=0;
+ return err;
+ };
+
+ TInt CheckEvents(TInt aNumber, TMsvSessionEvent aLastEvent)
+ {
+ _LIT(KNote3,"Checking session observer got the correct event\n");
+ theUtils->Printf(KNote3);
+
+ TInt err=KErrNone;
+ if(aNumber !=0 && iLastEvent!=aLastEvent)
+ {
+ _LIT(KErrMsg,"Wrong Event Wanted %d Got %d\n");
+ theUtils->Printf(KErrMsg,aLastEvent,iLastEvent);
+ err=KErrUnknown;
+ }
+ if(iNumberOfEvents!=aNumber)
+ {
+ _LIT(KErrMsg,"Wrong Number of Events Wanted %d Got %d\n");
+ theUtils->Printf(KErrMsg,aNumber,iNumberOfEvents);
+ err=KErrUnknown;
+ }
+ iNumberOfEvents=0;
+ return err;
+ };
+
+private:
+
+ TMsvSessionEvent iLastEvent;
+ TInt iNumberOfEvents;
+ };
+
+
+class TTestEntryObserver: public MMsvEntryObserver
+ {
+public:
+ TTestEntryObserver() : iNumberOfEvents(0) {};
+ virtual void HandleEntryEventL(TMsvEntryEvent aEvent, TAny*, TAny*, TAny*)
+ {
+ iLastEvent=aEvent;
+ iNumberOfEvents++;
+ }
+
+
+ TInt CheckEvents(TInt aNumber)
+ {
+ _LIT(KNote3,"Checking entry observer got the correct number of events\n");
+ theUtils->Printf(KNote3);
+ TInt err=KErrNone;
+ if(iNumberOfEvents!=aNumber)
+ {
+ _LIT(KErrMsg,"Wrong Number of Events, Wanted %d Got %d, last event %d\n");
+ theUtils->Printf(KErrMsg,aNumber,iNumberOfEvents,iLastEvent);
+ err=KErrUnknown;
+ }
+ iNumberOfEvents=0;
+ return err;
+ };
+
+ TInt CheckEvents(TInt aNumber, TMsvEntryEvent aLastEvent)
+ {
+ _LIT(KNote3,"Checking entry observer got the correct event\n");
+ theUtils->Printf(KNote3);
+
+ TInt err=KErrNone;
+ if(iNumberOfEvents!=aNumber)
+ {
+ _LIT(KErrMsg,"Wrong Number of Events, Wanted %d Got %d\n");
+ theUtils->Printf(KErrMsg,aNumber,iNumberOfEvents);
+ err=KErrUnknown;
+ }
+ if(iLastEvent!=aLastEvent)
+ {
+ _LIT(KErrMsg,"Wrong Entry Event, Wanted %d Got %d\n");
+ theUtils->Printf(KErrMsg,aLastEvent,iLastEvent);
+ err=KErrUnknown;
+ }
+ iNumberOfEvents=0;
+ return err;
+ };
+
+
+private:
+ TMsvEntryEvent iLastEvent;
+ TInt iNumberOfEvents;
+ };
+
+
+
+class TEntryObserverCleanup
+ {
+ public:
+ TEntryObserverCleanup(CMsvEntry &aEntry,TTestEntryObserver &aObserver)
+ : iEntry(aEntry), iObserver(aObserver) {};
+ static void CleanupEntryObserver(TAny* aPtr)
+ {
+ TEntryObserverCleanup* me = STATIC_CAST(TEntryObserverCleanup*, aPtr);
+ me->Cleanup();
+ };
+ private:
+ void Cleanup()
+ {
+ iEntry.RemoveObserver(iObserver);
+ };
+
+ private:
+ CMsvEntry &iEntry;
+ TTestEntryObserver &iObserver;
+ };
+
+
+TInt RunWhilePending(const TRequestStatus &aStatus)
+ {
+ _LIT(KNote2,"Running scheduler till we complete\n");
+ theUtils->Printf(KNote2);
+
+ TInt err=KErrNone;
+ while(aStatus==KRequestPending)
+ {
+ CActiveScheduler::Current()->RunIfReady(err,0);
+ CActiveScheduler::Current()->WaitForAnyRequest();
+ }
+
+ _LIT(KNote3,"Completed\n");
+ theUtils->Printf(KNote3);
+ return err;
+ }
+
+
+// create a service
+TInt CreateServiceTest(TTestSessionObserver &aObserver, CMsvEntry &aEntry, TMsvId &aServiceId)
+ {
+
+ TMsvEntry tEntry;
+
+ tEntry.iMtm = KUidMsgTypePOP3;
+ tEntry.iType = KUidMsvServiceEntry;
+ tEntry.SetReadOnly(EFalse);
+ tEntry.SetVisible(ETrue);
+ _LIT(KADescription,"A Fake Service");
+ tEntry.iDescription.Set(KADescription);
+
+ _LIT(KNote0,"Setting entry to root\n");
+ theUtils->Printf(KNote0);
+ aEntry.SetEntryL(KMsvRootIndexEntryIdValue);
+
+ _LIT(KNote1,"Starting async create service\n");
+ theUtils->Printf(KNote1);
+ TRequestStatus status;
+ CMsvOperation *anop=aEntry.CreateL(tEntry,status);
+ CleanupStack::PushL(anop);
+
+ TInt err=RunWhilePending(status);
+ if(err==KErrNone)
+ {
+ err=aObserver.CheckEvents(1,MMsvSessionObserver::EMsvEntriesCreated);
+ aServiceId = McliUtils::GetLocalProgressL(*anop).iId;
+ }
+
+ CleanupStack::PopAndDestroy(anop);
+ return err ;
+ }
+
+
+// create a service
+TInt CreateMessageTest(TTestSessionObserver &aObserver, CMsvEntry &aEntry, TMsvId aServiceId, TMsvId& aMessageId)
+ {
+ _LIT(KNote0,"Setting entry to drafts entry\n");
+ theUtils->Printf(KNote0);
+ aEntry.SetEntryL(KMsvDraftEntryIdValue);
+ _LIT(KNote1,"Observing draft entry\n");
+ theUtils->Printf(KNote1);
+ TTestEntryObserver eObs;
+ aEntry.AddObserverL(eObs);
+ TEntryObserverCleanup clean(aEntry,eObs);
+ CleanupStack::PushL(TCleanupItem(TEntryObserverCleanup::CleanupEntryObserver, &clean));
+
+
+ _LIT(KAnAddress,"Test@psion7.demon.co.uk");
+ _LIT(KADescription,"A Message");
+
+ TMsvEntry message;
+ message.iDetails.Set(KAnAddress);
+ message.iDescription.Set(KADescription);
+ message.iMtm=KUidMsgTypePOP3;
+
+ message.iServiceId=aServiceId;
+ message.iType=KUidMsvMessageEntry;
+
+ _LIT(KNote2,"Starting async create message\n");
+ theUtils->Printf(KNote2);
+
+ TRequestStatus status;
+ CMsvOperation *anop=aEntry.CreateL(message,status);
+ CleanupStack::PushL(anop);
+
+ TInt err=RunWhilePending(status);
+
+ if(err==KErrNone)
+ {
+ aMessageId = McliUtils::GetLocalProgressL(*anop).iId;
+ err=aObserver.CheckEvents(1,MMsvSessionObserver::EMsvEntriesCreated);
+ }
+ if(err==KErrNone)
+ err=eObs.CheckEvents(1,MMsvEntryObserver::EMsvNewChildren);
+
+ CleanupStack::PopAndDestroy(anop);
+ CleanupStack::PopAndDestroy(&clean);
+ return(err);
+ }
+
+
+TInt CopyMessageTest(TTestSessionObserver &aObserver, CMsvEntry &aEntry, TMsvId aMessageId)
+ {
+ _LIT(KNote0,"Setting entry to drafts\n");
+ theUtils->Printf(KNote0);
+ aEntry.SetEntryL(KMsvDraftEntryId);
+ _LIT(KNote1,"Observing drafts entry\n");
+ theUtils->Printf(KNote1);
+ TTestEntryObserver eObs;
+ aEntry.AddObserverL(eObs);
+ TEntryObserverCleanup clean(aEntry,eObs);
+ CleanupStack::PushL(TCleanupItem(TEntryObserverCleanup::CleanupEntryObserver, &clean));
+
+
+ _LIT(KNote3,"Starting async copy message on draft entry/aMessageId to Outbox\n");
+ theUtils->Printf(KNote3);
+
+ TRequestStatus status;
+ CMsvOperation *anop=aEntry.CopyL(aMessageId,KMsvGlobalOutBoxIndexEntryId,status);
+ CleanupStack::PushL(anop);
+
+ TInt err=RunWhilePending(status);
+
+ if(err==KErrNone)
+ err=aObserver.CheckEvents(1,MMsvSessionObserver::EMsvEntriesCreated);
+ if(err==KErrNone)
+ err=eObs.CheckEvents(0);
+
+ CleanupStack::PopAndDestroy(anop);
+ CleanupStack::PopAndDestroy(&clean);
+ return err ;
+ }
+
+TInt MoveMessageTest(TTestSessionObserver &aObserver, CMsvEntry &aEntry, TMsvId aMessageId)
+ {
+ _LIT(KNote0,"Setting entry to drafts\n");
+ theUtils->Printf(KNote0);
+ aEntry.SetEntryL(KMsvDraftEntryId);
+ _LIT(KNote1,"Observing drafts entry\n");
+ theUtils->Printf(KNote1);
+ TTestEntryObserver eObs;
+ aEntry.AddObserverL(eObs);
+ TEntryObserverCleanup clean(aEntry,eObs);
+ CleanupStack::PushL(TCleanupItem(TEntryObserverCleanup::CleanupEntryObserver, &clean));
+
+
+ _LIT(KNote2,"Getting outbox entry\n");
+ theUtils->Printf(KNote2);
+ CMsvEntry* outboxEntry=aEntry.Session().GetEntryL(KMsvGlobalOutBoxIndexEntryId);
+ CleanupStack::PushL(outboxEntry);
+ _LIT(KNote3,"Observing outbox entry\n");
+ theUtils->Printf(KNote3);
+ TTestEntryObserver outboxObs;
+ outboxEntry->AddObserverL(outboxObs);
+ TEntryObserverCleanup clean2(*outboxEntry,outboxObs);
+ CleanupStack::PushL(TCleanupItem(TEntryObserverCleanup::CleanupEntryObserver, &clean2));
+
+ _LIT(KNote5,"Starting async move message on draft entry/aMessageId to Outbox\n");
+ theUtils->Printf(KNote5);
+
+ TRequestStatus status;
+ CMsvOperation *anOp=aEntry.MoveL(aMessageId,KMsvGlobalOutBoxIndexEntryId,status);
+ CleanupStack::PushL(anOp);
+
+ TInt err=RunWhilePending(status);
+
+ if(err==KErrNone)
+ err=aObserver.CheckEvents(1,MMsvSessionObserver::EMsvEntriesMoved);
+
+ _LIT(KNote6,"Checking drafts entry events\n");
+ theUtils->Printf(KNote6);
+ if(err==KErrNone)
+ err=eObs.CheckEvents(1,MMsvEntryObserver::EMsvDeletedChildren);
+
+ _LIT(KNote7,"Checking outbox entry events\n");
+ theUtils->Printf(KNote7);
+ if(err==KErrNone)
+ err=outboxObs.CheckEvents(1,MMsvEntryObserver::EMsvNewChildren);
+
+ CleanupStack::PopAndDestroy(anOp);
+ CleanupStack::PopAndDestroy(&clean2);
+ CleanupStack::PopAndDestroy(outboxEntry);
+ CleanupStack::PopAndDestroy(&clean);
+ return err ;
+ }
+
+
+
+TInt DoTestsL(TTestSessionObserver &aSessionObs, CMsvEntry &aEntry)
+ {
+ TInt testno=1;
+ TInt err=KErrNone;
+
+ TMsvId serviceId;
+
+ theUtils->TestStart(testno,_L("Creating a Service"));
+ err=CreateServiceTest(aSessionObs,aEntry,serviceId);
+ theUtils->TestFinish(testno++,err);
+ if(err!=KErrNone) return(err);
+
+ TMsvId messageId;
+ theUtils->TestStart(testno,_L("Creating a Message"));
+ err=CreateMessageTest(aSessionObs,aEntry,serviceId,messageId);
+ theUtils->TestFinish(testno++,err);
+ if(err!=KErrNone) return(err);
+
+ theUtils->TestStart(testno,_L("Copying message to Outbox"));
+ err=CopyMessageTest(aSessionObs,aEntry,messageId);
+ theUtils->TestFinish(testno++,err);
+ if(err!=KErrNone) return(err);
+
+ theUtils->TestStart(testno,_L("Creating another Message"));
+ err=CreateMessageTest(aSessionObs,aEntry,serviceId,messageId);
+ theUtils->TestFinish(testno++,err);
+ if(err!=KErrNone) return(err);
+
+ theUtils->TestStart(testno,_L("Moving message to Outbox"));
+ err=MoveMessageTest(aSessionObs,aEntry,messageId);
+ theUtils->TestFinish(testno++,err);
+ if(err!=KErrNone) return(err);
+
+
+ return KErrNone;
+ }
+
+
+
+
+void DoMainL()
+ {
+ theUtils=CMsgServerTestUtils::NewL(tests);
+ theUtils->SetupL();
+ TTestSessionObserver sObs;
+ CMsvSession *session=CMsvSession::OpenSyncL(sObs);
+ CleanupStack::PushL(session);
+ CMsvEntry *cEntry=session->GetEntryL(KMsvRootIndexEntryId);
+ CleanupStack::PushL(cEntry);
+
+ TInt err=DoTestsL(sObs,*cEntry);
+ CleanupStack::PopAndDestroy(cEntry);
+ CleanupStack::PopAndDestroy(session);
+ theUtils->Close(err);
+ delete theUtils;
+ }
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ TRAPD(ret, DoMainL());
+ tests(ret==KErrNone);
+ tests.Getch();
+ tests.Close();
+ delete cleanup;
+ __UHEAP_MARKEND;
+ return(KErrNone);
+ }
+
+EXPORT_C TInt WinsMain()
+ {
+#if defined(__WINS__)
+ E32Main();
+#endif
+ return KErrNone;
+ }
+
+
+