aboutsummaryrefslogtreecommitdiffstats
path: root/meta/lib
diff options
context:
space:
mode:
authorMariano Lopez <mariano.lopez@linux.intel.com>2015-08-18 14:52:38 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-08-30 12:34:27 +0100
commit7b4fbbf979ed22434b8e3f83ae145139bb0d9fc7 (patch)
tree41058650cc0320c516c41a32609814452d26c35b /meta/lib
parentf906c5eb722de07eb09858fd058eb7e20103df71 (diff)
downloadopenembedded-core-contrib-7b4fbbf979ed22434b8e3f83ae145139bb0d9fc7.tar.gz
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.py48
-rw-r--r--meta/lib/oeqa/targetcontrol.py3
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