Files
poky/meta/lib/oeqa/selftest/eSDK.py
Francisco Pedraza 4ff1c8ddba oeqa/selftest: Adds test case for sdk-update eSDK
1. Test case adds perl recipe before build eSDK.
2. After this added recipe, the script verifies the update:

    ${SDK_DEPLOY}/${TOOLCHAINEXT_OUTPUTNAME}.sh
    oe-publish-sdk [esdk] [path-to-http]
    CORE_IMAGE_EXTRA_INSTALL = "perl"
    bitbake -c populate-sdk-ext [some-image]
    devtool sdk-update

This should fix [YOCTO #9369]

(From OE-Core rev: 21bd406bf89e9ceafe1a807877406be817cacca6)

(From OE-Core rev: 7824ca273e7e4b25d4efe5461c0402833f535d06)

Signed-off-by: Francisco Pedraza <francisco.j.pedraza.gonzalez@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-09-11 17:15:55 +01:00

134 lines
4.6 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
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.
"""
@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
sdk_deploy = get_bb_var('SDK_DEPLOY', pn_task)
toolchain_name = get_bb_var('TOOLCHAINEXT_OUTPUTNAME', pn_task)
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):
# Start to serve sstate dir
sstate_dir = get_bb_var('SSTATE_DIR')
cls.http_service = HTTPService(sstate_dir)
cls.http_service.start()
cls.http_url = "http://127.0.0.1:%d" % cls.http_service.port
cls.image = 'core-image-minimal'
cls.tmpdir_eSDKQA = tempfile.mkdtemp(prefix='eSDKQA')
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)
@classmethod
def tearDownClass(cls):
shutil.rmtree(cls.tmpdir_eSDKQA)
cls.http_service.stop()
@testcase (1471)
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(1472)
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()