summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2022-01-31 22:16:42 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-02-21 23:37:26 +0000
commitbb4f2bfcecdf2ec9ede6f60f250fde130414c4ef (patch)
tree516d690d06f4c1406b7866a6a4064a86e0363a91 /scripts
parent66998aeec840f8d8c5e6c84bde0aaa599e8e3c67 (diff)
downloadpoky-bb4f2bfcecdf2ec9ede6f60f250fde130414c4ef.tar.gz
yocto-check-layer: add ability to perform tests from a global bbclass
This is useful when needing to test layer's recipes, where this special bbclass can define a global python function that gets called on each recipe parsing during "bitbake -S none world" signature dump and be able to fail layer's check accordingly. First test being added is to detect recipes skipping "installed-vs-shipped" QA check. As "installed-vs-shipped" is a packaging QA check, it happens very late in the build process and failing it could mean some potential issues with packaging, especially when recipe uses BBCLASSEXTEND="nativesdk" and resulting package is used in an SDK. In OE-Core failing this QA check leads to an error, but other layers can suppress it or change it to a warning. Detecting weird packaging problems with SDKs is quite difficult and time consuming. Also, waiting for the actual "installed-vs-shipped" packaging QA check to fail means that all recipes in the layer under test have to run through all standard tasks in the build chain, equivalent to a multi-hour world-build. Hence yocto-check-layer takes a shortcut and only detects a mere attempt at skipping "installed-vs-shipped" QA check in the INSANE_SKIP list during initial parsing when dumping the signature information for the layer. (From OE-Core rev: e8baa75535fc888f1d768b23a0140475e832c910) Signed-off-by: Denys Dmytriyenko <denis@denix.org> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/lib/checklayer/__init__.py5
-rw-r--r--scripts/lib/checklayer/cases/common.py15
2 files changed, 19 insertions, 1 deletions
diff --git a/scripts/lib/checklayer/__init__.py b/scripts/lib/checklayer/__init__.py
index f91888ccbb..9713570841 100644
--- a/scripts/lib/checklayer/__init__.py
+++ b/scripts/lib/checklayer/__init__.py
@@ -282,7 +282,7 @@ def check_command(error_msg, cmd, cwd=None):
282 raise RuntimeError(msg) 282 raise RuntimeError(msg)
283 return output 283 return output
284 284
285def get_signatures(builddir, failsafe=False, machine=None): 285def get_signatures(builddir, failsafe=False, machine=None, extravars=None):
286 import re 286 import re
287 287
288 # some recipes needs to be excluded like meta-world-pkgdata 288 # some recipes needs to be excluded like meta-world-pkgdata
@@ -294,6 +294,9 @@ def get_signatures(builddir, failsafe=False, machine=None):
294 tune2tasks = {} 294 tune2tasks = {}
295 295
296 cmd = 'BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE BB_SIGNATURE_HANDLER" BB_SIGNATURE_HANDLER="OEBasicHash" ' 296 cmd = 'BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE BB_SIGNATURE_HANDLER" BB_SIGNATURE_HANDLER="OEBasicHash" '
297 if extravars:
298 cmd += extravars
299 cmd += ' '
297 if machine: 300 if machine:
298 cmd += 'MACHINE=%s ' % machine 301 cmd += 'MACHINE=%s ' % machine
299 cmd += 'bitbake ' 302 cmd += 'bitbake '
diff --git a/scripts/lib/checklayer/cases/common.py b/scripts/lib/checklayer/cases/common.py
index 9f15e05be9..318cda169e 100644
--- a/scripts/lib/checklayer/cases/common.py
+++ b/scripts/lib/checklayer/cases/common.py
@@ -54,6 +54,21 @@ class CommonCheckLayer(OECheckLayerTestCase):
54 ''' 54 '''
55 get_signatures(self.td['builddir'], failsafe=False) 55 get_signatures(self.td['builddir'], failsafe=False)
56 56
57 def test_world_inherit_class(self):
58 '''
59 This also does "bitbake -S none world" along with inheriting "yocto-check-layer"
60 class, which can do additional per-recipe test cases.
61 '''
62 msg = []
63 try:
64 get_signatures(self.td['builddir'], failsafe=False, machine=None, extravars='BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE INHERIT" INHERIT="yocto-check-layer"')
65 except RuntimeError as ex:
66 msg.append(str(ex))
67 if msg:
68 msg.insert(0, 'Layer %s failed additional checks from yocto-check-layer.bbclass\nSee below log for specific recipe parsing errors:\n' % \
69 self.tc.layer['name'])
70 self.fail('\n'.join(msg))
71
57 def test_signatures(self): 72 def test_signatures(self):
58 if self.tc.layer['type'] == LayerType.SOFTWARE and \ 73 if self.tc.layer['type'] == LayerType.SOFTWARE and \
59 not self.tc.test_software_layer_signatures: 74 not self.tc.test_software_layer_signatures: