Files
poky/meta/lib/oeqa/utils/dump.py
Mariano Lopez 097f36f636 qemurunner: Handle lack of data on run serial gracefully
This changes the behavior when data was not received over
the serial console when a command is run. With this the
socket is no longer closed but it throws and exception that
can handled in upper layers. With this the test can continue
without throwing errors for not having the socket anymore.

[YOCTO #8118]

(From OE-Core rev: 4770a766389b94ddd5639d7a92e196abac38da22)

Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2015-09-03 12:43:31 +01:00

88 lines
2.7 KiB
Python

import os
import sys
import errno
import datetime
import itertools
from commands import runCmd
def get_host_dumper(d):
cmds = d.getVar("testimage_dump_host", True)
parent_dir = d.getVar("TESTIMAGE_DUMP_DIR", True)
return HostDumper(cmds, parent_dir)
class BaseDumper(object):
""" Base class to dump commands from host/target """
def __init__(self, cmds, parent_dir):
self.cmds = []
self.parent_dir = parent_dir
if not cmds:
return
for cmd in cmds.split('\n'):
cmd = cmd.lstrip()
if not cmd or cmd[0] == '#':
continue
self.cmds.append(cmd)
def create_dir(self, dir_suffix):
dump_subdir = ("%s_%s" % (
datetime.datetime.now().strftime('%Y%m%d%H%M'),
dir_suffix))
dump_dir = os.path.join(self.parent_dir, dump_subdir)
try:
os.makedirs(dump_dir)
except OSError as err:
if err.errno != errno.EEXIST:
raise err
self.dump_dir = dump_dir
def _write_dump(self, command, output):
if isinstance(self, HostDumper):
prefix = "host"
elif isinstance(self, TargetDumper):
prefix = "target"
else:
prefix = "unknown"
for i in itertools.count():
filename = "%s_%02d_%s" % (prefix, i, command)
fullname = os.path.join(self.dump_dir, filename)
if not os.path.exists(fullname):
break
with open(fullname, 'w') as dump_file:
dump_file.write(output)
class HostDumper(BaseDumper):
""" Class to get dumps from the host running the tests """
def __init__(self, cmds, parent_dir):
super(HostDumper, self).__init__(cmds, parent_dir)
def dump_host(self, dump_dir=""):
if dump_dir:
self.dump_dir = dump_dir
for cmd in self.cmds:
result = runCmd(cmd, ignore_status=True)
self._write_dump(cmd.split()[0], result.output)
class TargetDumper(BaseDumper):
""" Class to get dumps from target, it only works with QemuRunner """
def __init__(self, cmds, parent_dir, qemurunner):
super(TargetDumper, self).__init__(cmds, parent_dir)
self.runner = qemurunner
def dump_target(self, dump_dir=""):
if dump_dir:
self.dump_dir = dump_dir
for cmd in self.cmds:
# We can continue with the testing if serial commands fail
try:
(status, output) = self.runner.run_serial(cmd)
self._write_dump(cmd.split()[0], output)
except:
print("Tried to dump info from target but "
"serial console failed")