--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/wappushfw/pushmtm/test/t_pushmtm.cpp Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,574 @@
+// 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:
+// T_PushEntry.CPP
+//
+//
+
+
+
+#include <e32std.h>
+#include <e32test.h>
+#include <msvstd.h>
+#include <msvids.h>
+#include <msvuids.h>
+#include <pushentry.h>
+#include "WPushUtils.h"
+#include "t_serviceutils.h"
+#include "pushservermtm.h"
+
+
+
+_LIT(KPushMtmDatFile, "z:\\system\\mtm\\WapPushMtmU.dat");
+
+
+//
+// CTestScheduler: INTERFACE //
+//
+class CTestScheduler : public CActiveScheduler
+ {
+public:
+ void Error(TInt anError) const;
+ };
+
+//
+// MACRO DEFINTIONS
+//
+#define __LOG_ALWAYS(a) {_LIT(name,a); WPLPrintf(name);}
+
+#define __LOG_ALWAYS_FORMAT1(a,b) {_LIT(name,a); WPLPrintf(name,b);}
+#define __LOG_ALWAYS_FORMAT2(a,b,c) {_LIT(name,a); WPLPrintf(name,b,c);}
+
+#if defined(_DEBUG)
+#define __LOG_DEBUG(a) __LOG_ALWAYS(a)
+#define __LOG_DEBUG_FORMAT1(a,b) __LOG_ALWAYS_FORMAT1(a,b)
+#define __LOG_DEBUG_FORMAT2(a,b,c) __LOG_ALWAYS_FORMAT2(a,b,c)
+#define __LOG_MSG_DEBUG(a) iLog.WPLPrintf(a)
+#else
+#define __LOG_DEBUG(a)
+#define __LOG_DEBUG_FORMAT1(a,b)
+#define __LOG_DEBUG_FORMAT2(a,b,c)
+#define __LOG_MSG_DEBUG(a)
+#endif
+
+
+//**********************************************************************************
+// Global variables
+
+RTest gTest(_L("t_PushMessage Test Harness"));
+LOCAL_D CTestScheduler* gActivescheduler;
+CMsvSession* gMsvSession;
+CMsvEntry* gMsvEntry;
+
+
+// CWapPushLog* gWLog;
+
+//**********************************************************************************
+
+LOCAL_C void WPLPrintf(TRefByValue<const TDesC> aFmt,...)
+ {
+ VA_LIST list;
+ VA_START(list, aFmt);
+
+ // Print to log file
+ const TInt KWatcherLogBuffer = 256;
+ TBuf<KWatcherLogBuffer> buf;
+ buf.FormatList(aFmt, list);
+
+ _LIT(KPushLogDir, "push");
+ _LIT(KPushEntryLogFile, "PushMtmLogging.txt");
+ // Write to log file
+ RFileLogger::Write(KPushLogDir, KPushEntryLogFile, EFileLoggingModeAppend, buf);
+
+ // Write to console
+ buf.Append('\n');
+ gTest.Printf(buf);
+ }
+
+//
+// CExampleScheduler: Implementation //
+//
+void CTestScheduler::Error(TInt aError) const
+ {
+ CActiveScheduler::Stop();
+ gTest.Printf(_L("\nLeave signalled, reason=%d\n"),aError);
+ }
+// end CExampleScheduler::Error
+
+
+const TInt KMaxEntries = 3;
+
+class CWapMtmTester:public CActive, public MMsvSessionObserver
+ {
+public:
+ enum TTestState{
+ ECreating,
+ EChanging,
+ EDeleting,
+ EComplete
+ };
+ static CWapMtmTester* NewL();
+ ~CWapMtmTester();
+ void Start();
+ TMsvId CreateEntryL();
+ void ChangeEntryL(TMsvId aId);
+ void DeleteEntryL(TMsvId aId);
+ void DisplayEntriesL(const CMsvEntrySelection& selection);
+ void DisplayChildrenL(TMsvId aParent);
+
+ inline void SetServiceId(TMsvId aID){iServiceId = aID;}
+
+
+ void HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) {}
+
+
+private:
+ void ConstructL();
+ CWapMtmTester();
+ void DoCancel();
+ void RunL();
+ TInt RunError(TInt aError);
+ void ReportError(TInt aError);
+ void QueueOperationAsync(TInt aErr);
+
+ TInt iEntryNo;
+ TTestState iState;
+ TMsvId iServiceId;
+ TMsvEntry iEntry;
+ CMsvSession* iMsvSession;
+ CMsvEntry* iMsvEntry;
+ CMsvEntrySelection* iSelection;
+ CMsvOperation* iOperation;
+ };
+
+CWapMtmTester* CWapMtmTester::NewL()
+ {
+ CWapMtmTester* self =new (ELeave) CWapMtmTester;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+CWapMtmTester::~CWapMtmTester()
+ {
+ Cancel();
+ delete iSelection;
+ delete iMsvEntry;
+ delete iMsvSession;
+ }
+
+
+void CWapMtmTester::ConstructL()
+ {
+ iSelection = new (ELeave) CMsvEntrySelection;
+ iMsvSession = CMsvSession::OpenSyncL(*this);
+ iMsvEntry = iMsvSession->GetEntryL(KMsvRootIndexEntryId);
+ iEntryNo = 0;
+ CActiveScheduler::Add(this);
+ }
+
+CWapMtmTester::CWapMtmTester()
+:CActive(EPriorityLow)
+ {
+ }
+
+
+void CWapMtmTester::DoCancel()
+ {
+ }
+
+void CWapMtmTester::RunL()
+ {
+ if (iStatus.Int() != KErrNone)
+ {
+ ReportError(iStatus.Int());
+ }
+ TPckgBuf<TPushMTMProgress> progressBuf;
+ switch (iState)
+ {
+ case ECreating:
+ {
+ TInt error=KErrNone;
+ if (iEntryNo != 0)
+ {
+ progressBuf.Copy(iOperation->ProgressL());
+ error = progressBuf().iError;
+
+ if (error != KErrNone)
+ {
+ ReportError(error);
+ User::Leave(error);
+ }
+ error = iStatus.Int();
+ if (error != KErrNone)
+ {
+ ReportError(error);
+ User::Leave(error);
+ }
+ }
+ else
+ {
+ if (iEntryNo <KMaxEntries)
+ {
+ iEntryNo++;
+ CreateEntryL();
+ }
+ else
+ iState = EComplete;
+ }
+ QueueOperationAsync(error);
+ break;
+ }
+ case EComplete: //finished
+ User::After(10000);
+ Cancel();
+ CActiveScheduler::Stop();
+ break;
+ default:
+ break;
+ }
+
+ }
+
+void CWapMtmTester::Start()
+ {
+ iState =ECreating;
+ QueueOperationAsync(KErrNone);
+ }
+
+
+void CWapMtmTester::QueueOperationAsync(TInt aErr)
+ {
+ TRequestStatus* pS = &iStatus;
+ iStatus = KRequestPending;
+ User::RequestComplete(pS, aErr);
+ SetActive();
+ }
+
+
+TInt CWapMtmTester::RunError(TInt aError)
+ {
+ ReportError(aError);
+ CActiveScheduler::Stop();
+ return KErrNone;
+ }
+
+void CWapMtmTester::ReportError(TInt aError)
+ {
+ __LOG_DEBUG_FORMAT1("Active Scheduler Error %X", aError);
+ }
+
+
+TMsvId CWapMtmTester::CreateEntryL()
+ {
+ iState = ECreating;
+
+
+ switch (iEntryNo)
+ {
+ case 0:
+ {
+ iEntry.iType = KUidMsvMessageEntry;
+ iEntry.iDate.HomeTime();
+ iEntry.iMtm = KUidMtmWapPush;
+ iEntry.iBioType = KUidWapPushMsgSI.iUid;
+ iEntry.iServiceId = iServiceId;
+ iEntry.iDetails.Set( _L("Push MTM Test Msg 1"));
+ iEntry.iDescription.Set(_L("Tests creatings, changing, deleting entries"));
+
+// if (iOperation)
+// {
+// delete iOperation;
+// iOperation = NULL;
+// }
+ }
+ break;
+ case 1:
+ iEntry.iBioType = KUidWapPushMsgSL.iUid;
+ iEntry.iDetails.Set( _L("Push MTM Test Msg 2"));
+ iEntry.iDescription.Set(_L("Second message to store"));
+// iOperation = iMsvEntry->CreateL(iEntry, iStatus);
+ break;
+ case 2:
+ iEntry.iBioType = 0x000111;
+ iEntry.iDetails.Set(_L("Push Mtm Test Msg 3"));
+ iEntry.iDescription.Set(_L("Another message to store"));
+ break;
+ default:
+ break;
+ }
+ iEntryNo++;
+ iMsvEntry->SetEntryL(iServiceId);
+ CMsvOperationWait* wait=CMsvOperationWait::NewLC();
+ CMsvOperation* op= iMsvEntry->CreateL(iEntry, wait->iStatus);
+ CleanupStack::PushL(op);
+ wait->Start();
+ CActiveScheduler::Start();
+ const TInt err=op->iStatus.Int();
+
+ TPckgBuf<TPushMTMProgress> progressBuf;
+ progressBuf.Copy(op->ProgressL());
+ TPushMTMProgress progress = progressBuf();
+ TMsvId newEntry = progress.iMsgId;
+
+ CleanupStack::PopAndDestroy(2); //op, wait
+ User::LeaveIfError(err);
+ User::LeaveIfError(progress.iError);
+
+ __LOG_DEBUG("*************************************************");
+ __LOG_DEBUG_FORMAT1("Created Entry %X", newEntry);
+
+ return newEntry;
+ }
+
+
+void CWapMtmTester::ChangeEntryL(TMsvId aId)
+ {
+ iMsvEntry->SetEntryL(aId);
+ TMsvEntry entry = iMsvEntry->Entry();
+ entry.iBioType = KUidWapPushMsgUnknown.iUid;
+ TBuf<50> temp;
+ temp.Format(_L("Some random words for %X"), aId);
+ entry.iDetails.Set(temp);
+ entry.iDescription.Set(_L("A changed Push Message "));
+
+ CMsvOperationWait* wait=CMsvOperationWait::NewLC();
+ CMsvOperation* op= iMsvEntry->ChangeL(entry, wait->iStatus);
+ CleanupStack::PushL(op);
+ wait->Start();
+ CActiveScheduler::Start();
+ const TInt err=op->iStatus.Int();
+
+ TPckgBuf<TPushMTMProgress> progressBuf;
+ progressBuf.Copy(op->ProgressL());
+
+ User::LeaveIfError(err);
+ User::LeaveIfError(progressBuf().iError);
+
+ __LOG_DEBUG("*************************************************");
+ __LOG_DEBUG_FORMAT1("Changed Entry %X", aId );
+ CleanupStack::PopAndDestroy(2); //op, wait
+
+ }
+
+
+void CWapMtmTester::DeleteEntryL(TMsvId aId)
+ {
+
+ CMsvOperationWait* wait=CMsvOperationWait::NewLC();
+ iMsvEntry->SetEntryL(aId);
+ iMsvEntry->SetEntryL(iMsvEntry->Entry().Parent());
+ CMsvOperation* op= iMsvEntry->DeleteL(aId, wait->iStatus);
+ CleanupStack::PushL(op);
+ wait->Start();
+ CActiveScheduler::Start();
+ const TInt err=op->iStatus.Int();
+
+ TPckgBuf<TPushMTMProgress> progressBuf;
+ progressBuf.Copy(op->ProgressL());
+
+ CleanupStack::PopAndDestroy(2); //op, wait
+ User::LeaveIfError(err);
+ User::LeaveIfError(progressBuf().iError);
+ __LOG_DEBUG("*************************************************");
+ __LOG_DEBUG_FORMAT1("Deleted Entry %X", aId );
+
+ }
+void CWapMtmTester::DisplayEntriesL(const CMsvEntrySelection& selection)
+ {
+ TInt error= KErrNone;
+
+ for (TInt count=0; count< selection.Count(); count++)
+ {
+ __LOG_DEBUG("*************************************************");
+ __LOG_DEBUG_FORMAT1("Details of Entry No %d", (count+1) );
+
+ TRAP(error, iMsvEntry->SetEntryL(selection.At(count)) );
+
+ if (error==KErrNone)
+ {
+ __LOG_DEBUG_FORMAT1("Entry Id %X", iMsvEntry->Entry().Id());
+ __LOG_DEBUG_FORMAT1("Entry Parent %X", iMsvEntry->Entry().Parent());
+ __LOG_DEBUG_FORMAT1("Entry Service Id %X", iMsvEntry->Entry().iServiceId);
+ __LOG_DEBUG_FORMAT1("Entry Type %X", iMsvEntry->Entry().iType);
+ __LOG_DEBUG_FORMAT1("Entry MTM %X", iMsvEntry->Entry().iMtm);
+ __LOG_DEBUG_FORMAT1("Entry iBioType %X", iMsvEntry->Entry().iBioType);
+ __LOG_DEBUG_FORMAT1("Entry Details %S", &(iMsvEntry->Entry().iDetails));
+ __LOG_DEBUG_FORMAT1("Entry Description %S", &(iMsvEntry->Entry().iDescription));
+ }
+ else
+ {
+ if (error ==KErrNotFound)
+ {
+ __LOG_DEBUG_FORMAT1("Message details for entry %X not available - doesn't exist", selection.At(count));
+ }
+ else
+ {
+ __LOG_DEBUG_FORMAT1("Server error %d occured ", error);
+ }
+ }
+ }
+ }
+
+
+
+void CWapMtmTester::DisplayChildrenL(TMsvId aParent)
+ {
+ iMsvEntry->SetEntryL(aParent);
+ CMsvEntrySelection* selection = iMsvEntry->ChildrenL();
+ CleanupStack::PushL(selection);
+
+ if (selection->Count() ==0)
+ {
+ __LOG_DEBUG("*************************************************");
+ __LOG_DEBUG_FORMAT1("No children for entry %d", aParent );
+ return;
+
+ }
+ __LOG_DEBUG("*************************************************");
+ __LOG_DEBUG_FORMAT1("Details for children for entry %X", aParent );
+ for (TInt count = 0; count<selection->Count(); count++)
+ {
+ iMsvEntry->SetEntryL(selection->At(count));
+
+ __LOG_DEBUG_FORMAT1("Details of Entry No %d", (count+1) );
+ __LOG_DEBUG_FORMAT1("Entry Id %d", iMsvEntry->Entry().Id());
+ __LOG_DEBUG_FORMAT1("Entry Parent %X", iMsvEntry->Entry().Parent());
+ __LOG_DEBUG_FORMAT1("Entry Service Id %X", iMsvEntry->Entry().iServiceId);
+ __LOG_DEBUG_FORMAT1("Entry Type %X", iMsvEntry->Entry().iType);
+ __LOG_DEBUG_FORMAT1("Entry MTM %X", iMsvEntry->Entry().iMtm);
+ __LOG_DEBUG_FORMAT1("Entry iBioType %X", iMsvEntry->Entry().iBioType);
+ __LOG_DEBUG_FORMAT1("Entry Details %S", &(iMsvEntry->Entry().iDetails));
+ __LOG_DEBUG_FORMAT1("Entry Description %S", &(iMsvEntry->Entry().iDescription));
+ }
+ CleanupStack::PopAndDestroy();
+ }
+
+
+
+
+LOCAL_C void InitTestUtils()
+ {
+ // Setup test console
+ gTest.Start(_L("CPushEntry classes"));
+ gTest.Printf(_L("@SYMTestCaseID IWS-WAPBROWSER-PUSHMTM-T_PUSHMTM-0001 "));
+
+ gTest.Console()->ClearScreen();
+
+ gActivescheduler = new CTestScheduler;
+ gTest(gActivescheduler!=NULL);
+ CActiveScheduler::Install(gActivescheduler);
+
+
+ // Set up CWatcherLog
+// gWLog = CWapPushLog::NewL(*gTest.Console());
+ }
+
+
+LOCAL_C void CloseTestUtils()
+ {
+// delete gWLog;
+ delete gActivescheduler;
+ gTest.End();
+ gTest.Close();
+ }
+
+LOCAL_C void doMainL()
+ {
+ InitTestUtils();
+ __LOG_DEBUG("Getting Service Id");
+ CMsvEntrySelection* idArray = new (ELeave) CMsvEntrySelection();
+ CleanupStack::PushL(idArray);
+
+ CWapPushTestMsgUtils* myTestUtils = CWapPushTestMsgUtils::NewL();
+ CleanupStack::PushL(myTestUtils);
+ TMsvId pushService;
+
+ // Uncomment this if you want to remove existing service entries
+ myTestUtils->ClearExistingServiceEntriesL(KUidMtmWapPush);
+
+ myTestUtils->PushServiceIdL(KUidMtmWapPush,pushService,idArray);
+ if ((pushService == KMsvNullIndexEntryId) && (idArray->Count() ==0) ) // Found no service
+ {
+ __LOG_DEBUG("*************************************************");
+ __LOG_DEBUG("No Service found - creating new one");
+ pushService = myTestUtils->CreateServiceL();
+ __LOG_DEBUG_FORMAT1("Created New Service Entry Id %X", pushService);
+ }
+ else
+ {
+ __LOG_DEBUG("*************************************************");
+ __LOG_DEBUG_FORMAT1( "Found %d service entries\n", idArray->Count() );
+ for (TInt count=0; count < idArray->Count(); count++)
+ {
+ __LOG_DEBUG_FORMAT2("Entry %d - Service Id %X\n", count, idArray->At(count));
+ }
+ }
+ myTestUtils->InstallMtmGroupL(KPushMtmDatFile);
+ __LOG_DEBUG("*************************************************");
+ __LOG_DEBUG("Installing Mtm Group");
+
+ CleanupStack::PopAndDestroy(); //myTestUtils
+ CleanupStack::PopAndDestroy(); //idArray
+
+ idArray = NULL;
+ idArray = new (ELeave) CMsvEntrySelection(); // Create a new empty array
+ CleanupStack::PushL(idArray);
+
+ TMsvId myEntry;
+ TInt count;
+ CWapMtmTester* myTester=CWapMtmTester::NewL();
+ CleanupStack::PushL(myTester);
+ myTester->SetServiceId(pushService);
+
+ for (count =0; count <3; count++)
+ {
+ myEntry = myTester->CreateEntryL();
+ idArray->AppendL(myEntry);
+ }
+ myTester->DisplayChildrenL(pushService);
+
+ myTester->DisplayEntriesL(*idArray);
+
+ for (count = 0; count < idArray->Count(); count++)
+ myTester->ChangeEntryL(idArray->At(count));
+
+ myTester->DisplayEntriesL(*idArray);
+ myTester->DeleteEntryL(idArray->At(idArray->Count()-1));
+ myTester->DisplayEntriesL(*idArray);
+ myTester->DeleteEntryL(idArray->At(idArray->Count()-2));
+ myTester->DisplayEntriesL(*idArray);
+
+ CleanupStack::PopAndDestroy(2);//myTester
+
+
+ gTest.Printf(_L("Press a key to continue\n"));
+ gTest.Getch();
+ CloseTestUtils();
+ }
+
+
+GLDEF_C TInt E32Main()
+//----------------------------------------------------------------------------------------
+ {
+ __UHEAP_MARK;
+ CTrapCleanup* theCleanup = CTrapCleanup::New();
+
+ TRAPD(ret,doMainL());
+ gTest(ret==KErrNone);
+
+ delete theCleanup;
+ __UHEAP_MARKEND;
+ return(KErrNone);
+ }