Re: [OE-core] [PATCHv3 1/2] oeqa/selftest/{context, case}: Handle KeyboardInterrupt/SIGINT and SIGTERM

2017-06-27 Thread Patrick Ohly
On Tue, 2017-06-27 at 15:25 -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.

Looks good to me now, with one minor nitpick which I should have noticed
earlier: the second patch fixes a problem introduced by the first one
(right?), so when applied in this order, bisecting gets broken. I think
they should be merged the other way around to avoid that (calling the
parent's setUpClass was fine before, it just wasn't required).

-- 
Best Regards, Patrick Ohly

The content of this message is my personal opinion only and although
I am an employee of Intel, the statements I make here in no way
represent Intel's position on the issue, nor am I authorized to speak
on behalf of Intel on this matter.



-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core


[OE-core] [PATCHv3 1/2] oeqa/selftest/{context, case}: Handle KeyboardInterrupt/SIGINT and SIGTERM

2017-06-27 Thread Aníbal Limón
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 
---
 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/bblayer