diff -r a151135b0cf9 -r aa2539c91954 debugsrv/runmodedebug/tsrc/rm_debug/basic_tests/t_rmdebug2.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/debugsrv/runmodedebug/tsrc/rm_debug/basic_tests/t_rmdebug2.h Fri Oct 08 14:56:39 2010 +0300 @@ -0,0 +1,197 @@ +// Copyright (c) 2006-2010 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: +// Definitions for the run mode debug tests +// +// + + +#ifndef RMDEBUG_H +#define RMDEBUG_H + +#include "t_rmdebug_app.h" +#include "r_user_low_memory_security_svr_session.h" +#include "r_kernel_low_memory_security_svr_session.h" + + +class CRunModeAgent; + +// Create a pointer to function type +typedef void (CRunModeAgent::*testFunction)(); + +class TFunctionData + { +public: + testFunction iFunctionPtr; + TBuf<40> iFunctionName; + }; + +//number of test functions that we have +const TInt KMaxTests = 31; + +// +// class CRunModeAgent +// +// The basic run mode agent. +// +class CRunModeAgent : public CBase + { +public: + static CRunModeAgent* NewL(); + ~CRunModeAgent(); + void ClientAppL(); + +private: + CRunModeAgent(); + void ConstructL(); + void SetupAndAttachToDSS(); + + TInt TestStartup(); + TInt TestShutdown(); + + void TestGetExecutablesList(); + void TestGetProcessList(); + void TestGetThreadList(); + void TestGetCodeSegsList(); + void TestGetXipLibrariesList(); + void TestGetListInvalidData(); + + TBool DoTestGetThreadList(const TBool aShouldPass, const Debug::TListScope aListScope, const TUint64 aTargetId=0); + void DoTestGetCodeSegsList(const TBool aShouldPass, const Debug::TListScope aListScope, const TUint64 aTargetId=0); + + void DoGetList(const Debug::TListId aListId, const Debug::TListScope aListScope, RBuf8& aBuffer, TUint32& aSize, const TUint64 aTargetId=0); + + void TestMemoryAccess(); + void TestSuspendResume(); + void TestBreakPoints(); + void TestConsecutiveBreakPoints(); + void TestModifyBreak(); + void DoTestModifyBreak(TBool aThreadSpecific); + void TestBreakInfo(); + void DoTestBreakInfo(TBool aThreadSpecific); + void TestRunToBreak(); + void DoTestRunToBreak(TBool aThreadSpecific); + void TestBreakPointsInLoop(); + void DoTestBreakPointsInLoop(TBool aThreadSpecific); + void TestRegisterAccess(); + void TestAttachExecutable(); + void TestDebugFunctionality(); + void TestStep(); + void DoTestStep(TBool aThreadSpecific); + void TestDriverSecurity(); + void TestSecurity(); + void TestEvents(); + void TestEventsForExternalProcess(); + void TestDemandPaging(); + void TestTraceSecurity(); + void TestDllUsage(); + void TestKillProcess(); + void TestProcessBreakPoints(); + void TestMultipleTraceEvents(); + void TestAddRemoveProcessEvents(); + void TestProcessKillBreakpoint(); + void DoTestProcessKillBreakpoint(); + void TestAttachToAll(); + void ResetAttachToAll(RThread& aTestThread, TRequestStatus* aFirstSessionStat=NULL, Debug::RSecuritySvrSession* aSecondSession=NULL); + void LaunchDebugProcessAndSetBreakpoint(RProcess& aResultProcess, TThreadId& aResultThread); + void TestResumeBreakpointsRepeatedly(); + + //crash flash test functions + void TestCrashFlash(); + + TInt GetFlag(const TDes8 &aFlags, const TUint aOffset, Debug::TRegisterFlag &aFlagValue) const; + + void ReportPerformance(void); + + // helper functions + void HelpTestSecurityAttachDetachExecutable(const TDesC& aProcessName, TBool aExpectSuccess); + + TInt HelpTestStepSetBreak(Debug::TBreakId& aBreakId, TThreadId aThreadId, const TUint32 aBreakAddress, Debug::TArchitectureMode aMode, TBool aThreadSpecific=ETrue, TProcessId aProcessId=0); + TInt HelpTestStepClearBreak(const Debug::TBreakId aBreakId, const TThreadId aThreadId, TBool aThreadSpecific); + TInt HelpTestStepWaitForBreak(const TDesC& aProcessName, Debug::TEventInfo& aEventInfo); + TInt HelpTestStepReadPC(TThreadId aThreadId, TUint32& aPC); + TInt HelpTestStep(TThreadId aThreadId, TUint32 aStartAddress, TUint32 aEndAddress, Debug::TArchitectureMode aMode, TUint aNumSteps, TBool aThreadSpecific=ETrue, TProcessId=0); + + TInt HelpTicksPerSecond(void); + + // helper functions + void HelpStartTestTimer(void) { iStartTick = User::NTickCount(); iStopTick = 0; }; + void HelpStopTestTimer(void) { iStopTick = User::NTickCount(); }; + TInt HelpGetTestTicks(void) { return (iStopTick - iStartTick); }; + TInt SwitchTestFunction(TTestFunction aTestFunction, const TBool aResume = ETrue); + TInt LaunchProcess(RProcess& aProcess, const TDesC& aFileName, TDebugFunctionType aFunctionType, TUint32 aDelay=0, TUint32 aExtraThreads=0); + Debug::TTagHeader* GetTagHdr(const TDesC8& aDebugFunctionalityBlock, const Debug::TTagHeaderId aTagHdrId) const; + Debug::TTag* GetTag(const Debug::TTagHeader* aTagHdr, const TInt aElement) const; + Debug::TTag GetTag(const Debug::TTagHeaderId aTagHdrId, const TInt aElement); + TBool ProcessExists(const TProcessId aProcessId); + TBool ThreadExistsForProcess(const TThreadId aThreadId, const TProcessId aProcessId); + TBool ListingSupported(const Debug::TListId aListId, const Debug::TListScope aListScope); + void TestEventsWithExtraThreads(Debug::TKernelEventAction aActionMain, Debug::TKernelEventAction aActionExtra, TUint32 aExtraThreads); + void FillArray(); + void PrintUsage(); + void PrintVersion(); + + enum TTestMode + { + //run all the tests + EModeAll = 1<<0, + //run the specified tests in reverse order + EModeReverse = 1<<1, + //print out help + EModeHelp = 1<<2, + //print out help + EModeVersion = 1<<3 + }; + + void RunTest(TInt aTestNumber); + void ParseCommandLineL(TUint32& aMode, RArray& aTests); + + TBool ProcessExists(const TDesC& aProcessName); + static void TimedWait(TRequestStatus& aStatus, TInt aTimeoutInMs, TInt aLineNumber); + + +private: + + TFunctionData iTestArray[KMaxTests]; +#if defined(KERNEL_OOM_TESTING) + RKernelLowMemorySecuritySvrSession iServSession; +#elif defined (USER_OOM_TESTING) + RUserLowMemorySecuritySvrSession iServSession; +#else + Debug::RSecuritySvrSession iServSession; +#endif + RThread iDebugThread; + + //Set by test thread, used to check its run state + RProperty iRunCountSubscribe; + + // Used for timeouts when checking the run state + RTimer iTimer; + + RProcess iDSSProcess; + TThreadId iThreadID; + TFileName iFileName; + + // Performance data + TInt iMemoryReadKbytesPerSecond; + TInt iMemoryWriteKbytesPerSecond; + TInt iBreakpointsPerSecond; + TInt iMaxBreakpoints; + TInt iStepsPerSecond; + + // Timing information + TInt iStartTick; + TInt iStopTick; + }; + +#endif // RMDEBUG_H