qemurunner.py: Added raw mode in run_serial

Raw mode allows to send the command without sending
'echo $?' for validation; Also this doesn't remove the
command or the prompt from the output returned. In raw
mode validation is done if there is output.

This raw mode would be useful for validate the prompt
when a user logs in.

[YOCTO #8118]

(From OE-Core rev: b8ead7c0929c4096e50b481a608f5d0c09eab29d)

Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Mariano Lopez 2015-08-12 07:02:21 +00:00 committed by Richard Purdie
parent a5bfa110f6
commit c0c463be28
1 changed files with 18 additions and 13 deletions

View File

@ -177,7 +177,7 @@ class QemuRunner:
self.stop()
return False
(status, output) = self.run_serial("root\n")
(status, output) = self.run_serial("root\n", raw=True)
if re.search("root@[a-zA-Z0-9\-]+:~#", output):
self.logged = True
logger.info("Logged as root in serial console")
@ -274,9 +274,11 @@ class QemuRunner:
if "qemu-system" in basecmd and "-serial tcp" in commands[p]:
return [int(p),commands[p]]
def run_serial(self, command):
def run_serial(self, command, raw=False):
# We assume target system have echo to get command status
self.server_socket.sendall("%s; echo $?\n" % command)
if not raw:
command = "%s; echo $?\n" % command
self.server_socket.sendall(command)
data = ''
status = 0
stopread = False
@ -291,15 +293,18 @@ class QemuRunner:
sock.close()
stopread = True
if data:
# Remove first line (command line) and last line (prompt)
data = data[data.find('$?\r\n')+4:data.rfind('\r\n')]
index = data.rfind('\r\n')
if index == -1:
status_cmd = data
data = ""
else:
status_cmd = data[index+2:]
data = data[:index]
if (status_cmd == "0"):
if raw:
status = 1
else:
# Remove first line (command line) and last line (prompt)
data = data[data.find('$?\r\n')+4:data.rfind('\r\n')]
index = data.rfind('\r\n')
if index == -1:
status_cmd = data
data = ""
else:
status_cmd = data[index+2:]
data = data[:index]
if (status_cmd == "0"):
status = 1
return (status, str(data))