139 lines
5.0 KiB
Python
139 lines
5.0 KiB
Python
import unittest
|
|
import tempfile
|
|
import shutil
|
|
import os
|
|
import glob
|
|
import logging
|
|
import subprocess
|
|
import oeqa.utils.ftools as ftools
|
|
from oeqa.utils.decorators import testcase
|
|
from oeqa.selftest.base import oeSelfTest
|
|
from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars
|
|
from oeqa.utils.httpserver import HTTPService
|
|
|
|
class oeSDKExtSelfTest(oeSelfTest):
|
|
"""
|
|
# Bugzilla Test Plan: 6033
|
|
# This code is planned to be part of the automation for eSDK containig
|
|
# Install libraries and headers, image generation binary feeds, sdk-update.
|
|
"""
|
|
|
|
@staticmethod
|
|
def get_esdk_environment(env_eSDK, tmpdir_eSDKQA):
|
|
# XXX: at this time use the first env need to investigate
|
|
# what environment load oe-selftest, i586, x86_64
|
|
pattern = os.path.join(tmpdir_eSDKQA, 'environment-setup-*')
|
|
return glob.glob(pattern)[0]
|
|
|
|
@staticmethod
|
|
def run_esdk_cmd(env_eSDK, tmpdir_eSDKQA, cmd, postconfig=None, **options):
|
|
if postconfig:
|
|
esdk_conf_file = os.path.join(tmpdir_eSDKQA, 'conf', 'local.conf')
|
|
with open(esdk_conf_file, 'a+') as f:
|
|
f.write(postconfig)
|
|
if not options:
|
|
options = {}
|
|
if not 'shell' in options:
|
|
options['shell'] = True
|
|
|
|
runCmd("cd %s; . %s; %s" % (tmpdir_eSDKQA, env_eSDK, cmd), **options)
|
|
|
|
@staticmethod
|
|
def generate_eSDK(image):
|
|
pn_task = '%s -c populate_sdk_ext' % image
|
|
bitbake(pn_task)
|
|
|
|
@staticmethod
|
|
def get_eSDK_toolchain(image):
|
|
pn_task = '%s -c populate_sdk_ext' % image
|
|
|
|
bb_vars = get_bb_vars(['SDK_DEPLOY', 'TOOLCHAINEXT_OUTPUTNAME'], pn_task)
|
|
sdk_deploy = bb_vars['SDK_DEPLOY']
|
|
toolchain_name = bb_vars['TOOLCHAINEXT_OUTPUTNAME']
|
|
return os.path.join(sdk_deploy, toolchain_name + '.sh')
|
|
|
|
@staticmethod
|
|
def update_configuration(cls, image, tmpdir_eSDKQA, env_eSDK, ext_sdk_path):
|
|
sstate_dir = os.path.join(os.environ['BUILDDIR'], 'sstate-cache')
|
|
cls.http_service = HTTPService(sstate_dir)
|
|
cls.http_service.start()
|
|
cls.http_url = "http://127.0.0.1:%d" % cls.http_service.port
|
|
|
|
oeSDKExtSelfTest.generate_eSDK(cls.image)
|
|
|
|
cls.ext_sdk_path = oeSDKExtSelfTest.get_eSDK_toolchain(cls.image)
|
|
runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA))
|
|
|
|
cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA)
|
|
|
|
sstate_config="""
|
|
SDK_LOCAL_CONF_WHITELIST = "SSTATE_MIRRORS"
|
|
SSTATE_MIRRORS = "file://.* http://%s/PATH"
|
|
CORE_IMAGE_EXTRA_INSTALL = "perl"
|
|
""" % cls.http_url
|
|
|
|
with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f:
|
|
f.write(sstate_config)
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
# If there is an exception in setUpClass it will not run tearDownClass
|
|
# method and it leaves HTTP server running forever, so we need to be
|
|
# sure tearDownClass is run.
|
|
try:
|
|
cls.tmpdir_eSDKQA = tempfile.mkdtemp(prefix='eSDKQA')
|
|
|
|
# Start to serve sstate dir
|
|
sstate_dir = get_bb_var('SSTATE_DIR')
|
|
cls.http_service = HTTPService(sstate_dir)
|
|
cls.http_url = "http://127.0.0.1:%d" % cls.http_service.port
|
|
cls.http_service.start()
|
|
|
|
cls.image = 'core-image-minimal'
|
|
oeSDKExtSelfTest.generate_eSDK(cls.image)
|
|
|
|
# Install eSDK
|
|
cls.ext_sdk_path = oeSDKExtSelfTest.get_eSDK_toolchain(cls.image)
|
|
runCmd("%s -y -d \"%s\"" % (cls.ext_sdk_path, cls.tmpdir_eSDKQA))
|
|
|
|
cls.env_eSDK = oeSDKExtSelfTest.get_esdk_environment('', cls.tmpdir_eSDKQA)
|
|
|
|
# Configure eSDK to use sstate mirror from poky
|
|
sstate_config="""
|
|
SDK_LOCAL_CONF_WHITELIST = "SSTATE_MIRRORS"
|
|
SSTATE_MIRRORS = "file://.* http://%s/PATH"
|
|
""" % cls.http_url
|
|
with open(os.path.join(cls.tmpdir_eSDKQA, 'conf', 'local.conf'), 'a+') as f:
|
|
f.write(sstate_config)
|
|
except:
|
|
cls.tearDownClass()
|
|
raise
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
shutil.rmtree(cls.tmpdir_eSDKQA)
|
|
cls.http_service.stop()
|
|
|
|
@testcase (1602)
|
|
def test_install_libraries_headers(self):
|
|
pn_sstate = 'bc'
|
|
bitbake(pn_sstate)
|
|
cmd = "devtool sdk-install %s " % pn_sstate
|
|
oeSDKExtSelfTest.run_esdk_cmd(self.env_eSDK, self.tmpdir_eSDKQA, cmd)
|
|
|
|
@testcase(1603)
|
|
def test_image_generation_binary_feeds(self):
|
|
image = 'core-image-minimal'
|
|
cmd = "devtool build-image %s" % image
|
|
oeSDKExtSelfTest.run_esdk_cmd(self.env_eSDK, self.tmpdir_eSDKQA, cmd)
|
|
|
|
@testcase(1567)
|
|
def test_sdk_update_http(self):
|
|
cmd = "devtool sdk-update %s" % self.http_url
|
|
oeSDKExtSelfTest.update_configuration(self, self.image, self.tmpdir_eSDKQA, self.env_eSDK, self.ext_sdk_path)
|
|
oeSDKExtSelfTest.run_esdk_cmd(self.env_eSDK, self.tmpdir_eSDKQA, cmd)
|
|
self.http_service.stop()
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|