Fix up the server-side sysinfo collection (again) to make sure all
temp directories and installs on the host machine are removed. Since
the install->run collection->remove pattern seems to be pretty common,
I extracted it out into a dectorator.
Risk: Low
Visibility: Should eliminate more sysinfo collection junk eagerly.
Signed-off-by: John Admanski <[email protected]>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@2938 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/server/test.py b/server/test.py
index a555b62..88d2d37 100755
--- a/server/test.py
+++ b/server/test.py
@@ -52,6 +52,18 @@
"""
+def install_autotest_and_run(func):
+ def wrapper(self, mytest):
+ try:
+ host, at = self._install()
+ outputdir = host.get_tmp_dir()
+ func(self, mytest, host, at, outputdir)
+ finally:
+ at.uninstall()
+ host.delete_tmp_dir(outputdir)
+ return wrapper
+
+
class _sysinfo_logger(object):
def __init__(self, job):
self.job = job
@@ -105,23 +117,18 @@
@log.log_and_ignore_errors("pre-test server sysinfo error:")
- def before_hook(self, mytest):
- host, at = self._install()
- outputdir = host.get_tmp_dir()
-
+ @install_autotest_and_run
+ def before_hook(self, mytest, host, at, outputdir):
# run the pre-test sysinfo script
at.run(_sysinfo_before_test_script % outputdir,
results_dir=self.job.resultdir)
self._pull_pickle(host, outputdir)
- host.delete_tmp_dir(outputdir)
@log.log_and_ignore_errors("pre-test iteration server sysinfo error:")
- def before_iteration_hook(self, mytest):
- host, at = self._install()
- outputdir = host.get_tmp_dir()
-
+ @install_autotest_and_run
+ def before_iteration_hook(self, mytest, host, at, outputdir):
# this function is called after before_hook() se we have sysinfo state
# to push to the server
self._push_pickle(host, outputdir);
@@ -133,14 +140,11 @@
# get the new sysinfo state from the client
self._pull_pickle(host, outputdir)
- host.delete_tmp_dir(outputdir)
@log.log_and_ignore_errors("post-test iteration server sysinfo error:")
- def after_iteration_hook(self, mytest):
- host, at = self._install()
- outputdir = host.get_tmp_dir()
-
+ @install_autotest_and_run
+ def after_iteration_hook(self, mytest, host, at, outputdir):
# push latest sysinfo state to the client
self._push_pickle(host, outputdir);
# run the post-test iteration sysinfo script
@@ -152,21 +156,17 @@
# get the new sysinfo state from the client
self._pull_pickle(host, outputdir)
self._pull_sysinfo_keyval(host, outputdir, mytest)
- host.delete_tmp_dir(outputdir)
@log.log_and_ignore_errors("post-test server sysinfo error:")
- def after_hook(self, mytest):
- host, at = self._install()
- outputdir = host.get_tmp_dir()
-
+ @install_autotest_and_run
+ def after_hook(self, mytest, host, at, outputdir):
self._push_pickle(host, outputdir);
# run the post-test sysinfo script
at.run(_sysinfo_after_test_script % outputdir,
results_dir=self.job.resultdir)
self._pull_sysinfo_keyval(host, outputdir, mytest)
- host.delete_tmp_dir(outputdir)
def runtest(job, url, tag, args, dargs):