diff options
author | Mariano Lopez <mariano.lopez@linux.intel.com> | 2015-08-18 14:52:38 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-08-30 12:34:27 +0100 |
commit | 7b4fbbf979ed22434b8e3f83ae145139bb0d9fc7 (patch) | |
tree | 41058650cc0320c516c41a32609814452d26c35b /meta/lib | |
parent | f906c5eb722de07eb09858fd058eb7e20103df71 (diff) | |
download | openembedded-core-7b4fbbf979ed22434b8e3f83ae145139bb0d9fc7.tar.gz openembedded-core-7b4fbbf979ed22434b8e3f83ae145139bb0d9fc7.tar.bz2 openembedded-core-7b4fbbf979ed22434b8e3f83ae145139bb0d9fc7.zip |
testimage: Run commands in target and host when test fails
This patch modify three files altought two of them
are minimal modifications. This version includes
the changes proposed by Paul.
testimage.bbclass:
Create new vars for easy modification of the dump
directory and commands to be run on host and target
when a test fails
TESTIMAGE_DUMP_DIR: Directory to save the dumps
testimage_dump_target: Commands to run on target
testimage_dump_host: Commands to run on host
oetest.py:
- Allow to use the vars defined in testimage class
- Now able to run commands in the host and dump the
results
- Fix an issue with the condition where to run the
dump commands (Before it run the commands every
test after a failure, now it runs the commands only
in tests that failed)
- Fix the output to stdout
[YOCTO #8118]
(From OE-Core rev: 26fe645457633f90bb5ddbb12f5f7b9ca4a06cc5)
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>
Diffstat (limited to 'meta/lib')
-rw-r--r-- | meta/lib/oeqa/oetest.py | 48 | ||||
-rw-r--r-- | meta/lib/oeqa/targetcontrol.py | 3 |
2 files changed, 36 insertions, 15 deletions
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py index b6d2a2ca64..fbf6c56376 100644 --- a/meta/lib/oeqa/oetest.py +++ b/meta/lib/oeqa/oetest.py @@ -12,8 +12,10 @@ import unittest import inspect import subprocess import datetime +import commands import bb from oeqa.utils.decorators import LogResults +from sys import exc_info, exc_clear def loadTests(tc, type="runtime"): if type == "runtime": @@ -120,35 +122,51 @@ class oeRuntimeTest(oeTest): def tearDown(self): # If a test fails or there is an exception - if (self._resultForDoCleanups.failures or - self._resultForDoCleanups.errors): - self.dump_target_logs() - - def dump_target_logs(self): - commands = ["top -bn1", "ps", "free", "df", "_ping", "dmesg", "netstat -a", "ifconfig -a", "_logs"] - dump_dir = "/tmp/oe-saved-tests" + if not exc_info() == (None, None, None): + exc_clear() + dump_dir = self.create_dump_dir() + print ("%s dump data from host and target " + "stored in %s" % (self._testMethodName, dump_dir)) + self.dump_host_logs(dump_dir) + self.dump_target_logs(dump_dir) + + def create_dump_dir(self): dump_sub_dir = ("%s_%s" % ( datetime.datetime.now().strftime('%Y%m%d%H%M'), self._testMethodName)) - dump_dir = os.path.join(dump_dir, dump_sub_dir) + dump_dir = os.path.join(self.target.dump_dir, dump_sub_dir) os.makedirs(dump_dir) - bb.warn("%s failed: getting data from target and " - "saving into %s" % (self._testMethodName, dump_dir)) - for command in commands: + return dump_dir + + def dump_host_logs(self, dump_dir): + for cmd in self.target.dump_host.split('\n'): + cmd = cmd.lstrip() + if not cmd: + continue + output = commands.getoutput(cmd) + filename = "host_%s" % cmd.split()[0] + with open(os.path.join(dump_dir, filename), 'w') as f: + f.write(output) + + def dump_target_logs(self, dump_dir): + for cmd in self.target.dump_target.split('\n'): + cmd = cmd.lstrip() + if not cmd: + continue # This will ping the host from target - if command == "_ping": + if cmd == "_ping": comm = "ping -c3 %s" % self.target.server_ip # This will get all the logs from /var/log/ - elif command == "_logs": + elif cmd == "_logs": comm = 'find /var/log/ -type f 2>/dev/null ' comm = '%s-exec echo "%s" \\; ' % (comm, '='*20) comm = '%s-exec echo {} \\; ' % comm comm = '%s-exec echo "%s" \\; ' % (comm, '='*20) comm = '%s-exec cat {} \\; -exec echo "" \\;' % comm else: - comm = command + comm = cmd (status, output) = self.target.run_serial(comm) - filename = command.split()[0] + filename = "target_%s" % cmd.split()[0] with open(os.path.join(dump_dir, filename), 'w') as f: f.write(output) diff --git a/meta/lib/oeqa/targetcontrol.py b/meta/lib/oeqa/targetcontrol.py index c76887bae1..59cae2eff1 100644 --- a/meta/lib/oeqa/targetcontrol.py +++ b/meta/lib/oeqa/targetcontrol.py @@ -123,6 +123,9 @@ class QemuTarget(BaseTarget): self.origrootfs = os.path.join(d.getVar("DEPLOY_DIR_IMAGE", True), d.getVar("IMAGE_LINK_NAME", True) + '.' + self.image_fstype) self.rootfs = os.path.join(self.testdir, d.getVar("IMAGE_LINK_NAME", True) + '-testimage.' + self.image_fstype) self.kernel = os.path.join(d.getVar("DEPLOY_DIR_IMAGE", True), d.getVar("KERNEL_IMAGETYPE", False) + '-' + d.getVar('MACHINE', False) + '.bin') + self.dump_target = d.getVar("testimage_dump_target", True) + self.dump_host = d.getVar("testimage_dump_host", True) + self.dump_dir = d.getVar("TESTIMAGE_DUMP_DIR", True) # Log QemuRunner log output to a file import oe.path |