diff options
author | Mariano Lopez <mariano.lopez@linux.intel.com> | 2015-09-05 10:17:26 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-09-09 14:27:39 +0100 |
commit | 6b41b7cc323e3bed2d0545019e7bdc8e006db1e9 (patch) | |
tree | 248be2b7c1e4ea6677f9c5f63d685b3f0abe93dd /meta | |
parent | e570b3202071d39564c872c6f2e94a78313f5a9d (diff) | |
download | poky-6b41b7cc323e3bed2d0545019e7bdc8e006db1e9.tar.gz |
testimage: handle SIGTERM to conclude runqemu
In the current state if a SIGTERM is sent to
the testimage worker, the worker will exit but
runqemu and qemu won't exit and the processes
need to be killed manually to free the
bitbake lock.
This allows to catch the SIGTERM signal in
testimage, this way it is possible to stop
runqemu and qemu and allow to free the bitbake lock.
Also this allows to skip the rest of the tests
when running the tests in qemu or real hardware.
This also solves minimal breaks in the setup of the
runtime test when checking if qemu is alive.
[YOCTO #8239]
(From OE-Core rev: 2694d2f17d597b44fcc7aed5f6836081fa88a6b3)
Signed-off-by: Benjamin Esquivel <benjamin.esquivel@linux.intel.com>
Signed-off-by: Mariano Lopez <mariano.lopez@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/classes/testimage.bbclass | 12 | ||||
-rw-r--r-- | meta/lib/oeqa/oetest.py | 6 |
2 files changed, 16 insertions, 2 deletions
diff --git a/meta/classes/testimage.bbclass b/meta/classes/testimage.bbclass index 7c783ea065..19a37cb037 100644 --- a/meta/classes/testimage.bbclass +++ b/meta/classes/testimage.bbclass | |||
@@ -236,6 +236,7 @@ def testimage_main(d): | |||
236 | import os | 236 | import os |
237 | import oeqa.runtime | 237 | import oeqa.runtime |
238 | import time | 238 | import time |
239 | import signal | ||
239 | from oeqa.oetest import loadTests, runTests | 240 | from oeqa.oetest import loadTests, runTests |
240 | from oeqa.targetcontrol import get_target_controller | 241 | from oeqa.targetcontrol import get_target_controller |
241 | from oeqa.utils.dump import get_host_dumper | 242 | from oeqa.utils.dump import get_host_dumper |
@@ -273,12 +274,20 @@ def testimage_main(d): | |||
273 | self.imagefeatures = d.getVar("IMAGE_FEATURES", True).split() | 274 | self.imagefeatures = d.getVar("IMAGE_FEATURES", True).split() |
274 | self.distrofeatures = d.getVar("DISTRO_FEATURES", True).split() | 275 | self.distrofeatures = d.getVar("DISTRO_FEATURES", True).split() |
275 | manifest = os.path.join(d.getVar("DEPLOY_DIR_IMAGE", True), d.getVar("IMAGE_LINK_NAME", True) + ".manifest") | 276 | manifest = os.path.join(d.getVar("DEPLOY_DIR_IMAGE", True), d.getVar("IMAGE_LINK_NAME", True) + ".manifest") |
277 | self.sigterm = False | ||
278 | self.origsigtermhandler = signal.getsignal(signal.SIGTERM) | ||
279 | signal.signal(signal.SIGTERM, self.sigterm_exception) | ||
276 | try: | 280 | try: |
277 | with open(manifest) as f: | 281 | with open(manifest) as f: |
278 | self.pkgmanifest = f.read() | 282 | self.pkgmanifest = f.read() |
279 | except IOError as e: | 283 | except IOError as e: |
280 | bb.fatal("No package manifest file found. Did you build the image?\n%s" % e) | 284 | bb.fatal("No package manifest file found. Did you build the image?\n%s" % e) |
281 | 285 | ||
286 | def sigterm_exception(self, signum, stackframe): | ||
287 | bb.warn("TestImage received SIGTERM, shutting down...") | ||
288 | self.sigterm = True | ||
289 | self.target.stop() | ||
290 | |||
282 | # test context | 291 | # test context |
283 | tc = TestContext() | 292 | tc = TestContext() |
284 | 293 | ||
@@ -293,8 +302,8 @@ def testimage_main(d): | |||
293 | 302 | ||
294 | target.deploy() | 303 | target.deploy() |
295 | 304 | ||
296 | target.start() | ||
297 | try: | 305 | try: |
306 | target.start() | ||
298 | if export: | 307 | if export: |
299 | exportTests(d,tc) | 308 | exportTests(d,tc) |
300 | else: | 309 | else: |
@@ -311,6 +320,7 @@ def testimage_main(d): | |||
311 | else: | 320 | else: |
312 | raise bb.build.FuncFailed("%s - FAILED - check the task log and the ssh log" % pn ) | 321 | raise bb.build.FuncFailed("%s - FAILED - check the task log and the ssh log" % pn ) |
313 | finally: | 322 | finally: |
323 | signal.signal(signal.SIGTERM, tc.origsigtermhandler) | ||
314 | target.stop() | 324 | target.stop() |
315 | 325 | ||
316 | testimage_main[vardepsexclude] =+ "BB_ORIGENV" | 326 | testimage_main[vardepsexclude] =+ "BB_ORIGENV" |
diff --git a/meta/lib/oeqa/oetest.py b/meta/lib/oeqa/oetest.py index ff62c30268..0fe68d4d52 100644 --- a/meta/lib/oeqa/oetest.py +++ b/meta/lib/oeqa/oetest.py | |||
@@ -145,7 +145,11 @@ class oeRuntimeTest(oeTest): | |||
145 | super(oeRuntimeTest, self).__init__(methodName) | 145 | super(oeRuntimeTest, self).__init__(methodName) |
146 | 146 | ||
147 | def setUp(self): | 147 | def setUp(self): |
148 | self.assertTrue(self.target.check(), msg = "Qemu not running?") | 148 | # Check if test needs to run |
149 | if self.tc.sigterm: | ||
150 | self.fail("Got SIGTERM") | ||
151 | elif (type(self.target).__name__ == "QemuTarget"): | ||
152 | self.assertTrue(self.target.check(), msg = "Qemu not running?") | ||
149 | 153 | ||
150 | def tearDown(self): | 154 | def tearDown(self): |
151 | # If a test fails or there is an exception | 155 | # If a test fails or there is an exception |