summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa
diff options
context:
space:
mode:
authorChen Qi <Qi.Chen@windriver.com>2018-08-29 10:56:31 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-09-04 11:03:55 +0100
commit227cc78b3f461164310de33194cc9e0d006fbfef (patch)
tree7c18c789958811bc5f3e57b03f0363c890bbfecf /meta/lib/oeqa
parent20cba32f2d9caab1202295424bd85c26b8c4192a (diff)
downloadpoky-227cc78b3f461164310de33194cc9e0d006fbfef.tar.gz
oeqa/sdk: fixes related to hasPackage semantics
The current _hasPackage does a regex match when checking for the existence of packages. This will sometimes result in unexpected result. For example, the condition hasTargetPackage('gcc') is likely to be always true as it matches libgcc1. For most of the time, we should do exact match instead of regex match. So change _hasPackage function to do that. For the current sdk test cases, the only place that needs regex match is '^gcc-'. This is because there's no easy way to get multilib tune arch (e.g. i686) from testdata.json file. Besides, packagegroup-cross-canadian-xxx and gcc-xxx should be check in host manifest instead of the target one. So fix to use hasHostPackage. Also, as we are doing exact match, there's no need to use r'gtk\+3', just 'gtk+3' is enough. (From OE-Core rev: 595e9922cdbacf84cf35cc83f0d03cace042e302) Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/lib/oeqa')
-rw-r--r--meta/lib/oeqa/sdk/cases/buildgalculator.py4
-rw-r--r--meta/lib/oeqa/sdk/cases/buildlzip.py4
-rw-r--r--meta/lib/oeqa/sdk/cases/gcc.py4
-rw-r--r--meta/lib/oeqa/sdk/context.py21
4 files changed, 20 insertions, 13 deletions
diff --git a/meta/lib/oeqa/sdk/cases/buildgalculator.py b/meta/lib/oeqa/sdk/cases/buildgalculator.py
index 3714825b06..050d1b3b52 100644
--- a/meta/lib/oeqa/sdk/cases/buildgalculator.py
+++ b/meta/lib/oeqa/sdk/cases/buildgalculator.py
@@ -8,8 +8,8 @@ class GalculatorTest(OESDKTestCase):
8 8
9 @classmethod 9 @classmethod
10 def setUpClass(self): 10 def setUpClass(self):
11 if not (self.tc.hasTargetPackage(r"gtk\+3", multilib=True) or\ 11 if not (self.tc.hasTargetPackage("gtk+3", multilib=True) or \
12 self.tc.hasTargetPackage(r"libgtk-3.0", multilib=True)): 12 self.tc.hasTargetPackage("libgtk-3.0", multilib=True)):
13 raise unittest.SkipTest("GalculatorTest class: SDK don't support gtk+3") 13 raise unittest.SkipTest("GalculatorTest class: SDK don't support gtk+3")
14 if not (self.tc.hasHostPackage("nativesdk-gettext-dev")): 14 if not (self.tc.hasHostPackage("nativesdk-gettext-dev")):
15 raise unittest.SkipTest("GalculatorTest class: SDK doesn't contain gettext") 15 raise unittest.SkipTest("GalculatorTest class: SDK doesn't contain gettext")
diff --git a/meta/lib/oeqa/sdk/cases/buildlzip.py b/meta/lib/oeqa/sdk/cases/buildlzip.py
index 3a89ce8627..b28cc3a595 100644
--- a/meta/lib/oeqa/sdk/cases/buildlzip.py
+++ b/meta/lib/oeqa/sdk/cases/buildlzip.py
@@ -17,8 +17,8 @@ class BuildLzipTest(OESDKTestCase):
17 17
18 machine = self.td.get("MACHINE") 18 machine = self.td.get("MACHINE")
19 19
20 if not (self.tc.hasTargetPackage("packagegroup-cross-canadian-%s" % machine) or 20 if not (self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine) or
21 self.tc.hasTargetPackage("gcc")): 21 self.tc.hasHostPackage("^gcc-", regex=True)):
22 raise unittest.SkipTest("SDK doesn't contain a cross-canadian toolchain") 22 raise unittest.SkipTest("SDK doesn't contain a cross-canadian toolchain")
23 23
24 def test_lzip(self): 24 def test_lzip(self):
diff --git a/meta/lib/oeqa/sdk/cases/gcc.py b/meta/lib/oeqa/sdk/cases/gcc.py
index d11f4b63fb..b32b01fc24 100644
--- a/meta/lib/oeqa/sdk/cases/gcc.py
+++ b/meta/lib/oeqa/sdk/cases/gcc.py
@@ -18,8 +18,8 @@ class GccCompileTest(OESDKTestCase):
18 18
19 def setUp(self): 19 def setUp(self):
20 machine = self.td.get("MACHINE") 20 machine = self.td.get("MACHINE")
21 if not (self.tc.hasTargetPackage("packagegroup-cross-canadian-%s" % machine) or 21 if not (self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine) or
22 self.tc.hasTargetPackage("gcc")): 22 self.tc.hasHostPackage("^gcc-", regex=True)):
23 raise unittest.SkipTest("GccCompileTest class: SDK doesn't contain a cross-canadian toolchain") 23 raise unittest.SkipTest("GccCompileTest class: SDK doesn't contain a cross-canadian toolchain")
24 24
25 def test_gcc_compile(self): 25 def test_gcc_compile(self):
diff --git a/meta/lib/oeqa/sdk/context.py b/meta/lib/oeqa/sdk/context.py
index ec8972d05a..adc4166fd2 100644
--- a/meta/lib/oeqa/sdk/context.py
+++ b/meta/lib/oeqa/sdk/context.py
@@ -20,23 +20,30 @@ class OESDKTestContext(OETestContext):
20 self.target_pkg_manifest = target_pkg_manifest 20 self.target_pkg_manifest = target_pkg_manifest
21 self.host_pkg_manifest = host_pkg_manifest 21 self.host_pkg_manifest = host_pkg_manifest
22 22
23 def _hasPackage(self, manifest, pkg): 23 def _hasPackage(self, manifest, pkg, regex=False):
24 for host_pkg in manifest.keys(): 24 if regex:
25 if re.search(pkg, host_pkg): 25 # do regex match
26 pat = re.compile(pkg)
27 for p in manifest.keys():
28 if pat.search(p):
29 return True
30 else:
31 # do exact match
32 if pkg in manifest.keys():
26 return True 33 return True
27 return False 34 return False
28 35
29 def hasHostPackage(self, pkg): 36 def hasHostPackage(self, pkg, regex=False):
30 return self._hasPackage(self.host_pkg_manifest, pkg) 37 return self._hasPackage(self.host_pkg_manifest, pkg, regex=regex)
31 38
32 def hasTargetPackage(self, pkg, multilib=False): 39 def hasTargetPackage(self, pkg, multilib=False, regex=False):
33 if multilib: 40 if multilib:
34 # match multilib according to sdk_env 41 # match multilib according to sdk_env
35 mls = self.td.get('MULTILIB_VARIANTS', '').split() 42 mls = self.td.get('MULTILIB_VARIANTS', '').split()
36 for ml in mls: 43 for ml in mls:
37 if ('ml'+ml) in self.sdk_env: 44 if ('ml'+ml) in self.sdk_env:
38 pkg = ml + '-' + pkg 45 pkg = ml + '-' + pkg
39 return self._hasPackage(self.target_pkg_manifest, pkg) 46 return self._hasPackage(self.target_pkg_manifest, pkg, regex=regex)
40 47
41class OESDKTestContextExecutor(OETestContextExecutor): 48class OESDKTestContextExecutor(OETestContextExecutor):
42 _context_class = OESDKTestContext 49 _context_class = OESDKTestContext