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