homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hspsteststep.cpp
changeset 0 79c6a41cd166
child 11 bd874ee5e5e2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/sapi_homescreenplugin/tsrc/common/src/mt_hspsteststep.cpp	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,448 @@
+/*
+* Copyright (c) 2008 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:  Implementation of MT_CHSPSTeststep class
+*
+*/
+
+
+#include <e32base.h>
+#include <s32mem.h>
+#include <eunitmacros.h>
+#include <eunitdecorators.h>
+#include "mt_hspsteststep.h"
+
+#ifdef HSPS_LOG_ACTIVE
+#include <hspslogbusfile.h>
+#include <hspslogbus.h>
+#endif
+
+// ======== LOCAL CONSTANTS ====================================================
+
+// Test step timeout
+const TInt KTestStepTimeout = 5000000;
+
+// Max input
+const TInt KTestStepInputSizeMax = 1000;
+
+// Max output
+const TInt KTestStepOutputSizeMax = 10000;
+
+// ======== LOCAL FUNCTIONS ====================================================
+
+// ---------------------------------------------------------
+// TimeoutCallback
+// ---------------------------------------------------------
+//
+TInt TimeoutCallback( TAny* aPtr )
+    {
+    TRequestStatus* status = &( ( ( MT_CHSPSTeststep* )aPtr )->iStatus );
+
+    if ( ( ( MT_CHSPSTeststep* )aPtr )->iOutParams )
+        {
+        delete ( ( MT_CHSPSTeststep* )aPtr )->iOutParams;
+        ( ( MT_CHSPSTeststep* )aPtr )->iOutParams = NULL; 
+        }
+    if ( ( ( MT_CHSPSTeststep* )aPtr )->iTimeout )
+        {
+        delete ( ( MT_CHSPSTeststep* )aPtr )->iTimeout;
+        ( ( MT_CHSPSTeststep* )aPtr )->iTimeout = NULL; 
+        }
+    
+    User::RequestComplete( status, KErrNone );
+ 
+    return KErrNone;
+    }
+
+
+// ======== MEMBER FUNCTIONS ===================================================
+
+// -----------------------------------------------------------------------------
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+MT_CHSPSTeststep* MT_CHSPSTeststep::NewL(
+    MLiwInterface& aInterface,
+    TUint8* aMethod,
+    TUint8* aInParams,
+    TUint8* aExpOutParams,
+    TBool aAsync,
+    TBool aMeasureExecTime )
+    {
+    MT_CHSPSTeststep* self = new( ELeave ) MT_CHSPSTeststep(
+        aInterface,
+        aMethod,
+        aInParams,
+        aExpOutParams,
+        aAsync,
+        aMeasureExecTime );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Constructor
+// -----------------------------------------------------------------------------
+//
+MT_CHSPSTeststep::MT_CHSPSTeststep(
+    MLiwInterface& aInterface,
+    TUint8* aMethod,
+    TUint8* aInParams,
+    TUint8* aExpOutParams,
+    TBool aAsync,
+    TBool aMeasureExecTime )
+    :CActive( CActive::EPriorityStandard )
+    ,iOutParams( NULL )
+    ,iTimeout( NULL )
+    ,iInterface( aInterface )
+    ,iMethod( aMethod )
+    ,iInParams( aInParams )
+    ,iExpOutParams( aExpOutParams )
+    ,iAsync( aAsync )
+    ,iMeasureExecTime( aMeasureExecTime )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor.
+// -----------------------------------------------------------------------------
+//    
+MT_CHSPSTeststep::~MT_CHSPSTeststep()
+    {
+    if ( iOutParams )
+    	{
+        delete iOutParams;
+        }
+    if ( iTimeout )
+        {
+        delete iTimeout;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// From CActive
+// -----------------------------------------------------------------------------
+//    
+void MT_CHSPSTeststep::RunL()
+    {
+    // Stop test thread active scheduler
+    CActiveScheduler::Stop();
+    }
+
+// -----------------------------------------------------------------------------
+// From CActive
+// -----------------------------------------------------------------------------
+//    
+TInt MT_CHSPSTeststep::RunError(
+    TInt /*aError*/ )
+    {
+    if ( iOutParams )
+        {
+        delete iOutParams;
+        iOutParams = NULL;
+        }
+    if ( iTimeout )
+        {
+        delete iTimeout;
+        iTimeout = NULL;
+        }
+    
+    return KErrNone; 
+    }
+
+// -----------------------------------------------------------------------------
+// From CActive
+// -----------------------------------------------------------------------------
+//    
+void MT_CHSPSTeststep::DoCancel()
+    {
+    if ( iOutParams )
+        {
+        delete iOutParams;
+        iOutParams = NULL;
+        }
+    if ( iTimeout )
+        {
+        delete iTimeout;
+        iTimeout = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// MLiwNotifyCallback::HandleNotifyL
+// -----------------------------------------------------------------------------
+//    
+TInt MT_CHSPSTeststep::HandleNotifyL(
+    TInt aCmdId,
+    TInt aEventId,
+    CLiwGenericParamList& aEventParamList,
+    const CLiwGenericParamList& /*aInParamList*/ )
+    {
+    aCmdId = aCmdId;
+    aEventId = aEventId;
+    
+    // Copy event parameters as a descriptor stream
+    if ( iOutParams )
+        {
+        delete iOutParams;
+        iOutParams = NULL;
+        }
+    iOutParams = CreateOutParamsL( aEventParamList );
+    
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete( status, KErrNone );
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// Calls service method
+// -----------------------------------------------------------------------------
+//    
+void MT_CHSPSTeststep::CallServiceL()
+    {
+
+    CLiwGenericParamList* inParamList;
+    CLiwGenericParamList* outParamList;
+    TInt err;
+    
+    // Create input parameter list
+    if ( iInParams )
+        {
+        // Create input parameter list from binary stream    
+        inParamList = CreateInParamListL(
+            iInParams );
+        }
+    else
+        {
+        // Create empty input parameter list
+        inParamList = CLiwGenericParamList::NewL();
+        }
+    
+    // Create empty output parameter list
+    outParamList = CLiwGenericParamList::NewL();
+    
+    // Execute test step
+    if ( !iAsync )
+        {
+        TPtrC8 method( iMethod );
+        
+        if ( iMeasureExecTime )
+            {
+            StartTiming( method );
+            }
+        
+        TRAP( err, iInterface.ExecuteCmdL( 
+            method, 
+            *inParamList, 
+            *outParamList ) );
+        
+        if ( iMeasureExecTime )
+            {
+            StopTiming();
+            }
+        
+        if ( err == KErrNone )
+            {
+            // Store outparams as descriptor stream
+            if ( iOutParams )
+                {
+                delete iOutParams;
+                iOutParams = NULL;
+                }
+            iOutParams = CreateOutParamsL( *outParamList );
+            }
+        }
+    else
+        {
+        TPtrC8 method( iMethod );
+        
+        TRAP( err, iInterface.ExecuteCmdL( 
+            method, 
+            *inParamList, 
+            *outParamList,
+            KLiwOptASyncronous,
+            this ) );
+
+        if ( err == KErrNone )
+            {
+            // Set test step to wait asynchronous response
+            CActiveScheduler::Add( this );
+            iStatus = KRequestPending;
+            SetActive();
+            
+            // Start test step timeout
+            iTimeout = CPeriodic::NewL( CActive::EPriorityStandard );
+            iTimeout->Start( 
+                TTimeIntervalMicroSeconds32( KTestStepTimeout ),
+                TTimeIntervalMicroSeconds32( KTestStepTimeout ),
+                TCallBack( TimeoutCallback, this ) );
+            }
+        }
+    
+    inParamList->Reset();
+    delete inParamList;
+    outParamList->Reset();
+    delete outParamList;
+    
+    }
+
+#ifdef HSPS_LOG_ACTIVE
+// -----------------------------------------------------------------------------
+// Debugging
+// -----------------------------------------------------------------------------
+//    
+void MT_CHSPSTeststep::DebugL(
+        const TUint8* aOutPtr )
+    {    
+    ChspsLogBus* logBus = ChspsLogBusFile::NewL( _L("LIW_test_comparison.log") );
+    CleanupStack::PushL( logBus );
+    
+    logBus->LogText( _L( "index, expected(int, char), actual(int, char)" ) );
+    
+    TBool exitNow = EFalse;
+    for ( TInt i = 0; 
+          i < iOutParams->Length() && !exitNow; 
+          i++ )
+        {
+        logBus->LogText( _L("[%5d], %3d, '%c', %3d, '%c'"),
+                         i, // index
+                         ( TUint16 )iExpOutParams[i],
+                         ( TUint16 )iExpOutParams[i],
+                         ( TUint16 )aOutPtr[i],
+                         ( TUint16 )aOutPtr[i] );
+                         
+        if ( iExpOutParams[i] != aOutPtr[i] )
+            {                    
+            exitNow = ETrue;
+            }                
+        }            
+    
+    CleanupStack::PopAndDestroy( logBus );     
+    }
+#endif    
+
+// -----------------------------------------------------------------------------
+// Checks method call output parameters
+// -----------------------------------------------------------------------------
+//    
+TInt MT_CHSPSTeststep::CheckOutParams()
+    {
+    TInt err( KErrArgument );
+
+    if ( iExpOutParams && iOutParams )
+        {
+        err = KErrNone;
+        
+        const TUint8* outPtr = ( iOutParams->Des() ).Ptr();        
+        for ( TInt i = 0; 
+              i < iOutParams->Length() && err == KErrNone; 
+              i++ )
+            {
+            if ( *( iExpOutParams + i ) != *( outPtr + i ) )
+                {
+                EUNIT_PRINT( _L("TEST STEP FAILED: Output mismatch: output[%d] = %d, expected output[%d] = %d "), i, ( *( outPtr + i ) ), i, ( *( iExpOutParams + i ) ) );
+                err = KErrArgument;
+                }
+            }
+        
+        // Dump comparison file.
+#ifdef HSPS_LOG_ACTIVE
+        if( err != KErrNone )
+            {
+            TRAP_IGNORE( DebugL( outPtr ) );
+            }
+#endif
+        }
+    
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// Creates input parameter list from a descriptor stream
+// -----------------------------------------------------------------------------
+//    
+CLiwGenericParamList* MT_CHSPSTeststep::CreateInParamListL(
+    TUint8* aInParams )
+    {
+    HBufC8* inParamBuf = HBufC8::NewL( KTestStepInputSizeMax );
+    CleanupStack::PushL( inParamBuf );
+    
+    TPtr8 inParamBufPtr = inParamBuf->Des();
+    inParamBufPtr.Set( 
+        ( ( TUint8* )aInParams ), 
+        KTestStepInputSizeMax, 
+        KTestStepInputSizeMax );
+
+    RDesReadStream inParamStream;
+    inParamStream.Open( inParamBufPtr );
+    CLiwGenericParamList* inParamList = 
+        CLiwGenericParamList::NewL( inParamStream );
+    inParamStream.Release();
+
+    CleanupStack::PopAndDestroy( inParamBuf );
+    
+    return inParamList;
+    }
+
+// -----------------------------------------------------------------------------
+// Creates output descriptor stream from output parameter list
+// -----------------------------------------------------------------------------
+//    
+HBufC8* MT_CHSPSTeststep::CreateOutParamsL(
+    CLiwGenericParamList& aOutParamList )
+    {
+    HBufC8* outParams = HBufC8::NewL( KTestStepOutputSizeMax );
+    CleanupStack::PushL( outParams );
+
+    TPtr8 outParamBufPtr = outParams->Des();
+    RDesWriteStream outParamStream;
+    outParamStream.Open( outParamBufPtr );    
+    aOutParamList.ExternalizeL( outParamStream );
+    outParamStream.CommitL();
+    outParamStream.Close();
+
+    CleanupStack::Pop( outParams );
+    
+    return outParams;
+    }
+
+// -----------------------------------------------------------------------------
+// Starts timing of SAPI method execution
+// -----------------------------------------------------------------------------
+//    
+void MT_CHSPSTeststep::StartTiming( 
+    TDesC8& aMethod )
+    {
+    iStartTime.HomeTime();
+    EUNIT_PRINT( aMethod );
+    }
+
+// -----------------------------------------------------------------------------
+// Calculates SAPI method execution time
+// -----------------------------------------------------------------------------
+//    
+void MT_CHSPSTeststep::StopTiming()
+    {
+    TTime readyTime;
+    readyTime.HomeTime();
+    TTimeIntervalMicroSeconds delay = readyTime.MicroSecondsFrom( iStartTime );
+    TTime transferTime( delay.Int64() );
+    TBuf<64> timeString;
+    transferTime.FormatL( timeString,_L( "Execution time: %S%C microseconds" ) );
+    
+    EUNIT_PRINT( timeString );
+    
+    }
+
+//  END OF FILE