stif/TestEngine/inc/TestCaseController.h
branchRCL_3
changeset 59 8ad140f3dd41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/TestEngine/inc/TestCaseController.h	Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,910 @@
+/*
+* 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 
+* CTestCaseController, the CTestProgressNotifier and the 
+* CTestEventNotifier.
+*
+*/
+
+#ifndef TEST_CASE_CONTROLLER_H
+#define TEST_CASE_CONTROLLER_H
+
+//  INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <stifinternal/TestServerClient.h>
+#include <atslogger.h>
+#include "TestEngine.h"
+#include "TestCallBack.h"
+
+#include "StifHWReset.h"
+
+// CONSTANTS
+// None
+
+// MACROS
+// None
+
+// DATA TYPES
+// None
+
+// FUNCTION PROTOTYPES
+// None
+typedef CStifHWReset*( *CTestInterfaceFactory )();
+
+// FORWARD DECLARATIONS
+class CTestModuleController;
+class CTestReport;
+class CTestCaseTimeout;
+
+// CLASS DECLARATION
+
+// DESCRIPTION
+// CTestCaseController is an active object used for running the test case
+// using the RTestExecution API.
+class CTestCaseController
+        : public CActive
+    {
+    public:     // Enumerations
+        // None
+
+    private:    // Enumerations
+
+        // TTestCaseStatus defines the status of test case
+        enum TTestCaseStatus
+            {
+            ETestCaseIdle,
+            ETestCaseRunning,
+            ETestCaseCompleted,
+            ETestCaseTimeout,
+            ETestCaseSuicided, //test case has killed itself
+            };
+
+    public:     // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CTestCaseController* NewL( CTestEngine* aEngine,
+            CTestReport* aTestReport,
+            CAtsLogger& aAtsLogger,
+            RTestExecution aTestExecution, 
+            const TTestInfo& aTestInfo );
+
+        /**
+        * Destructor.
+        */
+        ~CTestCaseController();
+
+    public:     // New functions
+
+        /**
+        * StartL starts the CTestCaseController active object.
+        */
+        void StartL( const RMessage2& aMessage );
+
+        /**
+        * Timeouts a testcase
+        */
+        void Timeout();
+
+        /**
+        * Kills a testcase
+        */
+        void Suicide(TStopExecutionType aType, TInt aCode);
+
+    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 );
+        
+        /**
+        * Get testcase info(test module, config file, test case, etc).
+        */
+        void GetTestCaseInfo( TTestInfo& aTestInfo );
+
+    protected:  // New functions
+        // None
+
+    protected:  // Functions from base classes
+        // None
+
+    private:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Parametric C++ constructor.
+        */
+        CTestCaseController( CTestEngine* aEngine, 
+                             CTestReport* aTestReport,
+                             CAtsLogger& aAtsLogger,
+                             RTestExecution aTestExecution,
+                             const TTestInfo& aTestInfo );
+        
+        /**
+        * Generates XML log about the test case.
+        */
+        void GenerateXmlLogL();
+
+    public:     // Data
+        // None
+    
+    protected:  // Data
+        // None
+
+    private:    // Data
+
+        // Pointer to CTestEngine
+        CTestEngine*        iEngine;
+
+        // Pointer to Test Report
+        CTestReport*        iTestReport;
+
+        // Handle to RTestExecution
+        RTestExecution      iTestExecution;
+
+        // Pointer to timeout handler
+        CTestCaseTimeout*    iTimeout;
+
+        // Test Info
+        TTestInfo           iTestInfo;
+
+        // Test case arguments
+		HBufC*              iTestCaseArguments;
+        
+        // Internal state
+        TTestCaseStatus     iState;
+
+        // Test Result
+        TFullTestResult     iResult;
+        TFullTestResultPckg iResultPckg;
+
+        // Message to be completed when case is finished
+        RMessage2            iMessage;
+
+        // AtsLogger
+        CAtsLogger&         iAtsLogger;
+
+        // RDebug logging for testcase status
+        CStifLogger*        iRDebugLogger;
+
+        // Stop execution type
+        TStopExecutionType  iStopExecutionType;
+
+    public:     // Friend classes
+        // None
+
+    protected:  // Friend classes
+        // None
+
+    private:    // Friend classes
+
+        friend class CTestRemoteCmdNotifier;
+
+    };
+
+// DESCRIPTION
+// CTestProgressNotifier is an active object used for notifications called from
+// Test Module using the RTestExecution API.
+class CTestProgressNotifier
+        : public CActive
+    {
+    public:     // Enumerations
+        // None
+
+    private:    // Enumerations
+
+        // TTestProgressStatus defines the status of notification
+        enum TTestProgressStatus
+            {
+            ETestProgressIdle,
+            ETestProgressPending,
+            ETestProgressCompleted
+            };
+
+    public:     // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CTestProgressNotifier* NewL( CTestEngine* aEngine, 
+                             RTestExecution aTestExecution );
+
+        /**
+        * Destructor.
+        */
+        ~CTestProgressNotifier();
+
+    public:     // New functions
+
+        /**
+        * StartL starts the CTestProgressNotifier active object.
+        */
+        void StartL( const RMessage2& aMessage );
+
+    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:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Parametric C++ constructor.
+        */
+        CTestProgressNotifier( CTestEngine* aEngine, 
+                               RTestExecution aTestExecution );
+
+    public:     // Data
+        // None
+
+    protected:  // Data
+        // None
+
+    private:    // Data
+
+        // Pointer to CTestEngine
+        CTestEngine*        iEngine;
+
+        // Handle to RTestExecution
+        RTestExecution      iTestExecution;
+
+        // Internal state
+        TTestProgressStatus iState;
+
+        // Test Progress
+        TTestProgress       iProgress;
+        TTestProgressPckg   iProgressPckg;
+
+        // Message to be completed when notification is completed
+        RMessage2           iMessage;
+        
+    public:     // Friend classes
+        // None
+
+    protected:  // Friend classes
+        // None
+
+    private:    // Friend classes
+        // None
+
+    };
+
+// DESCRIPTION
+// CTestEventNotifier is an active object used for event notify from
+// Test Module using the RTestExecution API.
+class CTestEventNotifier
+        : public CActive
+    {
+    public:     // Enumerations
+        // None
+
+    private:    // Enumerations
+
+        // TTestEventStatus defines the status of notification
+        enum TTestEventStatus
+            {
+            ETestEventIdle,
+            ETestEventPending,
+            ETestEventCompleted
+            };
+
+    public:     // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CTestEventNotifier* NewL( CTestEngine* aEngine,  
+            RTestExecution aTestExecution );
+
+        /**
+        * Destructor.
+        */
+        ~CTestEventNotifier();
+        
+    public:     // New functions
+
+        /**
+        * StartL starts the CTestEventNotifier active object.
+        */
+        void Start();
+
+        /**
+        * For event control.
+        */
+        void CtlEvent( const TEventIf& aEvent, TRequestStatus& aStatus );
+
+		/**
+		* Check if CtlEvent should be called
+		*/
+        TBool CheckCtlEvent( const TEventIf& aEvent );
+
+    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:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Parametric C++ constructor.
+        */
+        CTestEventNotifier( CTestEngine* aEngine,
+             RTestExecution aTestExecution);
+
+    public:     // Data
+        // None
+
+    protected:  // Data
+        // None
+
+    private:    // Data
+
+        // Pointer to CTestEngine
+        CTestEngine* iEngine;
+
+        // Handle to RTestExecution
+        RTestExecution iTestExecution;
+
+        // Internal state
+        TTestEventStatus iState;
+
+        // Event interface
+        TEventIf iEvent;
+        TEventIfPckg iEventPckg;
+        TEventIf iEventNotify;
+        TEventIfPckg iEventNotifyPckg;
+
+        // Event array
+        RPointerArray<HBufC> iEventArray;
+
+        // Associated event controller
+        CTestEventController* iController;
+
+    public:     // Friend classes
+        // None
+
+    protected:  // Friend classes
+        // None
+
+    private:    // Friend classes
+        // None
+
+    };
+
+// DESCRIPTION
+// CTestEventController is used for event controlling from
+// TestEngine.
+class CTestEventController
+        : public CBase
+    {
+    public:     // Enumerations
+        // None
+
+    private:    // Enumerations
+
+    public:     // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CTestEventController* NewL( CTestEngine* aEngine,
+                                           const TEventIf& aEvent,
+                                           TRequestStatus* aStatus );
+  
+        static CTestEventController* NewL( CTestEngine* aEngine,
+                                           const TEventIf& aEvent,
+                                           RMessage2& aMessage );
+
+        /**
+        * Destructor.
+        */
+        ~CTestEventController();
+
+    public:     // New functions
+        /**
+        * Event complete.
+        */ 
+        void EventComplete();
+
+    public:     // Functions from base classes
+
+    protected:  // New functions
+        // None
+
+    protected:  // Functions from base classes
+        // None
+
+    private:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL( TRequestStatus* aStatus );
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL( RMessage2& aMessage );
+
+        /**
+        * Parametric C++ constructor.
+        */
+        CTestEventController( CTestEngine* aEngine, const TEventIf& aEvent );
+
+        /**
+        * Check all events.
+        */ 
+        TBool CheckEventsL();
+
+        /**
+        * Check client events.
+        */ 
+        TBool CheckClientEventsL();
+
+        /**
+        * Check testcase events.
+        */ 
+        TBool CheckTestcaseEventsL(); 
+
+        /**
+        * Callback for event controller.
+        */ 
+        static TInt EventCallBack( TAny* aTestEventController );
+
+    public:     // Data
+        // None
+    
+    protected:  // Data
+        // None
+
+    private:    // Data
+
+        // Pointer to CTestEngine
+        CTestEngine*    iEngine;
+
+        // Either of these is completed when ready
+        // If aRequestStatus exists, it is completed,
+        // otherwise aMessage is completed.
+        TRequestStatus* iRequestStatus;
+        RMessage2        iMessage;
+
+        // Event interface
+        TEventIf iEvent;
+        TEventIfPckg iEventPckg;
+
+        // Number of active event commands
+        TInt iActiveEventCmds;
+        
+        RPointerArray<CCallBack> iEventCallBacks;
+
+    public:     // Friend classes
+        // None
+
+    protected:  // Friend classes
+        // None
+
+    private:    // Friend classes
+        // None
+
+    };
+
+// DESCRIPTION
+// CTestCaseTimeout is used for time controlling
+class CTestCaseTimeout
+        : public CActive
+    {
+    public:     // Enumerations
+        // None
+
+    private:    // Enumerations
+        // None
+         
+    public:     // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CTestCaseTimeout* NewL( CTestCaseController* aCase,
+                     TTimeIntervalMicroSeconds aTimeout );
+
+        /**
+        * Destructor.
+        */
+        ~CTestCaseTimeout();
+        
+    public:     // New functions
+        
+        /**
+        * Starts timeout counting
+        */
+        void Start();
+
+    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:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL(CTestCaseController* aCase,
+               TTimeIntervalMicroSeconds aTimeout );
+
+        /**
+        * C++ constructor.
+        */
+        CTestCaseTimeout();
+
+    public:     // Data
+        // None
+    
+    protected:  // Data
+        // None
+
+    private:    // Data
+        CTestCaseController* iCase;
+        TTimeIntervalMicroSeconds iTimeout;
+        RTimer iTimer;
+        
+        // Storage for testcase timeout.
+        TTime iTestCaseTimeout;
+
+    public:     // Friend classes
+        // None
+
+    protected:  // Friend classes
+        // None
+
+    private:    // Friend classes
+        // None
+
+    };
+    
+// DESCRIPTION
+// CTestProgressNotifier is an active object used for notifications called from
+// Test Module using the RTestExecution API.
+class CTestRemoteCmdNotifier
+        : public CActive
+    {
+    public:     // Enumerations
+        // None
+
+    private:    // Enumerations
+
+        // TTestProgressStatus defines the status of notification
+        enum TTestProgressStatus
+            {
+            ETestProgressIdle,
+            ETestProgressPending,
+            ETestProgressCompleted
+            };
+
+    public:     // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CTestRemoteCmdNotifier* NewL( CTestEngine* aEngine, 
+                             RTestExecution aTestExecution ,
+                             CTestCaseController* aTestCaseController,
+                             CAtsLogger& aAtsLogger );
+
+        /**
+        * Destructor.
+        */
+        ~CTestRemoteCmdNotifier();
+
+    public:     // New functions
+
+        /**
+        * StartL starts the CTestRemoteCmdNotifier active object.
+        */
+        //void StartL( const RMessage& aMessage );
+
+        /**
+        * EnableReceive prepares to start active object
+        */
+        void EnableReceive( const RMessage2& aMessage );
+
+        /**
+        * GetReceivedMsg get received message.
+        */
+        void GetReceivedMsg( const RMessage2& aMessage );
+
+        /**
+        * Start starts the CTestCaseController active object.
+        */
+        void Start( const RMessage2& aMessage );
+
+        /**
+        * CancelReq cancels the request.
+        */
+        void CancelReq();
+
+    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:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Parametric C++ constructor.
+        */
+        CTestRemoteCmdNotifier( CTestEngine* aEngine, 
+                               RTestExecution aTestExecution,
+                               CTestCaseController* aTestCaseController,
+                               CAtsLogger& aAtsLogger );
+
+        /**
+        * Loads dynamically reset module.
+        */
+        TInt DynamicResetModule( CTestModuleIf::TRebootType aResetType );
+
+    public:     // Data
+        // None
+
+    protected:  // Data
+        // None
+
+    private:    // Data
+
+        // Pointer to CTestEngine
+        CTestEngine*        iEngine;
+
+        // Handle to RTestExecution
+        RTestExecution      iTestExecution;
+
+        // Internal state
+        TTestProgressStatus iState;
+
+        // Remote command's definition
+        TStifCommand          iRemoteType;
+        TStifCommandPckg      iRemoteTypePckg;
+                
+        TInt                    iMsgSize;              
+        TPckg<TInt>             iMsgSizePckg;              
+
+        // Message to be completed when notification is completed
+        RMessage2           iMessage;
+        
+        HBufC8*             iReceivedMsg;
+
+        TInt                iRebootCode;
+        TName               iRebootName;
+
+        // Pointer to CTestCaseController
+        CTestCaseController* iTestCaseController;
+
+        TBool               iMessageAvail;
+        
+        CAtsLogger&         iAtsLogger;
+
+    public:     // Friend classes
+        // None
+
+    protected:  // Friend classes
+        // None
+
+    private:    // Friend classes
+        // None
+
+    };
+
+// DESCRIPTION
+// CTestCommandNotifier is an active object used for command notify from
+// Test Module using the RTestExecution API.
+// It was created to allow test case to kill itself.
+class CTestCommandNotifier: public CActive
+    {
+    public:     // Enumerations
+        // None
+
+    private:    // Enumerations
+        // None
+
+    public:     // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CTestCommandNotifier* NewL(CTestEngine* aEngine, RTestExecution aTestExecution);
+
+        /**
+        * Destructor.
+        */
+        ~CTestCommandNotifier();
+
+    public:     // New functions
+
+        /**
+        * StartL starts the CTestCommandNotifier active object.
+        */
+        void Start();
+
+    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:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Parametric C++ constructor.
+        */
+        CTestCommandNotifier(CTestEngine* aEngine, RTestExecution aTestExecution);
+
+    public:     // Data
+        // None
+
+    protected:  // Data
+        // None
+
+    private:    // Data
+
+        // Pointer to CTestEngine
+        CTestEngine*     iEngine;
+
+        // Handle to RTestExecution
+        RTestExecution   iTestExecution;
+
+        // Command to be sent
+        TCommand                        iCommand;
+        TCommandPckg                    iCommandPckg;
+        TBuf8<KMaxCommandParamsLength2>  iParamsPckg;
+
+    public:     // Friend classes
+        // None
+
+    protected:  // Friend classes
+        // None
+
+    private:    // Friend classes
+        // None
+
+    };
+
+
+#endif // TEST_CASE_CONTROLLER_H
+
+// End of File