messagingfw/scheduledsendmtm/test/unit/inc/t_schedulesend.h
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/scheduledsendmtm/test/unit/inc/t_schedulesend.h	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,518 @@
+// Copyright (c) 2004-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:
+//
+
+#ifndef __T_SCHEDULESEND_H__
+#define __T_SCHEDULESEND_H__
+
+#include <e32base.h>
+#include "msvtestutils.h"
+
+
+class RTest;
+
+class CScheduleSendTestUtils : public CMsvTestUtils
+	{
+public:
+
+	static CScheduleSendTestUtils* NewL(RTest& aTest, TUint aCreationFlags = ETuMinimalClientSide);
+	virtual ~CScheduleSendTestUtils();
+	
+	void DeletePigeonMessagesL(TMsvId aFolder);
+	TMsvId ServiceId();
+	
+	void NotifySaPhoneOnL();
+	void NotifySaPhoneOffL();
+	
+	void NotifySaSimOkL();
+	void NotifySaSimNotPresentL();
+	
+	void NotifySaNetworkAvailableL();
+	void NotifySaNetworkUnAvailableL();
+	
+	void UpdateSysAgentConditionsL();
+	void UpdatePendingConditionsTimeoutL(TTimeIntervalMinutes aTimeout);
+	
+public:	// methods from CMsvTestUtils
+
+	virtual void InstantiateClientMtmsL(){};
+	virtual void InstantiateServerMtmsL(){};
+	virtual void DeleteServicesL();
+	virtual void CreateServicesL();
+	virtual void FindExistingServicesL(){};
+	virtual void InstallMtmGroupsL();
+	virtual void CreateServerMtmRegsL();
+	
+public:	// methods from CTestUtils
+
+	virtual void Panic(TInt aPanic);
+
+private:
+
+	CScheduleSendTestUtils(RTest& aTest);
+	void ConstructL(TUint aCreationFlags);
+	
+	void InstallPigeonMtmGroupL();
+	void CreatePigeonServerMtmRegL();
+	
+private:
+
+	TMsvId				iServiceId;
+	};
+	
+class CTestEngine : public CBase
+	{
+public:
+
+	static CTestEngine* NewL(RTest& aTest);
+	virtual ~CTestEngine();
+	
+	void DoTestsL();
+	
+private:
+
+	CTestEngine();
+	void ConstructL(RTest& aTest);
+	
+private:
+
+	CScheduleSendTestUtils* iTestUtils;
+	
+	};
+	
+class MTestFolderObserverCallback
+	{
+public:
+	virtual void UpdatedMessageL(TMsvId aFolderId, TMsvId aMessage) =0;
+	virtual CMsvEntry* CreateEntryL(TMsvId aFolderId) =0;
+	};		
+
+class CTestFolderObserver : public CBase,
+							public MMsvEntryObserver
+	{
+public:
+
+	static CTestFolderObserver* NewL(MTestFolderObserverCallback& aCallback, TMsvId aFolderId);
+	virtual ~CTestFolderObserver();
+	
+	void StartObserverL();
+	void StopObserver();
+	
+private:	// methods from MMsvEntryObserver
+
+	virtual void HandleEntryEventL(TMsvEntryEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3);
+	
+private:
+
+	CTestFolderObserver(MTestFolderObserverCallback& aCallback, TMsvId aFolderId);
+	void ConstructL();
+
+private:
+	
+	MTestFolderObserverCallback&	iCallback;
+	TMsvId							iFolderId;
+	CMsvEntry*						iEntryForObserver;	
+	};							
+
+	
+/**
+Base class for test cases.
+
+Runs through state machine. Testing is done on sending state, schedule flag and 
+the pending conditions flag. 
+
+NOTE - the pending conditions should be checked only if the message has been
+scheduled for pending conditions. In this test harness, this indicated by the
+error value of the messsage being KErrorActionConditions.
+
+The values are checked after the messages are created - message created done by
+derived test cases. Then after the scheduling - again derived classed do the
+scheduling. The values are then checked after SchSendExe actually runs the schedule
+and then after the pigeon MTM does the send.
+
+NOTE - after the post-scheduling check, the test may may stop - the derived class
+controls this.
+
+Sending state and schedule flag values and whether to check the pending conditions
+flag or not - 
+
+Post creation 	- KMsvSendStateWaiting, false, false
+
+Post scheduling	- test-case dependent, true, false
+
+Pre-sending		- KMsvSendStateWaiting, true, false
+
+Post-sending	- KMsvSendStateSent, true, false
+
+Also, during the post-sending check, the schedule time is compared against the 
+current time. In most cases, the current time should be the same or later than
+the schedule time. In the cases where the message was scheduled for pending 
+conditions and the conditions were met, then the current time should be before 
+the scheduled time. Although for messages scheduled for pending conditions but
+the conditions have not been met, then the current time should be the same or
+later than the schedule time.
+*/	
+class CTestScheduleSendBase : public CActive,
+							  public MTestFolderObserverCallback
+	{
+public:
+
+	virtual ~CTestScheduleSendBase();
+	void Start();
+	
+private:	// methods from CActive
+
+	virtual void RunL();
+	virtual void DoCancel();
+	virtual TInt RunError(TInt aError);
+	
+private:	// methods from MTestFolderObserverCallback
+
+	virtual void UpdatedMessageL(TMsvId aFolderId, TMsvId aMessage);
+	virtual CMsvEntry* CreateEntryL(TMsvId aFolderId);
+
+protected:
+
+	CTestScheduleSendBase(CScheduleSendTestUtils& aTestUtils);
+	void ConstructL();
+
+	void CompleteSelf();
+	void ClearFoldersL();
+	void TestComplete();
+	TMsvId CreateMessageL(TTime& aTime, TInt aError);
+	void TransferCommandL(TInt aCommand);
+	void CheckMessageDetailsL(TMsvId aId, TInt aState, TBool aScheduled, TBool aPendingConditions);
+		
+	CMsvSession& Session();
+	CMsvEntry& MsvEntry();
+	
+protected:
+
+	CScheduleSendTestUtils&	iTestUtils;
+	CMsvEntrySelection*		iSelection;
+	CMsvEntrySelection*		iPendingSent;
+	CMsvOperation*			iOperation;
+	TInt					iMessagesDone;
+	TBool					iConditionsMet;
+
+private:
+
+	const TDesC& GetStateText(TInt aState) const;
+	const TDesC& GetBoolText(TBool aBool) const;
+
+	TBool ConditionsMet() const;
+
+	virtual void UpdateSysAgentConditionsL();
+	virtual void CheckCreatedMessagesL();
+	virtual void CheckScheduledMessagesL();
+	virtual TBool NotifyMessagesScheduledL();
+	
+	virtual void CheckPreSendMessageL(TMsvId aId);
+	virtual void CheckSentMessageL(TMsvId aId);
+
+	virtual TInt PreSendState();	
+	virtual TInt SentState();
+
+	virtual void CreateMessagesL() =0;
+	virtual void ScheduleMessagesL() =0;
+	virtual TInt ScheduledState() =0;
+	virtual const TDesC& TestName() =0;
+
+private:
+
+	enum TScheduleSendTestState
+		{
+		EClearFolders,
+		EUpdateSysAgentConditions,
+		ECreateMessages,
+		ECheckCreatedMessages,
+		EScheduleMessages,
+		ECheckScheduledMessages,
+		EPendingMessagesSent,
+		EDone
+		};			
+	
+private:
+	
+	CTestFolderObserver*	iOutboxObserver;
+	CTestFolderObserver*	iSentFolderObserver;
+	TScheduleSendTestState	iState;
+	
+	};
+	
+/**
+Tests the CMsvScheduleSend::ScheduleL API.
+
+Creates 2 pigeon messages that are both schedule for immediate sending.
+
+Post scheduling sending state values - KMsvSendStateScheduled.
+*/
+class CTestSchedule : public CTestScheduleSendBase
+	{
+public:
+
+	static CTestSchedule* NewL(CScheduleSendTestUtils& aTestUtils);
+	virtual ~CTestSchedule();
+	
+private:	// methods from CTestScheduleSendBase
+	
+	virtual void CreateMessagesL();
+	virtual void ScheduleMessagesL();
+	virtual TInt ScheduledState();
+	virtual const TDesC& TestName();
+
+private:
+	
+	CTestSchedule(CScheduleSendTestUtils& aTestUtils);
+	
+	};
+	
+/**
+Tests the CMsvScheduleSend::ReScheduleL API.
+
+Creates 2 pigeon messages that are both re-schedule for immediate sending.
+
+Post scheduling sending state values - KMsvSendStateResend.
+*/
+class CTestReScheduleTime_1 : public CTestScheduleSendBase
+	{
+public:
+
+	static CTestReScheduleTime_1* NewL(CScheduleSendTestUtils& aTestUtils);
+	virtual ~CTestReScheduleTime_1();
+	
+private:	// methods from CTestScheduleSendBase
+	
+	virtual void CreateMessagesL();
+	virtual void ScheduleMessagesL();
+	virtual TInt ScheduledState();
+	virtual const TDesC& TestName();
+
+private:
+	
+	CTestReScheduleTime_1(CScheduleSendTestUtils& aTestUtils);
+	
+	};
+	
+/**
+Tests the CMsvScheduleSend::ReScheduleL API.
+
+Creates 2 pigeon messages - one is scheduled for immeduate sending and the other
+is scheduled for later sending.
+
+Post scheduling sending state values - KMsvSendStateResend.
+*/
+class CTestReScheduleTime_2 : public CTestScheduleSendBase
+	{
+public:
+
+	static CTestReScheduleTime_2* NewL(CScheduleSendTestUtils& aTestUtils);
+	virtual ~CTestReScheduleTime_2();
+	
+private:	// methods from CTestScheduleSendBase
+	
+	virtual void CreateMessagesL();
+	virtual void ScheduleMessagesL();
+	virtual TInt ScheduledState();
+	virtual const TDesC& TestName();
+
+private:
+	
+	CTestReScheduleTime_2(CScheduleSendTestUtils& aTestUtils);
+	
+	};
+	
+/**
+Tests the CMsvScheduleSend::ReScheduleL API.
+
+Creates 2 pigeon messages that are both re-schedule for pending conditions. No
+timeout value is specified. The conditions are met.
+
+Post scheduling sending state values - KMsvSendStateResend.
+*/
+class CTestRescheduleConditions_1 : public CTestScheduleSendBase
+	{
+public:
+
+	static CTestRescheduleConditions_1* NewL(CScheduleSendTestUtils& aTestUtils);
+	virtual ~CTestRescheduleConditions_1();
+	
+private:	// methods from CTestScheduleSendBase
+	
+	virtual void UpdateSysAgentConditionsL();
+	virtual TBool NotifyMessagesScheduledL();
+	virtual void CreateMessagesL();
+	virtual void ScheduleMessagesL();
+	virtual TInt ScheduledState();
+	virtual const TDesC& TestName();
+	
+private:
+	
+	CTestRescheduleConditions_1(CScheduleSendTestUtils& aTestUtils);
+
+	};
+	
+/**
+Tests the CMsvScheduleSend::ReScheduleL API.
+
+Creates 2 pigeon messages that are both re-schedule for pending conditions. A
+short timeout value is specified. The conditions are met.
+
+Post scheduling sending state values - KMsvSendStateResend.
+*/
+class CTestRescheduleConditions_2 : public CTestScheduleSendBase
+	{
+public:
+
+	static CTestRescheduleConditions_2* NewL(CScheduleSendTestUtils& aTestUtils);
+	virtual ~CTestRescheduleConditions_2();
+	
+private:	// methods from CTestScheduleSendBase
+	
+	virtual void UpdateSysAgentConditionsL();
+	virtual TBool NotifyMessagesScheduledL();
+	virtual void CreateMessagesL();
+	virtual void ScheduleMessagesL();
+	virtual TInt ScheduledState();
+	virtual const TDesC& TestName();
+	
+private:
+	
+	CTestRescheduleConditions_2(CScheduleSendTestUtils& aTestUtils);
+
+	};
+	
+/**
+Tests the CMsvScheduleSend::ReScheduleL API.
+
+Creates 2 pigeon messages that are both re-schedule for pending conditions. A
+short timeout value is specified. Only one conditions is met - therefore timeout
+should occur.
+
+Post scheduling sending state values - KMsvSendStateResend.
+*/
+class CTestRescheduleConditions_3 : public CTestScheduleSendBase
+	{
+public:
+
+	static CTestRescheduleConditions_3* NewL(CScheduleSendTestUtils& aTestUtils);
+	virtual ~CTestRescheduleConditions_3();
+	
+private:	// methods from CTestScheduleSendBase
+	
+	virtual void UpdateSysAgentConditionsL();
+	virtual TBool NotifyMessagesScheduledL();
+	virtual void CreateMessagesL();
+	virtual void ScheduleMessagesL();
+	virtual TInt ScheduledState();
+	virtual const TDesC& TestName();
+	
+private:
+	
+	CTestRescheduleConditions_3(CScheduleSendTestUtils& aTestUtils);
+
+	};
+
+/**
+Tests the CMsvScheduleSend::ReScheduleL API.
+
+Creates 2 pigeon messages - one is scheduled for immeduate sending and the other
+is scheduled for pending conditions.  A short timeout value is specified. The 
+conditions are met.
+
+Post scheduling sending state values - KMsvSendStateResend.
+*/
+class CTestRescheduleMixed_1 : public CTestScheduleSendBase
+	{
+public:
+
+	static CTestRescheduleMixed_1* NewL(CScheduleSendTestUtils& aTestUtils);
+	virtual ~CTestRescheduleMixed_1();
+	
+private:	// methods from CTestScheduleSendBase
+	
+	virtual void UpdateSysAgentConditionsL();
+	virtual TBool NotifyMessagesScheduledL();
+	virtual void CreateMessagesL();
+	virtual void ScheduleMessagesL();
+	virtual TInt ScheduledState();
+	virtual const TDesC& TestName();
+	
+private:
+	
+	CTestRescheduleMixed_1(CScheduleSendTestUtils& aTestUtils);
+
+	};
+	
+/**
+Tests the CMsvScheduleSend::ReScheduleL API.
+
+Creates 2 pigeon messages that are both re-schedule to fail. 
+
+Post scheduling sending state values - KMsvSendStateWaiting. The schedule send
+component does not alter messages that are not re-scheduled.
+*/
+class CTestFailed_1 : public CTestScheduleSendBase
+	{
+public:
+
+	static CTestFailed_1* NewL(CScheduleSendTestUtils& aTestUtils);
+	virtual ~CTestFailed_1();
+	
+private:	// methods from CTestScheduleSendBase
+	
+	virtual TBool NotifyMessagesScheduledL();
+	virtual void CreateMessagesL();
+	virtual void ScheduleMessagesL();
+	virtual TInt ScheduledState();
+	virtual const TDesC& TestName();
+	
+private:
+	
+	CTestFailed_1(CScheduleSendTestUtils& aTestUtils);
+	
+	};
+
+/**
+Tests the CMsvScheduleSend::ReScheduleL API.
+
+Creates 2 pigeon messages that are both re-schedule to fail, but on a second re-schedule. 
+
+Post scheduling sending state values	- KMsvSendStateResend.
+Sent sending state value			 	- KMsvSendStateWaiting. The schedule send
+component does not alter messages that are not re-scheduled.
+*/
+class CTestFailed_2 : public CTestScheduleSendBase
+	{
+public:
+
+	static CTestFailed_2* NewL(CScheduleSendTestUtils& aTestUtils);
+	virtual ~CTestFailed_2();
+	
+private:	// methods from CTestScheduleSendBase
+	
+	virtual TBool NotifyMessagesScheduledL();
+	virtual void CreateMessagesL();
+	virtual void ScheduleMessagesL();
+	virtual TInt ScheduledState();
+	virtual TInt SentState();
+	virtual const TDesC& TestName();
+	
+private:
+	
+	CTestFailed_2(CScheduleSendTestUtils& aTestUtils);
+	
+	};
+
+#endif	// __T_SCHEDULESEND_H__