phonebookengines_old/contactsmodel/tsrc/cntmodel2/T_DBTransactionTest.h
branchRCL_3
changeset 19 5b6f26637ad3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/cntmodel2/T_DBTransactionTest.h	Tue Aug 31 15:05:21 2010 +0300
@@ -0,0 +1,250 @@
+// Copyright (c) 2005-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_DB_TRANSACTION_TEST__
+#define __T_DB_TRANSACTION_TEST__
+
+#include <cntdb.h>
+#include "NbCntTestLib.h"
+#include <e32test.h>
+
+namespace nsPlTransMgr 
+{
+	const TInt KOnce 	   = 1;
+	_LIT(KFilename, "C:TransMgr.cdb");
+	_LIT(KNumber,  "123456789");
+	_LIT(KName,    "NAME");
+	_LIT(KEmail,   "name@email.com");
+	_LIT(KHomeAdd, "Home address");
+}
+
+enum TTestTransactionCodes
+	{
+	ECreateAndCommitTest,
+	ERollbackAndRecoverTest,
+	EDeleteAndCommitTest,
+	EUpdateAndCommitTest,
+	};
+
+enum TTestCodes
+	{
+	ETransactionTest,
+	ETimeOutTest,
+	ENonTimeOutTest,
+	EAsyncOpenTest
+	};
+
+const TTimeIntervalMicroSeconds32 KOneHalfSecondTimeOut =   500000;
+const TTimeIntervalMicroSeconds32 KSixtySecondsTimeOut  = 60000000;
+
+class CConcurrentTester;
+class CConcurrentController;
+// Transaction Tests
+class CTransactionThreadTest;
+// Request Timeout test classes
+class CTransTimeOutThread;
+class CReqTimeOutThread;
+
+
+// Responsible for signalling the controller.
+// It is created by the controller, passed into the Tester.
+// The tester contains the response, and destroys it.
+// The response is "completed" by the ThreadTest.
+class CEventResponse : CActive
+	{
+public:	
+	static CEventResponse* NewL(CConcurrentController& aController);
+	~CEventResponse();
+	void CompleteRequest(TInt aError);
+	TRequestStatus& RequestStatus();
+
+private:
+	TInt RunError(TInt aError);
+	void RunL();
+	void DoCancel();
+	CEventResponse (CConcurrentController& aController);
+
+private:
+	CConcurrentController& iController;
+	
+	};
+	
+
+
+class CConcurrentController : CBase
+	{
+public:
+	~CConcurrentController();
+	static CConcurrentController* NewLC();
+	void  StartTestL(TInt aNoOfTesters);
+	void  PublishError(TInt aError);
+
+private:
+	void CreateTestersL		  (TInt aNoOfTesters);
+	void StartTransactionTestL(TInt aNoOfTesters);
+	void StartTimeOutTestL	  (TInt aNoOfTesters);
+	void StartAsyncOpenTestL  (TInt aNoOfTesters);
+	void OpenNamedDatabaseTestL();
+		 CConcurrentController();
+	void ConstructL();
+
+	TBool Completed();
+private:
+	TInt 						   	 iTesterIndex;
+	RPointerArray<CConcurrentTester> iStore;
+	};
+
+
+
+class CConcurrentTester : CBase
+	{
+public:
+	~CConcurrentTester();
+	static CConcurrentTester* NewL(CEventResponse* aResponse, const TDesC& aThreadName);
+	static TInt ThreadFunction(TAny* aResponse);
+	// Create a new worker CTransactionThreadTest - called within ThreadFunction.
+	void RunTestThreadL(TInt iTestCode = ETransactionTest);
+	TBool IsCompleted();
+	
+private:
+	inline CConcurrentTester(CEventResponse* aResponse, const TDesC& aThreadName) : 
+							iResponse(aResponse), 
+							iThreadName(aThreadName), 
+							iTestCode(ETransactionTest) {}
+	void RunTestL();
+	
+private:
+	RThread 				iThread;
+	CEventResponse* 		iResponse;
+	TBuf<256>				iThreadName;
+	TInt 					iTestCode;
+	};
+
+
+// CTransactionThreadTest is run in a seperate thread.
+// It performs syncronous tests on CContactDatabase.
+// It is created and executed in a new worker 
+// thread. 
+
+class CTransactionThreadTest : CBase
+	{
+public:
+	~CTransactionThreadTest();
+	static CTransactionThreadTest* NewLC();
+	void RunTestL();
+
+private:
+	void ConstructL();
+	inline CTransactionThreadTest(){}
+	// Tests
+	void CreateAndCommitTestL();
+	void RollbackAndRecoverTestL();
+	void DeleteAndCommitTestL();
+	void UpdateAndCommitTestL();
+	// Test helper methods
+	TBool IsContactInDbL(TInt aCntID);
+	TInt AddContactL();
+	void DeleteContactL(TInt aCntID); 
+	void UpdateContactL(TInt aCntID);
+	TInt AddAndCommitContactL();
+	const CContactTemplate& GetSysTemplateL();
+	TBool CheckChangedFieldL(TInt aCntID);	
+	void TimeOutTestL();
+	
+
+private:
+	CContactTemplate*		iGoldenTemplate;
+	CContactItemViewDef* 	iMatchAll;
+	CContactDatabase* 		iDB;
+	CCntItemBuilder*		iCntItemBldr;
+	RTest*					iTest;
+	};
+
+
+// Request Timeout test classes
+class CTransTimeOutThread: public CBase
+	{
+public:	
+	static CTransTimeOutThread* NewLC();
+	~CTransTimeOutThread();
+	void RunTestL();
+	
+private:
+	void ConstructL();
+	
+private:
+	RTest*					iTest;
+	CContactDatabase* 		iDB;
+
+	};
+	
+class CReqTimeOutThread: public CBase
+	{
+public:	
+	static CReqTimeOutThread* NewLC();
+	~CReqTimeOutThread();
+	void RunTestL();
+	
+private:
+	void ConstructL();
+	void AddContactL();
+	const CContactTemplate&  GetSysTemplateL();
+	
+private: // member variables
+	CContactTemplate*		iGoldenTemplate;
+	CContactItemViewDef* 	iMatchAll;
+	CContactDatabase* 		iDB;
+	CCntItemBuilder*		iCntItemBldr;
+	RTest*					iTest;
+	};
+	
+
+
+
+
+class CDBTransTest : public CBase
+	{
+public:	
+	static CDBTransTest* NewLC();
+	~CDBTransTest();
+	void RunTestsL();
+	
+private:
+	void ConstructL();
+	void CreateAndCommitTestL();
+	void RollbackAndRecoverTestL();
+	void OutOfMemoryAddTestL();
+	void OutOfMemoryDeleteTestL();
+	void OutOfMemoryUpdateTestL();	
+	TBool IsContactInDbL(TInt aCntID);
+	TInt AddContactL();
+	void DeleteContactL(TInt aCntID); 
+	void UpdateContactL(TInt aCntID);
+	TInt AddAndCommitContactL();
+	void UpdateAndCommitTestL();
+	TBool CheckChangedFieldL(TInt aCntID);
+	void DeleteAndCommitTestL();
+	const CContactTemplate&  GetSysTemplateL();
+	
+private: // member variables
+	CContactTemplate*		iGoldenTemplate;
+	CContactItemViewDef* 	iMatchAll;
+	CContactDatabase* 		iDB;
+	CCntItemBuilder*		iCntItemBldr;
+	};
+	
+	
+#endif //__T_DB_TRANSACTION_TEST__