[OE-core] [PATCH] testimage: Run commands in target and host when test fails
mariano.lopez at linux.intel.com
mariano.lopez at linux.intel.com
Mon Aug 17 12:41:42 UTC 2015
From: Mariano Lopez <mariano.lopez at linux.intel.com>
This patch modify three files altought two of them
are minimal modifications:
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_TRG: Commands to run on target
TESTIMAGE_DUMP_HST: Commands to run on host
targetcontrol.py:
Extract vars from the datastore for later use
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]
Signed-off-by: Mariano Lopez <mariano.lopez at linux.intel.com>
---
meta/classes/testimage.bbclass | 9 +++++++++
meta/lib/oeqa/oetest.py | 42 +++++++++++++++++++++++++++---------------
meta/lib/oeqa/targetcontrol.py | 3 +++
3 files changed, 39 insertions(+), 15 deletions(-)
diff --git a/meta/classes/testimage.bbclass b/meta/classes/testimage.bbclass
index 140babe..1580a4e 100644
--- a/meta/classes/testimage.bbclass
+++ b/meta/classes/testimage.bbclass
@@ -56,6 +56,15 @@ TESTIMAGEDEPENDS_qemuall = "qemu-native:do_populate_sysroot qemu-helper-native:d
TESTIMAGELOCK = "${TMPDIR}/testimage.lock"
TESTIMAGELOCK_qemuall = ""
+TESTIMAGE_DUMP_DIR ?= "/tmp/oe-saved-tests/"
+
+python () {
+ target_cmds = ["top -bn1", "ps", "free", "df", "_ping", "dmesg", "netstat -an", "ip address", "_logs"]
+ host_cmds = ["top -bn1", "ps", "free", "df", "memstat", "dmesg", "netstat -an"]
+ d.setVar("TESTIMAGE_DUMP_TRG", target_cmds)
+ d.setVar("TESTIMAGE_DUMP_HST", host_cmds)
+}
+
python do_testimage() {
testimage_main(d)
}
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py
index dfed3de..fa8f127 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,45 @@ 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_hst:
+ 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_trg:
# 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 c76887b..7589ea4 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_trg = d.getVar("TESTIMAGE_DUMP_TRG", False)
+ self.dump_hst = d.getVar("TESTIMAGE_DUMP_HST", False)
+ self.dump_dir = d.getVar("TESTIMAGE_DUMP_DIR", False)
# Log QemuRunner log output to a file
import oe.path
--
1.8.4.5
More information about the Openembedded-core
mailing list