messagingfw/msgtest/integration/server/src/t_msgs.cpp
changeset 22 bde600d88860
parent 0 8e480a14352b
equal deleted inserted replaced
21:08008ce8a6df 22:bde600d88860
       
     1 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include <e32test.h>
       
    17 #include <msvapi.h>
       
    18 #include <msvids.h>
       
    19 #include "msvtestutils.h"
       
    20 #include "msvtestconfig.h"
       
    21 #include "msgservertestutils.h"
       
    22 #include <miutset.h>
       
    23 
       
    24 _LIT(KTestName,"Message Server Smoke test");
       
    25 RTest tests(KTestName);
       
    26 CMsgServerTestUtils* theUtils = NULL;
       
    27 
       
    28 
       
    29 
       
    30 
       
    31 class TTestSessionObserver: public MMsvSessionObserver
       
    32 	{
       
    33 public:
       
    34 	TTestSessionObserver() : iNumberOfEvents(0) {};
       
    35 	virtual void HandleSessionEventL(TMsvSessionEvent aEvent, TAny*, TAny*, TAny*)
       
    36 		{
       
    37 		iLastEvent=aEvent;
       
    38 		iNumberOfEvents++;
       
    39 		};
       
    40 
       
    41 		TInt CheckEvents(TInt aNumber)
       
    42 		{
       
    43 		_LIT(KNote3,"Checking session observer got the correct number of events\n");
       
    44 		theUtils->Printf(KNote3);
       
    45 		TInt err=KErrNone;
       
    46 		if(iNumberOfEvents!=aNumber)
       
    47 			{
       
    48 			_LIT(KErrMsg,"Wrong Number of Events, Wanted %d Got %d, last event %d\n");
       
    49 			theUtils->Printf(KErrMsg,aNumber,iNumberOfEvents,iLastEvent);
       
    50 			err=KErrUnknown;
       
    51 			}
       
    52 		iNumberOfEvents=0;
       
    53 		return err;
       
    54 		};
       
    55 
       
    56 	TInt CheckEvents(TInt aNumber, TMsvSessionEvent aLastEvent)
       
    57 		{
       
    58 		_LIT(KNote3,"Checking session observer got the correct event\n");
       
    59 		theUtils->Printf(KNote3);
       
    60 
       
    61 		TInt err=KErrNone;
       
    62 		if(aNumber !=0 && iLastEvent!=aLastEvent)
       
    63 			{
       
    64 			_LIT(KErrMsg,"Wrong Event Wanted %d Got %d\n");		
       
    65 			theUtils->Printf(KErrMsg,aLastEvent,iLastEvent);
       
    66 			err=KErrUnknown;
       
    67 			}
       
    68 		if(iNumberOfEvents!=aNumber)
       
    69 			{
       
    70 			_LIT(KErrMsg,"Wrong Number of Events Wanted %d Got %d\n");		
       
    71 			theUtils->Printf(KErrMsg,aNumber,iNumberOfEvents);
       
    72 			err=KErrUnknown;
       
    73 			}
       
    74 		iNumberOfEvents=0;
       
    75 		return err;
       
    76 		};
       
    77 	
       
    78 private:
       
    79 
       
    80 	TMsvSessionEvent iLastEvent;
       
    81 	TInt iNumberOfEvents;
       
    82 	};	
       
    83 
       
    84 
       
    85 class TTestEntryObserver: public MMsvEntryObserver
       
    86 	{
       
    87 public:
       
    88 	TTestEntryObserver() : iNumberOfEvents(0) {};
       
    89 	virtual void HandleEntryEventL(TMsvEntryEvent aEvent, TAny*, TAny*, TAny*)
       
    90 		{
       
    91 		iLastEvent=aEvent;
       
    92 		iNumberOfEvents++;
       
    93 		}
       
    94 
       
    95 
       
    96 	TInt CheckEvents(TInt aNumber)
       
    97 		{
       
    98 		_LIT(KNote3,"Checking entry observer got the correct number of events\n");
       
    99 		theUtils->Printf(KNote3);
       
   100 		TInt err=KErrNone;
       
   101 		if(iNumberOfEvents!=aNumber)
       
   102 			{
       
   103 			_LIT(KErrMsg,"Wrong Number of Events, Wanted %d Got %d, last event %d\n");
       
   104 			theUtils->Printf(KErrMsg,aNumber,iNumberOfEvents,iLastEvent);
       
   105 			err=KErrUnknown;
       
   106 			}
       
   107 		iNumberOfEvents=0;
       
   108 		return err;
       
   109 		};
       
   110 
       
   111 	TInt CheckEvents(TInt aNumber, TMsvEntryEvent aLastEvent)
       
   112 		{
       
   113 		_LIT(KNote3,"Checking entry observer got the correct event\n");
       
   114 		theUtils->Printf(KNote3);
       
   115 
       
   116 		TInt err=KErrNone;
       
   117 		if(iNumberOfEvents!=aNumber)
       
   118 			{
       
   119 			_LIT(KErrMsg,"Wrong Number of Events, Wanted %d Got %d\n");
       
   120 			theUtils->Printf(KErrMsg,aNumber,iNumberOfEvents);
       
   121 			err=KErrUnknown;
       
   122 			}
       
   123 		if(iLastEvent!=aLastEvent)
       
   124 			{
       
   125 			_LIT(KErrMsg,"Wrong Entry Event, Wanted %d Got %d\n");		
       
   126 			theUtils->Printf(KErrMsg,aLastEvent,iLastEvent);
       
   127 			err=KErrUnknown;
       
   128 			}
       
   129 		iNumberOfEvents=0;
       
   130 		return err;
       
   131 		};
       
   132 
       
   133 
       
   134 private:
       
   135 	TMsvEntryEvent iLastEvent;
       
   136 	TInt iNumberOfEvents;
       
   137 	};
       
   138 
       
   139 
       
   140 
       
   141 class TEntryObserverCleanup
       
   142 	{
       
   143 	public:
       
   144 		TEntryObserverCleanup(CMsvEntry &aEntry,TTestEntryObserver &aObserver)
       
   145 			: iEntry(aEntry), iObserver(aObserver) {};
       
   146 	static void CleanupEntryObserver(TAny* aPtr)
       
   147 		{
       
   148 		TEntryObserverCleanup* me = STATIC_CAST(TEntryObserverCleanup*, aPtr);
       
   149 		me->Cleanup();
       
   150 		};
       
   151 	private:
       
   152 		void Cleanup()
       
   153 		{
       
   154 		iEntry.RemoveObserver(iObserver);
       
   155 		};
       
   156 
       
   157 	private:
       
   158 		CMsvEntry &iEntry;
       
   159 		TTestEntryObserver &iObserver;
       
   160 	};
       
   161 
       
   162 
       
   163 TInt RunWhilePending(const TRequestStatus &aStatus)
       
   164 	{
       
   165 	_LIT(KNote2,"Running scheduler till we complete\n");
       
   166 	theUtils->Printf(KNote2);
       
   167 
       
   168 	TInt err=KErrNone;
       
   169 	while(aStatus==KRequestPending)
       
   170 		{
       
   171 		CActiveScheduler::Current()->RunIfReady(err,0);
       
   172 		CActiveScheduler::Current()->WaitForAnyRequest();
       
   173 		}
       
   174 
       
   175 	_LIT(KNote3,"Completed\n");
       
   176 	theUtils->Printf(KNote3);
       
   177 	return err;
       
   178 	}
       
   179 
       
   180 
       
   181 // create a service
       
   182 TInt CreateServiceTest(TTestSessionObserver &aObserver, CMsvEntry &aEntry, TMsvId &aServiceId)
       
   183 	{
       
   184 
       
   185 	TMsvEntry tEntry;
       
   186 
       
   187 	tEntry.iMtm = KUidMsgTypePOP3;
       
   188 	tEntry.iType = KUidMsvServiceEntry;
       
   189 	tEntry.SetReadOnly(EFalse);
       
   190 	tEntry.SetVisible(ETrue);
       
   191 	_LIT(KADescription,"A Fake Service");
       
   192 	tEntry.iDescription.Set(KADescription);
       
   193 
       
   194 	_LIT(KNote0,"Setting entry to root\n");
       
   195 	theUtils->Printf(KNote0);
       
   196 	aEntry.SetEntryL(KMsvRootIndexEntryIdValue);
       
   197 
       
   198 	_LIT(KNote1,"Starting async create service\n");
       
   199 	theUtils->Printf(KNote1);
       
   200 	TRequestStatus status;
       
   201 	CMsvOperation *anop=aEntry.CreateL(tEntry,status);
       
   202 	CleanupStack::PushL(anop);
       
   203 
       
   204 	TInt err=RunWhilePending(status);
       
   205 	if(err==KErrNone)
       
   206 		{
       
   207 		err=aObserver.CheckEvents(1,MMsvSessionObserver::EMsvEntriesCreated);
       
   208 		aServiceId = McliUtils::GetLocalProgressL(*anop).iId;
       
   209 		}
       
   210 
       
   211 	CleanupStack::PopAndDestroy(anop);
       
   212 	return err ;
       
   213 	}
       
   214 
       
   215 
       
   216 // create a service
       
   217 TInt CreateMessageTest(TTestSessionObserver &aObserver, CMsvEntry &aEntry, TMsvId aServiceId, TMsvId& aMessageId)
       
   218 	{
       
   219 	_LIT(KNote0,"Setting entry to drafts entry\n");
       
   220 	theUtils->Printf(KNote0);
       
   221 	aEntry.SetEntryL(KMsvDraftEntryIdValue);
       
   222 	_LIT(KNote1,"Observing draft entry\n");
       
   223 	theUtils->Printf(KNote1);
       
   224 	TTestEntryObserver eObs;
       
   225 	aEntry.AddObserverL(eObs);
       
   226 	TEntryObserverCleanup clean(aEntry,eObs);
       
   227 	CleanupStack::PushL(TCleanupItem(TEntryObserverCleanup::CleanupEntryObserver, &clean));
       
   228 
       
   229 
       
   230 	_LIT(KAnAddress,"Test@psion7.demon.co.uk");
       
   231 	_LIT(KADescription,"A Message");
       
   232 
       
   233 	TMsvEntry message;
       
   234 	message.iDetails.Set(KAnAddress);
       
   235 	message.iDescription.Set(KADescription);
       
   236 	message.iMtm=KUidMsgTypePOP3;
       
   237 	
       
   238 	message.iServiceId=aServiceId;
       
   239 	message.iType=KUidMsvMessageEntry;
       
   240 
       
   241 	_LIT(KNote2,"Starting async create message\n");
       
   242 	theUtils->Printf(KNote2);
       
   243 
       
   244 	TRequestStatus status;
       
   245 	CMsvOperation *anop=aEntry.CreateL(message,status);
       
   246 	CleanupStack::PushL(anop);
       
   247 
       
   248 	TInt err=RunWhilePending(status);
       
   249 
       
   250 	if(err==KErrNone)
       
   251 		{
       
   252 		aMessageId = McliUtils::GetLocalProgressL(*anop).iId;
       
   253 		err=aObserver.CheckEvents(1,MMsvSessionObserver::EMsvEntriesCreated);
       
   254 		}
       
   255 	if(err==KErrNone)
       
   256 		err=eObs.CheckEvents(1,MMsvEntryObserver::EMsvNewChildren);
       
   257 
       
   258 	CleanupStack::PopAndDestroy(anop);
       
   259 	CleanupStack::PopAndDestroy(&clean);
       
   260 	return(err);
       
   261 	}
       
   262 
       
   263 
       
   264 TInt CopyMessageTest(TTestSessionObserver &aObserver, CMsvEntry &aEntry, TMsvId aMessageId)
       
   265 	{
       
   266 	_LIT(KNote0,"Setting entry to drafts\n");
       
   267 	theUtils->Printf(KNote0);
       
   268 	aEntry.SetEntryL(KMsvDraftEntryId);
       
   269 	_LIT(KNote1,"Observing drafts entry\n");
       
   270 	theUtils->Printf(KNote1);
       
   271 	TTestEntryObserver eObs;
       
   272 	aEntry.AddObserverL(eObs);
       
   273 	TEntryObserverCleanup clean(aEntry,eObs);
       
   274 	CleanupStack::PushL(TCleanupItem(TEntryObserverCleanup::CleanupEntryObserver, &clean));
       
   275 
       
   276 
       
   277 	_LIT(KNote3,"Starting async copy message on draft entry/aMessageId to Outbox\n");
       
   278 	theUtils->Printf(KNote3);
       
   279 
       
   280 	TRequestStatus status;
       
   281 	CMsvOperation *anop=aEntry.CopyL(aMessageId,KMsvGlobalOutBoxIndexEntryId,status);
       
   282 	CleanupStack::PushL(anop);
       
   283 
       
   284 	TInt err=RunWhilePending(status);
       
   285 
       
   286 	if(err==KErrNone)
       
   287 		err=aObserver.CheckEvents(1,MMsvSessionObserver::EMsvEntriesCreated);
       
   288 	if(err==KErrNone)
       
   289 		err=eObs.CheckEvents(0);
       
   290 
       
   291 	CleanupStack::PopAndDestroy(anop);
       
   292 	CleanupStack::PopAndDestroy(&clean);
       
   293 	return err ;
       
   294 	}
       
   295 
       
   296 TInt MoveMessageTest(TTestSessionObserver &aObserver, CMsvEntry &aEntry, TMsvId aMessageId)
       
   297 	{
       
   298 	_LIT(KNote0,"Setting entry to drafts\n");
       
   299 	theUtils->Printf(KNote0);
       
   300 	aEntry.SetEntryL(KMsvDraftEntryId);
       
   301 	_LIT(KNote1,"Observing drafts entry\n");
       
   302 	theUtils->Printf(KNote1);
       
   303 	TTestEntryObserver eObs;
       
   304 	aEntry.AddObserverL(eObs);
       
   305 	TEntryObserverCleanup clean(aEntry,eObs);
       
   306 	CleanupStack::PushL(TCleanupItem(TEntryObserverCleanup::CleanupEntryObserver, &clean));
       
   307 
       
   308 
       
   309 	_LIT(KNote2,"Getting outbox entry\n");
       
   310 	theUtils->Printf(KNote2);
       
   311 	CMsvEntry* outboxEntry=aEntry.Session().GetEntryL(KMsvGlobalOutBoxIndexEntryId);
       
   312 	CleanupStack::PushL(outboxEntry);
       
   313 	_LIT(KNote3,"Observing outbox entry\n");
       
   314 	theUtils->Printf(KNote3);
       
   315 	TTestEntryObserver outboxObs;
       
   316 	outboxEntry->AddObserverL(outboxObs);
       
   317 	TEntryObserverCleanup clean2(*outboxEntry,outboxObs);
       
   318 	CleanupStack::PushL(TCleanupItem(TEntryObserverCleanup::CleanupEntryObserver, &clean2));
       
   319 
       
   320 	_LIT(KNote5,"Starting async move message on draft entry/aMessageId to Outbox\n");
       
   321 	theUtils->Printf(KNote5);
       
   322 
       
   323 	TRequestStatus status;
       
   324 	CMsvOperation *anOp=aEntry.MoveL(aMessageId,KMsvGlobalOutBoxIndexEntryId,status);
       
   325 	CleanupStack::PushL(anOp);
       
   326 
       
   327 	TInt err=RunWhilePending(status);
       
   328 
       
   329 	if(err==KErrNone)
       
   330 		err=aObserver.CheckEvents(1,MMsvSessionObserver::EMsvEntriesMoved);
       
   331 
       
   332 	_LIT(KNote6,"Checking drafts entry events\n");
       
   333 	theUtils->Printf(KNote6);
       
   334 	if(err==KErrNone)
       
   335 		err=eObs.CheckEvents(1,MMsvEntryObserver::EMsvDeletedChildren);
       
   336 
       
   337 	_LIT(KNote7,"Checking outbox entry events\n");
       
   338 	theUtils->Printf(KNote7);
       
   339 	if(err==KErrNone)
       
   340 		err=outboxObs.CheckEvents(1,MMsvEntryObserver::EMsvNewChildren);
       
   341 
       
   342 	CleanupStack::PopAndDestroy(anOp);
       
   343 	CleanupStack::PopAndDestroy(&clean2);
       
   344 	CleanupStack::PopAndDestroy(outboxEntry);
       
   345 	CleanupStack::PopAndDestroy(&clean);
       
   346 	return err ;
       
   347 	}
       
   348 
       
   349 
       
   350 
       
   351 TInt DoTestsL(TTestSessionObserver &aSessionObs, CMsvEntry &aEntry)
       
   352 	{
       
   353 	TInt testno=1;
       
   354 	TInt err=KErrNone;
       
   355 
       
   356 	TMsvId serviceId; 
       
   357 
       
   358 	theUtils->TestStart(testno,_L("Creating a Service"));
       
   359 	err=CreateServiceTest(aSessionObs,aEntry,serviceId);
       
   360 	theUtils->TestFinish(testno++,err);
       
   361 	if(err!=KErrNone) return(err);
       
   362 
       
   363 	TMsvId messageId;
       
   364 	theUtils->TestStart(testno,_L("Creating a Message"));
       
   365 	err=CreateMessageTest(aSessionObs,aEntry,serviceId,messageId);
       
   366 	theUtils->TestFinish(testno++,err);
       
   367 	if(err!=KErrNone) return(err);
       
   368 
       
   369 	theUtils->TestStart(testno,_L("Copying message to Outbox"));
       
   370 	err=CopyMessageTest(aSessionObs,aEntry,messageId);
       
   371 	theUtils->TestFinish(testno++,err);
       
   372 	if(err!=KErrNone) return(err);
       
   373 
       
   374 	theUtils->TestStart(testno,_L("Creating another Message"));
       
   375 	err=CreateMessageTest(aSessionObs,aEntry,serviceId,messageId);
       
   376 	theUtils->TestFinish(testno++,err);
       
   377 	if(err!=KErrNone) return(err);
       
   378 
       
   379 	theUtils->TestStart(testno,_L("Moving message to Outbox"));
       
   380 	err=MoveMessageTest(aSessionObs,aEntry,messageId);
       
   381 	theUtils->TestFinish(testno++,err);
       
   382 	if(err!=KErrNone) return(err);
       
   383 
       
   384 
       
   385 	return KErrNone;
       
   386 	}
       
   387 
       
   388 
       
   389 
       
   390 
       
   391 void DoMainL()
       
   392 	{
       
   393 	theUtils=CMsgServerTestUtils::NewL(tests);
       
   394 	theUtils->SetupL();
       
   395 	TTestSessionObserver sObs;
       
   396 	CMsvSession *session=CMsvSession::OpenSyncL(sObs);
       
   397 	CleanupStack::PushL(session);
       
   398 	CMsvEntry *cEntry=session->GetEntryL(KMsvRootIndexEntryId);
       
   399 	CleanupStack::PushL(cEntry);
       
   400 
       
   401 	TInt err=DoTestsL(sObs,*cEntry);
       
   402 	CleanupStack::PopAndDestroy(cEntry);
       
   403 	CleanupStack::PopAndDestroy(session);
       
   404 	theUtils->Close(err);
       
   405 	delete theUtils;
       
   406 	}
       
   407 
       
   408 GLDEF_C TInt E32Main()
       
   409 	{       
       
   410 	__UHEAP_MARK;
       
   411 	CTrapCleanup* cleanup = CTrapCleanup::New();
       
   412 	TRAPD(ret, DoMainL());
       
   413 	tests(ret==KErrNone);
       
   414     tests.Getch();
       
   415 	tests.Close();
       
   416 	delete cleanup;      
       
   417 	__UHEAP_MARKEND;
       
   418 	return(KErrNone);
       
   419 	}
       
   420 
       
   421 EXPORT_C TInt WinsMain()
       
   422 	{
       
   423 #if defined(__WINS__)
       
   424 	E32Main();
       
   425 #endif
       
   426 	return KErrNone;
       
   427 	}
       
   428 
       
   429 
       
   430