test: Avoid double echo when starting up

There is a very annoying bug at present where the terminal echos part
of the first command sent to the board. This happens because the
terminal is still set to echo for a period until Labgrid starts up and
can change this.

Fix this by disabling echo (and other terminal features) as soon as the
spawn happens.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2024-11-12 07:13:21 -07:00 committed by Tom Rini
parent f32951df40
commit 5825ddccc6

View file

@ -5,12 +5,15 @@
Logic to spawn a sub-process and interact with its stdio. Logic to spawn a sub-process and interact with its stdio.
""" """
import io
import os import os
import re import re
import pty import pty
import pytest import pytest
import signal import signal
import select import select
import sys
import termios
import time import time
import traceback import traceback
@ -115,11 +118,30 @@ class Spawn:
finally: finally:
os._exit(255) os._exit(255)
old = None
try: try:
isatty = False
try:
isatty = os.isatty(sys.stdout.fileno())
# with --capture=tee-sys we cannot call fileno()
except io.UnsupportedOperation as exc:
pass
if isatty:
new = termios.tcgetattr(self.fd)
old = new
new[3] = new[3] & ~(termios.ICANON | termios.ISIG)
new[3] = new[3] & ~termios.ECHO
new[6][termios.VMIN] = 0
new[6][termios.VTIME] = 0
termios.tcsetattr(self.fd, termios.TCSANOW, new)
self.poll = select.poll() self.poll = select.poll()
self.poll.register(self.fd, select.POLLIN | select.POLLPRI | select.POLLERR | self.poll.register(self.fd, select.POLLIN | select.POLLPRI | select.POLLERR |
select.POLLHUP | select.POLLNVAL) select.POLLHUP | select.POLLNVAL)
except: except:
if old:
termios.tcsetattr(self.fd, termios.TCSANOW, old)
self.close() self.close()
raise raise