summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
authorMariano Lopez <mariano.lopez@linux.intel.com>2015-09-05 10:17:26 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-09-09 14:27:39 +0100
commit6b41b7cc323e3bed2d0545019e7bdc8e006db1e9 (patch)
tree248be2b7c1e4ea6677f9c5f63d685b3f0abe93dd /meta
parente570b3202071d39564c872c6f2e94a78313f5a9d (diff)
downloadpoky-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.bbclass12
-rw-r--r--meta/lib/oeqa/oetest.py6
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
316testimage_main[vardepsexclude] =+ "BB_ORIGENV" 326testimage_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