diff options
| author | Alexander Kanavin <alex.kanavin@gmail.com> | 2020-04-17 16:18:45 +0200 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-04-26 14:00:50 +0100 |
| commit | c7ce37d3dd3d4cb6c73d0c36e456b4cc589e5007 (patch) | |
| tree | d7e966c94fa0259e6cdc995cc4c1f2065d3df351 | |
| parent | 4ae71d667d9ddd88180577c1ab64b2c96edfaeb3 (diff) | |
| download | poky-c7ce37d3dd3d4cb6c73d0c36e456b4cc589e5007.tar.gz | |
testimage: add an overall timeout setting
This is useful when tests misbehave and get stuck, or when
a significant increase in testing time is undesirable and
needs to be caught automatically.
(From OE-Core rev: d77546e910ad9048f0057f4465716d417b810065)
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | meta/classes/testimage.bbclass | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/meta/classes/testimage.bbclass b/meta/classes/testimage.bbclass index 53945478af..00f0c29836 100644 --- a/meta/classes/testimage.bbclass +++ b/meta/classes/testimage.bbclass | |||
| @@ -31,6 +31,7 @@ TESTIMAGE_AUTO ??= "0" | |||
| 31 | # TEST_LOG_DIR contains a command ssh log and may contain infromation about what command is running, output and return codes and for qemu a boot log till login. | 31 | # TEST_LOG_DIR contains a command ssh log and may contain infromation about what command is running, output and return codes and for qemu a boot log till login. |
| 32 | # Booting is handled by this class, and it's not a test in itself. | 32 | # Booting is handled by this class, and it's not a test in itself. |
| 33 | # TEST_QEMUBOOT_TIMEOUT can be used to set the maximum time in seconds the launch code will wait for the login prompt. | 33 | # TEST_QEMUBOOT_TIMEOUT can be used to set the maximum time in seconds the launch code will wait for the login prompt. |
| 34 | # TEST_OVERALL_TIMEOUT can be used to set the maximum time in seconds the tests will be allowed to run (defaults to no limit). | ||
| 34 | # TEST_QEMUPARAMS can be used to pass extra parameters to qemu, e.g. "-m 1024" for setting the amount of ram to 1 GB. | 35 | # TEST_QEMUPARAMS can be used to pass extra parameters to qemu, e.g. "-m 1024" for setting the amount of ram to 1 GB. |
| 35 | # TEST_RUNQEMUPARAMS can be used to pass extra parameters to runqemu, e.g. "gl" to enable OpenGL acceleration. | 36 | # TEST_RUNQEMUPARAMS can be used to pass extra parameters to runqemu, e.g. "gl" to enable OpenGL acceleration. |
| 36 | 37 | ||
| @@ -75,6 +76,7 @@ DEFAULT_TEST_SUITES_remove_qemumips64 = "${MIPSREMOVE}" | |||
| 75 | TEST_SUITES ?= "${DEFAULT_TEST_SUITES}" | 76 | TEST_SUITES ?= "${DEFAULT_TEST_SUITES}" |
| 76 | 77 | ||
| 77 | TEST_QEMUBOOT_TIMEOUT ?= "1000" | 78 | TEST_QEMUBOOT_TIMEOUT ?= "1000" |
| 79 | TEST_OVERALL_TIMEOUT ?= "" | ||
| 78 | TEST_TARGET ?= "qemu" | 80 | TEST_TARGET ?= "qemu" |
| 79 | TEST_QEMUPARAMS ?= "" | 81 | TEST_QEMUPARAMS ?= "" |
| 80 | TEST_RUNQEMUPARAMS ?= "" | 82 | TEST_RUNQEMUPARAMS ?= "" |
| @@ -206,6 +208,10 @@ def testimage_main(d): | |||
| 206 | """ | 208 | """ |
| 207 | os.kill(os.getpid(), signal.SIGINT) | 209 | os.kill(os.getpid(), signal.SIGINT) |
| 208 | 210 | ||
| 211 | def handle_test_timeout(timeout): | ||
| 212 | bb.warn("Global test timeout reached (%s seconds), stopping the tests." %(timeout)) | ||
| 213 | os.kill(os.getpid(), signal.SIGINT) | ||
| 214 | |||
| 209 | testimage_sanity(d) | 215 | testimage_sanity(d) |
| 210 | 216 | ||
| 211 | if (d.getVar('IMAGE_PKGTYPE') == 'rpm' | 217 | if (d.getVar('IMAGE_PKGTYPE') == 'rpm' |
| @@ -363,6 +369,11 @@ def testimage_main(d): | |||
| 363 | # We need to check if runqemu ends unexpectedly | 369 | # We need to check if runqemu ends unexpectedly |
| 364 | # or if the worker send us a SIGTERM | 370 | # or if the worker send us a SIGTERM |
| 365 | tc.target.start(params=d.getVar("TEST_QEMUPARAMS"), runqemuparams=d.getVar("TEST_RUNQEMUPARAMS")) | 371 | tc.target.start(params=d.getVar("TEST_QEMUPARAMS"), runqemuparams=d.getVar("TEST_RUNQEMUPARAMS")) |
| 372 | import threading | ||
| 373 | try: | ||
| 374 | threading.Timer(int(d.getVar("TEST_OVERALL_TIMEOUT")), handle_test_timeout, (int(d.getVar("TEST_OVERALL_TIMEOUT")),)).start() | ||
| 375 | except ValueError: | ||
| 376 | pass | ||
| 366 | results = tc.runTests() | 377 | results = tc.runTests() |
| 367 | except (KeyboardInterrupt, BlockingIOError) as err: | 378 | except (KeyboardInterrupt, BlockingIOError) as err: |
| 368 | if isinstance(err, KeyboardInterrupt): | 379 | if isinstance(err, KeyboardInterrupt): |
