debugsrv/runmodedebug/rmdebug_test/rm_debug/multi_target_tests/t_multi_target.cpp
changeset 56 aa2539c91954
parent 54 a151135b0cf9
child 60 e54443a6878c
child 62 1c2bb2fc7c87
--- a/debugsrv/runmodedebug/rmdebug_test/rm_debug/multi_target_tests/t_multi_target.cpp	Wed Sep 29 17:45:35 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,405 +0,0 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of the License "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:
-// Test the ability of the debug system to handle events from several debug targets
-//
-//
-
-#include <e32base.h>
-#include <e32property.h>
-
-#include <hal.h>
-#include <e32test.h>
-
-#include "t_multi_target.h"
-#include "t_target_launcher.h"
-#include "t_rmdebug_app.h"
-
-#ifdef KERNEL_OOM_TESTING
-  #ifdef USER_OOM_TESTING
-    #error "Cannot define both KERNEL_OOM_TESTING and USER_OOM_TESTING"
-  #endif
-#endif
-
-
-using namespace Debug;
-
-const TVersion securityServerVersion(0,1,1);
-
-const TVersion testVersion(2,1,0);
-
-#ifdef NO_DEBUGTOKEN
-LOCAL_D RTest test(_L("T_RMDEBUG_MULTI_TARGET"));
-#endif
-
-#ifdef SOMECAPS_DEBUGTOKEN
-LOCAL_D RTest test(_L("T_RMDEBUG_MULTI_TARGET_OEM"));
-#endif
-
-#ifdef FEWCAPS_DEBUGTOKEN
-LOCAL_D RTest test(_L("T_RMDEBUG_MULTI_TARGET_OEM2"));
-#endif
-
-
-
-CMultiTargetAgent* CMultiTargetAgent::NewL()
-//
-// CMultiTargetAgent::NewL
-//
-  {
-  CMultiTargetAgent* self = new(ELeave) CMultiTargetAgent();
-
-  self->ConstructL();
-
-  return self;
-  }
-
-
-CMultiTargetAgent::~CMultiTargetAgent()
-//
-// CMultiTargetAgent destructor
-//
-    {
-    RDebug::Printf("~CMultiTargetAgent\n");
-    iServSession.Close();
-    }
-
-
-CMultiTargetAgent::CMultiTargetAgent() : 
-    iEventPtr( (TUint8*)&iEventInfo, sizeof(TEventInfo) )
-    {
-    }
-
-
-void CMultiTargetAgent::ConstructL()
-//
-// CMultiTargetAgent::ConstructL
-//
-  {
-  }
-
-/**
- * Helper code for the stepping tests. Returns the number of nanokernel ticks in one second.
- *
- * @return Number of nanokernel ticks. 0 if unsuccesful.
- */
-TInt CMultiTargetAgent::HelpTicksPerSecond(void)
-  {
-  TInt nanokernel_tick_period;
-  HAL::Get(HAL::ENanoTickPeriod, nanokernel_tick_period);
-
-  ASSERT(nanokernel_tick_period != 0);
-
-  static const TInt KOneMillion = 1000000;
-
-  return KOneMillion/nanokernel_tick_period;
-  }
-
-void CMultiTargetAgent::ClientAppL()
-//
-// Performs each test in turn
-//
-  {
-  test.Start(_L("ClientAppL"));
-  TInt err = iServSession.Connect(securityServerVersion);
-  if (err != KErrNone)
-      {
-      User::Panic(_L("Can't open server session"), err);
-      }
-  SetupDebugServerL();
-  LaunchTargetsInOrderL();
-  RDebug::Printf( "returning from CMultiTargetAgent::ClientAppL" );
-  test.End();
-  }
-
-/**
-  Launch a process
-
-  @param aProcess The RProcess object to use to create the process
-  @param aExeName File name of the executable to create the process from
-  @param aCommandLine The command line to pass to the new process
-  @return KErrNone on success, or one of the other system wide error codes
-  */
-TInt CMultiTargetAgent::LaunchProcess(RProcess& aProcess, TDesC & aExeName, TDesC & aCommandLine )
-    {    
-    TInt err = aProcess.Create( aExeName, aCommandLine );    
-    if(err != KErrNone)
-        {
-        RDebug::Printf( "aProcess.Create ret %d", err);
-        return err;
-        }
-
-    TRequestStatus status = KRequestPending;
-    aProcess.Rendezvous(status);
-    if(KRequestPending != status.Int())
-        {
-        // startup failed so kill the process
-        aProcess.Kill(KErrNone);
-        return status.Int();
-        }
-    else
-        {
-        // start up succeeded so resume the process
-        aProcess.Resume();
-        // Give the process a chance to run
-        User::After( 500000 );
-        return KErrNone;
-        }
-    }
-
-void CMultiTargetAgent::SetupDebugServerL()
-    {
-    RDebug::Printf( "CMultiTargetAgent::SetupDebugServerL" );
-    test.Next(_L("SetupDebugServerL\n"));
-    iTargets.ReserveL( KNumApps );
-
-    RBuf targetName;
-    CleanupClosePushL( targetName );
-
-    for( TInt numApps = 0; numApps < KNumApps; numApps++ )
-        {
-        iTargets.AppendL( targetName );
-        RDebug::Printf( "Attach to DSS for app %d ", numApps );
-
-        iTargets[numApps].CreateL( KTargetExe().Length() + 2 );
-        iTargets[numApps].Format( KTargetExe(), numApps+1 );
-
-        TInt ret = iServSession.AttachExecutable( iTargets[numApps], EFalse );
-        test( ret == KErrNone );
-
-        RDebug::Printf( ">SetEventAction app %d,  EEventsStartThread EActionSuspend", numApps );
-        ret = iServSession.SetEventAction( iTargets[numApps], EEventsStartThread, EActionSuspend );
-        test( ret == KErrNone );
-
-        RDebug::Printf( ">SetEventAction app %d,  EEventsAddProcess EActionContinue", numApps );
-        ret = iServSession.SetEventAction( iTargets[numApps], EEventsAddProcess, EActionContinue );
-        test( ret == KErrNone );
-
-        RDebug::Printf( ">SetEventAction app %d,  EEventsRemoveProcess EActionContinue", numApps );
-        ret = iServSession.SetEventAction( iTargets[numApps], EEventsRemoveProcess, EActionContinue );
-        test( ret == KErrNone );
-        }
-
-    CleanupStack::PopAndDestroy( &targetName ); // targetName
-
-    }
-
-
-
-TInt CMultiTargetAgent::LaunchTargetsInOrderL()
-    {
-    RDebug::Printf( "CMultiTargetAgent::LaunchTargetsInOrderL" );
-    
-    RBuf launcher;
-    CleanupClosePushL( launcher );
-    launcher.CreateL( KLauncherExe() );
-    
-    RBuf launcherOptions;
-    CleanupClosePushL( launcherOptions ); 
-    launcherOptions.CreateL( KTargetOptions().Length() + 2 );
-    launcherOptions.Format( KTargetOptions(), (TUint)ENormalExit );
-
-    RDebug::Printf( ">LaunchProcess()" );
-    RProcess launcherProc; 
-    CleanupClosePushL( launcherProc );
-    
-    TInt ret = LaunchProcess( launcherProc, launcher, launcherOptions );
-    RDebug::Printf( "<LaunchProcess() ret %d", ret );
-    
-    CleanupStack::PopAndDestroy( &launcherProc ); // launcherProc
-    CleanupStack::PopAndDestroy( &launcherOptions ); // launcherOptions
-    CleanupStack::PopAndDestroy( &launcher ); //launcher 
-
-    test( ret == KErrNone );
-    
-    RSemaphore launchSemaphore;   
-    CleanupClosePushL( launchSemaphore );
-            
-    TFindSemaphore launchSemFinder( KLaunchSemaphoreNameSearchString );
-    TFullName semaphoreResult;
-    ret = launchSemFinder.Next(semaphoreResult);
-    RDebug::Printf( ">  Find Launch Semaphote.Next ret=%d, %lS", ret, &semaphoreResult );
-    test( ret == KErrNone );   
-     
-    ret = launchSemaphore.OpenGlobal( semaphoreResult );
-    RDebug::Printf( "> OpenGlobal semaphore ret=%d", ret );         
-    test( ret == KErrNone );    
-    
-    TBool thisLaunchCompleted; 
-
-    test.Next(_L("LaunchTargetsInOrderL\n"));
-    for( TInt numLaunches = KNumLaunches; numLaunches > 0; numLaunches-- )
-        {
-        for( TInt numApps = KNumApps; numApps > 0; numApps-- )
-            {
-            thisLaunchCompleted = EFalse;
-            // This will trigger the launcher app to launch the next target
-            RDebug::Printf( " >Semaphore.Signal app=%d, launch=%d", numApps, numLaunches);
-            launchSemaphore.Signal();
-            
-            RBuf8 tgt8Name; 
-            CleanupClosePushL( tgt8Name );
-           
-            RBuf tgtCollapseName;
-            CleanupClosePushL( tgtCollapseName );
-                    
-            tgtCollapseName.CreateL( iTargets[numApps-1] );
-            tgt8Name.CreateL( tgtCollapseName.Collapse() );
-            
-
-            while( ! thisLaunchCompleted )
-                {
-                RDebug::Printf( ">GetEvent app %d for %S", numApps, &tgt8Name );
-                iServSession.GetEvent( iTargets[numApps-1], iStatus, iEventPtr );
-          
-                // Wait for the target to get started.
-                RDebug::Printf( " >Wait for event from target app=%d, launch=%d\n", numApps, numLaunches);
-                User::WaitForRequest( iStatus );
-                RDebug::Printf( " <Wait for request returned with status %d", iStatus.Int() );
-                test( iStatus==KErrNone );
-    
-                RDebug::Printf( " > Got iEventType =%d, app=%d", iEventInfo.iEventType, numApps );
-                switch( iEventInfo.iEventType )
-                    {
-                    case EEventsAddProcess:
-                        {
-                        RDebug::Printf( "Got EEventsAddProcess" );                        
-                        TPtrC8 exeNamePtr8( iEventInfo.iAddProcessInfo.iFileName, iEventInfo.iAddProcessInfo.iFileNameLength );
-                        
-                        RBuf8 exeName8;
-                        CleanupClosePushL( exeName8 );
-                        exeName8.CreateL( exeNamePtr8 );
-                        RDebug::Printf( " from event: exeName8=%S", &exeName8 );
-                        CleanupStack::PopAndDestroy( &exeName8 );
-                        
-                        RBuf8 compareName8;
-                        CleanupClosePushL( compareName8 );
-                        compareName8.CreateL( KTargetExeName().Length() + 10 );
-                        compareName8.Format( KTargetExeName(), numApps );
-                        RDebug::Printf( " comparing to: compareName8=%S", &compareName8 );
-                        
-                        test( compareName8.CompareC( exeNamePtr8 ) == 0 );
-                        CleanupStack::PopAndDestroy( &compareName8 );
-
-                        RDebug::Printf( "Testing if event process id is valid" );
-                        test( iEventInfo.iProcessIdValid );
-                        RDebug::Printf( "Got iEventInfo.iProcessId=%d", I64LOW( iEventInfo.iProcessId ) );
-                        
-                        RProcess targetProc;
-                        ret = targetProc.Open( TProcessId( iEventInfo.iProcessId ) );
-                        RDebug::Printf( "RProcess open ret=%d",ret );
-                        targetProc.Close();
-                        test( ret == KErrNone );
-                        
-                        break;
-                        }//EEventsAddProcess
-                        
-                    case EEventsStartThread:
-                        {
-                        RDebug::Printf( "Got EEventsStartThread" );
-                         
-                        TPtrC8 exeNamePtr8( iEventInfo.iStartThreadInfo.iFileName, iEventInfo.iStartThreadInfo.iFileNameLength );
-                        RBuf8 exe8Name;
-                        CleanupClosePushL( exe8Name );
-                        exe8Name.CreateL( exeNamePtr8 );
-                        RDebug::Printf( " from event: exeName8=%S", &exe8Name );
-                        CleanupStack::PopAndDestroy( &exe8Name );
-                        
-                        test( tgt8Name.CompareC( exeNamePtr8 ) == 0 );
-                        
-                        RDebug::Printf( "Testing if event process id is valid" );
-                        test( iEventInfo.iProcessIdValid );
-                        RDebug::Printf( "Got iEventInfo.iProcessId=%d", I64LOW( iEventInfo.iProcessId ) );
-                         
-                        RDebug::Printf( "Testing if event thread id is valid" );
-                        test( iEventInfo.iThreadIdValid );
-                        RDebug::Printf( "Got iEventInfo.iThreadId=%d", I64LOW( iEventInfo.iThreadId ) );
-                        
-                        RThread targetThread;
-                        CleanupClosePushL( targetThread );
-                        
-                        ret = targetThread.Open( TThreadId( iEventInfo.iThreadId ) );
-                        RDebug::Printf( "RThread open ret=%d", ret );
-                        test( ret == KErrNone ); 
-                         
-                        test( iEventInfo.iThreadId == targetThread.Id() );  
-
-                        RDebug::Printf( "Resuming thread for app=%d, id=%d", numApps, I64LOW( targetThread.Id() ));
-                        ret = iServSession.ResumeThread( iEventInfo.iThreadId );
-                        CleanupStack::PopAndDestroy( &targetThread );
-                        
-                        test( ret == KErrNone );
-                        
-                        ret = iServSession.ResumeThread( iEventInfo.iThreadId );
-                        break;                    
-                        }//case EEventsStartThread                        
-
-                    case ( EEventsRemoveProcess ):
-                        {
-                        RDebug::Printf( "*** Got EEventsRemoveProcess. app%d has exited. Moving on to next app", numApps );                        
-                        thisLaunchCompleted = ETrue;
-                        break;
-                        }
-                        
-                    default :   
-                        RDebug::Printf( "Got unknown event" );
-                        test( EFalse );
-                        break;
-                    }
-                }//while
-
-            CleanupStack::PopAndDestroy( &tgtCollapseName ); // tgtCollapseName
-            CleanupStack::PopAndDestroy( &tgt8Name ); // tgt8Name 
-            }
-        }    
-
-    launchSemaphore.Signal();
-    
-	CleanupStack::PopAndDestroy( &launchSemaphore ); // launchSemaphore
-  
-	for( TInt i = iTargets.Count()-1; i>=0; i-- )
-		{
-		RDebug::Printf( "Closing target %d", i );
-		iTargets[ i ].Close();
-		}
-
-	iTargets.Close();
-	
-	return KErrNone;
-    }
-
-
-GLDEF_C TInt E32Main()
-    {
-    TInt ret = KErrNone;
-   
-  
-    CTrapCleanup* trap = CTrapCleanup::New();
-    if (!trap)
-      return KErrNoMemory;
-    test.Title();
-   
-    CMultiTargetAgent *runModeAgent = CMultiTargetAgent::NewL();
-    if (runModeAgent != NULL)
-        {
-        __UHEAP_MARK;
-        TRAP(ret,runModeAgent->ClientAppL());
-        __UHEAP_MARKEND;
-        
-        RDebug::Printf( "ClientAppL returned %d", ret );
-        delete runModeAgent;
-        }
-
-    delete trap;
-    return ret;
-    }