1# 2# Copyright OpenEmbedded Contributors 3# 4# SPDX-License-Identifier: MIT 5# 6 7import tempfile 8import shutil 9import os 10import glob 11import time 12from oeqa.selftest.case import OESelftestTestCase 13from oeqa.utils.commands import runCmd, bitbake, get_bb_vars 14 15class oeSDKExtSelfTest(OESelftestTestCase): 16 """ 17 # Bugzilla Test Plan: 6033 18 # This code is planned to be part of the automation for eSDK containig 19 # Install libraries and headers, image generation binary feeds, sdk-update. 20 """ 21 22 @staticmethod 23 def get_esdk_environment(env_eSDK, tmpdir_eSDKQA): 24 # XXX: at this time use the first env need to investigate 25 # what environment load oe-selftest, i586, x86_64 26 pattern = os.path.join(tmpdir_eSDKQA, 'environment-setup-*') 27 return glob.glob(pattern)[0] 28 29 @staticmethod 30 def run_esdk_cmd(env_eSDK, tmpdir_eSDKQA, cmd, postconfig=None, **options): 31 if postconfig: 32 esdk_conf_file = os.path.join(tmpdir_eSDKQA, 'conf', 'local.conf') 33 with open(esdk_conf_file, 'a+') as f: 34 f.write(postconfig) 35 if not options: 36 options = {} 37 if not 'shell' in options: 38 options['shell'] = True 39 40 runCmd("cd %s; unset BBPATH; unset BUILDDIR; . %s; %s" % (tmpdir_eSDKQA, env_eSDK, cmd), **options) 41 42 @staticmethod 43 def generate_eSDK(image): 44 pn_task = '%s -c populate_sdk_ext' % image 45 bitbake(pn_task) 46 47 @staticmethod 48 def get_eSDK_toolchain(image): 49 pn_task = '%s -c populate_sdk_ext' % image 50 51 bb_vars = get_bb_vars(['SDK_DEPLOY', 'TOOLCHAINEXT_OUTPUTNAME'], pn_task) 52 sdk_deploy = bb_vars['SDK_DEPLOY'] 53 toolchain_name = bb_vars['TOOLCHAINEXT_OUTPUTNAME'] 54 return os.path.join(sdk_deploy, toolchain_name + '.sh') 55 56 @staticmethod 57 def update_configuration(cls, image, tmpdir_eSDKQA, env_eSDK, ext_sdk_path): 58 sstate_dir = os.path.join(os.environ['BUILDDIR'], 'sstate-cache') 59 60 oeSDKExtSelfTest.generate_eSDK(cls.image) 61 62 cls.ext_sdk_path = oeSDKExtSelfTest.get_eSDK_toolchain(cls.image) 63 runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA)) 64 65 cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA) 66 67 sstate_config=""" 68ESDK_LOCALCONF_ALLOW = "SSTATE_MIRRORS" 69SSTATE_MIRRORS = "file://.* file://%s/PATH" 70CORE_IMAGE_EXTRA_INSTALL = "perl" 71 """ % sstate_dir 72 73 with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f: 74 f.write(sstate_config) 75 76 @classmethod 77 def setUpClass(cls): 78 super(oeSDKExtSelfTest, cls).setUpClass() 79 cls.image = 'core-image-minimal' 80 81 bb_vars = get_bb_vars(['SSTATE_DIR', 'WORKDIR'], cls.image) 82 bb.utils.mkdirhier(bb_vars["WORKDIR"]) 83 cls.tmpdirobj = tempfile.TemporaryDirectory(prefix="selftest-esdk-", dir=bb_vars["WORKDIR"]) 84 cls.tmpdir_eSDKQA = cls.tmpdirobj.name 85 86 oeSDKExtSelfTest.generate_eSDK(cls.image) 87 88 # Install eSDK 89 cls.ext_sdk_path = oeSDKExtSelfTest.get_eSDK_toolchain(cls.image) 90 runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA)) 91 92 cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA) 93 94 # Configure eSDK to use sstate mirror from poky 95 sstate_config=""" 96ESDK_LOCALCONF_ALLOW = "SSTATE_MIRRORS" 97SSTATE_MIRRORS = "file://.* file://%s/PATH" 98 """ % bb_vars["SSTATE_DIR"] 99 with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f: 100 f.write(sstate_config) 101 102 @classmethod 103 def tearDownClass(cls): 104 for i in range(0, 10): 105 if os.path.exists(os.path.join(cls.tmpdir_eSDKQA, 'bitbake.lock')) or os.path.exists(os.path.join(cls.tmpdir_eSDKQA, 'cache/hashserv.db-wal')): 106 time.sleep(1) 107 else: 108 break 109 cls.tmpdirobj.cleanup() 110 super().tearDownClass() 111 112 def test_install_libraries_headers(self): 113 pn_sstate = 'bc' 114 bitbake(pn_sstate) 115 cmd = "devtool sdk-install %s " % pn_sstate 116 oeSDKExtSelfTest.run_esdk_cmd(self.env_eSDK, self.tmpdir_eSDKQA, cmd) 117 118 def test_image_generation_binary_feeds(self): 119 image = 'core-image-minimal' 120 cmd = "devtool build-image %s" % image 121 oeSDKExtSelfTest.run_esdk_cmd(self.env_eSDK, self.tmpdir_eSDKQA, cmd) 122 123