summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/selftest/context.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/oeqa/selftest/context.py')
-rw-r--r--meta/lib/oeqa/selftest/context.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/meta/lib/oeqa/selftest/context.py b/meta/lib/oeqa/selftest/context.py
index 3d3b19c6e8..cd893261d3 100644
--- a/meta/lib/oeqa/selftest/context.py
+++ b/meta/lib/oeqa/selftest/context.py
@@ -10,11 +10,13 @@ import glob
10import sys 10import sys
11import importlib 11import importlib
12import signal 12import signal
13import subprocess
13from shutil import copyfile 14from shutil import copyfile
14from random import choice 15from random import choice
15 16
16import oeqa 17import oeqa
17import oe 18import oe
19import bb.utils
18 20
19from oeqa.core.context import OETestContext, OETestContextExecutor 21from oeqa.core.context import OETestContext, OETestContextExecutor
20from oeqa.core.exception import OEQAPreRun, OEQATestNotFound 22from oeqa.core.exception import OEQAPreRun, OEQATestNotFound
@@ -29,6 +31,54 @@ class OESelftestTestContext(OETestContext):
29 self.custommachine = None 31 self.custommachine = None
30 self.config_paths = config_paths 32 self.config_paths = config_paths
31 33
34 def setup_builddir(self, suffix, selftestdir, suite):
35 builddir = os.environ['BUILDDIR']
36 if not selftestdir:
37 selftestdir = get_test_layer()
38 newbuilddir = builddir + suffix
39 newselftestdir = newbuilddir + "/meta-selftest"
40
41 if os.path.exists(newbuilddir):
42 self.logger.error("Build directory %s already exists, aborting" % newbuilddir)
43 sys.exit(1)
44
45 bb.utils.mkdirhier(newbuilddir)
46 oe.path.copytree(builddir + "/conf", newbuilddir + "/conf")
47 oe.path.copytree(builddir + "/cache", newbuilddir + "/cache")
48 oe.path.copytree(selftestdir, newselftestdir)
49
50 for e in os.environ:
51 if builddir in os.environ[e]:
52 os.environ[e] = os.environ[e].replace(builddir, newbuilddir)
53
54 subprocess.check_output("git init; git add *; git commit -a -m 'initial'", cwd=newselftestdir, shell=True)
55
56 # Tried to used bitbake-layers add/remove but it requires recipe parsing and hence is too slow
57 subprocess.check_output("sed %s/conf/bblayers.conf -i -e 's#%s#%s#g'" % (newbuilddir, selftestdir, newselftestdir), cwd=newbuilddir, shell=True)
58
59 os.chdir(newbuilddir)
60
61 for t in suite:
62 if not hasattr(t, "tc"):
63 continue
64 cp = t.tc.config_paths
65 for p in cp:
66 if selftestdir in cp[p] and newselftestdir not in cp[p]:
67 cp[p] = cp[p].replace(selftestdir, newselftestdir)
68 if builddir in cp[p] and newbuilddir not in cp[p]:
69 cp[p] = cp[p].replace(builddir, newbuilddir)
70
71 return (builddir, newbuilddir)
72
73 def prepareSuite(self, suites, processes):
74 if processes:
75 from oeqa.core.utils.concurrencytest import ConcurrentTestSuite
76
77 return ConcurrentTestSuite(suites, processes, self.setup_builddir)
78 else:
79 self.setup_builddir("-st", None, suites)
80 return suites
81
32 def runTests(self, processes=None, machine=None, skips=[]): 82 def runTests(self, processes=None, machine=None, skips=[]):
33 if machine: 83 if machine:
34 self.custommachine = machine 84 self.custommachine = machine