summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/utils/sshcontrol.py
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2015-09-04 16:59:38 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-09-06 15:26:18 +0100
commitef0fe3193eb546757f7c98274b88c4f2eafd7ad0 (patch)
tree4e3222722ee7fa29409fde8e2f614b8d12683a0e /meta/lib/oeqa/utils/sshcontrol.py
parent3d81a56912fb2c6ca1c5aafb93cbc6e2cfea20b3 (diff)
downloadpoky-ef0fe3193eb546757f7c98274b88c4f2eafd7ad0.tar.gz
oeqa: Test failure/cleanup improvements
Currently, if qemu segfaults, the tests merrily continue trying to execute which takes time for them to timeout and is a bit silly. Worse, no logs about the segfault are shown to the user, its silent! This patch tries to unravel the tangled web of issues and ensures that we: * install a SIGCHLD handler which tells the user qemu exited * check if qemu is running, if it isn't fail the test outright * don't leave processes behind in sshcontrol which would hold bitbake.lock and block shutdown (From OE-Core rev: 5c04b1ca1e989f569d5755a646734d01a0c56cae) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa/utils/sshcontrol.py')
-rw-r--r--meta/lib/oeqa/utils/sshcontrol.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/meta/lib/oeqa/utils/sshcontrol.py b/meta/lib/oeqa/utils/sshcontrol.py
index 6ed48badc8..00f5051053 100644
--- a/meta/lib/oeqa/utils/sshcontrol.py
+++ b/meta/lib/oeqa/utils/sshcontrol.py
@@ -42,7 +42,7 @@ class SSHProcess(object):
42 with open(self.logfile, "a") as f: 42 with open(self.logfile, "a") as f:
43 f.write("%s" % msg) 43 f.write("%s" % msg)
44 44
45 def run(self, command, timeout=None, logfile=None): 45 def _run(self, command, timeout=None, logfile=None):
46 self.logfile = logfile 46 self.logfile = logfile
47 self.starttime = time.time() 47 self.starttime = time.time()
48 output = '' 48 output = ''
@@ -79,8 +79,18 @@ class SSHProcess(object):
79 79
80 self.status = self.process.wait() 80 self.status = self.process.wait()
81 self.output = output.rstrip() 81 self.output = output.rstrip()
82 return (self.status, self.output)
83 82
83 def run(self, command, timeout=None, logfile=None):
84 try:
85 self._run(command, timeout, logfile)
86 except:
87 # Need to guard against a SystemExit or other exception occuring whilst running
88 # and ensure we don't leave a process behind.
89 if self.process.poll() is None:
90 self.process.kill()
91 self.status = self.process.wait()
92 raise
93 return (self.status, self.output)
84 94
85class SSHControl(object): 95class SSHControl(object):
86 def __init__(self, ip, logfile=None, timeout=300, user='root', port=None): 96 def __init__(self, ip, logfile=None, timeout=300, user='root', port=None):