diff -r 7259cf1302ad -r 169364e7e4b4 stif/TestInterface/src/TestModuleIf.cpp --- a/stif/TestInterface/src/TestModuleIf.cpp Tue Jul 06 16:05:13 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1746 +0,0 @@ -/* -* 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 TestModuleIf implementation. -* -*/ - -// INCLUDE FILES -#include -#include "StifTFwIfProt.h" -#include "StifTestInterface.h" -#include "TestServerModuleIf.h" -#include "StifTestModule.h" -#include "TestThreadContainer.h" -#include "STIFMeasurement.h" - -// EXTERNAL DATA STRUCTURES -// None - -// EXTERNAL FUNCTION PROTOTYPES -// None - -// CONSTANTS -// None - -// MACROS -// Debugging is enabled with next define -#define __TRACING_ENABLED -#ifdef __TRACING_ENABLED -#define __RDEBUG(p) RDebug::Print p -#else -#define __RDEBUG(p) -#endif - -// LOCAL CONSTANTS AND MACROS -// None - -// MODULE DATA STRUCTURES -// None - -// LOCAL FUNCTION PROTOTYPES -// None - -// FORWARD DECLARATIONS -// None - -// ==================== LOCAL FUNCTIONS ======================================= - -/* -------------------------------------------------------------------------------- - - DESCRIPTION - - TDesOverflowHandler class contains a simple overflow handler implementation. - -------------------------------------------------------------------------------- -*/ -class TDesOverflowHandler : public TDes16Overflow - { - public: - TDesOverflowHandler( CTestModuleIf* aModuleIf, - const TInt aPriority, - const TDesC& aDefinition) - { - iModuleIf = aModuleIf; - iPriority = aPriority; - iDefinition = aDefinition; - } - - void Overflow(TDes16& /*aDes*/ ) - { - } - - CTestModuleIf* iModuleIf; - TInt iPriority; - TStifInfoName iDefinition; - }; - -/* -------------------------------------------------------------------------------- - - DESCRIPTION - - This module contains the implementation of CTestModuleIf class - member functions. - -------------------------------------------------------------------------------- -*/ - -// ================= MEMBER FUNCTIONS ========================================= - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: CTestModuleIf - - Description: Default constructor - - C++ default constructor can NOT contain any code, that - might leave. - - Parameters: None - - Return Values: None - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -CTestModuleIf::CTestModuleIf( CTestThreadContainer* aTestExecution ) : - iTestExecution( aTestExecution ) - { - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: ConstructL - - Description: Symbian OS second phase constructor - - Symbian OS default constructor can leave. - - Parameters: CTestExecution* aTestExecution: in: Pointer to TestExecution - CTestModuleBase* aTestModule: in: Pointer to TestModule - - Return Values: None - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -void CTestModuleIf::ConstructL( CTestModuleBase* aTestModule ) - { - - if ( aTestModule->iTestModuleIf != NULL) - { - delete aTestModule->iTestModuleIf; - aTestModule->iTestModuleIf = NULL; - } - aTestModule->iTestModuleIf = this; - - iIsRebootReady = EFalse; - iStoreStateCounter = 0; - - // Used to "resets" iTestCaseResults array - iAllowTestCaseResultsCount = 0; - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: NewL - - Description: Two-phased constructor. - - Parameters: CTestExecution* aTestExecution: in: Pointer to TestExecution - CTestModuleBase* aTestModule: in: Pointer to TestModule - - Return Values: CTestModuleIf object. - - Errors/Exceptions: Leaves if memory allocation fails - Leaves if ConstructL leaves - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C CTestModuleIf* CTestModuleIf::NewL( CTestThreadContainer* aExecutionSession, - CTestModuleBase* aTestModule ) - { - - CTestModuleIf* self = - new (ELeave) CTestModuleIf( aExecutionSession ); - - CleanupStack::PushL( self ); - self->ConstructL( aTestModule ); - - CleanupStack::Pop(); - - return self; - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: ~CTestModuleIf - - Description: Destructor - - Parameters: None - - Return Values: None - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -CTestModuleIf::~CTestModuleIf() - { - iTestExecution = NULL; - - // Used to "resets" iTestCaseResults array - iAllowTestCaseResultsCount = 0; - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: Printf - - Description: Printing - - Printf is used to provide different information up to the UI - that can be then printed e.g. to the Console Screen. - The priority can be used in the UI to decide if the information - received from the Test DLL will be discarded or not in - the different performance situations. The priority is also - used in the Test DLL server and in the Test Engine to queue - the Printf responses. - This method is implemented in Test DLL Server and the Test DLL - can call it to provide printable information to the UI. - - Parameters: const TInt aPriority: in: - Importance of the returned information - const TDesC& aDefinition: in: - Definition of data to be printed - TRefByValue aFmt: in: Printed data - - Return Values: None - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C void CTestModuleIf::Printf( const TInt aPriority, - const TDesC& aDefinition, - TRefByValue aFmt, - ... - ) - { - - if( !IsServerAlive() ) - { - return; - } - - VA_LIST list; - VA_START(list,aFmt); - TName aBuf; - RBuf buf; - TInt ret = buf.Create(1024); - if(ret != KErrNone) - { - __RDEBUG((_L("STF: Printf: Buffer creation failed [%d]"), ret)); - return; - } - - // Cut the description length - TInt len = aDefinition.Length(); - if ( len > KMaxInfoName ) - { - len = KMaxInfoName; - } - - TStifInfoName shortDescription = aDefinition.Left(len); - - // Create overflow handler - TDesOverflowHandler overFlowHandler (this, aPriority, shortDescription); - - // Parse parameters - buf.AppendFormatList(aFmt, list, &overFlowHandler); - - if(buf.Length() == 0) - { - __RDEBUG((_L("STF: Printf: Unable to prepare print buffer (probably printed string is too long)"))); - } - - // Print - aBuf.Copy(buf.Left(aBuf.MaxLength())); - buf.Close(); - - iTestExecution->DoNotifyPrint( aPriority, shortDescription, aBuf ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: Event - - Description: Event control. - - Event function is used to control and use the event system. - TEventIf &aEvent encapsulates the request type and - the event name, see StifTestEventInterface.h for more information. - This method is implemented in Test DLL Server and the Test DLL - can call it to control the event system. - - Parameters: TEventIf& aEvent: in: Event command - - Return Values: Symbian OS error code. - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::Event( TEventIf& aEvent ) - { - - if( !IsServerAlive() ) - { - return KErrGeneral; - } - - // All event commands are handled in testserver and testengine - return iTestExecution->DoNotifyEvent( aEvent ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: Event - - Description: Event control. - - Asynchronous version of event control function. - It is used to control and use the event system asynchronously. - TEventIf &aEvent encapsulates the request type and - the event number, see StifTestEventInterface.h for more information. - This method is implemented in Test DLL Server and the Test DLL - can call it to control the event system. - - Parameters: TEventIf& aEvent: in: Event command - TRequestStatus& aStatus: in: Request status parameter - - Return Values: None. - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C void CTestModuleIf::Event( TEventIf& aEvent, TRequestStatus& aStatus ) - { - TInt ret = KErrNone; - - if( !IsServerAlive() ) - { - __RDEBUG( (_L("iTestExecution not initialised"))); - ret = KErrGeneral; - } - else - { - aStatus = KRequestPending; - - // All event commands are handled in testserver and testengine - ret = iTestExecution->DoNotifyEvent( aEvent, &aStatus ); - } - if( ret != KErrNone ) - { - TRequestStatus* rs = &aStatus; - User::RequestComplete( rs, ret ); - } - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: CancelEvent - - Description: Cancel asynchronous event control call. - - Parameters: TEventIf& aEvent: in: Event command to be cancelled. - const TRequestStatus* aStatus: in: - Pointer to TRequestStatus parameter that is cancelled - - Return Values: Symbian OS error code. - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::CancelEvent( TEventIf& aEvent, - TRequestStatus* aStatus ) - { - if( !IsServerAlive() ) - { - __RDEBUG( (_L("iTestExecution not initialised"))); - return KErrGeneral; - } - - // All event commands are handled in testserver and testengine - iTestExecution->CancelEvent( aEvent, aStatus ); - - return KErrNone; - - } - - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: SetExitReason - - Description: Set exit reason - - Parameters: const TExitReason aExitReason in: Exit reason - const TInt aExitCode in: Exit code - - Return Values: None - - Errors/Exceptions: None - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -EXPORT_C void CTestModuleIf::SetExitReason( const CTestModuleIf::TExitReason aExitReason, - const TInt aExitCode ) - - { - - if( !IsServerAlive() ) - { - __RDEBUG( (_L("iTestExecution not initialised"))); - return; - } - - iTestExecution->SetExitReason( aExitReason, aExitCode ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: RemoteSend - - Description: RemoteSend is used to send control protocol messages to slaves - (e.g. another phone, call box, ...). - - Parameters: const TDesC& aRemoteMsg: in: - Remote command protocol message - - Return Values: None - - Errors/Exceptions: None - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::RemoteSend( const TDesC& aRemoteMsg ) - { - - if( !IsServerAlive() ) - { - __RDEBUG( ( _L("iTestExecution not initialised") ) ); - return KErrNotReady; - } - - TParams params; - params.aRemoteMsgConstRef = &aRemoteMsg; - - TRequestStatus status = KRequestPending; - - // Forward - iTestExecution->DoRemoteReceive( EStifCmdSend, params, - aRemoteMsg.Length(), status ); - - User::WaitForRequest( status ); - - return status.Int(); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: RemoteReceive - - Description: RemoteReceive is used to receive control protocol messages to - slaves (e.g. another phone, call box, ...). - - Parameters: const TDesC& aRemoteMsg: in: - Remote command protocol message - TRequestStatus& aStatus: in: Request status parameter - - Return Values: None - - Errors/Exceptions: None - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -EXPORT_C void CTestModuleIf::RemoteReceive( TDes& aRemoteMsg, - TRequestStatus& aStatus ) - { - aStatus = KRequestPending; - if( !IsServerAlive() ) - { - __RDEBUG( ( _L("iTestExecution not initialised") ) ); - TRequestStatus* rs = &aStatus; - User::RequestComplete( rs, KErrNotReady ); - } - - TParams params; - params.aRemoteMsgRef = &aRemoteMsg; - - iTestExecution->DoRemoteReceive( EStifCmdReceive, params, - aRemoteMsg.Length(), aStatus ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: RemoteReceiveCancel - - Description: RemoteReceiveCancel is used to cancel RemoteReceive. - - Parameters: None - - Return Values: None - - Errors/Exceptions: None - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -EXPORT_C void CTestModuleIf::RemoteReceiveCancel() - { - if( !IsServerAlive() ) - { - __RDEBUG( ( _L("iTestExecution not initialised") ) ); - return; - } - - // Forward - iTestExecution->DoRemoteReceiveCancel(); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: Reboot - - Description: Start a reboot operation. - - Parameters: TInt aType: in: Reboot type - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: KErrNotReady returned if iTestExecution is NULL. - KErrNotReady returned if reboot not allowed(Store state - not called). - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::Reboot( TInt aType ) - { - if ( !IsServerAlive() ) - { - __RDEBUG( ( _L( "iTestExecution not initialised" ) ) ); - return KErrNotReady; - } - if( !iIsRebootReady ) - { - __RDEBUG( ( _L( "Reboot operation not ready" ) ) ); - return KErrNotReady; - } - -/* switch( aType ) - { - case EDefaultReset: - __RDEBUG( ( _L( "Reboot, type default" )) ); - break; - case EKernelReset: - __RDEBUG( ( _L( "Reboot, type KernelReset" )) ); - break; - case EDeviceReset0: - __RDEBUG( ( _L( "Reboot, type Reset 0" )) ); - break; - case EDeviceReset1: - __RDEBUG( ( _L( "Reboot, type Reset 1" )) ); - break; - case EDeviceReset2: - __RDEBUG( ( _L( "Reboot, type Reset 2" )) ); - break; - case EDeviceReset3: - __RDEBUG( ( _L( "Reboot, type Reset 3" )) ); - break; - case EDeviceReset4: - __RDEBUG( ( _L( "Reboot, type Reset 4" )) ); - break; - case EDeviceReset5: - __RDEBUG( ( _L( "Reboot, type Reset 5" )) ); - break; - default: - __RDEBUG( ( _L( "Reboot type %d not supported" ), aType ) ); - return KErrNotSupported; - } -*/ - - TParams params; - TRebootParams rebootParams; - - params.aRebootType = &rebootParams; - rebootParams.aType = ( TRebootType )aType; - - TRequestStatus status = KRequestPending; - - // Forward - iTestExecution->DoRemoteReceive( EStifCmdReboot, params, sizeof( aType ), status ); - - User::WaitForRequest( status ); - - return status.Int(); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: StoreState - - Description: Stores the current state before reboot. - - Parameters: TInt aCode: in: Reboot releated integer value. - TName& aName: in: Reboot related string value. - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: KErrNotReady returned if iTestExecution is NULL. - KErrOverflow returned if aName length is over TName. - KErrInUse returned if method is called more than once. - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::StoreState( TInt aCode, TName& aName ) - { - iStoreStateCounter++; // Store state counter - - if ( !IsServerAlive() ) - { - __RDEBUG( ( _L( "iTestExecution not initialised" ) ) ); - return KErrNotReady; - } - // Check aName length - if ( aName.Length() > KMaxName ) - { - __RDEBUG( ( _L( "CTestModuleIf::StoreState(): aName length is not valid" ) ) ); - return KErrOverflow; - } - // Only one store state call may be done - if( iStoreStateCounter > 1 ) - { - __RDEBUG( ( _L( "Store state allready called" ) ) ); - return KErrInUse; - } - - TParams params; - TRebootStateParams rebootStateParams; - params.aRebootState = &rebootStateParams; - rebootStateParams.aCode = aCode; - rebootStateParams.aName = aName; - - TRequestStatus status = KRequestPending; - - // Forward - iTestExecution->DoRemoteReceive( EStifCmdStoreState, params, - sizeof( TRebootStateParams), status ); - - User::WaitForRequest( status ); - - // If store state is done successfully reboot operation is allowed - if( status.Int() == KErrNone ) - { - iIsRebootReady = ETrue; - } - - return status.Int(); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: GetStoredState - - Description: Get saved store information after the reboot. - - Parameters: TInt aCode: inout: Get reboot releated integer value. - TName& aName: inout: Get reboot related string value. - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: KErrNotReady returned if iTestExecution is NULL. - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::GetStoredState( TInt& aCode, TName& aName ) - { - if( !IsServerAlive() ) - { - __RDEBUG( ( _L( "iTestExecution not initialised" ) ) ); - return KErrNotReady; - } - - TInt code; - TName name; - - TParams params; - TGetRebootStoredParamsRef getRebootStoredParamsRef( code, name ); - - params.aRebootStoredRef = &getRebootStoredParamsRef; - - TRequestStatus status = KRequestPending; - - // Forward - iTestExecution->DoRemoteReceive( EStifCmdGetStoredState, params, - sizeof( TRebootStateParams), status ); - - User::WaitForRequest( status ); - - // Return results if getting state is done without error - if(status.Int() == KErrNone) - { - aCode = code; - aName = name; - } - - return status.Int(); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: SetBehavior - - Description: Set test case behavior. - - Parameters: TInt aCode: inout: Get reboot releated integer value. - TName& aName: inout: Get reboot related string value. - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: KErrNotReady returned if iTestExecution is NULL. - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::SetBehavior( TTestBehavior aType, TAny* aPtr ) - { - - if( !IsServerAlive() ) - { - return KErrGeneral; - } - - // All event commands are handled in testserver and testengine - return iTestExecution->SetBehavior( aType, aPtr ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: StifMacroError - - Description: STIF TF's macros. Saves information for later use. - - Parameters: TInt aMacroType: in: Macro type(0:TL, 1:T1L, 2:T2L, etc.) - const TText8* aFile: in: Uses __FILE__ macro and this includes - path and file name. Maximun length for this is - KStifMacroMaxFile. If length is more then cutted from left. - char* aFunction: in: Uses __FUNCTION__ macro and this includes - function name. Maximun length for this is - KStifMacroMaxFunction. If length is more then cutted from - rigth. - TInt aLine: in: Uses __LINE__ macro and includes line number. - TInt aResult: in: Result from called operations. - TInt aExpected1: in: Users expected result. - TInt aExpected2: in: Users expected result. - TInt aExpected3: in: Users expected result. - TInt aExpected4: in: Users expected result. - TInt aExpected5: in: Users expected result. - - Return Values: Symbian OS error code. - - Errors/Exceptions: None - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::StifMacroError( TInt aMacroType, - const TText8* aFile, - const char* aFunction, - TInt aLine, - TInt aResult, - TInt aExpected1, - TInt aExpected2, - TInt aExpected3, - TInt aExpected4, - TInt aExpected5 ) - { - if( !IsServerAlive() ) - { - return KErrGeneral; - } - - return iTestExecution->StifMacroError( aMacroType, aFile, - aFunction, aLine, - aResult, aExpected1, - aExpected2, aExpected3, - aExpected4, aExpected5 ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: ServerAlive - - Description: Get saved store information after the reboot. - - Parameters: TInt aCode: inout: Get reboot releated integer value. - TName& aName: inout: Get reboot related string value. - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: KErrNotReady returned if iTestExecution is NULL. - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -TBool CTestModuleIf::IsServerAlive() - { - - if( iTestExecution == NULL ) - { - __RDEBUG( ( _L( "iTestExecution not initialised" ) ) ); - // Execution not initialized - return EFalse; - } - - return ETrue; - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: AddInterferenceThread - - Description: - - Parameters: RThread aSTIFTestInterference: in: Handle to RThread - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -TInt CTestModuleIf::AddInterferenceThread( RThread aSTIFTestInterference ) - { - // Add thread to Array. Via array can handle test interference thread's - // kill in panic etc. cases - return iTestExecution->AddInterferenceThread( aSTIFTestInterference ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: RemoveInterferenceThread - - Description: - - Parameters: RThread aSTIFTestInterference: in: Handle to RThread - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -TInt CTestModuleIf::RemoveInterferenceThread( RThread aSTIFTestInterference ) - { - // Remove thread from Array.Test interference thread is stopped and killed - // successfully - return iTestExecution->RemoveInterferenceThread( aSTIFTestInterference ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: HandleMeasurementProcess - - Description: With this can be stored information about test measurement - to TestServer space. - - Parameters: RProcess aTestMeasurement: in: Handle to RProcess - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: - - Status: Approved - -------------------------------------------------------------------------------- -*/ -TInt CTestModuleIf::HandleMeasurementProcess( - CSTIFTestMeasurement::TStifMeasurementStruct aSTIFMeasurementInfo ) - { - // Add process to Array. Via array can handle test measurement process's - // kill in panic etc. cases - return iTestExecution->HandleMeasurementProcess( aSTIFMeasurementInfo ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: GetMeasurementOptions - - Description: Get measurement option(s) given from initialization file etc. - - Parameters: TInt& aOptions: inout: Get measurement option(s) - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: KErrNotReady returned if iTestExecution is NULL. - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::GetMeasurementOptions( TInt& aOptions ) - { - if( !IsServerAlive() ) - { - __RDEBUG( ( _L( "iTestExecution not initialised" ) ) ); - return KErrNotReady; - } - - TParams params; - TGetMeasurementOptionsRef getMeasurementOptionsRef( aOptions ); - params.aMeasurementOption = &getMeasurementOptionsRef; - - TRequestStatus status = KRequestPending; - - // Forward - iTestExecution->DoRemoteReceive( EStifCmdMeasurement, params, - sizeof( TGetMeasurementOptions ), status ); - - User::WaitForRequest( status ); - - aOptions = getMeasurementOptionsRef.iOptions; - - return status.Int(); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: SetAllowResult - - Description: Use with TAL, TA1L, TA2L, TA3L, TA4L and TA5L macros to allow - results. - Set test case allow result given by user. In TestScripter - cases allow result can set by 'allownextresult' or - 'allowerrorcodes' keywords. In Normal and Hardcoded test - modules allow result can be set with this method, reset should - be done with ResetAllowResult method. - - Parameters: TInt aResult: in: Result value to be appended. - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::SetAllowResult( TInt aResult ) - { - for( TInt a = 0; a < iAllowTestCaseResultsCount; a++ ) - { - // Check that result is not given already - if ( iTestCaseResults[a] == aResult ) - { - return KErrNone; - } - } - // If values are given more that allow(see KSTIFMacroResultArraySize). - // Array starts from 0...9 -> 10 => 10th should fail - if( iAllowTestCaseResultsCount >= KSTIFMacroResultArraySize ) - { - __RDEBUG( ( - _L( "STIF macro's SetAllowResult() allow only %d results, fails with %d" ), - KSTIFMacroResultArraySize, KErrOverflow ) ); - return KErrOverflow; - } - - // New result - iAllowTestCaseResultsCount++; - iTestCaseResults[iAllowTestCaseResultsCount-1] = aResult; - - return KErrNone; - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: CheckAllowResult - - Description: This is mainly used by STIF's TAL-TA5L macros internally. - Check is macros result allowed result. - - Parameters: TInt aResult: in: Result value to be checked. - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::CheckAllowResult( TInt aResult ) - { - // Check is result allowed - for( TInt a = 0; a < iAllowTestCaseResultsCount; a++ ) - { - if ( iTestCaseResults[a] == aResult ) - { - // Result is allow - __RDEBUG( ( _L( "STIF TAL-TA5L macro's result check. Test case result[%d] allowed" ), - aResult ) ); - return KErrNone; - } - } - - __RDEBUG( ( - _L( "STIF TAL-TA5L macro's result check. Test case result[%d] not allowed" ), - aResult ) ); - // No match with allow result - return KErrGeneral; - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: ResetAllowResult - - Description: Use with TAL, TA1L, TA2L, TA3L, TA4L and TA5L macros to reset - allowed results. - Reset allow result(s) given with SetAllowResult. In - TestScripter cases this will be called automatically by STIF. - Normal and Hardcoded cases this should be called by user. - - Parameters: None. - - Return Values: TInt: Symbian OS error code. - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::ResetAllowResult() - { - // Used to "resets" iTestCaseResults array - iAllowTestCaseResultsCount = 0; - - return KErrNone; - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: StopExecution - - Description: Causes that test case is going to be cancelled. - - Parameters: None - - Return Values: Symbian OS error code. - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CTestModuleIf::StopExecution(TStopExecutionType aType, TInt aCode) - { - - //Check parameters - if((aType == EOk) && (aCode != KErrNone)) - { - return KErrArgument; - } - else if((aType != EOk) && (aCode == KErrNone)) - { - return KErrArgument; - } - - //Check server - if(!IsServerAlive()) - { - return KErrGeneral; - } - - //Everything is ok, we can continue with processing command - _LIT(KStopExecution, "StopExecution"); - const TInt KPrintPriority = 30; - - switch(aType) - { - case EOk: - Printf(KPrintPriority, KStopExecution, _L("***Test case PASSED***\n\n")); - break; - case EFail: - Printf(KPrintPriority, KStopExecution, _L("***Test case FAILED***\n\n")); - break; - case EAbort: - Printf(KPrintPriority, KStopExecution, _L("***Test case KILLED***\n\n")); - break; - default: - return KErrNotFound; - } - - TStopExecutionCommandParams params; - params.iType = aType; - params.iCode = aCode; - __RDEBUG((_L("CTestModuleIf::StopExecution(): type [%d] code [%d]"), TInt(aType), aCode)); - - TStopExecutionCommandParamsPckg pckg(params); - - TInt res = Command(EStopExecution, pckg); - return res; - } - -/* ------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: SendTestModuleVersion - - Description: SendTestModuleVersion method is used to pass version of test module - ------------------------------------------------------------------------------- - */ -EXPORT_C TInt CTestModuleIf::SendTestModuleVersion(TVersion aVersion, TFileName aModuleName) - { - if( aModuleName.Length() == 0 ) - { - return KErrArgument; - } - - //Check server - if(!IsServerAlive()) - { - return KErrGeneral; - } - - const TInt KPrintPriority = 30; - _LIT(KVersion ,"SendTestModuleVersion"); - Printf(KPrintPriority, KVersion, _L("Sending test module version")); - - TSendTestModuleVesionCommandParams params; - params.iMajor = aVersion.iMajor; - params.iMinor = aVersion.iMinor; - params.iBuild = aVersion.iBuild; - params.iTestModuleName = aModuleName; - - TSendTestModuleVesionCommandParamsPckg pckg(params); - TInt res = Command( ESendTestModuleVersion, pckg ); - return res; - } - - -/* ------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: SendTestModuleVersion - - Description: SendTestModuleVersion method is used to pass version of test module. - This version uses three parameters to enable the overloading of version with - two parameters. The version with two params has params passed by value which - is incorrect. The "old" version (with two parameters) is left here not to cause - binary break. Only this version (with three parameters) should be used. - ------------------------------------------------------------------------------- - */ -EXPORT_C TInt CTestModuleIf::SendTestModuleVersion(TVersion& aVersion, const TDesC& aModuleName, TBool /*aNewVersion*/) - { - if( aModuleName.Length() == 0 ) - { - return KErrArgument; - } - - //Check server - if(!IsServerAlive()) - { - return KErrGeneral; - } - - const TInt KPrintPriority = 30; - _LIT(KVersion ,"SendTestModuleVersion"); - Printf(KPrintPriority, KVersion, _L("Sending test module version")); - - TSendTestModuleVesionCommandParams params; - params.iMajor = aVersion.iMajor; - params.iMinor = aVersion.iMinor; - params.iBuild = aVersion.iBuild; - params.iTestModuleName = aModuleName; - - TSendTestModuleVesionCommandParamsPckg pckg(params); - TInt res = Command( ESendTestModuleVersion, pckg ); - return res; - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: Command - - Description: Sends specific command to TestServer. - - Parameters: aCommand - command to be send - - Return Values: Symbian OS error code. - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -TInt CTestModuleIf::Command(TCommand aCommand, const TDesC8& aParamsPckg) - { - TInt res = KErrNone; - - if( !IsServerAlive() ) - { - return KErrGeneral; - } - - switch(aCommand) - { - case EStopExecution: - iTestExecution->DoNotifyCommand(aCommand, aParamsPckg); - break; - case ESendTestModuleVersion: - iTestExecution->DoNotifyCommand(aCommand, aParamsPckg); - break; - default: - __RDEBUG((_L("Command [%d] not recognized."), aCommand)); - } - - return res; - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: GetTestCaseTitleL - - Description: Returns title of current test case. - - Parameters: aCommand - command to be send - - Return Values: Symbian OS error code. - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C void CTestModuleIf::GetTestCaseTitleL(TDes& aTestCaseTitle) - { - iTestExecution->GetTestCaseTitleL(aTestCaseTitle); - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: GetTestCaseArguments - - Description: Returns test case arguments. - - Parameters: none - - Return Values: test case arguments. - - Errors/Exceptions: None - - Status: proposal - -------------------------------------------------------------------------------- -*/ -EXPORT_C const TDesC& CTestModuleIf::GetTestCaseArguments() const - { - return iTestExecution->GetTestCaseArguments(); - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: UITesting - - Description: Gets information if it is UI test or not - - Parameters: none - - Return Values: True if it is UI test, in other case it returns false. - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C TBool CTestModuleIf::UITesting() - { - return iTestExecution->UITesting(); - } - -/* -------------------------------------------------------------------------------- - - Class: CTestModuleIf - - Method: GetUiEnvProxy - - Description: Gets UiEnvProxy - - Parameters: none - - Return Values: Pointer to UiEnvProxy - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C CUiEnvProxy* CTestModuleIf::GetUiEnvProxy() - { - return iTestExecution->GetUiEnvProxy(); - } - -// ================= OTHER EXPORTED FUNCTIONS ================================= - - -/* -------------------------------------------------------------------------------- - - DESCRIPTION - - This module contains the implementation of CSTIFTestMeasurement class - member functions. - -------------------------------------------------------------------------------- -*/ - -// ================= MEMBER FUNCTIONS ========================================= - -/* -------------------------------------------------------------------------------- - - Class: CSTIFTestMeasurement - - Method: CSTIFTestMeasurement - - Description: Default constructor - - C++ default constructor can NOT contain any code, that - might leave. - - Parameters: CTestModuleBase* aTestModuleBase: in: Pointer to STIF - - Return Values: None - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -CSTIFTestMeasurement::CSTIFTestMeasurement( CTestModuleBase* aTestModuleBase ) : - iTestModuleBase( aTestModuleBase ), - iMeasurementOption( 0 ) - { - - } - -/* -------------------------------------------------------------------------------- - - Class: CSTIFTestMeasurement - - Method: ConstructL - - Description: Symbian OS second phase constructor - - Symbian OS default constructor can leave. - - Parameters: TSTIFMeasurement aType: in: Measurement type - const TDesC& aConfigurationInfo: in: Configuration issues - - Return Values: None - - Errors/Exceptions: Leaves if HandleMeasurementProcess returns error code - - Status: Approved - -------------------------------------------------------------------------------- -*/ -void CSTIFTestMeasurement::ConstructL( TSTIFMeasurementType aType, - const TDesC& aConfigurationInfo ) - { - // aType into struct here. This is compared to - iMeasurementStruct.iMeasurementType = aType; - - // Check that measurement is not disabled(This is given from UI level or - // from TestFramework.ini file) - TInt ret( 0 ); - ret = iTestModuleBase->TestModuleIf().GetMeasurementOptions( - iMeasurementOption ); - if( ret != KErrNone ) - { - __RDEBUG( ( _L( "GetMeasurementOptions() return an error[%d]" ), ret ) ); - User::Leave( ret ); - } - - // Check that measurement is not disabled - if( ( iMeasurementOption & EDisableAll ) == EDisableAll ) - { - __RDEBUG( _L( "Measurement disable option [KStifMeasurementDisableAll] is given by user" ) ); - return; - } - if( ( ( iMeasurementOption & EMeasurement01 ) == EMeasurement01 ) && aType == KStifMeasurementPlugin01 ) - { - __RDEBUG( _L( "Measurement disable option [KStifMeasurement01] is given by user" ) ); - return; - } - if( ( ( iMeasurementOption & EMeasurement02 ) == EMeasurement02 ) && aType == KStifMeasurementPlugin02 ) - { - __RDEBUG( _L( "Measurement disable option [KStifMeasurement02] is given by user" ) ); - return; - } - if( ( ( iMeasurementOption & EMeasurement03 ) == EMeasurement03 ) && aType == KStifMeasurementPlugin03 ) - { - __RDEBUG( _L( "Measurement disable option [KStifMeasurement03] is given by user" ) ); - return; - } - if( ( ( iMeasurementOption & EMeasurement04 ) == EMeasurement04 ) && aType == KStifMeasurementPlugin04 ) - { - __RDEBUG( _L( "Measurement disable option [KStifMeasurement04] is given by user" ) ); - return; - } - if( ( ( iMeasurementOption & EMeasurement05 ) == EMeasurement05 ) && aType == KStifMeasurementPlugin05 ) - { - __RDEBUG( _L( "Measurement disable option [KStifMeasurement05] is given by user" ) ); - return; - } - if( ( ( iMeasurementOption & EBappea ) == EBappea ) && aType == KStifMeasurementBappeaProfiler ) - { - __RDEBUG( _L( "Measurement disable option [KStifMeasurementBappea] is given by user" ) ); - return; - } - - iMeasurementStruct.iConfigurationInfo = aConfigurationInfo; - iMeasurementStruct.iMeasurementOperation = KMeasurementNew; - iMeasurementStruct.iPointerToMeasurementModule = iTestModuleBase; - - // Move measurement execution initialization forward to TestServer. - User::LeaveIfError( iTestModuleBase->iTestModuleIf->HandleMeasurementProcess( - iMeasurementStruct ) ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CSTIFTestMeasurement - - Method: NewL - - Description: Two-phased constructor. - - Parameters: CTestModuleBase* aTestModuleBase: in: Pointer to STIF. - TSTIFMeasurement aType: in: Measurement type. - const TDesC& aConfigurationInfo: in: Configuration info. - - Return Values: CSTIFTestMeasurement object. - - Errors/Exceptions: Leaves if memory allocation fails - Leaves if ConstructL leaves - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C CSTIFTestMeasurement* CSTIFTestMeasurement::NewL( - CTestModuleBase* aTestModuleBase, - TSTIFMeasurementType aType, - const TDesC& aConfigurationInfo ) - { - CSTIFTestMeasurement* self = - new (ELeave) CSTIFTestMeasurement( aTestModuleBase ); - - CleanupStack::PushL( self ); - self->ConstructL( aType, aConfigurationInfo ); - - CleanupStack::Pop(); - - return self; - - } - -/* -------------------------------------------------------------------------------- - - Class: CSTIFTestMeasurement - - Method: ~CSTIFTestMeasurement - - Description: Destructor - - Parameters: None - - Return Values: None - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -CSTIFTestMeasurement::~CSTIFTestMeasurement() - { - // None - - } - -/* -------------------------------------------------------------------------------- - - Class: CSTIFTestMeasurement - - Method: Start - - Description: Start commant for measurement. - - Parameters: None - - Return Values: Symbian error code - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CSTIFTestMeasurement::Start() - { - // Check that measurement is not disabled - if( iMeasurementOption == iMeasurementStruct.iMeasurementType ) - { - __RDEBUG( ( _L( "Measurement with type[%d] is disabled by user" ), iMeasurementOption ) ); - // Cannot return error code because this causes problems in - // TestScripter and TestCombiner error handling. Now testing continue - // without measurement. - return KErrNone; - } - - iMeasurementStruct.iMeasurementOperation = KMeasurementStart; - - // Move measurement start execution forward to TestServer. - return iTestModuleBase->iTestModuleIf->HandleMeasurementProcess( - iMeasurementStruct ); - - } - -/* -------------------------------------------------------------------------------- - - Class: CTestMeasurement - - Method: Stop - - Description: Stop command for measurement. - - Parameters: None - - Return Values: Symbian error code - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -EXPORT_C TInt CSTIFTestMeasurement::Stop() - { - // Check that measurement is not disabled - if( iMeasurementOption == iMeasurementStruct.iMeasurementType ) - { - __RDEBUG( ( _L( "Measurement with type[%d] is disabled by user" ), iMeasurementOption ) ); - // Cannot return error code because this causes problems in - // TestScripter and TestCombiner error handling. Now testing continue - // without measurement. - return KErrNone; - } - - iMeasurementStruct.iMeasurementOperation = KMeasurementStop; - - // Move measurement stop execution forward to TestServer. - return iTestModuleBase->iTestModuleIf->HandleMeasurementProcess( - iMeasurementStruct ); - - } - -// End of File