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