123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- import os
- import tempfile
- import fnmatch
- from oeqa.selftest.case import OESelftestTestCase
- from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars
- class OePkgdataUtilTests(OESelftestTestCase):
- @classmethod
- def setUpClass(cls):
- super(OePkgdataUtilTests, cls).setUpClass()
- # Ensure we have the right data in pkgdata
- cls.logger.info('Running bitbake to generate pkgdata')
- bitbake('target-sdk-provides-dummy -c clean')
- bitbake('busybox zlib m4')
- def test_lookup_pkg(self):
- # Forward tests
- result = runCmd('oe-pkgdata-util lookup-pkg "zlib busybox"')
- self.assertEqual(result.output, 'libz1\nbusybox')
- result = runCmd('oe-pkgdata-util lookup-pkg zlib-dev')
- self.assertEqual(result.output, 'libz-dev')
- result = runCmd('oe-pkgdata-util lookup-pkg nonexistentpkg', ignore_status=True)
- self.assertEqual(result.status, 1, "Status different than 1. output: %s" % result.output)
- self.assertEqual(result.output, 'ERROR: The following packages could not be found: nonexistentpkg')
- # Reverse tests
- result = runCmd('oe-pkgdata-util lookup-pkg -r "libz1 busybox"')
- self.assertEqual(result.output, 'zlib\nbusybox')
- result = runCmd('oe-pkgdata-util lookup-pkg -r libz-dev')
- self.assertEqual(result.output, 'zlib-dev')
- result = runCmd('oe-pkgdata-util lookup-pkg -r nonexistentpkg', ignore_status=True)
- self.assertEqual(result.status, 1, "Status different than 1. output: %s" % result.output)
- self.assertEqual(result.output, 'ERROR: The following packages could not be found: nonexistentpkg')
- def test_read_value(self):
- result = runCmd('oe-pkgdata-util read-value PN libz1')
- self.assertEqual(result.output, 'zlib')
- result = runCmd('oe-pkgdata-util read-value PKG libz1')
- self.assertEqual(result.output, 'libz1')
- result = runCmd('oe-pkgdata-util read-value PKGSIZE m4')
- pkgsize = int(result.output.strip())
- self.assertGreater(pkgsize, 1, "Size should be greater than 1. %s" % result.output)
- def test_find_path(self):
- result = runCmd('oe-pkgdata-util find-path /lib/libz.so.1')
- self.assertEqual(result.output, 'zlib: /lib/libz.so.1')
- result = runCmd('oe-pkgdata-util find-path /usr/bin/m4')
- self.assertEqual(result.output, 'm4: /usr/bin/m4')
- result = runCmd('oe-pkgdata-util find-path /not/exist', ignore_status=True)
- self.assertEqual(result.status, 1, "Status different than 1. output: %s" % result.output)
- self.assertEqual(result.output, 'ERROR: Unable to find any package producing path /not/exist')
- def test_lookup_recipe(self):
- result = runCmd('oe-pkgdata-util lookup-recipe "libz-staticdev busybox"')
- self.assertEqual(result.output, 'zlib\nbusybox')
- result = runCmd('oe-pkgdata-util lookup-recipe libz-dbg')
- self.assertEqual(result.output, 'zlib')
- result = runCmd('oe-pkgdata-util lookup-recipe nonexistentpkg', ignore_status=True)
- self.assertEqual(result.status, 1, "Status different than 1. output: %s" % result.output)
- self.assertEqual(result.output, 'ERROR: The following packages could not be found: nonexistentpkg')
- def test_list_pkgs(self):
- # No arguments
- result = runCmd('oe-pkgdata-util list-pkgs')
- pkglist = result.output.split()
- self.assertIn('zlib', pkglist, "Listed packages: %s" % result.output)
- self.assertIn('zlib-dev', pkglist, "Listed packages: %s" % result.output)
- # No pkgspec, runtime
- result = runCmd('oe-pkgdata-util list-pkgs -r')
- pkglist = result.output.split()
- self.assertIn('libz-dev', pkglist, "Listed packages: %s" % result.output)
- # With recipe specified
- result = runCmd('oe-pkgdata-util list-pkgs -p zlib')
- pkglist = sorted(result.output.split())
- try:
- pkglist.remove('zlib-ptest') # in case ptest is disabled
- except ValueError:
- pass
- self.assertEqual(pkglist, ['zlib', 'zlib-dbg', 'zlib-dev', 'zlib-doc', 'zlib-src', 'zlib-staticdev'], "Packages listed after remove: %s" % result.output)
- # With recipe specified, runtime
- result = runCmd('oe-pkgdata-util list-pkgs -p zlib -r')
- pkglist = sorted(result.output.split())
- try:
- pkglist.remove('libz-ptest') # in case ptest is disabled
- except ValueError:
- pass
- self.assertEqual(pkglist, ['libz-dbg', 'libz-dev', 'libz-doc', 'libz-src', 'libz-staticdev', 'libz1'], "Packages listed after remove: %s" % result.output)
- # With recipe specified and unpackaged
- result = runCmd('oe-pkgdata-util list-pkgs -p zlib -u')
- pkglist = sorted(result.output.split())
- self.assertIn('zlib-locale', pkglist, "Listed packages: %s" % result.output)
- # With recipe specified and unpackaged, runtime
- result = runCmd('oe-pkgdata-util list-pkgs -p zlib -u -r')
- pkglist = sorted(result.output.split())
- self.assertIn('libz-locale', pkglist, "Listed packages: %s" % result.output)
- # With recipe specified and pkgspec
- result = runCmd('oe-pkgdata-util list-pkgs -p zlib "*-d*"')
- pkglist = sorted(result.output.split())
- self.assertEqual(pkglist, ['zlib-dbg', 'zlib-dev', 'zlib-doc'], "Packages listed: %s" % result.output)
- # With recipe specified and pkgspec, runtime
- result = runCmd('oe-pkgdata-util list-pkgs -p zlib -r "*-d*"')
- pkglist = sorted(result.output.split())
- self.assertEqual(pkglist, ['libz-dbg', 'libz-dev', 'libz-doc'], "Packages listed: %s" % result.output)
- def test_list_pkg_files(self):
- def splitoutput(output):
- files = {}
- curpkg = None
- for line in output.splitlines():
- if line.startswith('\t'):
- self.assertTrue(curpkg, 'Unexpected non-package line:\n%s' % line)
- files[curpkg].append(line.strip())
- else:
- self.assertTrue(line.rstrip().endswith(':'), 'Invalid package line in output:\n%s' % line)
- curpkg = line.split(':')[0]
- files[curpkg] = []
- return files
- bb_vars = get_bb_vars(['base_libdir', 'libdir', 'includedir', 'mandir'])
- base_libdir = bb_vars['base_libdir']
- libdir = bb_vars['libdir']
- includedir = bb_vars['includedir']
- mandir = bb_vars['mandir']
- # Test recipe-space package name
- result = runCmd('oe-pkgdata-util list-pkg-files zlib-dev zlib-doc')
- files = splitoutput(result.output)
- self.assertIn('zlib-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('zlib-doc', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn(os.path.join(includedir, 'zlib.h'), files['zlib-dev'])
- self.assertIn(os.path.join(mandir, 'man3/zlib.3'), files['zlib-doc'])
- # Test runtime package name
- result = runCmd('oe-pkgdata-util list-pkg-files -r libz1 libz-dev')
- files = splitoutput(result.output)
- self.assertIn('libz1', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('libz-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertGreater(len(files['libz1']), 1)
- libspec = os.path.join(base_libdir, 'libz.so.1.*')
- found = False
- for fileitem in files['libz1']:
- if fnmatch.fnmatchcase(fileitem, libspec):
- found = True
- break
- self.assertTrue(found, 'Could not find zlib library file %s in libz1 package file list: %s' % (libspec, files['libz1']))
- self.assertIn(os.path.join(includedir, 'zlib.h'), files['libz-dev'])
- # Test recipe
- result = runCmd('oe-pkgdata-util list-pkg-files -p zlib')
- files = splitoutput(result.output)
- self.assertIn('zlib-dbg', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('zlib-doc', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('zlib-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('zlib-staticdev', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('zlib', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertNotIn('zlib-locale', list(files.keys()), "listed pkgs. files: %s" %result.output)
- # (ignore ptest, might not be there depending on config)
- self.assertIn(os.path.join(includedir, 'zlib.h'), files['zlib-dev'])
- self.assertIn(os.path.join(mandir, 'man3/zlib.3'), files['zlib-doc'])
- self.assertIn(os.path.join(libdir, 'libz.a'), files['zlib-staticdev'])
- # Test recipe, runtime
- result = runCmd('oe-pkgdata-util list-pkg-files -p zlib -r')
- files = splitoutput(result.output)
- self.assertIn('libz-dbg', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('libz-doc', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('libz-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('libz-staticdev', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('libz1', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertNotIn('libz-locale', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn(os.path.join(includedir, 'zlib.h'), files['libz-dev'])
- self.assertIn(os.path.join(mandir, 'man3/zlib.3'), files['libz-doc'])
- self.assertIn(os.path.join(libdir, 'libz.a'), files['libz-staticdev'])
- # Test recipe, unpackaged
- result = runCmd('oe-pkgdata-util list-pkg-files -p zlib -u')
- files = splitoutput(result.output)
- self.assertIn('zlib-dbg', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('zlib-doc', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('zlib-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('zlib-staticdev', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('zlib', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('zlib-locale', list(files.keys()), "listed pkgs. files: %s" %result.output) # this is the key one
- self.assertIn(os.path.join(includedir, 'zlib.h'), files['zlib-dev'])
- self.assertIn(os.path.join(mandir, 'man3/zlib.3'), files['zlib-doc'])
- self.assertIn(os.path.join(libdir, 'libz.a'), files['zlib-staticdev'])
- # Test recipe, runtime, unpackaged
- result = runCmd('oe-pkgdata-util list-pkg-files -p zlib -r -u')
- files = splitoutput(result.output)
- self.assertIn('libz-dbg', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('libz-doc', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('libz-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('libz-staticdev', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('libz1', list(files.keys()), "listed pkgs. files: %s" %result.output)
- self.assertIn('libz-locale', list(files.keys()), "listed pkgs. files: %s" %result.output) # this is the key one
- self.assertIn(os.path.join(includedir, 'zlib.h'), files['libz-dev'])
- self.assertIn(os.path.join(mandir, 'man3/zlib.3'), files['libz-doc'])
- self.assertIn(os.path.join(libdir, 'libz.a'), files['libz-staticdev'])
- def test_glob(self):
- tempdir = tempfile.mkdtemp(prefix='pkgdataqa')
- self.track_for_cleanup(tempdir)
- pkglistfile = os.path.join(tempdir, 'pkglist')
- with open(pkglistfile, 'w') as f:
- f.write('libz1\n')
- f.write('busybox\n')
- result = runCmd('oe-pkgdata-util glob %s "*-dev"' % pkglistfile)
- desiredresult = ['libz-dev', 'busybox-dev']
- self.assertEqual(sorted(result.output.split()), sorted(desiredresult))
- # The following should not error (because when we use this during rootfs construction, sometimes the complementary package won't exist)
- result = runCmd('oe-pkgdata-util glob %s "*-nonexistent"' % pkglistfile)
- self.assertEqual(result.output, '')
- # Test exclude option
- result = runCmd('oe-pkgdata-util glob %s "*-dev *-dbg" -x "^libz"' % pkglistfile)
- resultlist = result.output.split()
- self.assertNotIn('libz-dev', resultlist)
- self.assertNotIn('libz-dbg', resultlist)
- def test_specify_pkgdatadir(self):
- result = runCmd('oe-pkgdata-util -p %s lookup-pkg zlib' % get_bb_var('PKGDATA_DIR'))
- self.assertEqual(result.output, 'libz1')
|