Add shared-session MCP source debugger adapter
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
"""MCP передаёт команды одной сессии и не удаляет чужие точки."""
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
sys.path.insert(0, str(ROOT / 'toolchain'))
|
||||
|
||||
from sdbg.mcp_adapter import McpSession
|
||||
from sdbg.session import SessionError
|
||||
|
||||
|
||||
class McpAdapterTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.calls = []
|
||||
|
||||
def rpc(path, method, arguments, timeout=10):
|
||||
self.calls.append((path, method, arguments, timeout))
|
||||
return {'method': method, 'arguments': arguments}
|
||||
|
||||
self.client = McpSession('/tmp/sprinter-test.sock', rpc=rpc)
|
||||
|
||||
def test_personal_breakpoints_are_tagged_and_cleared_by_owner(self):
|
||||
self.client.break_line('/src/main.c', 12)
|
||||
self.client.break_function('main')
|
||||
self.client.clear_breakpoint(7)
|
||||
self.client.clear_owned_breakpoints()
|
||||
self.assertTrue(self.client.owner.startswith('mcp:'))
|
||||
for _, _, arguments, _ in self.calls:
|
||||
self.assertEqual(arguments['owner'], self.client.owner)
|
||||
self.assertEqual([item[1] for item in self.calls],
|
||||
['break_line', 'break_function', 'clear_breakpoint',
|
||||
'clear_owned_breakpoints'])
|
||||
|
||||
def test_memory_and_events_validate_before_rpc(self):
|
||||
self.client.read_memory('0xc000', 16)
|
||||
self.assertEqual(self.calls[-1][2], {'address': 0xc000, 'length': 16})
|
||||
self.client.events(after=4, timeout=12)
|
||||
self.assertEqual(self.calls[-1][1:],
|
||||
('events', {'after': 4, 'timeout': 12}, 14))
|
||||
before = len(self.calls)
|
||||
with self.assertRaisesRegex(SessionError, 'Адрес памяти'):
|
||||
self.client.read_memory('not-an-address')
|
||||
with self.assertRaisesRegex(SessionError, 'timeout'):
|
||||
self.client.events(timeout=31)
|
||||
with self.assertRaisesRegex(SessionError, 'kind'):
|
||||
self.client.step_source('back')
|
||||
self.assertEqual(len(self.calls), before)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user