[OE-core] [PATCH 1/1] scripts/oe-selftest: oe-selftest-internal wrapper scripts that isolates execution
Leonardo Sandoval
leonardo.sandoval.gonzalez at linux.intel.com
Thu Nov 9 17:22:17 UTC 2017
On Thu, 26 Oct 2017 10:33:19 -0700
leonardo.sandoval.gonzalez at linux.intel.com wrote:
RP indicated two scenarios that this v1 won't work:
1) if oe-selftest comes from a tarball (together with the other repo files)
2) if other no-poky layers are present on current BBLAYERS.
I will review both items and send a v2.
Leo
> From: Leonardo Sandoval <leonardo.sandoval.gonzalez at linux.intel.com>
>
> The main idea is to isolate the oe-selftest execution so neither the current
> build dir nor the configuration data is touch/polluted. This approach uses
> a wrapper script (which is the one presented on this commit) which creates
> a unique directory and inside it does a shallow of repo(s) (OE-Core and Bitbake),
> re-initializes the enviroment (re-sources oe-init-build-env) and finally launches
> the oe-selftest-internal (which used to be oe-selftest) command, passing command
> arguments to the latter.
>
> The new build directory created when re-initializing the enviroment has the
> same configuration data (local.conf, auto.conf, site.conf) as the
> main build directory. The latter means that one can set DL_DIR and SSTATE_DIR
> into <main build dir>/conf/site.conf and the oe-selftest execution will use this.
>
> [YOCTO #11429]
>
> Signed-off-by: Leonardo Sandoval <leonardo.sandoval.gonzalez at linux.intel.com>
> ---
> scripts/oe-selftest | 102 +++++++++++++++++++++++--------------------
> scripts/oe-selftest-internal | 75 +++++++++++++++++++++++++++++++
> 2 files changed, 129 insertions(+), 48 deletions(-)
> create mode 100755 scripts/oe-selftest-internal
>
> diff --git a/scripts/oe-selftest b/scripts/oe-selftest
> index 1bf860a415..f3ce89cedb 100755
> --- a/scripts/oe-selftest
> +++ b/scripts/oe-selftest
> @@ -1,5 +1,7 @@
> -#!/usr/bin/env python3
> +#!/bin/sh
>
> +# scripts/oe-selftest: calls oe-selftest-internal in a isolated environment
> +#
> # Copyright (c) 2013-2017 Intel Corporation
> #
> # This program is free software; you can redistribute it and/or modify
> @@ -14,62 +16,66 @@
> # You should have received a copy of the GNU General Public License along
> # with this program; if not, write to the Free Software Foundation, Inc.,
> # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> +#
> +
> +# Variable definitions
> +ORIGBUILDDIR="$BUILDDIR"
> +OESELFTESTSCRIPTDIR="$(which oe-selftest)"
> +SCRIPTSDIR="$(dirname $OESELFTESTSCRIPTDIR)"
> +OECOREDIR="$(dirname $SCRIPTSDIR)"
> +
> +# oe-selftest-$$ related
> +OESELFTESTDIR="$ORIGBUILDDIR/oe-selftest-$$"
> +OESELFTESTOECOREDIR="$OESELFTESTDIR/openembedded-core"
> +OESELFTESTBUILDDIR="$OESELFTESTDIR/openembedded-core/build"
> +TEMPLATEPATH="$OESELFTESTDIR/template/conf"
>
> -# DESCRIPTION
> -# This script runs tests defined in meta/lib/oeqa/selftest/
> -# It's purpose is to automate the testing of different bitbake tools.
> -# To use it you just need to source your build environment setup script and
> -# add the meta-selftest layer to your BBLAYERS.
> -# Call the script as: "oe-selftest -a" to run all the tests in meta/lib/oeqa/selftest/
> -# Call the script as: "oe-selftest -r <module>.<Class>.<method>" to run just a single test
> -# E.g: "oe-selftest -r bblayers.BitbakeLayers" will run just the BitbakeLayers class from meta/lib/oeqa/selftest/bblayers.py
> +# 0. Return immediately in case no test execution
> +ADDTESTS="$(echo "$@" | grep -i '\-a')"
> +SOMETESTS="$(echo "$@" | grep -i '\-r')"
> +if [ -z "$ADDTESTS" -a -z "$SOMETESTS" ]; then
> + if [ -z "$@" ]; then
> + oe-selftest-internal -h
> + else
> + oe-selftest-internal "$@"
> + fi
> + exit 0
> +fi
>
> +# 1. All work will be done under OESELFTESTDIR
> +mkdir $OESELFTESTDIR && cd $OESELFTESTDIR
>
> +# 2.1 Shallow clone OE-Core
> +git clone file://$OECOREDIR --depth 1 $OESELFTESTOECOREDIR
>
> -import os
> -import sys
> -import argparse
> -import logging
> +# 2.2 Shallow clone bitbake if necessary (if OE-Core is embedded on a combo repo, like Poky, there is no need)
> +if [ ! -d "$OESELFTESTOECOREDIR/bitbake" ]; then
> + git clone file://$OECOREDIR/bitbake --depth 1 $OESELFTESTOECOREDIR/bitbake
> +fi
>
> -scripts_path = os.path.dirname(os.path.realpath(__file__))
> -lib_path = scripts_path + '/lib'
> -sys.path = sys.path + [lib_path]
> -import argparse_oe
> -import scriptutils
> -import scriptpath
> -scriptpath.add_oe_lib_path()
> -scriptpath.add_bitbake_lib_path()
> +# 3. Template: create template directory based on BUILDIR/conf/local.conf
> +mkdir -p $TEMPLATEPATH
> +cp $ORIGBUILDDIR/conf/local.conf $TEMPLATEPATH/local.conf.sample
>
> -from oeqa.utils import load_test_components
> -from oeqa.core.exception import OEQAPreRun
> +# 4. re-initialized environment with new metadata and templateconf environement
> +cd $OESELFTESTOECOREDIR
> +export TEMPLATEPATH && source ./oe-init-build-env $OESELFTESTBUILDDIR
>
> -logger = scriptutils.logger_create('oe-selftest', stream=sys.stdout)
> +# 5. Respect any site.conf and/or auto.conf and place it into conf directory
> +if [ -r "$ORIGBUILDDIR/conf/site.conf" ]; then
> + cp -f $ORIGBUILDDIR/conf/site.conf $OESELFTESTBUILDDIR/conf
> +fi
> +if [ -r "$ORIGBUILDDIR/conf/auto.conf" ]; then
> + cp -f $ORIGBUILDDIR/conf/auto.conf $OESELFTESTBUILDDIR/conf
> +fi
>
> -def main():
> - description = "Script that runs unit tests against bitbake and other Yocto related tools. The goal is to validate tools functionality and metadata integrity. Refer to https://wiki.yoctoproject.org/wiki/Oe-selftest for more information."
> - parser = argparse_oe.ArgumentParser(description=description)
> +# 6. Execute the tests throught oe-selftest-internal
> +oe-selftest-internal "$@"
>
> - comp_name, comp = load_test_components(logger, 'oe-selftest').popitem()
> - comp.register_commands(logger, parser)
> +OESELFTESTRC="$?"
>
> - try:
> - args = parser.parse_args()
> - results = args.func(logger, args)
> - ret = 0 if results.wasSuccessful() else 1
> - except SystemExit as err:
> - if err.code != 0:
> - raise err
> - ret = err.code
> - except OEQAPreRun as pr:
> - ret = 1
> +# 7. Echo working folder
>
> - return ret
> +echo -e "\nAll work done under $OESELFTESTDIR\n"
>
> -if __name__ == '__main__':
> - try:
> - ret = main()
> - except Exception:
> - ret = 1
> - import traceback
> - traceback.print_exc()
> - sys.exit(ret)
> +exit $OESELFTESTRC
> diff --git a/scripts/oe-selftest-internal b/scripts/oe-selftest-internal
> new file mode 100755
> index 0000000000..cff2906763
> --- /dev/null
> +++ b/scripts/oe-selftest-internal
> @@ -0,0 +1,75 @@
> +#!/usr/bin/env python3
> +
> +# Copyright (c) 2013-2017 Intel Corporation
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License version 2 as
> +# published by the Free Software Foundation.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License along
> +# with this program; if not, write to the Free Software Foundation, Inc.,
> +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> +
> +# DESCRIPTION
> +# This script runs tests defined in meta/lib/oeqa/selftest/
> +# It's purpose is to automate the testing of different bitbake tools.
> +# To use it you just need to source your build environment setup script and
> +# add the meta-selftest layer to your BBLAYERS.
> +# Call the script as: "oe-selftest -a" to run all the tests in meta/lib/oeqa/selftest/
> +# Call the script as: "oe-selftest -r <module>.<Class>.<method>" to run just a single test
> +# E.g: "oe-selftest -r bblayers.BitbakeLayers" will run just the BitbakeLayers class from meta/lib/oeqa/selftest/bblayers.py
> +
> +
> +
> +import os
> +import sys
> +import argparse
> +import logging
> +
> +scripts_path = os.path.dirname(os.path.realpath(__file__))
> +lib_path = scripts_path + '/lib'
> +sys.path = sys.path + [lib_path]
> +import argparse_oe
> +import scriptutils
> +import scriptpath
> +scriptpath.add_oe_lib_path()
> +scriptpath.add_bitbake_lib_path()
> +
> +from oeqa.utils import load_test_components
> +from oeqa.core.exception import OEQAPreRun
> +
> +logger = scriptutils.logger_create('oe-selftest', stream=sys.stdout)
> +
> +def main():
> + description = "Script that runs unit tests against bitbake and other Yocto related tools. The goal is to validate tools functionality and metadata integrity. Refer to https://wiki.yoctoproject.org/wiki/Oe-selftest for more information."
> + parser = argparse_oe.ArgumentParser(prog='oe-selftest', description=description)
> +
> + comp_name, comp = load_test_components(logger, 'oe-selftest').popitem()
> + comp.register_commands(logger, parser)
> +
> + try:
> + args = parser.parse_args()
> + results = args.func(logger, args)
> + ret = 0 if results.wasSuccessful() else 1
> + except SystemExit as err:
> + if err.code != 0:
> + raise err
> + ret = err.code
> + except OEQAPreRun as pr:
> + ret = 1
> +
> + return ret
> +
> +if __name__ == '__main__':
> + try:
> + ret = main()
> + except Exception:
> + ret = 1
> + import traceback
> + traceback.print_exc()
> + sys.exit(ret)
> --
> 2.12.3
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
More information about the Openembedded-core
mailing list