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)
qemu_arch = arch
qemu_cmd = ["qemu-system-{}".format(qemu_arch),
- "-serial", "telnet::1234,server",
+ "-serial", "stdio",
"-display", "none"]
if options:
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.
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)