| # |
| # Copyright OpenEmbedded Contributors |
| # |
| # SPDX-License-Identifier: MIT |
| # |
| |
| import json |
| import os |
| from oeqa.selftest.case import OESelftestTestCase |
| from oeqa.utils.commands import bitbake, get_bb_var, runCmd |
| |
| class SPDXCheck(OESelftestTestCase): |
| |
| @classmethod |
| def setUpClass(cls): |
| super(SPDXCheck, cls).setUpClass() |
| bitbake("python3-spdx-tools-native") |
| bitbake("-c addto_recipe_sysroot python3-spdx-tools-native") |
| |
| def check_recipe_spdx(self, high_level_dir, spdx_file, target_name): |
| config = """ |
| INHERIT += "create-spdx" |
| """ |
| self.write_config(config) |
| |
| deploy_dir = get_bb_var("DEPLOY_DIR") |
| machine_var = get_bb_var("MACHINE") |
| # qemux86-64 creates the directory qemux86_64 |
| machine_dir = machine_var.replace("-", "_") |
| |
| full_file_path = os.path.join(deploy_dir, "spdx", machine_dir, high_level_dir, spdx_file) |
| |
| try: |
| os.remove(full_file_path) |
| except FileNotFoundError: |
| pass |
| |
| bitbake("%s -c create_spdx" % target_name) |
| |
| def check_spdx_json(filename): |
| with open(filename) as f: |
| report = json.load(f) |
| self.assertNotEqual(report, None) |
| self.assertNotEqual(report["SPDXID"], None) |
| |
| python = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-spdx-tools-native'), 'nativepython3') |
| validator = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-spdx-tools-native'), 'pyspdxtools') |
| result = runCmd("{} {} -i {}".format(python, validator, filename)) |
| |
| self.assertExists(full_file_path) |
| result = check_spdx_json(full_file_path) |
| |
| def test_spdx_base_files(self): |
| self.check_recipe_spdx("packages", "base-files.spdx.json", "base-files") |