stif/TestServer/src/Testundertaker.cpp
branchRCL_3
changeset 19 07b41fa8d1dd
parent 18 3406c99bc375
child 20 ca8a1b6995f6
--- a/stif/TestServer/src/Testundertaker.cpp	Thu Jul 15 20:25:38 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,492 +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 module contains implementation of CUnderTaker 
-* class member functions. CUnderTaker is a class, which listens 
-* on Test Execution Thread death, and if that thread dies, then 
-* UnderTaker aborts the ongoing test execution request.
-*
-*/
-
-// INCLUDE FILES
-#include <e32std.h>
-#include <e32svr.h>
-#include "TestEngineClient.h"
-#include <StifTestModule.h>
-#include <stifinternal/TestServerClient.h>
-#include "TestServer.h"
-#include "TestServerModuleIf.h"
-#include "TestServerCommon.h"
-#include "PrintQueue.h"
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES  
-
-// CONSTANTS
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// ==================== LOCAL FUNCTIONS =======================================
-
-// ================= MEMBER FUNCTIONS =========================================
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CUnderTaker
-
-    Method: NewL
-
-    Description: Constructs a new CUnderTaker object.
-
-    Parameters: CTestModuleContainer* aContainer :in:   "Parent"
-
-    Return Values: CUnderTaker*                         New undertaker
-
-    Errors/Exceptions: Leaves if memory allocation or ConstructL leaves.
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-CUnderTaker* CUnderTaker::NewL( CTestModuleContainer* aContainer )
-    {
-
-    CUnderTaker* self = new( ELeave ) CUnderTaker();
-    CleanupStack::PushL( self );
-    self->ConstructL( aContainer );
-    CleanupStack::Pop( self );
-    return self;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CUnderTaker
-
-    Method: ConstructL
-
-    Description: Second level constructor.
-
-    Parameters: CTestModuleContainer* aExecution :in:   "Parent"
-
-    Return Values: None
-
-    Errors/Exceptions: Panics if aContainer is NULL
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CUnderTaker::ConstructL( CTestModuleContainer* aContainer )
-    {
-
-    __ASSERT_ALWAYS( aContainer, 
-                     CTestServer::PanicServer( ENullTestModuleContainer ) );
-
-    iModuleContainer = aContainer;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CUnderTaker
-
-    Method: CUnderTaker
-
-    Description: Constructor
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CUnderTaker::CUnderTaker() :
-    CActive( CActive::EPriorityHigh+1 )
-    {
-
-    // By default in asynchronous mode
-    iSynchronousMode = EFalse;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CUnderTaker
-
-    Method: ~CUnderTaker
-
-    Description: Destructor. 
-    Cancels active request.
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-CUnderTaker::~CUnderTaker()
-    {
-
-    Cancel();
-
-    }
-
-
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CUnderTaker
-
-    Method: StartL
-
-    Description: Starts to monitor thread.
-
-    Parameters: None
-
-    Return Values: TInt                             Always KErrNone
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-TInt CUnderTaker::StartL()
-    {
-    
-    SetActive();
-    iModuleContainer->iThread.Logon( iStatus );
-    iCancelNeeded = ETrue;
-
-    return KErrNone;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CUnderTaker
-
-    Method: RunL
-
-    Description: Handles thread death.
-    Function does:
-    1 ) Stops monitoring thread
-    1 ) Marks thread death
-    2 ) Completes ongoing requests
-    3 ) Cleans the memory
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CUnderTaker::RunL()
-    {
-
-    // Make sure that any of the test interference thread's won't stay to run.
-    iModuleContainer->KillTestinterferenceThread();
-
-    // Make sure that any of the test measurement's process won't stay to run.
-    iModuleContainer->KillTestMeasurement();
-
-    // Get the exit category
-    TName exitCategory = _L( "Crash reason:" );
-    exitCategory.Append( iModuleContainer->iThread.ExitCategory() );
-    TInt exitReason = iModuleContainer->iThread.ExitReason();
-    TFullTestResult::TCaseExecutionResult exitType = TFullTestResult::ECaseException;
-    if( iModuleContainer->iThread.ExitType() == EExitPanic )
-        {
-        exitType = TFullTestResult::ECasePanic;
-        }    
-
-    // it is not running anymore..
-    iModuleContainer->iUpAndRunning = EFalse;
-
-    // Do not monitor anymore.
-    iModuleContainer->iThread.LogonCancel( iStatus );
-    iCancelNeeded = EFalse;
-
-    __TRACE( KError,( CStifLogger::ERed, _L( "Execution thread crashed, exitReason = %d" ), exitReason ) );
-    __TRACE( KError,( CStifLogger::ERed, exitCategory ) );    
-
-    if ( iSynchronousMode )
-        {        
-
-        // Synchronous request was running. Complete that 
-          // operation.
-        __TRACE( KVerbose,( _L( "CUnderTaker::RunL Crash during synchronous operation" ) ) );
-        iModuleContainer->iErrorResult = KErrDied;
-        iModuleContainer->Cancel();
-        iModuleContainer->iUpAndRunning = EFalse;
-
-        // Print notification
-        TName operationText = _L("Test module died when calling:");
-        operationText.Append( iModuleContainer->iOperationText );
-
-        // Print to log file        
-        __TRACE( KError,( CStifLogger::ERed, operationText ) );
-        // Print to UI
-        iModuleContainer->iCTestModule->ErrorPrint ( 1, operationText );        
-
-        // Stop active scheduler.
-        CActiveScheduler::Stop();
-
-        // Execution continues from CTestModuleContainer::StartAndWaitOperation.
-
-        }
-    else
-        {// Test case was running, 
-
-        __TRACE( KError,( _L( "Test case execution aborted" ) ) );
-        __TRACE( KVerbose,( _L( "CUnderTaker::Run crash during test execution" ) ) );      
-
-        TInt caseResult = KErrGeneral;
-        
-        // Check if case have any special panic or exception codes that are "passed"
-        if ( iModuleContainer->iAllowedExitReason != 
-             CTestModuleIf::ENormal )            
-            {
-                
-            if ( iModuleContainer->iAllowedExitReason == 
-                 CTestModuleIf::EPanic &&
-                 exitType == TFullTestResult::ECasePanic &&
-                 iModuleContainer->iAllowedExitCode == exitReason )
-                {
-                exitType = TFullTestResult::ECaseExecuted;
-                caseResult = KErrNone;
-                exitCategory = _L("Allowed case panic");
-                
-                __TRACE( KError,( _L( "Test case execution panic, setting to OK" ) ) );
-                }
-
-            if ( iModuleContainer->iAllowedExitReason == 
-                 CTestModuleIf::EException &&
-                 exitType == TFullTestResult::ECaseException &&
-                 iModuleContainer->iAllowedExitCode == exitReason )
-                {
-                exitType = TFullTestResult::ECaseExecuted;
-                caseResult = KErrNone;
-                exitCategory = _L("Allowed case exception");
-
-                __TRACE( KError,( _L( "Test case execution exception, setting to OK" ) ) );
-                }
-            
-            
-            }
-
-        // This was asynchronous request, and nobody is waiting for it
-        // completion in server, so all clean-up must be done here
-
-        // Forget iTestThreadContainer pointer, memory is freed because test thread
-        // is destroyed   
-        // This is needed to prevent from accessing memory from thread that is destroyed.
-        // Do this only if test is been executed.
-        iModuleContainer->iThreadContainer = NULL;
-
-        if (iModuleContainer->iCTestExecution != NULL)
-        	{
-			// Execution thread have been killed
-			iModuleContainer->iCTestExecution->SetThreadState( CTestExecution::ECancelled );
-	
-			
-			// Cancel the request
-			iModuleContainer->iCTestExecution->CompleteTestExecution( KErrNone,
-																	  exitType,
-																	  exitReason,
-																	  caseResult,
-																	  exitCategory );
-	
-			// If the print queue is empty, and there is active print
-			// request, then cancel that request. 
-			// NOTE: Case queue not empty AND request waiting AND
-			//       thread terminated can't happen due iPrintMutex
-			iModuleContainer->iCTestExecution->CompletePrintRequestIfQueueEmpty();
-        	}
-        else
-        	{
-        	__TRACE( KError,( _L( "STIF internal error - iCTestExecution is NULL in CUnderTaker::RunL." ) ) );
-        	User::Leave(KErrGeneral);
-        	}
-        // Free the memory
-        // Remove undertaker from module container to make sure that
-        // it does not delete this.
-        iModuleContainer->iUnderTaker = NULL;
-        delete iModuleContainer;
-        iModuleContainer = NULL;
-
-        // Suicide. "Parent", i.e iModuleContainer has already died
-        // and no-one have pointer to this active object, so die.
-        delete this;
-
-        }
-       
-    }
-
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CUnderTaker
-
-    Method: DoCancel
-
-    Description: Stops thread monitoring
-
-    Parameters: None
-
-    Return Values: None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-    
--------------------------------------------------------------------------------
-*/
-
-void CUnderTaker::DoCancel()
-    {
-
-    if( iCancelNeeded && iModuleContainer )
-        {
-        iModuleContainer->iThread.LogonCancel( iStatus );
-        }
-    else
-        {
-        // Note that iModuleContainer can be NULL if iCancelNeeded is EFalse
-        __ASSERT_ALWAYS( iModuleContainer, 
-                         CTestServer::PanicServer( ENullTestModuleContainer ) );
-        }
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CUnderTaker
-
-    Method: RunError
-
-    Description: Handle errors. RunL function does not leave, so one should
-    never come here. 
-
-    Print trace and let framework handle error( i.e to do Panic )
-
-    Parameters: TInt aError:                  :in:  Error code
-
-    Return Values:  TInt                            Error code
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TInt CUnderTaker::RunError( TInt aError )
-    {
-    __TRACE( KError,( _L( "CUnderTaker::RunError" ) ) );
-
-    return aError;
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CUnderTaker
-
-    Method: Completed
-
-    Description: Is request completed
-
-    Parameters: None
-
-    Return Values:  TBool                           Completed?
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-TBool CUnderTaker::Completed()
-    {
-
-    if( iStatus == KRequestPending )
-        {
-        return EFalse;
-        }
-    else
-        {
-        return ETrue;
-        }
-
-    }
-
-/*
--------------------------------------------------------------------------------
-
-    Class: CUnderTaker
-
-    Method: SetSynchronousMode
-
-    Description: Set or unsets local processing mode
-
-    Parameters: const TBool aMode             :in:  Mode
-
-    Return Values:  None
-
-    Errors/Exceptions: None
-
-    Status: Proposal
-
--------------------------------------------------------------------------------
-*/
-void CUnderTaker::SetSynchronousMode( const TBool aMode )
-    {
-
-    iSynchronousMode = aMode;
-   
-    }
-
-// End of File