diff options
author | Tim Orling <ticotimo@gmail.com> | 2023-04-02 15:29:38 -0700 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2023-04-04 13:39:45 -0700 |
commit | 80e9601cc87a705f9f9d585fb2aa631e6e7e41db (patch) | |
tree | e80f6f3a06ee1895b7fcdf52a16d7f215776d17c /meta-python | |
parent | 69d921a342dd57f3aafddc9e45b693d04ccd9cd8 (diff) | |
download | meta-openembedded-80e9601cc87a705f9f9d585fb2aa631e6e7e41db.tar.gz |
meta-python-ptest*-image: enable BBCLASSEXTEND parallel execution
Similar to "core-image-ptest: Switch to BBCLASSEXTEND parallel execution"
Refactor meta-python-ptest-image.bb for an image per ptest in the form of
meta-python-ptest-image-XXX using class extensions.
* Add meta-python-ptest-all-image.bb depends on ALL meta-python-ptest-image-XXX in meta-python
* Add meta-python-ptest-fast-image.bb depends on meta-python ptests which take less than ~30s
This allows parallel execution of the tests.
The downside to this approach is the parsing time of an image generating
this number of class extensions is slow but making it easier to execute
and collect test data should outweigh that.
A useful advantage is that the dependencies of each ptest package are
checked/tested individually.
Add to local.conf:
IMAGE_CLASSES += "testimage"
All the meta-python-ptest-image-XXX can be built with:
$ bitbake meta-python-ptest-all-image
Subsequently, all the ptest images can be run with:
$ bitbake -c testimage meta-python-ptest-all-image
You will likely want to limit the number of parallel image tests:
BB_NUMBER_THREADS = "4"
based on the number of TAP devices you have defined or the number of simultaneous
QEMU sessions your server can support.
Results can be summarized with:
$ resulttool report tmp/log/oeqa/testresults.json
Signed-off-by: Tim Orling <tim.orling@konsulko.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta-python')
3 files changed, 68 insertions, 1 deletions
diff --git a/meta-python/recipes-core/images/meta-python-ptest-all-image.bb b/meta-python/recipes-core/images/meta-python-ptest-all-image.bb new file mode 100644 index 0000000000..fd4dc42487 --- /dev/null +++ b/meta-python/recipes-core/images/meta-python-ptest-all-image.bb | |||
@@ -0,0 +1,25 @@ | |||
1 | DESCRIPTION = "Recipe to trigger execution of all meta-python ptest images." | ||
2 | HOMEPAGE = "https://www.openembedded.org/" | ||
3 | |||
4 | LICENSE = "MIT" | ||
5 | |||
6 | inherit features_check nopackages | ||
7 | REQUIRED_DISTRO_FEATURES = "ptest" | ||
8 | |||
9 | require conf/include/ptest-packagelists-meta-python.inc | ||
10 | |||
11 | # Include the full set of ptests | ||
12 | PTESTS_META_PYTHON = "${PTESTS_FAST_META_PYTHON} ${PTESTS_SLOW_META_PYTHON}" | ||
13 | |||
14 | do_testimage[noexec] = "1" | ||
15 | do_testimage[depends] = "${@' '.join(['meta-python-ptest-image-'+x+':do_testimage' for x in d.getVar('PTESTS_META_PYTHON').split()])}" | ||
16 | |||
17 | do_build[depends] = "${@' '.join(['meta-python-ptest-image-'+x+':do_build' for x in d.getVar('PTESTS_META_PYTHON').split()])}" | ||
18 | |||
19 | # normally image.bbclass would do this | ||
20 | EXCLUDE_FROM_WORLD = "1" | ||
21 | |||
22 | python () { | ||
23 | if bb.utils.contains('IMAGE_CLASSES', 'testimage', True, False, d): | ||
24 | bb.build.addtask("do_testimage", "", "", d) | ||
25 | } | ||
diff --git a/meta-python/recipes-core/images/meta-python-ptest-fast-image.bb b/meta-python/recipes-core/images/meta-python-ptest-fast-image.bb new file mode 100644 index 0000000000..4f93a15959 --- /dev/null +++ b/meta-python/recipes-core/images/meta-python-ptest-fast-image.bb | |||
@@ -0,0 +1,6 @@ | |||
1 | require meta-python-ptest-all-image.bb | ||
2 | |||
3 | DESCRIPTION = "Recipe to trigger execution of all fast meta-python ptest images." | ||
4 | |||
5 | PTESTS_META_PYTHON = "${PTESTS_FAST_META_PYTHON}" | ||
6 | |||
diff --git a/meta-python/recipes-core/images/meta-python-ptest-image.bb b/meta-python/recipes-core/images/meta-python-ptest-image.bb index d497016d41..a649cbb94c 100644 --- a/meta-python/recipes-core/images/meta-python-ptest-image.bb +++ b/meta-python/recipes-core/images/meta-python-ptest-image.bb | |||
@@ -1,5 +1,41 @@ | |||
1 | inherit features_check | ||
2 | REQUIRED_DISTRO_FEATURES = "ptest" | ||
3 | |||
4 | require conf/include/ptest-packagelists-meta-python.inc | ||
5 | |||
1 | require meta-python-image-base.bb | 6 | require meta-python-image-base.bb |
2 | 7 | ||
3 | SUMMARY = "meta-python ptest test image" | 8 | SUMMARY = "meta-python ptest test image" |
4 | 9 | ||
5 | IMAGE_INSTALL += "packagegroup-meta-python3-ptest" | 10 | DESCRIPTION += "Also including the ${MCNAME} ptest package." |
11 | HOMEPAGE = "https://www.openembedded.org/" | ||
12 | |||
13 | PTESTS_META_PYTHON = "${PTESTS_SLOW_META_PYTHON} ${PTESTS_FAST_META_PYTHON}" | ||
14 | |||
15 | IMAGE_INSTALL:append = " ${MCNAME}-ptest openssh" | ||
16 | |||
17 | BBCLASSEXTEND = "${@' '.join(['mcextend:'+x for x in d.getVar('PTESTS_META_PYTHON').split()])}" | ||
18 | |||
19 | # The image can be sufficiently large (~1.8GB) that we need to be careful that it fits in a live | ||
20 | # image (which has a 4GB limit), so nullify the overhead factor (1.3x out of the | ||
21 | # box) and explicitly add up to 1500MB. | ||
22 | IMAGE_OVERHEAD_FACTOR = "1.0" | ||
23 | IMAGE_ROOTFS_EXTRA_SPACE = "324288" | ||
24 | # If a particular ptest needs more space, it can be customized: | ||
25 | #IMAGE_ROOTFS_EXTRA_SPACE:virtclass-mcextend-<pn> = "1024288" | ||
26 | |||
27 | # ptests need more memory than standard to avoid the OOM killer | ||
28 | QB_MEM = "-m 1024" | ||
29 | # If a particular ptest needs more memory, it can be customized: | ||
30 | #QB_MEM:virtclass-mcextend-<pn> = "-m 4096" | ||
31 | |||
32 | TEST_SUITES = "ping ssh parselogs ptest" | ||
33 | |||
34 | # Sadly at the moment the full set of ptests is not robust enough and sporadically fails in random places | ||
35 | PTEST_EXPECT_FAILURE = "1" | ||
36 | |||
37 | python () { | ||
38 | if not d.getVar("MCNAME"): | ||
39 | raise bb.parse.SkipRecipe("No class extension set") | ||
40 | } | ||
41 | |||