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>
This commit is contained in:
Chen Qi 2018-08-29 10:56:31 +08:00 committed by Richard Purdie
parent 20cba32f2d
commit 227cc78b3f
4 changed files with 20 additions and 13 deletions

View File

@ -8,8 +8,8 @@ class GalculatorTest(OESDKTestCase):
@classmethod
def setUpClass(self):
if not (self.tc.hasTargetPackage(r"gtk\+3", multilib=True) or\
self.tc.hasTargetPackage(r"libgtk-3.0", multilib=True)):
if not (self.tc.hasTargetPackage("gtk+3", multilib=True) or \
self.tc.hasTargetPackage("libgtk-3.0", multilib=True)):
raise unittest.SkipTest("GalculatorTest class: SDK don't support gtk+3")
if not (self.tc.hasHostPackage("nativesdk-gettext-dev")):
raise unittest.SkipTest("GalculatorTest class: SDK doesn't contain gettext")

View File

@ -17,8 +17,8 @@ class BuildLzipTest(OESDKTestCase):
machine = self.td.get("MACHINE")
if not (self.tc.hasTargetPackage("packagegroup-cross-canadian-%s" % machine) or
self.tc.hasTargetPackage("gcc")):
if not (self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine) or
self.tc.hasHostPackage("^gcc-", regex=True)):
raise unittest.SkipTest("SDK doesn't contain a cross-canadian toolchain")
def test_lzip(self):

View File

@ -18,8 +18,8 @@ class GccCompileTest(OESDKTestCase):
def setUp(self):
machine = self.td.get("MACHINE")
if not (self.tc.hasTargetPackage("packagegroup-cross-canadian-%s" % machine) or
self.tc.hasTargetPackage("gcc")):
if not (self.tc.hasHostPackage("packagegroup-cross-canadian-%s" % machine) or
self.tc.hasHostPackage("^gcc-", regex=True)):
raise unittest.SkipTest("GccCompileTest class: SDK doesn't contain a cross-canadian toolchain")
def test_gcc_compile(self):

View File

@ -20,23 +20,30 @@ class OESDKTestContext(OETestContext):
self.target_pkg_manifest = target_pkg_manifest
self.host_pkg_manifest = host_pkg_manifest
def _hasPackage(self, manifest, pkg):
for host_pkg in manifest.keys():
if re.search(pkg, host_pkg):
def _hasPackage(self, manifest, pkg, regex=False):
if regex:
# do regex match
pat = re.compile(pkg)
for p in manifest.keys():
if pat.search(p):
return True
else:
# do exact match
if pkg in manifest.keys():
return True
return False
def hasHostPackage(self, pkg):
return self._hasPackage(self.host_pkg_manifest, pkg)
def hasHostPackage(self, pkg, regex=False):
return self._hasPackage(self.host_pkg_manifest, pkg, regex=regex)
def hasTargetPackage(self, pkg, multilib=False):
def hasTargetPackage(self, pkg, multilib=False, regex=False):
if multilib:
# match multilib according to sdk_env
mls = self.td.get('MULTILIB_VARIANTS', '').split()
for ml in mls:
if ('ml'+ml) in self.sdk_env:
pkg = ml + '-' + pkg
return self._hasPackage(self.target_pkg_manifest, pkg)
return self._hasPackage(self.target_pkg_manifest, pkg, regex=regex)
class OESDKTestContextExecutor(OETestContextExecutor):
_context_class = OESDKTestContext