stif/stif_plat/inc/TestEngineClient.h
branchRCL_3
changeset 59 8ad140f3dd41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stif/stif_plat/inc/TestEngineClient.h	Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,555 @@
+/*
+* 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 
+* RTestEngineServer, RTestEngine and RTestCase.
+*
+*/
+
+#ifndef TEST_ENGINE_CLIENT_H
+#define TEST_ENGINE_CLIENT_H
+
+//  INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+#include <hal.h>
+#include <StifTestInterface.h>
+#include <StifTestEventInterface.h>
+#include <StifLogger.h>
+
+#include <StifTFwIfProt.h>
+
+// CONSTANTS
+// None
+
+// Start and end tags for STIF setting denitions
+_LIT( KStifSettingsStartTag, "[StifSettings]" );
+_LIT( KStifSettingsEndTag, "[EndStifSettings]" );
+// Tag for cabs modifier name
+_LIT( KCapsModifier, "CapsModifier=" );
+// Test module thread heap and stack names
+_LIT( KUserDefStackSize, "TestThreadStackSize=" );
+_LIT( KUserDefMinHeap, "TestThreadMinHeap=" );
+_LIT( KUserDefMaxHeap, "TestThreadMaxHeap=" );
+
+// Global mutex name
+_LIT( KStifTestServerStartupMutex, "KStifTestServerStartupMutex" );
+
+// MACROS
+// None
+
+// DATA TYPES
+
+// Opcodes used in message passing between client and server
+enum TTestEngineRequests
+    {
+    // RTestEngineServer requests
+    ETestEngineServerCloseSession,
+    // RTestEngine requests
+    ETestEngineCreateSubSession,
+    ETestEngineCloseSubSession,
+    ETestEngineSetAttribute,
+    ETestEngineAddTestModule,
+    ETestEngineRemoveTestModule,
+    ETestEngineAddConfigFile,
+    ETestEngineRemoveConfigFile,
+    ETestEngineEnumerateTestCases,
+    ETestEngineGetTestCases,    
+    ETestEngineCancelAsyncRequest,
+    ETestEngineEvent,
+    ETestEngineErrorNotification,
+    ETestEngineLoggerSettings,
+    ETestEngineCloseLoggerSettings,
+    ETestEngineReportTestCase, //Add info about executed test case to test report. Used by reboot mechanism
+    // RTestCase requests
+    ETestCaseCreateSubSession,
+    ETestCaseCloseSubSession,
+    ETestCaseRunTestCase,
+    ETestCasePause,
+    ETestCaseResume,
+    ETestCaseNotifyProgress,
+    ETestCaseNotifyRemoteType,
+    ETestCaseNotifyRemoteMsg,
+    ETestCaseCancelAsyncRequest,
+    ETestCaseNotifyCommand,
+    };
+
+// Package for test case count, used in EnumerateTestCases method
+typedef TPckgBuf<TInt> TCaseCount;
+
+// A set of test engine settings which can be set/read by SettingServer
+struct TEngineSettings
+    {
+    TBool iUITestingSupport;
+    TBool iSeparateProcesses;
+    };
+
+// FUNCTION PROTOTYPES
+// None
+
+// FORWARD DECLARATIONS
+// Template class delivering test cases from Test Module
+template <class T> class CFixedFlatArray;
+
+// CLASS DECLARATION
+
+// DESCRIPTION
+// RTestEngineServer is a client class of Test Engine Server
+// The connect function starts the server, if is not already running.
+// An RSessionBase sends messages to the server with
+// the function RSessionBase::SendReceive();
+// specifying an opcode (TTestEngineReq) and array of argument pointers.
+
+class RTestEngineServer
+        : public RSessionBase 
+    {
+    public:     // Enumerations
+
+    private:    // Enumerations
+
+    public:     // Constructors and destructor
+
+        /**
+        * Closes the RTestEngineServer session.
+        */
+        IMPORT_C void Close();
+
+    public:     // New functions
+
+        /**
+        * Connect method creates new RTestEngineServer session that is used
+        * to manage the test case execution.
+        */
+        IMPORT_C TInt Connect();
+
+        /**
+        * Version returns client side version number from the 
+        * RTestEngineServer.
+        */
+        IMPORT_C TVersion Version() const;
+
+    public:     // Functions from base classes
+
+    protected:  // New functions
+
+    protected:  // Functions from base classes
+
+    private:    // New functions
+
+    public:     // Data
+
+    protected:  // Data
+
+    private:    // Data
+
+    public:     // Friend classes
+
+    protected:  // Friend classes
+
+    private:    // Friend classes
+
+    };
+
+// DESCRIPTION
+
+// RTestEngine class represents a subsession with the RTestEngineServer.
+// Each RTestEngine corresponds to a specific CTestEngine (a CObject derived
+// class) in the server. Messages are passed via the RTestEngineServer.
+// A RTestEngine stores a handle from it's server side CTestEngine, and uses
+// this to identify the CTestEngine during communication.
+
+class RTestEngine
+        : public RSubSessionBase 
+    {
+
+    public:     // Enumerations
+
+    private:    // Enumerations
+
+    public:     // Constructors and destructor
+
+        /**
+        * Open creates a subsession to Test Engine and opens new handle to
+        * RTestEngine. The RTestEngineServer subsession shall be created by
+        * calling RTestEngineServer::Connect before calling Open to create new
+        * RTestEngine subsession.
+        */
+        IMPORT_C TInt Open( RTestEngineServer& aServer,
+                            const TFileName& aIniFile );
+
+        /**
+        * Closes the RTestEngine subsession.
+        */
+        IMPORT_C void Close();
+
+    public:     // New functions
+
+        /**
+        * Sets attributes to Test Framework
+        */
+        IMPORT_C TInt SetAttribute( TAttribute aAttribute,
+                                    const TDesC& aValue );
+
+        /**
+        * AddTestModule is used to add dynamically a new Test Module to the
+        * Test Framework. Test cases can then be run from the new Test Module
+        * without restarting the Test Framework.
+        * If the Test Module specified by aTestModule doesn't exists this
+        * method returns KErrNotFound. If the Test Module has been already
+        * loaded this method returns KErrAlreadyExists.
+        */
+        IMPORT_C TInt AddTestModule( const TName& aTestModule,
+                                     const TFileName& aIniFile );
+
+        /**
+        * RemoveTestModule is used to remove the existing Test Module from Test
+        * Framework. If there are not test cases executing in the Test Module
+        * it will be shut down.
+        * If there is test case running from the Test Module this method
+        * returns KErrInUse.
+        * If the Test Module specified by aTestModule is not loaded this method
+        * returns KErrNotFound.
+        */
+        IMPORT_C TInt RemoveTestModule( const TName& aTestModule );
+
+        /**
+        * AddConfigFile is used to add dynamically a new config file to the
+        * Test Module specified by aTestModule. New test cases are then 
+        * executed by calling first GetTestCases and then RunTestCase. Thus
+        * new test cases can be run from the Test Module without restarting
+        * the Test Framework.
+        */
+        IMPORT_C TInt AddConfigFile( const TName& aTestModule,
+                                     const TFileName& aConfigFile );
+
+        /**
+        * RemoveConfigFile is used to remove a config file from the
+        * Test Module specified by aTestModule. 
+        */
+        IMPORT_C TInt RemoveConfigFile( const TName& aTestModule,
+                                        const TFileName& aConfigFile );
+
+        /**
+        * Test cases are inquired by two-phased operation calling first the
+        * EnumerateTestCases method and then the GetTestCases. Test cases are
+        * inquired from Test Engine that will inquire them from Test Modules.
+        * EnumerateTestCases requests the needed array size for test cases that
+        * will be inquired by GetTestCases method. When the EnumerateTestCases
+        * is completed succesfully the GetTestCases method is called to
+        * retrieve test cases to CArrayFixFlat <TTestInfo> list object.
+        *
+        * TTestInfo defines individual test case and, if needed, a test set
+        * (TName iParent) where the test case belongs to. TTestInfo is used to
+        * create test case by calling RTestCase::Open that constructs the
+        * actual test case. Test case is then executed calling
+        * RTestCase::RunTestCase.
+        */
+        IMPORT_C void EnumerateTestCases( TCaseCount& aCount,
+                                          TRequestStatus& aStatus );
+
+        /**
+        * GetTestCases retrieves test cases from Test Modules to 
+        * aTestCaseBuffer that is a list consisting of several TTestInfo 
+        * objects. If this method is called without previously succesfully
+        * called EnumerateTestCases method, this function returns the
+        * KErrNotReady.
+        */
+        IMPORT_C TInt GetTestCases(
+                            CFixedFlatArray<TTestInfo>& aTestCaseBuffer );
+
+        /**
+        * Asynchronous request can be canceled with CancelAsyncRequest method.
+        * The aReqToCancel parameter defines the request that will be canceled.
+        */
+        IMPORT_C TInt CancelAsyncRequest( TInt aReqToCancel );
+        
+        /**
+        * Event is used to get and set events in STIF Test Framework.
+        * TEventIf defines the event request information.
+        */
+        IMPORT_C void Event( TEventIfPckg& aEvent,
+                             TRequestStatus& aStatus );
+
+        /**
+        * Used to get Logger's overwrite parameters.
+        */
+        IMPORT_C TInt OpenLoggerSession( RTestEngineServer& aServer,
+                                            TLoggerSettings& aLoggerSettings );
+
+        /**
+        * ErrorNotification obtains error notifications from test engine.
+        */
+        IMPORT_C void ErrorNotification( TErrorNotificationPckg& aError,
+                                         TRequestStatus& aStatus );
+
+        /**
+        * Add info about test case to test report.
+        */
+        IMPORT_C TInt AddTestCaseResultToTestReport(const TTestInfo& aTestInfo,
+                                                    const TFullTestResult& aTestResult,
+                                                    const TInt aError);
+                                         
+    public:     // Functions from base classes
+        
+    protected:  // New functions
+
+    protected:  // Functions from base classes
+
+    private:    // New functions
+
+    public:     // Data
+
+    protected:  // Data
+
+    private:    // Data
+
+    public:     // Friend classes
+
+    protected:  // Friend classes
+
+    private:    // Friend classes
+
+    };
+    
+// DESCRIPTION
+
+// RTestCase class represents a subsession with the RTestEngineServer.
+// Each RTestCase corresponds to a specific CTestExecution (a CObject
+// derived class) in the server. Messages are passed via the RTestEngineServer.
+// A RTestCase stores a handle from it's server side CTestExecution,
+// and uses this to identify the CTestExecution during communication.
+
+class RTestCase
+        : public RSubSessionBase 
+    {
+
+    public:     // Structured classes
+
+    public:     // Enumerations
+
+    private:    // Enumerations
+
+    public:     // Constructors and destructor
+
+        /**
+        * Open creates a subsession for new test case. Test case is initialized
+        * using aTestCaseInfo parameter. The aTestCaseInfo is TTestInfoPckg 
+        * that is a packaged TTestInfo. TTestInfo is got from the Test Engine
+        * by calling RTestEngine::GetTestCases method.
+        * If there was previously called RemoveTestModule for the Test Module
+        * that is defined in aTestCaseInfo this method returns KErrLocked.
+        * This means that new test cases cannot be run from this Test Module
+        * and the user should inquire test cases available calling 
+        * RTestEngine::GetTestCases.
+        */
+        IMPORT_C TInt Open( RTestEngineServer& aServer,
+                                const TTestInfoPckg& aTestCaseInfo );
+
+        /**
+        * Closes the RTestCase subsession. Test case is normally closed
+        * immediately after the test case was completed.
+        */
+        IMPORT_C void Close();
+
+    public:     // New functions
+
+        /**
+        * RunTestCase is asynchronous method and it is completed when the test
+        * case is completed. Result of the test case is returned to 
+        * aTestResult. The aTestResult is TFullTestResultPckg that is a
+        * packaged TFullTestResult.
+        * The aStatus will have the completion result of this function. If the
+        * test case could be run (despite of succesfully or not) the KErrNone 
+        * is returned to aStatus.
+        */
+        IMPORT_C void RunTestCase( TFullTestResultPckg& aTestResult,
+                                    TRequestStatus& aStatus );
+
+        /**
+        * RunTestCase is asynchronous method and it is completed when the test
+        * case is completed. Result of the test case is returned to 
+        * aTestResult. The aTestResult is TFullTestResultPckg that is a
+        * packaged TFullTestResult.
+        * The aStatus will have the completion result of this function. If the
+        * test case could be run (despite of succesfully or not) the KErrNone 
+        * is returned to aStatus.
+        */
+        IMPORT_C void RunTestCase( TFullTestResultPckg& aTestResult,
+                                   const TDesC& aTestCaseArgs,
+                                   TRequestStatus& aStatus );        
+
+        /**
+        * Pause suspends the execution of the test case. The subsession where
+        * the test case is run is suspended and thus the test case execution is
+        * suspended. Test case execution can be later resumed by calling 
+        * Resume.
+        */
+        IMPORT_C TInt Pause();
+
+        /**
+        * Resume is used to resume the test case suspended by previously called
+        * Pause method. The test case execution should be continued immediately
+        * when the Resume is called.
+        */
+        IMPORT_C TInt Resume();
+
+        /**
+        * NotifyProgress requests different progress information from the test
+        * case execution. This information can be printed to UI. The progress
+        * information is returned to aProgress. The aProgress is
+        * TTestProgressPckg that is a packaged TTestProgress 
+        */
+        IMPORT_C void NotifyProgress( TTestProgressPckg& aProgress,
+                                        TRequestStatus& aStatus );
+                                        
+        /**
+        * NotifyRemoteType requests enable message waiting.
+        */
+        IMPORT_C void NotifyRemoteType( TStifCommandPckg& aType,
+                                        TPckg<TInt>& aMsgSize,
+                                        TRequestStatus& aStatus );
+        /**
+        * NotifyRemoteMsg gets messages.
+        */
+        IMPORT_C TInt NotifyRemoteMsg( TDes8& aMessage,
+                                       TStifCommand aType );
+
+        /**
+        * Asynchronous request can be canceled with CancelAsyncRequest method.
+        * The aReqToCancel parameter defines the request that will be canceled.
+        */
+        IMPORT_C TInt CancelAsyncRequest( TInt aReqToCancel );
+
+    public:     // Functions from base classes
+        
+    protected:  // New functions
+
+    protected:  // Functions from base classes
+
+    private:    // New functions
+
+    public:     // Data
+    
+    protected:  // Data
+
+    private:    // Data
+
+    public:     // Friend classes
+
+    protected:  // Friend classes
+
+    private:    // Friend classes
+
+    };
+
+/*
+-------------------------------------------------------------------------------
+
+    DESCRIPTION
+
+    This contains the CFixedFlatArray class definitions.
+
+-------------------------------------------------------------------------------
+*/
+template <class T>
+class CFixedFlatArray 
+        :public CBase
+    {
+    public:     // Enumerations
+
+    private:    // Enumerations
+
+    public:     // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        inline static CFixedFlatArray<T>* NewL(const TInt aSize);
+
+        /**
+        * Destructor.
+        */
+        inline ~CFixedFlatArray();
+
+    public:     // New functions
+
+        /**
+        * Return descriptor containing array. Used in server calls
+        */
+        inline TPtr8& Des();
+
+        /**
+        * Returns CFixedFlatArray internal array. Used in server calls
+        */
+        inline T& operator[] (TInt aIndex) const;
+
+        /**
+        * Returns count
+        */
+        inline TInt Count() const;
+
+        /**
+        * Sets aBuf to array slot specified by aIndex
+        */
+        inline void Set( TInt aIndex, T& aBuf );
+
+    public:     // Functions from base classes
+
+    protected:  // New functions
+
+    protected:  // Functions from base classes
+
+    private:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        inline void ConstructL(const TInt aSize);
+
+        /**
+        * C++ default constructor.
+        */
+        inline CFixedFlatArray();
+
+        /**
+        * Check that given index is correct.
+        */
+        inline void CheckIndex( TInt aIndex ) const;
+
+    protected:  // Data
+
+    private:    // Data
+        // Array
+        T*      iArray;
+
+        // Count
+        TInt    iCount;
+
+        // Buffer
+        HBufC8* iBuffer;
+        TPtr8   iBufferPtr;
+
+    public:     // Friend classes
+
+    protected:  // Friend classes
+
+    private:    // Friend classes
+
+    };
+
+#include <TestEngineClient.inl>
+
+
+#endif // TEST_ENGINE_CLIENT_H
+
+// End of File