1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# BitBake Tests for cooker.py 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# Copyright BitBake Contributors 5*4882a593Smuzhiyun# 6*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 7*4882a593Smuzhiyun# 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunimport unittest 10*4882a593Smuzhiyunimport os 11*4882a593Smuzhiyunimport bb, bb.cooker 12*4882a593Smuzhiyunimport re 13*4882a593Smuzhiyunimport logging 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun# Cooker tests 16*4882a593Smuzhiyunclass CookerTest(unittest.TestCase): 17*4882a593Smuzhiyun def setUp(self): 18*4882a593Smuzhiyun # At least one variable needs to be set 19*4882a593Smuzhiyun self.d = bb.data.init() 20*4882a593Smuzhiyun topdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "testdata/cooker") 21*4882a593Smuzhiyun self.d.setVar('TOPDIR', topdir) 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun def test_CookerCollectFiles_sublayers(self): 24*4882a593Smuzhiyun '''Test that a sublayer of an existing layer does not trigger 25*4882a593Smuzhiyun No bb files matched ...''' 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun def append_collection(topdir, path, d): 28*4882a593Smuzhiyun collection = path.split('/')[-1] 29*4882a593Smuzhiyun pattern = "^" + topdir + "/" + path + "/" 30*4882a593Smuzhiyun regex = re.compile(pattern) 31*4882a593Smuzhiyun priority = 5 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun d.setVar('BBFILE_COLLECTIONS', (d.getVar('BBFILE_COLLECTIONS') or "") + " " + collection) 34*4882a593Smuzhiyun d.setVar('BBFILE_PATTERN_%s' % (collection), pattern) 35*4882a593Smuzhiyun d.setVar('BBFILE_PRIORITY_%s' % (collection), priority) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun return (collection, pattern, regex, priority) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun topdir = self.d.getVar("TOPDIR") 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun # Priorities: list of (collection, pattern, regex, priority) 42*4882a593Smuzhiyun bbfile_config_priorities = [] 43*4882a593Smuzhiyun # Order is important for this test, shortest to longest is typical failure case 44*4882a593Smuzhiyun bbfile_config_priorities.append( append_collection(topdir, 'first', self.d) ) 45*4882a593Smuzhiyun bbfile_config_priorities.append( append_collection(topdir, 'second', self.d) ) 46*4882a593Smuzhiyun bbfile_config_priorities.append( append_collection(topdir, 'second/third', self.d) ) 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun pkgfns = [ topdir + '/first/recipes/sample1_1.0.bb', 49*4882a593Smuzhiyun topdir + '/second/recipes/sample2_1.0.bb', 50*4882a593Smuzhiyun topdir + '/second/third/recipes/sample3_1.0.bb' ] 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun class LogHandler(logging.Handler): 53*4882a593Smuzhiyun def __init__(self): 54*4882a593Smuzhiyun logging.Handler.__init__(self) 55*4882a593Smuzhiyun self.logdata = [] 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun def emit(self, record): 58*4882a593Smuzhiyun self.logdata.append(record.getMessage()) 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun # Move cooker to use my special logging 61*4882a593Smuzhiyun logger = bb.cooker.logger 62*4882a593Smuzhiyun log_handler = LogHandler() 63*4882a593Smuzhiyun logger.addHandler(log_handler) 64*4882a593Smuzhiyun collection = bb.cooker.CookerCollectFiles(bbfile_config_priorities) 65*4882a593Smuzhiyun collection.collection_priorities(pkgfns, pkgfns, self.d) 66*4882a593Smuzhiyun logger.removeHandler(log_handler) 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun # Should be empty (no generated messages) 69*4882a593Smuzhiyun expected = [] 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun self.assertEqual(log_handler.logdata, expected) 72