support/testing: use qemu stdio in emulator
Instead of redirecting qemu serial to telnet, redirect it to stdio. It allows to run testcases in parallel without random failing caused by two emulators trying to use the same telnet port (1234). 'qemu -serial stdio' returns some extra <CR> characters, so remove them from the log. Signed-off-by: Ricardo Martincoski <ricardo.martincoski@gmail.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
parent
eb0fab80f6
commit
8ebc227806
@ -3,13 +3,10 @@ import pexpect
|
||||
import infra
|
||||
import infra.basetest
|
||||
|
||||
# TODO: Most of the telnet stuff need to be replaced by stdio/pexpect to discuss
|
||||
# with the qemu machine.
|
||||
class Emulator(object):
|
||||
|
||||
def __init__(self, builddir, downloaddir, logtofile):
|
||||
self.qemu = None
|
||||
self.__tn = None
|
||||
self.downloaddir = downloaddir
|
||||
self.log = ""
|
||||
self.logfile = infra.open_log_file(builddir, "run", logtofile)
|
||||
@ -37,7 +34,7 @@ class Emulator(object):
|
||||
qemu_arch = arch
|
||||
|
||||
qemu_cmd = ["qemu-system-{}".format(qemu_arch),
|
||||
"-serial", "telnet::1234,server",
|
||||
"-serial", "stdio",
|
||||
"-display", "none"]
|
||||
|
||||
if options:
|
||||
@ -71,22 +68,19 @@ class Emulator(object):
|
||||
self.logfile.write("> starting qemu with '%s'\n" % " ".join(qemu_cmd))
|
||||
self.qemu = pexpect.spawn(qemu_cmd[0], qemu_cmd[1:])
|
||||
|
||||
# Wait for the telnet port to appear and connect to it.
|
||||
self.qemu.expect("waiting for connection")
|
||||
telnet_cmd = ["telnet", "localhost", "1234"]
|
||||
self.__tn = pexpect.spawn(telnet_cmd[0], telnet_cmd[1:])
|
||||
|
||||
def __read_until(self, waitstr, timeout=5):
|
||||
index = self.__tn.expect([waitstr, pexpect.TIMEOUT], timeout=timeout)
|
||||
data = self.__tn.before
|
||||
index = self.qemu.expect([waitstr, pexpect.TIMEOUT], timeout=timeout)
|
||||
data = self.qemu.before
|
||||
if index == 0:
|
||||
data += self.__tn.after
|
||||
data += self.qemu.after
|
||||
self.log += data
|
||||
self.logfile.write(data)
|
||||
return data
|
||||
# Remove double carriage return from qemu stdout so str.splitlines()
|
||||
# works as expected.
|
||||
return data.replace("\r\r", "\r")
|
||||
|
||||
def __write(self, wstr):
|
||||
self.__tn.send(wstr)
|
||||
self.qemu.send(wstr)
|
||||
|
||||
# Wait for the login prompt to appear, and then login as root with
|
||||
# the provided password, or no password if not specified.
|
||||
@ -121,8 +115,6 @@ class Emulator(object):
|
||||
return output, exit_code
|
||||
|
||||
def stop(self):
|
||||
if self.__tn:
|
||||
self.__tn.terminate(force=True)
|
||||
if self.qemu is None:
|
||||
return
|
||||
self.qemu.terminate(force=True)
|
||||
|
Loading…
Reference in New Issue
Block a user