--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/TestEngine/inc/TestModuleController.h Tue Feb 02 01:57:15 2010 +0200
@@ -0,0 +1,686 @@
+/*
+* Copyright (c) 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: This file contains the header file of the
+* CTestModuleController.
+*
+*/
+
+#ifndef TEST_MODULE_CONTROLLER_H
+#define TEST_MODULE_CONTROLLER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <atslogger.h>
+#include <StifTestInterface.h>
+#include <stifinternal/TestServerClient.h>
+
+// CONSTANTS
+// None
+
+// MACROS
+// None
+
+// DATA TYPES
+// None
+
+// FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+class CTestEngine;
+class CBufferArray;
+class CTestScripterController;
+class CTestModuleController;
+
+// CLASS DECLARATION
+// None
+
+// CErrorPrinter is an active object which handles the execute test case
+// asynchronous request.
+class CErrorPrinter : public CActive
+ {
+ public: // Enumerations
+
+ private: // Enumerations
+
+ public: // Constructors and destructor
+
+ /**
+ * NewL is first phase of two-phased constructor.
+ */
+ static CErrorPrinter* NewL( CTestEngine* aTestEngine );
+
+ /**
+ * Destructor of CErrorPrinter.
+ */
+ virtual ~CErrorPrinter();
+
+ /**
+ * Start
+ */
+ TInt StartL( RTestModule& aEngine );
+
+ public: // New functions
+ // None
+
+ protected: // New functions
+ // None
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CErrorPrinter();
+
+ /**
+ * By default Symbian OS constructor is private.
+ */
+ void ConstructL( CTestEngine* aEngine );
+
+ public: // Functions from base classes
+
+ /**
+ * RunL derived from CActive handles the completed requests.
+ */
+ void RunL();
+
+ /**
+ * DoCancel derived from CActive handles the Cancel
+ */
+ void DoCancel();
+
+ /**
+ * RunError derived from CActive handles errors from active handler.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // New functions
+ // None
+
+ protected: // Functions from base classes
+ // None
+
+ private: // Functions from base classes
+ // None
+
+ public: // Data
+ // None
+
+ protected: // Data
+ // None
+
+ private: // Data
+ CTestEngine* iEngine; // Pointer to main console
+
+ TErrorNotification iError; // Error notification
+ TErrorNotificationPckg iErrorPckg; // Error package
+ RTestModule iServer; // Handle to TestModule
+
+ public: // Friend classes
+ // None
+
+ protected: // Friend classes
+ // None
+
+ private: // Friend classes
+ // None
+
+ };
+// CLASS DECLARATION
+
+// DESCRIPTION
+// CServerStateHandler class is an active object that handles server state
+// e.g. KErrServerTerminated
+NONSHARABLE_CLASS( CServerStateHandler )
+ : public CActive
+ {
+
+ public: // Enumerations
+
+ private: // Enumerations
+
+ public: // Constructors and destructor
+
+ /**
+ * NewL is first phase of two-phased constructor.
+ */
+ static CServerStateHandler* NewL( CTestEngine* aTestEngine, CTestModuleController* aTestModuleController );
+
+ /**
+ * Destructor of CServerStateHandler.
+ */
+ virtual ~CServerStateHandler();
+
+ public: // New functions
+
+ /**
+ * Start monitoring
+ */
+ TInt StartL( RTestServer& aServer );
+
+ public: // Functions from base classes
+
+ /**
+ * RunL derived from CActive handles the completed requests.
+ */
+ void RunL();
+
+ /**
+ * DoCancel derived from CActive handles the Cancel
+ */
+ void DoCancel();
+
+ /**
+ * RunError derived from CActive handles errors from active handler.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // New functions
+ // None
+
+ protected: // Functions from base classes
+ // None
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CServerStateHandler( CTestEngine* aTestEngine, CTestModuleController* aTestModuleController );
+
+ /**
+ * By default Symbian OS constructor is private.
+ */
+ void ConstructL();
+
+ public: //Data
+ // None
+
+ protected: // Data
+ // None
+
+ private: // Data
+ CTestEngine* iEngine; // Pointer to TestEngine
+ RThread iServerThread; // Handle to TestServer thread
+ CTestModuleController* iTestModuleController; //Pointer to TestModuleController
+ public: // Friend classes
+ // None
+
+ protected: // Friend classes
+ // None
+
+ private: // Friend classes
+ // None
+
+ };
+
+// DESCRIPTION
+// CTestModuleController is an active object used for controlling the test
+// module using the RTestModule API.
+
+class CTestModuleController
+ : public CActive
+ {
+ public: // Enumerations
+ // None
+
+ private: // Enumerations
+
+ protected: // Enumerations
+
+ // TTestModuleStatus defines the status of test module
+ enum TTestModuleStatus
+ {
+ ETestModuleIdle,
+ ETestModuleEnumerateCases,
+ ETestModuleEnumerateCasesCompleted,
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CTestModuleController* NewL( CTestEngine* aEngine,
+ const TName& aName,
+ TBool aAfterReboot,
+ TBool aCreateTestScripterCont = EFalse,
+ CTestScripterController* aTestScripterController = NULL );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CTestModuleController();
+
+ public: // New functions
+
+ /**
+ * StartEnumerateL starts the CTestModuleController active object.
+ */
+ virtual void StartEnumerateL();
+
+ /**
+ * Init the test module
+ */
+ virtual void InitL( TFileName& aIniFile, const TDesC& aConfigFile );
+
+ /**
+ * Add config file
+ */
+ virtual void AddConfigFileL( TFileName& aConfigFile );
+
+ /**
+ * Remove config file
+ */
+ virtual void RemoveConfigFileL( TFileName& aConfigFile );
+
+ /**
+ * Get Test Cases
+ */
+ virtual CFixedFlatArray<TTestInfo>* TestCasesL();
+
+ /**
+ * Free used memory for test cases
+ */
+ virtual void FreeTestCases();
+
+ /**
+ * Return handle to Test Server
+ */
+ virtual RTestServer& Server( TTestInfo& aTestInfo );
+
+ /**
+ * Return the name of Test Module.
+ */
+ virtual const TDesC& ModuleName( const TDesC& aModuleName );
+
+ /**
+ * Return reference to AtsLogger
+ */
+ virtual CAtsLogger& AtsLogger(){ return *iAtsLogger; };
+
+ /**
+ * Is enumeration complete?
+ */
+ virtual TBool EnumerationComplete();
+
+ /**
+ * Returns pointer to the created clone of the TestModuleController
+ */
+ virtual CTestModuleController* CloneL( CTestModuleController* aTestModuleController, TBool aAfterReset, CTestScripterController* aTestScripterController );
+
+ /**
+ * Increases the value of iTestCaseCounter
+ */
+ virtual void CaseCreated();
+
+ /**
+ * Decreases the value of iTestCaseCounter and checks
+ * can old testmodulecontroller deleted or not.
+ */
+ virtual void CaseFinished();
+
+ public: // Functions from base classes
+
+ /**
+ * RunL derived from CActive handles the completed requests.
+ */
+ virtual void RunL();
+
+ /**
+ * DoCancel derived from CActive handles the cancellation
+ */
+ virtual void DoCancel();
+
+ /**
+ * RunError derived from CActive handles errors from active handler.
+ */
+ virtual TInt RunError( TInt aError );
+
+ /**
+ * Finds free test module controller, if not possible, creates new one.
+ */
+ virtual CTestModuleController* GetFreeOrCreateModuleControllerL(TTestInfo& aTestInfo, TBool aUITestingSupport);
+
+ /**
+ * Deletes given module controller (used only in CTestScripterController).
+ */
+ virtual void DeleteModuleController(CTestModuleController* aRealModuleController);
+
+ /**
+ * Removes given module controller from child list (used only in CTestScripterController).
+ */
+ virtual void RemoveModuleController(CTestModuleController* aRealModuleController);
+
+ /**
+ * Enumerates test module controller synchronously.
+ * This is used when new test module controller is created when stif
+ * is about to run test case.
+ */
+ virtual void EnumerateSynchronously(void);
+
+ protected: // New functions
+ // None
+
+ protected: // Functions from base classes
+ // None
+
+ private:
+
+ /**
+ * By default Symbian OS constructor is private.
+ */
+ void ConstructL( const TName& aName,
+ TBool aAfterReboot,
+ CTestScripterController* aTestScripterController );
+
+ /**
+ * Generate error report to xml result file and leave with notify.
+ */
+ void LeaveWithNotifyL( TInt aCode, const TDesC& aText );
+
+ /**
+ * Construct ATS logger. Added this function due to compiler error with
+ * CW 3.0 when there are multiple TRAPDs
+ */
+ TInt ConstructASTLoggerL( TDesC& atsName, TBool & aAfterReboot);
+
+ protected:
+ /**
+ * Parametric constructor.
+ */
+ CTestModuleController( CTestEngine* aEngine );
+
+ public: // Data
+ // None
+
+ // Config file array
+ RPointerArray<HBufC> iConfigFiles;
+
+ // Tells is TestModuleController cloned or not in -15 (KErrServerTerminated) cases.
+ TBool iTestModuleCrashDetected;
+
+ private: // Data
+
+ protected: // Data
+
+ // Test Engine owning us
+ CTestEngine* iEngine;
+
+ // Test case array
+ typedef CFixedFlatArray<TTestCaseInfo> TTestCaseArray;
+ RPointerArray<TTestCaseArray> iTestCaseArray;
+
+ // Handle to Test Server
+ RTestServer iServer;
+
+ // Handle to Test Module
+ RTestModule iModule;
+
+ // Module name
+ HBufC* iName;
+
+ // Internal state
+ TTestModuleStatus iState;
+
+ // Enumeration result
+ TCaseSize iEnumResultPackage;
+
+ // Count of test cases
+ TInt iTestCaseCount;
+
+ // Count of enumerated config files
+ TInt iEnumerateCount;
+
+ // Count of failed enumerated config files(This is used to decrease
+ // iEnumerateCount)
+ TInt iFailedEnumerateCount;
+ // For removing faulty config (test case) file(s)
+ RPointerArray<HBufC> iFailedEnumerateConfig;
+
+ // Is enumeration complete
+ TBool iEnumerateComplete;
+
+ // Temporary config file for each Enumerate call
+ TPtrC iEnumConfigFile;
+
+ // Pointer to CErrorPrinter
+ CErrorPrinter* iErrorPrinter;
+ // Server state handler
+ CServerStateHandler* iServerStateHandler;
+
+ // ATS Logger
+ CAtsLogger* iAtsLogger;
+
+ // Pointer to CTestScripterController
+ CTestScripterController* iTestScripterController;
+ // Indication is CTestScripterController's services needed. Services
+ // that is implemented in CTestScripterController class.
+ TInt iTestScripterIndicator;
+
+ // Initialization file of Test Module
+ TFileName iInifile;
+
+ // Number of running test cases
+ TInt iTestCaseCounter;
+
+ // Reboot indication (moved here from ScripterControlle)
+ TBool iAfterReboot;
+
+ // List of additional module controllers "owned" by current controller
+ // Used only with UITestingSupport and in case when every test case
+ // has to be run in separate process
+ RPointerArray<CTestModuleController> iChildrenControllers;
+
+ public: // Friend classes
+ // None
+
+ protected: // Friend classes
+ // None
+
+ private: // Friend classes
+ // None
+
+ friend class CTestScripterController;
+ //friend class CTestModuleController;
+ friend class CTestEngine; //iTestScripterController used from CTestEngine::TestModuleCrash
+
+ };
+
+// DESCRIPTION
+// CTestScripterController is for handling TestScripter's server session
+// creations and handling operations that concern to TestScripter.
+
+class CTestScripterController
+ : public CTestModuleController
+ {
+ public: // Enumerations
+ // None
+
+ private: // Enumerations
+ // None
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CTestScripterController* NewL( CTestEngine* aEngine,
+ const TName& aName,
+ TBool aAfterReboot );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CTestScripterController();
+
+ public: // New functions
+
+ /**
+ * StartEnumerateL starts the CTestModuleController active object.
+ */
+ void StartEnumerateL();
+
+ /**
+ * Init the test module
+ */
+ void InitL( TFileName& aIniFile, const TDesC& aConfigFile );
+
+ /**
+ * Add config file
+ */
+ void AddConfigFileL( TFileName& aConfigFile );
+
+ /**
+ * Remove config file
+ */
+ void RemoveConfigFileL( TFileName& aConfigFile );
+
+ /**
+ * Get Test Cases
+ */
+ CFixedFlatArray<TTestInfo>* TestCasesL();
+
+ /**
+ * Free used memory for test cases
+ */
+ void FreeTestCases();
+
+ /**
+ * Return handle to Test Server
+ */
+ RTestServer& Server( TTestInfo& aTestInfo );
+
+ /**
+ * Return the name of Test Module.
+ */
+ const TDesC& ModuleName( const TDesC& aModuleName );
+
+ /**
+ * Return reference to AtsLogger
+ */
+ CAtsLogger& AtsLogger(){ return *iTestScripter[0]->iAtsLogger; };
+
+ /**
+ * Is enumeration complete?
+ */
+ TBool EnumerationComplete();
+
+ /**
+ * Handles completed requests (Emulates RunL() ).
+ */
+ void RunLEmulator( CTestModuleController* aTestModuleController );
+
+ /**
+ * Handle errors(Emulates RunError()).
+ */
+ TInt RunErrorEmulator( TInt aError,
+ CTestModuleController* aTestModuleController );
+
+ /**
+ * Cancel active request(Emulates DoCancel()).
+ */
+ void DoCancelEmulator( CTestModuleController* aTestModuleController );
+
+ /**
+ * Get current CTestScripterController.
+ */
+ TInt GetCurrentIndex( CTestModuleController* aTestModuleController );
+
+ /**
+ * Finds free test module controller, if not possible, creates new one.
+ */
+ CTestModuleController* GetFreeOrCreateModuleControllerL(TTestInfo& aTestInfo, TBool aUITestingSupport);
+
+ /**
+ * Deletes given module controller.
+ */
+ void DeleteModuleController(CTestModuleController *aRealModuleController);
+
+ /**
+ * Removes given module controller from children list.
+ */
+ void RemoveModuleController(CTestModuleController *aRealModuleController);
+
+ public: // Functions from base classes
+
+ /**
+ * RunL derived from CActive handles the completed requests.
+ */
+ void RunL();
+
+ /**
+ * DoCancel derived from CActive handles the cancellation
+ */
+ void DoCancel();
+
+ /**
+ * RunError derived from CActive handles errors from active handler.
+ */
+ TInt RunError( TInt aError );
+
+ protected: // New functions
+ // None
+
+ protected: // Functions from base classes
+ // None
+
+ private:
+
+ /**
+ * By default Symbian OS constructor is private.
+ */
+ void ConstructL( const TName& aName, TBool aAfterReboot );
+
+ /**
+ * Parametric constructor.
+ */
+ CTestScripterController( CTestEngine* aEngine );
+
+ /**
+ * Create name according to TestScripter and Test case file.
+ */
+ HBufC* CreateTestScripterNameL( TFileName& aTestCaseFile, HBufC* aCreatedName );
+
+ public: // Data
+
+ // Array for created CTestScripterController
+ RPointerArray<CTestModuleController> iTestScripter;
+
+ protected: // Data
+
+ private: // Data
+ // None
+
+ public: // Friend classes
+ // None
+
+ protected: // Friend classes
+ // None
+
+ private: // Friend classes
+ // None
+
+ };
+
+/**
+* Check is module TestScripter. Does parsing and returns new module name and
+* error codes(Needed operations when creating server sessions to TestScripter).
+*/
+TInt GenerateModuleName(const TDesC& aModuleName, TDes& aNewModuleName);
+
+#endif // TEST_MODULE_CONTROLLER_H
+
+// End of File