summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/selftest/cases/spdx.py
blob: 05fc4e390b28a89088a66597401086a45db8bab1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#
# 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")