pykd/test/scripts/ehloadtest.py

59 lines
1.7 KiB
Python
Raw Normal View History

"""Debug events handler: test [un-]load modules notification"""
import unittest
import target
import pykd
import fnmatch
import testutils
class ModuleLoadHandler(pykd.eventHandler):
"""Track load/unload module implementation"""
def __init__(self, moduleMask):
pykd.eventHandler.__init__(self)
self.moduleMask = moduleMask.lower()
self.wasLoad = 0
self.wasUnload = False
def onLoadModule(self, modBase, name):
"""Load module handler"""
if ( fnmatch.fnmatch(name.lower(), self.moduleMask) ):
self.wasLoad = modBase
return pykd.executionStatus.NoChange
def onUnloadModule(self, modBase, name):
"""Unload module handler"""
if ( self.wasLoad and (self.wasLoad == modBase) ):
self.wasUnload = True
return pykd.executionStatus.NoChange
class EhLoadTest(unittest.TestCase):
"""Unit tests of [un-]load modules notification"""
def testLoadUnload(self):
"""Start new process and track loading and unloading modules"""
pykd.startProcess(target.appPath + " loadunloadmodule")
with testutils.ContextCallIt( pykd.killProcess ) as contextCallIt:
pykd.go() # skip initail break
modLoadHandler = ModuleLoadHandler( "ws2_32*" )
pykd.go()
#with testutils.ContextCallIt( getattr(modLoadHandler, "reset") ) as resetEventHandler:
# try:
# while True:
# pykd.go()
# except pykd.WaitEventException:
# pass
self.assertTrue(modLoadHandler.wasLoad)
self.assertTrue(modLoadHandler.wasUnload)