# # BitBake Test for lib/bb/siggen.py # # Copyright (C) 2020 Jean-François Dagenais # # SPDX-License-Identifier: GPL-2.0-only # import unittest import logging import bb import bb.data import time from contextlib import contextmanager logger = logging.getLogger('BitBake.TestSiggen') import bb.siggen class SiggenTest(unittest.TestCase): def test_build_pnid(self): tests = { ('', 'helloworld', 'do_sometask') : 'helloworld:do_sometask', ('XX', 'helloworld', 'do_sometask') : 'mc:XX:helloworld:do_sometask', } for t in tests: self.assertEqual(bb.siggen.build_pnid(*t), tests[t]) def test_get_unihashes_rejects_invalid_hashserv_unihash(self): class TestClient: def get_unihash_batch(self, query): list(query) return ["${@os.system('true')}"] class TestSiggen(bb.siggen.SignatureGeneratorUniHashMixIn): def __init__(self): self.server = "test-server" self.method = "test-method" self.extramethod = {} self.taskhash = {"test.bb:do_compile": "a" * 64} self.unihash = {} self.unitaskhashes = {} self.tidtopn = {} self.setscenetasks = set() self.max_parallel = 1 @contextmanager def client(self): yield TestClient() siggen = TestSiggen() with self.assertRaises(bb.BBHandledException): siggen.get_unihashes(["test.bb:do_compile"]) self.assertEqual(siggen.unihash, {}) self.assertEqual(siggen.unitaskhashes, {}) def test_report_unihash_reads_bb_unihash_without_expansion(self): class TestSiggen(bb.siggen.SignatureGeneratorUniHashMixIn): def __init__(self): self.setscenetasks = set() self.taskhash = {"test.bb:do_compile": "b" * 64} d = bb.data.init() d.setVar("BB_TASKHASH", "a" * 64) d.setVar("BB_UNIHASH", "${@d.setVar('EXPANDED_UNIHASH', '1') or 'bad'}") d.setVar("SSTATE_HASHEQUIV_REPORT_TASKDATA", "0") d.setVar("T", "/tmp") d.setVar("BB_FILENAME", "test.bb") TestSiggen().report_unihash(".", "compile", d) self.assertIsNone(d.getVar("EXPANDED_UNIHASH"))