Sprinter: добавить отладку C-исходников и интеграцию VS Code

This commit is contained in:
2026-09-15 17:58:41 +03:00
parent 50c6e56b7b
commit e4695b8281
62 changed files with 7147 additions and 27 deletions
+71
View File
@@ -0,0 +1,71 @@
"""Контракт файлового канала: владение, атомарный ответ и неизвестный итог."""
import json
import os
from pathlib import Path
import sys
import tempfile
import threading
import time
import unittest
ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(ROOT / 'toolchain'))
from sdbg.build import write_json
from sdbg.transport import BridgeError, FileBridge
class TransportTests(unittest.TestCase):
def test_owner_lock(self):
with tempfile.TemporaryDirectory() as directory:
first = FileBridge(directory, 'one')
try:
with self.assertRaisesRegex(BridgeError, 'управляющая'):
FileBridge(directory, 'one')
finally:
first.close()
with self.assertRaisesRegex(BridgeError, 'закрыт'):
first.request('continue')
second = FileBridge(directory, 'one')
second.close()
def test_response_generation_and_session(self):
with tempfile.TemporaryDirectory() as directory:
bridge = FileBridge(directory, 'session', timeout=1)
def backend():
deadline = time.monotonic() + 1
while time.monotonic() < deadline:
requests = list(Path(directory).glob('req_*.json'))
if requests:
request = requests[0]
data = json.loads(request.read_text())
response = request.with_name(request.name.replace('req_', 'resp_'))
write_json(response, {'session': data['session'], 'generation': 7,
'ok': True, 'result': {'state': 'stopped'}})
request.unlink()
return
time.sleep(.001)
thread = threading.Thread(target=backend)
thread.start()
try:
self.assertEqual(bridge.request('snapshot')['state'], 'stopped')
self.assertEqual(bridge.generation, 7)
finally:
thread.join()
bridge.close()
def test_timeout_never_retries_mutation(self):
with tempfile.TemporaryDirectory() as directory:
bridge = FileBridge(directory, 'session', timeout=.025)
try:
with self.assertRaisesRegex(BridgeError, 'Timeout'):
bridge.request('continue')
self.assertTrue(bridge.invalid)
with self.assertRaisesRegex(BridgeError, 'инвалидирован'):
bridge.request('continue')
self.assertFalse(list(Path(directory).glob('req_*.json')))
finally:
bridge.close()
if __name__ == '__main__':
unittest.main()