From 2ae5ead1ad1361810835a874f0c99620f48ea00f Mon Sep 17 00:00:00 2001 From: "SND\\EreTIk_cp" Date: Fri, 29 Mar 2013 11:20:34 +0000 Subject: [PATCH] [0.2.x] + onSymbolsLoaded/onSymbolsUnloaded test git-svn-id: https://pykd.svn.codeplex.com/svn@83133 9b283d60-5439-405e-af05-b73fd8c4d996 --- test/scripts/ehsymbolstest.py | 48 +++++++++++++++++++++++++++++++++ test/scripts/pykdtest.py | 2 ++ test/targetapp/targetapp.vcproj | 6 ++++- 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 test/scripts/ehsymbolstest.py diff --git a/test/scripts/ehsymbolstest.py b/test/scripts/ehsymbolstest.py new file mode 100644 index 0000000..98cd05b --- /dev/null +++ b/test/scripts/ehsymbolstest.py @@ -0,0 +1,48 @@ +"""Execution symbols state event test""" + +import unittest +import target +import pykd +import testutils + +class SymbolsStateHandler(pykd.eventHandler): + def __init__(self, modBase): + pykd.eventHandler.__init__(self) + self._modBase = modBase + self.modNames = set() + self.unloadModuleTrigged = False + self.unloadAllModulesTrigged = False + + def onSymbolsLoaded(self, modBase): + if modBase: + self.modNames.add( pykd.module(modBase).name() ) + + def onSymbolsUnloaded(self, modBase): + if not modBase: + self.unloadAllModulesTrigged = True + elif self._modBase == modBase: + self.unloadModuleTrigged = True + +class EhSymbolsTest(unittest.TestCase): + """Execution symbols state event test""" + + def testChangeSymbolsState(self): + """Start new process and track change symbols exception""" + _locProcessId = pykd.startProcess( target.appPath + " -testLoadUnload" ) + with testutils.ContextCallIt( testutils.KillProcess(_locProcessId) ) as killStartedProcess: + + mod = pykd.module("targetapp") + symbolsStateHandler = SymbolsStateHandler( mod.begin() ) + + pykd.dbgCommand(".reload /u targetapp.exe") + self.assertTrue( symbolsStateHandler.unloadModuleTrigged ) + + pykd.dbgCommand(".reload /u") + self.assertTrue( symbolsStateHandler.unloadAllModulesTrigged ) + + try: + while True: + pykd.go() + except pykd.BaseException: + pass + self.assertTrue( "iphlpapi" in symbolsStateHandler.modNames ) diff --git a/test/scripts/pykdtest.py b/test/scripts/pykdtest.py index a74610b..37401b2 100644 --- a/test/scripts/pykdtest.py +++ b/test/scripts/pykdtest.py @@ -23,6 +23,7 @@ import localstest import customtypestest import ehexcepttest import ehstatustest +import ehsymbolstest class StartProcessWithoutParamsTest(unittest.TestCase): def testStart(self): @@ -55,6 +56,7 @@ def getTestSuite( singleName = "" ): unittest.TestLoader().loadTestsFromTestCase( localstest.LocalVarsTest ), unittest.TestLoader().loadTestsFromTestCase( ehexcepttest.EhExceptionTest ), unittest.TestLoader().loadTestsFromTestCase( ehstatustest.EhStatusTest ), + unittest.TestLoader().loadTestsFromTestCase( ehsymbolstest.EhSymbolsTest ), ] ) else: return unittest.TestSuite( diff --git a/test/targetapp/targetapp.vcproj b/test/targetapp/targetapp.vcproj index 34fd39e..e386e60 100644 --- a/test/targetapp/targetapp.vcproj +++ b/test/targetapp/targetapp.vcproj @@ -1,7 +1,7 @@ + +