2f6cab72c4
release / release (push) Successful in 14s
- feat(share): host-consented interactive terminal over the relay. The host shares a real PTY shell (core/pty_session.py); the guest renders it with pyte and sends keystrokes (gui/terminal_widget.py) — vim/top/tab-completion/Ctrl-C work. Runs as the host's user (never root). The host reads along live and can type too, e.g. a sudo password, which stays local and is never sent to the guest. Off by default. Guest also pulls inventory on join (req_full). - fix(gui): style all form controls (QLineEdit/QPlainTextEdit/spin boxes/combo/ terminals) dark-on-light-text — Fusion defaulted them to unreadable light-on-light. - replaces the command/response shell with the full PTY; adds pyte to the gui extra. Verified end-to-end against the deployed relay (guest keystroke ran on host PTY). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
28 lines
767 B
Python
28 lines
767 B
Python
"""Tests for the host PTY session (M12 Tier 3)."""
|
|
|
|
import time
|
|
import unittest
|
|
|
|
from rigdoctor.core.pty_session import PtySession
|
|
|
|
|
|
class PtySessionTests(unittest.TestCase):
|
|
def test_runs_command_and_reads_output(self):
|
|
pty = PtySession(rows=24, cols=80)
|
|
try:
|
|
time.sleep(0.4)
|
|
pty.read() # drain the shell prompt
|
|
pty.write(b"echo PTY_MARKER_42\n")
|
|
deadline = time.time() + 3
|
|
buf = ""
|
|
while time.time() < deadline and "PTY_MARKER_42" not in buf:
|
|
time.sleep(0.1)
|
|
buf += pty.read().decode(errors="replace")
|
|
self.assertIn("PTY_MARKER_42", buf)
|
|
finally:
|
|
pty.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|