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 @@ + +