summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMariano Lopez <mariano.lopez@linux.intel.com>2015-08-12 10:58:53 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-08-16 09:24:22 +0100
commit8bbfef69828d9b053e2a33dfa9d8318d9572cf6b (patch)
treebea3c2c6d3dad93820b9f5afdc2f8a9df654eaaf
parent600f35c0873a61f8cd02c0e5cc1495ce7785ea89 (diff)
downloadopenembedded-core-contrib-8bbfef69828d9b053e2a33dfa9d8318d9572cf6b.tar.gz
oetest.py: Added method tearDown for oeRuntimeTest
The tearDown method is triggered when a tests ends it doesn't matter if fails or succeeds. Inside this method added an evalution to check if fails and then run some commands in the target to get the data for later debugging. [YOCTO #8118] Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com>
-rw-r--r--meta/lib/oeqa/oetest.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py
index 22d76b35e1..a3f297acf6 100644
--- a/meta/lib/oeqa/oetest.py
+++ b/meta/lib/oeqa/oetest.py
@@ -11,6 +11,7 @@ import os, re, mmap
import unittest
import inspect
import subprocess
+import datetime
import bb
from oeqa.utils.decorators import LogResults
@@ -117,6 +118,42 @@ class oeRuntimeTest(oeTest):
self.target = oeRuntimeTest.tc.target
super(oeRuntimeTest, self).__init__(methodName)
+ def tearDown(self):
+ # If a test fails or there is an exception
+ if (self._resultForDoCleanups.failures or
+ self._resultForDoCleanups.errors):
+ commands = ["top -bn1", "ps", "free", "df", "_ping", "dmesg", "netstat -a", "ifconfig -a", "_logs"]
+ dump_dir = "/tmp/oe-saved-tests"
+ dump_dir = os.path.join(dump_dir,
+ datetime.datetime.now().strftime('%Y%m%d%H%M'))
+ os.makedirs(dump_dir)
+ bb.warn("Test failed, getting data from target "
+ "and saving it in %s" % dump_dir)
+ output = self.run_bulk_commands(commands)
+ for key,msg in output.iteritems():
+ filename = key.split()[0]
+ with open(os.path.join(dump_dir, filename), 'w') as f:
+ f.write(msg)
+
+ def run_bulk_commands(self, commands):
+ all_output = {}
+ for command in commands:
+ # This will ping the host from target
+ if command == "_ping":
+ comm = "ping -c3 %s" % self.target.server_ip
+ # This will get all the logs from /var/log/
+ elif command == "_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
+ (status, output) = self.target.run_serial(comm)
+ all_output[command] = output
+ return all_output
+
#TODO: use package_manager.py to install packages on any type of image
def install_packages(self, packagelist):
for package in packagelist: