stif/TestEngine/inc/TestModuleController.h
branchRCL_3
changeset 59 8ad140f3dd41
parent 0 a03f92240627
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/TestEngine/inc/TestModuleController.h	Wed Oct 13 16:17:58 2010 +0300
@@ -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