phonebookengines/contactsmodel/tsrc/t_cnt_backup.h
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/t_cnt_backup.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,307 @@
+// 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:
+//
+
+#include <e32property.h>
+#include <app-services/private/cbackuprestorenotification.h>
+
+//
+// Forward declarations.
+//
+class CContactsClient;
+class MBackupRestoreObserver;
+class CBackupHelper;
+
+
+//
+// MBackupRestoreObserver.
+//
+class MBackupRestoreObserver
+	{
+public:
+	virtual void ContactsBackupRestoreObserver(CContactsClient& aContactClient, const TBool aRestore, const TBool aStart) = 0;
+	};
+
+
+/*
+ CContactsClient
+ This class models, through its public methods, various Contacts client behaviours.
+ It is derived from CActive so that it can safely respond to Backup & Restore notifications
+ - e.g. closing a database in the notification handler causes a panic. (The active object
+ delivering the notification is deleted whilst it is running, and cannot recover.)
+ Instead the active object must be set to run - and the RunL method can safely close the database.
+ If called, the RunL also closes any contact or view that is open.
+ */
+class CContactsClient : public CActive, public MContactDbObserver, public MContactUiCompactObserver, public MIdleFindObserver
+	{
+public:
+	static CContactsClient* NewLC(const TDesC& aDatabaseName, MBackupRestoreObserver* aObserver, MContactViewObserver& aContactViewObserver, TBool aCloseForBackup);
+	~CContactsClient();
+
+	void StartActiveClose();
+	void CloseDatabase();
+	void OpenDatabaseL();
+	
+	const TDesC& DatabaseName();
+	TBool IsOpen();
+
+	void OpenLocalViewL();
+	void OpenRemoteViewL();
+	void CloseViews();
+
+	void OpenContactL(TContactItemId aContactId);
+	void CommitContactL(TContactItemId aContactId);
+	void CloseContacts();
+	void ReadContactL();
+	void FindPhoneNumberL();
+
+	void StartAsyncFindL();
+	void StartActiveCompactL();
+	void StartActiveRecoverL();
+	void StartIdleSorterL(TRequestStatus& aStatus);
+
+	void CompleteAsyncFindL();
+	void CompleteActiveCompactL();
+	void CompleteActiveRecoverL();
+
+
+	// Speed Dial Check, Remove and Set - for testing cntmodel.ini is Backed up and Restored correctly
+	void CheckSpeedDialSetL(TContactItemId aContactId, TInt aSpeedDialPosition);
+	void RemoveSpeedDialL(TContactItemId aContactId, TInt aSpeedDialPosition);
+	void SetSpeedDialL(TContactItemId aContactId, TInt aSpeedDialPosition);
+	
+	TBool IsCloseForBackup();
+
+	// class MContactUiCompactObserver
+public:
+	void Step(TInt aStep);
+	void HandleError(TInt aError);
+
+	// class MIdleFindObserver
+	void IdleFindCallback();
+
+private:
+	CContactsClient(MBackupRestoreObserver* aObserver, MContactViewObserver& aContactViewObserver, TBool aCloseForBackup);
+	void ConstructL(const TDesC& aDatabaseName);
+
+	// from MContactDbObserver - observed for Backup & Restore events
+	void HandleDatabaseEventL(TContactDbObserverEvent aEvent);
+
+	// CActive
+	void RunL();
+	void DoCancel();
+
+private:
+	MBackupRestoreObserver* iObserver;
+	MContactViewObserver& iContactViewObserver;
+	HBufC* iDbName;
+	CContactDatabase* iDb;
+	CContactChangeNotifier* iNotifier;
+	TBool iDatabaseIsOpen;
+	TBool iCloseForBackup;
+	RPointerArray<CContactItem> iOpenContacts;
+	TBool iRestore;
+	CContactLocalView* iLocalView;
+	CContactRemoteView* iRemoteView;
+	// resources for Async CContactDatabase operations
+	CIdleFinder* iIdleFinder;
+	CContactActiveRecover* iActiveRecover;
+	CContactActiveCompress* iActiveCompress;
+	CContactItemFieldDef* iItemFieldDef;
+	};
+
+
+/*
+ CBackupTestConductor.
+ This class controls the whole unit test framework:
+ + Creating and populating test databases
+ + Checking backup registration policy file is present on drize Z:
+ + Checking Secure Backup has processed the policy file as intended
+ + exercising through CBackupTestFramework a variety of Backup & Restore with a variety of client behaviours
+ + Cleaning up after the test
+ */
+class CBackupTestConductor: public CBase
+	{
+public:
+	static CBackupTestConductor* NewL();
+	void RunTestsL();
+	~CBackupTestConductor();
+	static void DeleteDatabases();
+
+private:
+	CBackupTestConductor();
+	void ConstructL();
+
+	// database creation / checking / cleanup
+	void CreateDatabasesL();
+	void PopulateDatabaseL(CContactDatabase* aDb,const TDesC& aFileName);
+	void ShowFieldsL(CContactDatabase* aDb);
+
+	// check that the database backup policy is on the C: drive
+	TBool CheckXMLBackupRegistrationExistsL();
+
+private:
+	// first and last contact ids added to each database
+	TContactItemId iFirstContactId;
+	TContactItemId iLastContactId;
+	};
+
+
+
+
+class CBackupTestFramework : public CTimer, public MBackupRestoreObserver, public MContactViewObserver
+	{
+public:
+	static CBackupTestFramework* NewLC();
+
+	void DoBackupRestoreTestsL();
+	void BackupRestoreTestL();
+
+
+	enum TClientActivity
+		{
+		// activities that do not block backup / restore
+		EIdleClient,
+        ERestoreCorruptDbTest,
+		EOpenLocalView, 
+		EOpenRemoteView,
+		// activities that can block backup / restore
+		EOpenOneContactForEdit,
+		EOpenTwoContactsForEdit,
+		EContactsAsyncFind,
+		EContactsActiveCompact,
+		EContactsActiveRecover,
+		EContactsIdleSorter,
+		EContactsIniFileTest,
+		EOpenRemoteViewOneContactForEdit,
+		EMultipleOpenOneContactForEdit
+		};
+		
+		enum TClientCloseForBackup
+		{
+		EAllOpenForBackup,
+		EAllCloseForBackup,
+		EHalfCloseForBackup
+		};	
+
+	struct TBackupRestoreTestCase
+		{
+		const TText*	iTestTitle;
+		TInt			iNumDatabases;
+		TInt			iClientsPerDatabase;
+		TClientActivity	iActivity;
+		TBool			iExpectedBackupSuccess;
+		TClientCloseForBackup iCloseForBackup;
+		conn::TBackupIncType  iBackupIncType;
+		};
+
+
+	CContactsClient* NewDatabaseClientL(const TDesC& aDatabaseName, TBool aCloseForBackup);
+
+	// These methods implement the Use Case under test
+	TBool PrepareBackupClientTestCaseL(TRequestStatus& aStatus);
+	TBool PrepareTestCaseL(const TDesC& aDatabaseName, TRequestStatus& aStatus);
+
+	void PreBackupNotificationActionsL();
+	void PostBackupActionsL();
+	void PreRestoreNotificationActionsL();
+	void PostRestoreActionsL();
+	
+	void ReconnectBackupClientTestCaseL();
+	void CheckConnectionAfterBackupForTestCaseL();
+
+	
+	~CBackupTestFramework();
+
+	// from MBackupRestoreObserver
+	void ContactsBackupRestoreObserver(CContactsClient& aContactClient, const TBool aRestore, const TBool aStart);
+
+	// from MContactViewObserver - observed for View Unavailable and Ready events
+	void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+	
+private:
+	// all steps in the Backup and Restore test cycle
+	enum TBackupRestoreSteps
+		{
+		// Backup test steps
+		EPreBackup,
+		ENotifyBackupStart,
+		ECheckBackupStartNotifications,
+		EDoBackup,
+		ENotifyBackupEnd,
+		ECheckBackupEndNotifications,
+		EPostBackup,
+		EFinishedBackup,
+		// Restore test steps
+		EPreRestore,
+		ENotifyRestoreStart,
+		ECheckRestoreStartNotifications,
+		EDoRestore,
+		ENotifyRestoreEnd,
+		ECheckRestoreEndNotifications,
+		EPostRestore,
+		EFinishedRestore,
+		};
+private:
+	CBackupTestFramework();
+	void ConstructL();
+
+	// From CActive.
+	void RunL();
+	TInt RunError(TInt aError);
+
+
+private:
+	const CBackupTestFramework::TBackupRestoreTestCase* iTestCase;
+	TInt iTestError;
+	TInt iClientNotifications;
+	TInt iViewReadyCount;
+	TInt iViewUnavailableCount;
+	TBackupRestoreSteps iTestStep;
+	CBackupHelper* iBackupHelper;
+    RPIMTestServer iTestServ;
+
+	RPointerArray<CContactsClient>	iContactClientSession;
+	};
+
+
+class CBackupHelper : CBase
+	{
+public:
+	static CBackupHelper* NewL(RPIMTestServer& aTestServer);
+	
+	~CBackupHelper();
+
+	void StartBackupL(conn::TBURPartType aBURPartType, conn::TBackupIncType aBackupIncType);
+	void EndBackupL();
+
+	void StartRestoreL();
+	void EndRestoreL();
+
+	TBool SimulateIniBackup();
+	TBool SimulateDbBackup();
+	TBool SimulateIniRestore();
+	TBool SimulateDbRestore();
+    TBool SimulateDamagedDbRestore();
+
+private:
+	CBackupHelper(RPIMTestServer& aTestServer);
+	void ConstructL();
+
+private:
+	TDriveList iDriveList;
+	conn::CSBEClient* iBackupClient;
+    RPIMTestServer& iTestServ;
+	};
+