Yes is the same, Anibal
On 07/12/2017 09:18 AM, Leonardo Sandoval wrote: > I saw a similar patch in the past. Is this a new revision? > > Leo > > > On Tue, 2017-07-11 at 15:23 -0500, Aníbal Limón wrote: >> In order to avoid corrupt local.conf and bblayers.conf adds >> signal handler for SIGTERM and use try/finally (KeyboardIntrrupt) block >> to restore previously backuped configuration. >> >> [YOCTO #11650] >> >> Signed-off-by: Aníbal Limón <anibal.li...@linux.intel.com> >> --- >> meta/lib/oeqa/selftest/case.py | 36 +++++++------ >> meta/lib/oeqa/selftest/context.py | 107 >> +++++++++++++++++++++++++++----------- >> 2 files changed, 97 insertions(+), 46 deletions(-) >> >> diff --git a/meta/lib/oeqa/selftest/case.py b/meta/lib/oeqa/selftest/case.py >> index 31a11fddda9..871009c568b 100644 >> --- a/meta/lib/oeqa/selftest/case.py >> +++ b/meta/lib/oeqa/selftest/case.py >> @@ -13,28 +13,34 @@ from oeqa.utils.commands import runCmd, bitbake, >> get_bb_var >> from oeqa.core.case import OETestCase >> >> class OESelftestTestCase(OETestCase): >> - builddir = os.environ.get("BUILDDIR") or "" >> - localconf_path = os.path.join(builddir, "conf/local.conf") >> - localconf_backup = os.path.join(builddir, "conf/local.bk") >> - testinc_path = os.path.join(builddir, "conf/selftest.inc") >> - local_bblayers_path = os.path.join(builddir, "conf/bblayers.conf") >> - local_bblayers_backup = os.path.join(builddir, "conf/bblayers.bk") >> - testinc_bblayers_path = os.path.join(builddir, "conf/bblayers.inc") >> - machineinc_path = os.path.join(builddir, "conf/machine.inc") >> - >> def __init__(self, methodName="runTest"): >> self._extra_tear_down_commands = [] >> - self._track_for_cleanup = [ >> - self.testinc_path, self.testinc_bblayers_path, >> - self.machineinc_path, self.localconf_backup, >> - self.local_bblayers_backup] >> - >> super(OESelftestTestCase, self).__init__(methodName) >> >> @classmethod >> def setUpClass(cls): >> super(OESelftestTestCase, cls).setUpClass() >> - cls.testlayer_path = cls.tc.testlayer_path >> + >> + cls.testlayer_path = cls.tc.config_paths['testlayer_path'] >> + cls.builddir = cls.tc.config_paths['builddir'] >> + >> + cls.localconf_path = cls.tc.config_paths['localconf'] >> + cls.localconf_backup = cls.tc.config_paths['localconf_class_backup'] >> + cls.local_bblayers_path = cls.tc.config_paths['bblayers'] >> + cls.local_bblayers_backup = >> cls.tc.config_paths['bblayers_class_backup'] >> + >> + cls.testinc_path = os.path.join(cls.tc.config_paths['builddir'], >> + "conf/selftest.inc") >> + cls.testinc_bblayers_path = >> os.path.join(cls.tc.config_paths['builddir'], >> + "conf/bblayers.inc") >> + cls.machineinc_path = os.path.join(cls.tc.config_paths['builddir'], >> + "conf/machine.inc") >> + >> + cls._track_for_cleanup = [ >> + cls.testinc_path, cls.testinc_bblayers_path, >> + cls.machineinc_path, cls.localconf_backup, >> + cls.local_bblayers_backup] >> + >> cls.add_include() >> >> @classmethod >> diff --git a/meta/lib/oeqa/selftest/context.py >> b/meta/lib/oeqa/selftest/context.py >> index ca87398224c..4575a0537fb 100644 >> --- a/meta/lib/oeqa/selftest/context.py >> +++ b/meta/lib/oeqa/selftest/context.py >> @@ -6,6 +6,8 @@ import time >> import glob >> import sys >> import imp >> +import signal >> +from shutil import copyfile >> from random import choice >> >> import oeqa >> @@ -16,13 +18,12 @@ from oeqa.core.exception import OEQAPreRun >> from oeqa.utils.commands import runCmd, get_bb_vars, get_test_layer >> >> class OESelftestTestContext(OETestContext): >> - def __init__(self, td=None, logger=None, machines=None, >> testlayer_path=None): >> + def __init__(self, td=None, logger=None, machines=None, >> config_paths=None): >> super(OESelftestTestContext, self).__init__(td, logger) >> >> self.machines = machines >> self.custommachine = None >> - >> - self.testlayer_path = testlayer_path >> + self.config_paths = config_paths >> >> def runTests(self, machine=None): >> if machine: >> @@ -108,7 +109,29 @@ class >> OESelftestTestContextExecutor(OETestContextExecutor): >> >> self.tc_kwargs['init']['td'] = get_bb_vars() >> self.tc_kwargs['init']['machines'] = self._get_available_machines() >> - self.tc_kwargs['init']['testlayer_path'] = get_test_layer() >> + >> + builddir = os.environ.get("BUILDDIR") >> + self.tc_kwargs['init']['config_paths'] = {} >> + self.tc_kwargs['init']['config_paths']['testlayer_path'] = \ >> + get_test_layer() >> + self.tc_kwargs['init']['config_paths']['builddir'] = builddir >> + self.tc_kwargs['init']['config_paths']['localconf'] = \ >> + os.path.join(builddir, "conf/local.conf") >> + self.tc_kwargs['init']['config_paths']['localconf_backup'] = \ >> + os.path.join(builddir, "conf/local.conf.orig") >> + self.tc_kwargs['init']['config_paths']['localconf_class_backup'] = \ >> + os.path.join(builddir, "conf/local.conf.bk") >> + self.tc_kwargs['init']['config_paths']['bblayers'] = \ >> + os.path.join(builddir, "conf/bblayers.conf") >> + self.tc_kwargs['init']['config_paths']['bblayers_backup'] = \ >> + os.path.join(builddir, "conf/bblayers.conf.orig") >> + self.tc_kwargs['init']['config_paths']['bblayers_class_backup'] = \ >> + os.path.join(builddir, "conf/bblayers.conf.bk") >> + >> + copyfile(self.tc_kwargs['init']['config_paths']['localconf'], >> + self.tc_kwargs['init']['config_paths']['localconf_backup']) >> + copyfile(self.tc_kwargs['init']['config_paths']['bblayers'], >> + self.tc_kwargs['init']['config_paths']['bblayers_backup']) >> >> def _pre_run(self): >> def _check_required_env_variables(vars): >> @@ -131,7 +154,7 @@ class >> OESelftestTestContextExecutor(OETestContextExecutor): >> runCmd("bitbake-layers add-layer %s" %meta_selftestdir) >> # reload data is needed because a meta-selftest layer >> was add >> self.tc.td = get_bb_vars() >> - self.tc.testlayer_path = get_test_layer() >> + self.tc.config_paths['testlayer_path'] = >> get_test_layer() >> else: >> self.tc.logger.error("could not locate meta-selftest >> in:\n%s" % meta_selftestdir) >> raise OEQAPreRun >> @@ -184,41 +207,63 @@ class >> OESelftestTestContextExecutor(OETestContextExecutor): >> rc.logSummary(self.name) >> >> return rc >> + >> + def _signal_clean_handler(self, signum, frame): >> + sys.exit(1) >> >> def run(self, logger, args): >> self._process_args(logger, args) >> - rc = None >> >> - if args.machine: >> - logger.info('Custom machine mode enabled. MACHINE set to %s' % >> - args.machine) >> + signal.signal(signal.SIGTERM, self._signal_clean_handler) >> >> - if args.machine == 'all': >> - results = [] >> - for m in self.tc_kwargs['init']['machines']: >> - self.tc_kwargs['run']['machine'] = m >> - results.append(self._internal_run(logger, args)) >> + rc = None >> + try: >> + if args.machine: >> + logger.info('Custom machine mode enabled. MACHINE set to >> %s' % >> + args.machine) >> + >> + if args.machine == 'all': >> + results = [] >> + for m in self.tc_kwargs['init']['machines']: >> + self.tc_kwargs['run']['machine'] = m >> + results.append(self._internal_run(logger, args)) >> + >> + # XXX: the oe-selftest script only needs to know if >> one >> + # machine run fails >> + for r in results: >> + rc = r >> + if not r.wasSuccessful(): >> + break >> >> - # XXX: the oe-selftest script only needs to know if one >> - # machine run fails >> - for r in results: >> - rc = r >> - if not r.wasSuccessful(): >> - break >> + else: >> + self.tc_kwargs['run']['machine'] = args.machine >> + return self._internal_run(logger, args) >> >> else: >> self.tc_kwargs['run']['machine'] = args.machine >> - return self._internal_run(logger, args) >> - >> - else: >> - self.tc_kwargs['run']['machine'] = args.machine >> - rc = self._internal_run(logger, args) >> - >> - output_link = os.path.join(os.path.dirname(args.output_log), >> - "%s-results.log" % self.name) >> - if os.path.exists(output_link): >> - os.remove(output_link) >> - os.symlink(args.output_log, output_link) >> + rc = self._internal_run(logger, args) >> + finally: >> + config_paths = self.tc_kwargs['init']['config_paths'] >> + if os.path.exists(config_paths['localconf_backup']): >> + copyfile(config_paths['localconf_backup'], >> + config_paths['localconf']) >> + os.remove(config_paths['localconf_backup']) >> + >> + if os.path.exists(config_paths['bblayers_backup']): >> + copyfile(config_paths['bblayers_backup'], >> + config_paths['bblayers']) >> + os.remove(config_paths['bblayers_backup']) >> + >> + if os.path.exists(config_paths['localconf_class_backup']): >> + os.remove(config_paths['localconf_class_backup']) >> + if os.path.exists(config_paths['bblayers_class_backup']): >> + os.remove(config_paths['bblayers_class_backup']) >> + >> + output_link = os.path.join(os.path.dirname(args.output_log), >> + "%s-results.log" % self.name) >> + if os.path.exists(output_link): >> + os.remove(output_link) >> + os.symlink(args.output_log, output_link) >> >> return rc >> > > -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core