pykd/test/scripts/ehsymbolstest.py
SND\EreTIk_cp aee8b2b1b8 [0.2.x] ~recovered WaitEventException
git-svn-id: https://pykd.svn.codeplex.com/svn@83541 9b283d60-5439-405e-af05-b73fd8c4d996
2017-11-08 17:42:50 +04:00

46 lines
1.6 KiB
Python

"""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 )
self.assertRaises(pykd.WaitEventException, testutils.infGo)
self.assertTrue( "iphlpapi" in symbolsStateHandler.modNames )