lowlevellibsandfws/apputils/tsrc/T_backupSrv.h
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lowlevellibsandfws/apputils/tsrc/T_backupSrv.h	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,150 @@
+// Copyright (c) 1997-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:
+// class CBackupFileObserver
+// 
+//
+
+class CBackupFileObserver : public CActive, public MBackupObserver
+	{
+public:
+	enum TFileLock
+		{ELocked,EReadOnly,ENoAccess};
+public:
+	static CBackupFileObserver* NewL(TInt aFileObserverNumber);
+	~CBackupFileObserver();
+	void AddFileL(TInt aFileNumber);
+public:
+	TInt GetFileLocksChanged();
+	void ZeroFileLocksChanged();
+	void SetDelay(TBool aDelay);
+private:
+	CBackupFileObserver();
+	void ConstructL(TInt aFileObserverNumber);
+private: // from MBackupObserver
+	void ChangeFileLockL(const TDesC& aFileName,TFileLockFlags aFlags);
+public: // From CActive
+	void RunL();
+	void DoCancel();
+public:
+	void Kill(RThread* aThread);
+private:
+	// File observer session into the server
+	CBaBackupSessionWrapper* iBackupSession;
+	// Instance number for this obsever
+	TInt iFileObserverNumber;
+	// Number of file lock notifications received this backup
+	TInt iFileLocksChanged;
+	// Whether we're testing with an introduced delay or not
+	TBool iDelay;
+	// Local RTest for this class - needed because global RTest fails in multi-threaded environment
+	RTest* iLocalRTest;
+	// Name of the file we're observing
+	TFileName iFileName;
+	// State of the file we're observing
+	TFileLock iFileLockState;
+	};
+
+//
+//	class CBackupOperationObserver
+//
+class CBackupOperationObserver : public CActive, public MBackupOperationObserver
+	{
+public:
+	static CBackupOperationObserver* NewL(TInt aObserverNumber);
+	~CBackupOperationObserver();
+public: // From CActive
+	void RunL();
+	void DoCancel();
+public:
+	void Kill(RThread* aThread);
+private:
+	CBackupOperationObserver();
+	void ConstructL(TInt aObserverNumber);
+
+	// from MBackupOperationObserver
+	virtual void HandleBackupOperationEventL(const TBackupOperationAttributes& aBackupOperationAttributes);
+private: 
+	// Every backup observer has their own session
+	CBaBackupSessionWrapper* iBackupSession;
+	// Every backup observer has their own identifying number
+	TInt iObserverNumber;
+	// Local RTest for this class - needed because global RTest fails in multi-threaded environment
+	RTest* iLocalRTest;
+	};
+
+//
+//	class CBackupTestsStateMachine
+//
+
+class CBackupTestsStateMachine : public CActive
+	{
+public:
+	static CBackupTestsStateMachine* NewL();
+	CBackupTestsStateMachine();
+	~CBackupTestsStateMachine();
+public: // From CActive
+	void RunL();
+	void RunError();
+	void DoCancel();
+public:
+	void Start();
+	void End();
+	void Complete();
+	void StartBackupL();
+	void EndBackup(TInt aFileLockChangesExpected, TBool oneTimeOnly);
+	void SignalEndBackupL();
+	void SingleFileLockTestsL();
+public:
+	void CreateObserversThreadsL();
+	static TInt BackupObserversThreadStartL(TAny* aPtr);
+	static TInt FileObserversThreadStartL(TAny* aPtr);
+	void CreateBackupObserverInstanceL();
+	void CreateFileObserverInstanceL();
+public:
+	enum StateMachineState
+		{EStateMachineStart,
+		 ESingleFileTests,		   ENoBackupSessionSingleFileTests,
+		 ECloseAllNormalReadOnly,  ECloseAllNormalReadOnlyReturned, 
+		 ECloseAllNormalNoAccess,  ECloseAllNormalNoAccessReturned, 
+		 ECloseAllDelayReadOnly,   ECloseAllDelayReadOnlyReturned,  
+		 ECloseAllDelayNoAccess,   ECloseAllDelayNoAccessReturned,
+		 ECloseAllDropFileSession, ECloseAllDropFileSessionReturned,
+		 ECloseAllDropBackupObserverSession, ECloseAllDropBackupObserverSessionReturned,
+		 EStateMachineEnd};
+public:
+	void CloseAllStartL(StateMachineState aNextState, MBackupObserver::TFileLockFlags aFlag);
+	void CloseAllEndL(StateMachineState aNextState, TInt aExpectedNotifications);
+private:
+	void ConstructL();
+private:
+	// The RTest class for this thread
+	RTest* iLocalRTest;
+	// The "command" session
+	CBaBackupSessionWrapper* iBackupSession;	
+	// Safety for RArrays
+	RMutex iMutex;
+	// Array of backup observers
+	RPointerArray<CBackupOperationObserver> iBackupObservers;
+	// Array of file lock observers
+	RPointerArray<CBackupFileObserver> iBackupFileObservers;
+	// Used for single file tests
+	TInt iEndBackupRecursionCount;
+	// Current state of the State Machine
+	StateMachineState iState;
+	// Used for backup observer threads
+	RPointerArray<RThread> iBackupObserverThreads;
+	// Used for file observer threads
+	RPointerArray<RThread> iFileObserverThreads;
+	};
+