messagingfw/scheduledsendmtm/test/unit/src/t_schsend1.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/scheduledsendmtm/test/unit/src/t_schsend1.cpp	Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,287 @@
+// Copyright (c) 1999-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 "t_schsend1.h"
+#include <msvstd.h>
+#include <msvids.h>
+#include <msvuids.h>
+#include "pigeonservermtm.h"
+
+CTrapCleanup* theCleanup;
+
+void doMainL(RTest& aTest)
+	{
+	CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+	CleanupStack::PushL(scheduler);
+	CActiveScheduler::Install( scheduler );
+
+	CSchSendTest* schSendTest = CSchSendTest::NewL(aTest);
+	CleanupStack::PushL(schSendTest);
+
+	schSendTest->StartL();
+
+	CleanupStack::PopAndDestroy(2); //schSendTest, scheduler
+
+	aTest.Printf(_L("\nWaiting 5 seconds before closing...\n"));
+	User::After(5000000);
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	RTest test(_L("Scheduled Sending Test Harness"));
+	__UHEAP_MARK;
+	test.Title();
+	test.Start(_L("Scheduled Sending Test Harness"));
+	theCleanup = CTrapCleanup::New();
+	test(theCleanup !=NULL);
+	TRAPD(error,doMainL(test));
+	test(error==KErrNone);
+	delete theCleanup;
+	test.Printf(_L("Completed with return code %d"),error);
+	test.End();
+	test.Close();
+	__UHEAP_MARKEND;
+	return KErrNone;
+	}
+
+CSchSendTest* CSchSendTest::NewL(RTest& aTest)
+	{
+	CSchSendTest* self = new (ELeave) CSchSendTest(aTest);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(); //self
+	return self;
+	}
+
+CSchSendTest::CSchSendTest(RTest& aTest)
+: CMsvTestUtils(aTest)
+	{
+	}
+
+void CSchSendTest::InstallMtmGroupsL()
+	{
+	}
+
+void CSchSendTest::CreateServerMtmRegsL()
+	{
+//CreateServerMtmRegL(KPigeonMtmUid, _L("Pig"), KUidMsvMtmServerDLL, KUidMsvMtmClientDLL, TMsvTestDllInfo(KUidMsvMtmUiDLL,2), TMsvTestDllInfo(KUidMsvMtmUiDLL,1), KPigeonMtmUid, KDataComponentFileName);
+	}
+
+void CSchSendTest::ConstructL()
+	{
+	CTestUtils::ConstructL();
+	CreateAllTestDirectories();
+	GoClientSideL();
+
+	InstallMtmGroupL(_L("c:\\system\\mtm\\pigmtmu.dat"));
+
+	iSelection = new(ELeave) CMsvEntrySelection;
+	iSchTestActive = CScheduleTestActive::NewL(*this);
+	}
+
+void CSchSendTest::ShowMenuL()
+	{
+	RunAutoL();
+	}
+
+CSchSendTest::~CSchSendTest()
+	{
+	delete iSchTestActive;
+	delete iSelection;
+	}
+
+void CSchSendTest::Panic(TInt aPanic)
+	{
+	User::Panic(_L("SchSend Test"), aPanic);
+	}
+
+void CSchSendTest::StartL()
+	{
+	TRAPD(err, RunAutoL());
+
+	if (err)
+		{
+		if (iCurrentTest)
+			{
+			TestFinish(iCurrentTest, err);
+			}
+
+		TestHarnessFailed(err);
+		}
+	else
+		{
+		TestHarnessCompleted();
+		}
+	}
+
+void CSchSendTest::RunAutoL()
+	{
+	TestSchedulingMessageL();
+	}
+
+TMsvEntry CSchSendTest::CreateMessageLC(TMsvId aDestFolder, TTime aSendTime, TBool aOffPeak)
+	{
+	SetEntryL(aDestFolder);
+	TMsvEntry entry;
+	entry.iType = KUidMsvMessageEntry;
+	entry.iMtm = KPigeonMtmUid;
+	entry.iServiceId = KMsvLocalServiceIndexEntryId;
+	entry.iDate = aSendTime;
+	entry.SetOffPeak(aOffPeak);
+	CreateEntryL(entry);
+	iMsvSession->CleanupEntryPushL(entry.Id());
+	SetEntryL(entry.Id());
+	return entry;
+	}
+
+void CSchSendTest::TestSchedulingMessageL()
+	{
+	TTime now;
+	now.HomeTime();
+	TMsvEntry entry = CreateMessageLC(KMsvGlobalOutBoxIndexEntryId, now);
+
+	iSelection->Reset();
+	iSelection->AppendL(entry.Id());
+
+	iSchTestActive->TransferCommandSyncL(CPigeonServerMtm::EScheduleAllL, *iSelection);
+
+	CleanupStack::PopAndDestroy(); //entry
+	}
+
+CScheduleTestActive::CScheduleTestActive(CMsvTestUtils& aTest)
+: CActive(EPriorityStandard), iTest(aTest)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CScheduleTestActive* CScheduleTestActive::NewL(CMsvTestUtils& aTest)
+	{
+	CScheduleTestActive* self = new (ELeave) CScheduleTestActive(aTest);
+	CleanupStack::PushL(self);
+	self->iSession = CMsvSession::OpenSyncL(*self);
+	CleanupStack::Pop(); //self
+	return self;
+	}
+
+CScheduleTestActive::~CScheduleTestActive()
+	{
+	Cancel();
+	delete iSelection;
+	delete iSession;
+	}
+
+//Set aStopAtRunL to true to stop the active scheduler. 
+//False will make us wait for someone else to stop it
+void CScheduleTestActive::TransferCommandSyncL(CPigeonServerMtm::TPigOperation aCommand, const CMsvEntrySelection& aSelection, TBool aStopAtRunL)
+	{
+	iTest.Printf(_L("TransferCommandSyncL Command %d Count %d StopAtRunL %d\n"), aCommand, aSelection.Count(), aStopAtRunL);
+
+	if (IsActive())
+		User::Leave(KErrInUse);
+
+	delete iSelection;
+	iSelection = NULL;
+	iSelection = aSelection.CopyL();
+	iCommand = aCommand;
+	iStopAtRunL = aStopAtRunL;
+	iStatus = KRequestPending;
+	SetActive();
+
+	CMsvOperation*  opert = iSession->TransferCommandL (*iSelection, 
+				aCommand,
+				_L8("aaaa"), 
+				iStatus);
+
+	CleanupStack::PushL(opert);
+	CActiveScheduler::Start(); // will not return from this until the command is transferred
+
+	if(iStatus.Int()!=KErrNone)
+		User::Leave(iStatus.Int());
+
+	CleanupStack::PopAndDestroy(); //opert
+	}
+
+void CScheduleTestActive::RunL()
+	{
+	iTest.Printf(_L("CScheduleTestActive::RunL() iStatus %d\n"), iStatus.Int());
+
+	if(iStopAtRunL) 
+		{
+		CActiveScheduler::Stop();
+		return;
+		}
+
+	switch (iCommand)
+		{
+		case CPigeonServerMtm::EScheduleAllL:
+		case CPigeonServerMtm::EReScheduleAllL:
+			{		
+			for(int i = 0; i < iSelection->Count(); i++)
+				{
+				CMsvEntry* entry = iSession->GetEntryL(iSelection->At(i));
+				CleanupStack::PushL(entry);
+				TInt state = entry->Entry().SendingState();
+				switch(state)
+					{
+					case KMsvSendStateScheduled:
+					case KMsvSendStateResend:
+						break;
+					default: // The message failed
+						CActiveScheduler::Stop();
+						break;
+					}
+				CleanupStack::PopAndDestroy(); //entry
+				}
+		
+			break;
+			}
+		default:
+			CActiveScheduler::Stop(); //Added by AA 9/6/2000. Is this correct?
+			break;
+		}
+	}
+
+void CScheduleTestActive::HandleSessionEventL(TMsvSessionEvent eventType, TAny* p1, TAny*, TAny*)
+	{
+	if (iStopAtRunL) return;
+	if (eventType != EMsvEntriesCreated) return;
+
+	CMsvEntrySelection* entries = STATIC_CAST(CMsvEntrySelection*, p1);
+	if(entries->Count() == 0) 
+		User::Panic(_L("sch send test"), 23);
+	CMsvEntry* cEntry = iSession->GetEntryL((*entries)[0]);
+	CleanupStack::PushL(cEntry);
+
+	TMsvEntry entry = cEntry->Entry();
+	
+	if(entry.iDetails == _L("sch send test"))
+		{
+		iTest.Printf(_L("Scheduled message has been sent\n"));
+
+		//We found the right message!
+		CActiveScheduler::Stop();
+
+		//Delete the new message
+		CMsvOperationWait* wait = CMsvOperationWait::NewLC();
+		wait->Start();
+		cEntry->SetEntryL(entry.Parent());
+		CMsvOperation* op = cEntry->DeleteL(entry.Id(), wait->iStatus);
+		CActiveScheduler::Start();
+		delete op;
+		CleanupStack::PopAndDestroy(); //wait
+		}
+
+	CleanupStack::PopAndDestroy(); //cEntry
+	}