blob: 0b4caf1b2c216398ef58fec1e7bec075ae563d6d [file] [log] [blame]
Brad Bishopd7bf8c12018-02-25 22:55:05 -05001import os
2import tempfile
3import fnmatch
4
5from oeqa.selftest.case import OESelftestTestCase
6from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars
7from oeqa.core.decorator.oeid import OETestID
8
9class OePkgdataUtilTests(OESelftestTestCase):
10
11 @classmethod
12 def setUpClass(cls):
13 super(OePkgdataUtilTests, cls).setUpClass()
14 # Ensure we have the right data in pkgdata
15 cls.logger.info('Running bitbake to generate pkgdata')
16 bitbake('busybox zlib m4')
17
18 @OETestID(1203)
19 def test_lookup_pkg(self):
20 # Forward tests
21 result = runCmd('oe-pkgdata-util lookup-pkg "zlib busybox"')
22 self.assertEqual(result.output, 'libz1\nbusybox')
23 result = runCmd('oe-pkgdata-util lookup-pkg zlib-dev')
24 self.assertEqual(result.output, 'libz-dev')
25 result = runCmd('oe-pkgdata-util lookup-pkg nonexistentpkg', ignore_status=True)
26 self.assertEqual(result.status, 1, "Status different than 1. output: %s" % result.output)
27 self.assertEqual(result.output, 'ERROR: The following packages could not be found: nonexistentpkg')
28 # Reverse tests
29 result = runCmd('oe-pkgdata-util lookup-pkg -r "libz1 busybox"')
30 self.assertEqual(result.output, 'zlib\nbusybox')
31 result = runCmd('oe-pkgdata-util lookup-pkg -r libz-dev')
32 self.assertEqual(result.output, 'zlib-dev')
33 result = runCmd('oe-pkgdata-util lookup-pkg -r nonexistentpkg', ignore_status=True)
34 self.assertEqual(result.status, 1, "Status different than 1. output: %s" % result.output)
35 self.assertEqual(result.output, 'ERROR: The following packages could not be found: nonexistentpkg')
36
37 @OETestID(1205)
38 def test_read_value(self):
39 result = runCmd('oe-pkgdata-util read-value PN libz1')
40 self.assertEqual(result.output, 'zlib')
41 result = runCmd('oe-pkgdata-util read-value PKG libz1')
42 self.assertEqual(result.output, 'libz1')
43 result = runCmd('oe-pkgdata-util read-value PKGSIZE m4')
44 pkgsize = int(result.output.strip())
45 self.assertGreater(pkgsize, 1, "Size should be greater than 1. %s" % result.output)
46
47 @OETestID(1198)
48 def test_find_path(self):
49 result = runCmd('oe-pkgdata-util find-path /lib/libz.so.1')
50 self.assertEqual(result.output, 'zlib: /lib/libz.so.1')
51 result = runCmd('oe-pkgdata-util find-path /usr/bin/m4')
52 self.assertEqual(result.output, 'm4: /usr/bin/m4')
53 result = runCmd('oe-pkgdata-util find-path /not/exist', ignore_status=True)
54 self.assertEqual(result.status, 1, "Status different than 1. output: %s" % result.output)
55 self.assertEqual(result.output, 'ERROR: Unable to find any package producing path /not/exist')
56
57 @OETestID(1204)
58 def test_lookup_recipe(self):
59 result = runCmd('oe-pkgdata-util lookup-recipe "libz-staticdev busybox"')
60 self.assertEqual(result.output, 'zlib\nbusybox')
61 result = runCmd('oe-pkgdata-util lookup-recipe libz-dbg')
62 self.assertEqual(result.output, 'zlib')
63 result = runCmd('oe-pkgdata-util lookup-recipe nonexistentpkg', ignore_status=True)
64 self.assertEqual(result.status, 1, "Status different than 1. output: %s" % result.output)
65 self.assertEqual(result.output, 'ERROR: The following packages could not be found: nonexistentpkg')
66
67 @OETestID(1202)
68 def test_list_pkgs(self):
69 # No arguments
70 result = runCmd('oe-pkgdata-util list-pkgs')
71 pkglist = result.output.split()
72 self.assertIn('zlib', pkglist, "Listed packages: %s" % result.output)
73 self.assertIn('zlib-dev', pkglist, "Listed packages: %s" % result.output)
74 # No pkgspec, runtime
75 result = runCmd('oe-pkgdata-util list-pkgs -r')
76 pkglist = result.output.split()
77 self.assertIn('libz-dev', pkglist, "Listed packages: %s" % result.output)
78 # With recipe specified
79 result = runCmd('oe-pkgdata-util list-pkgs -p zlib')
80 pkglist = sorted(result.output.split())
81 try:
82 pkglist.remove('zlib-ptest') # in case ptest is disabled
83 except ValueError:
84 pass
85 self.assertEqual(pkglist, ['zlib', 'zlib-dbg', 'zlib-dev', 'zlib-doc', 'zlib-staticdev'], "Packages listed after remove: %s" % result.output)
86 # With recipe specified, runtime
87 result = runCmd('oe-pkgdata-util list-pkgs -p zlib -r')
88 pkglist = sorted(result.output.split())
89 try:
90 pkglist.remove('libz-ptest') # in case ptest is disabled
91 except ValueError:
92 pass
93 self.assertEqual(pkglist, ['libz-dbg', 'libz-dev', 'libz-doc', 'libz-staticdev', 'libz1'], "Packages listed after remove: %s" % result.output)
94 # With recipe specified and unpackaged
95 result = runCmd('oe-pkgdata-util list-pkgs -p zlib -u')
96 pkglist = sorted(result.output.split())
97 self.assertIn('zlib-locale', pkglist, "Listed packages: %s" % result.output)
98 # With recipe specified and unpackaged, runtime
99 result = runCmd('oe-pkgdata-util list-pkgs -p zlib -u -r')
100 pkglist = sorted(result.output.split())
101 self.assertIn('libz-locale', pkglist, "Listed packages: %s" % result.output)
102 # With recipe specified and pkgspec
103 result = runCmd('oe-pkgdata-util list-pkgs -p zlib "*-d*"')
104 pkglist = sorted(result.output.split())
105 self.assertEqual(pkglist, ['zlib-dbg', 'zlib-dev', 'zlib-doc'], "Packages listed: %s" % result.output)
106 # With recipe specified and pkgspec, runtime
107 result = runCmd('oe-pkgdata-util list-pkgs -p zlib -r "*-d*"')
108 pkglist = sorted(result.output.split())
109 self.assertEqual(pkglist, ['libz-dbg', 'libz-dev', 'libz-doc'], "Packages listed: %s" % result.output)
110
111 @OETestID(1201)
112 def test_list_pkg_files(self):
113 def splitoutput(output):
114 files = {}
115 curpkg = None
116 for line in output.splitlines():
117 if line.startswith('\t'):
118 self.assertTrue(curpkg, 'Unexpected non-package line:\n%s' % line)
119 files[curpkg].append(line.strip())
120 else:
121 self.assertTrue(line.rstrip().endswith(':'), 'Invalid package line in output:\n%s' % line)
122 curpkg = line.split(':')[0]
123 files[curpkg] = []
124 return files
125 bb_vars = get_bb_vars(['base_libdir', 'libdir', 'includedir', 'mandir'])
126 base_libdir = bb_vars['base_libdir']
127 libdir = bb_vars['libdir']
128 includedir = bb_vars['includedir']
129 mandir = bb_vars['mandir']
130 # Test recipe-space package name
131 result = runCmd('oe-pkgdata-util list-pkg-files zlib-dev zlib-doc')
132 files = splitoutput(result.output)
133 self.assertIn('zlib-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
134 self.assertIn('zlib-doc', list(files.keys()), "listed pkgs. files: %s" %result.output)
135 self.assertIn(os.path.join(includedir, 'zlib.h'), files['zlib-dev'])
136 self.assertIn(os.path.join(mandir, 'man3/zlib.3'), files['zlib-doc'])
137 # Test runtime package name
138 result = runCmd('oe-pkgdata-util list-pkg-files -r libz1 libz-dev')
139 files = splitoutput(result.output)
140 self.assertIn('libz1', list(files.keys()), "listed pkgs. files: %s" %result.output)
141 self.assertIn('libz-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
142 self.assertGreater(len(files['libz1']), 1)
143 libspec = os.path.join(base_libdir, 'libz.so.1.*')
144 found = False
145 for fileitem in files['libz1']:
146 if fnmatch.fnmatchcase(fileitem, libspec):
147 found = True
148 break
149 self.assertTrue(found, 'Could not find zlib library file %s in libz1 package file list: %s' % (libspec, files['libz1']))
150 self.assertIn(os.path.join(includedir, 'zlib.h'), files['libz-dev'])
151 # Test recipe
152 result = runCmd('oe-pkgdata-util list-pkg-files -p zlib')
153 files = splitoutput(result.output)
154 self.assertIn('zlib-dbg', list(files.keys()), "listed pkgs. files: %s" %result.output)
155 self.assertIn('zlib-doc', list(files.keys()), "listed pkgs. files: %s" %result.output)
156 self.assertIn('zlib-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
157 self.assertIn('zlib-staticdev', list(files.keys()), "listed pkgs. files: %s" %result.output)
158 self.assertIn('zlib', list(files.keys()), "listed pkgs. files: %s" %result.output)
159 self.assertNotIn('zlib-locale', list(files.keys()), "listed pkgs. files: %s" %result.output)
160 # (ignore ptest, might not be there depending on config)
161 self.assertIn(os.path.join(includedir, 'zlib.h'), files['zlib-dev'])
162 self.assertIn(os.path.join(mandir, 'man3/zlib.3'), files['zlib-doc'])
163 self.assertIn(os.path.join(libdir, 'libz.a'), files['zlib-staticdev'])
164 # Test recipe, runtime
165 result = runCmd('oe-pkgdata-util list-pkg-files -p zlib -r')
166 files = splitoutput(result.output)
167 self.assertIn('libz-dbg', list(files.keys()), "listed pkgs. files: %s" %result.output)
168 self.assertIn('libz-doc', list(files.keys()), "listed pkgs. files: %s" %result.output)
169 self.assertIn('libz-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
170 self.assertIn('libz-staticdev', list(files.keys()), "listed pkgs. files: %s" %result.output)
171 self.assertIn('libz1', list(files.keys()), "listed pkgs. files: %s" %result.output)
172 self.assertNotIn('libz-locale', list(files.keys()), "listed pkgs. files: %s" %result.output)
173 self.assertIn(os.path.join(includedir, 'zlib.h'), files['libz-dev'])
174 self.assertIn(os.path.join(mandir, 'man3/zlib.3'), files['libz-doc'])
175 self.assertIn(os.path.join(libdir, 'libz.a'), files['libz-staticdev'])
176 # Test recipe, unpackaged
177 result = runCmd('oe-pkgdata-util list-pkg-files -p zlib -u')
178 files = splitoutput(result.output)
179 self.assertIn('zlib-dbg', list(files.keys()), "listed pkgs. files: %s" %result.output)
180 self.assertIn('zlib-doc', list(files.keys()), "listed pkgs. files: %s" %result.output)
181 self.assertIn('zlib-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
182 self.assertIn('zlib-staticdev', list(files.keys()), "listed pkgs. files: %s" %result.output)
183 self.assertIn('zlib', list(files.keys()), "listed pkgs. files: %s" %result.output)
184 self.assertIn('zlib-locale', list(files.keys()), "listed pkgs. files: %s" %result.output) # this is the key one
185 self.assertIn(os.path.join(includedir, 'zlib.h'), files['zlib-dev'])
186 self.assertIn(os.path.join(mandir, 'man3/zlib.3'), files['zlib-doc'])
187 self.assertIn(os.path.join(libdir, 'libz.a'), files['zlib-staticdev'])
188 # Test recipe, runtime, unpackaged
189 result = runCmd('oe-pkgdata-util list-pkg-files -p zlib -r -u')
190 files = splitoutput(result.output)
191 self.assertIn('libz-dbg', list(files.keys()), "listed pkgs. files: %s" %result.output)
192 self.assertIn('libz-doc', list(files.keys()), "listed pkgs. files: %s" %result.output)
193 self.assertIn('libz-dev', list(files.keys()), "listed pkgs. files: %s" %result.output)
194 self.assertIn('libz-staticdev', list(files.keys()), "listed pkgs. files: %s" %result.output)
195 self.assertIn('libz1', list(files.keys()), "listed pkgs. files: %s" %result.output)
196 self.assertIn('libz-locale', list(files.keys()), "listed pkgs. files: %s" %result.output) # this is the key one
197 self.assertIn(os.path.join(includedir, 'zlib.h'), files['libz-dev'])
198 self.assertIn(os.path.join(mandir, 'man3/zlib.3'), files['libz-doc'])
199 self.assertIn(os.path.join(libdir, 'libz.a'), files['libz-staticdev'])
200
201 @OETestID(1200)
202 def test_glob(self):
203 tempdir = tempfile.mkdtemp(prefix='pkgdataqa')
204 self.track_for_cleanup(tempdir)
205 pkglistfile = os.path.join(tempdir, 'pkglist')
206 with open(pkglistfile, 'w') as f:
207 f.write('libz1\n')
208 f.write('busybox\n')
209 result = runCmd('oe-pkgdata-util glob %s "*-dev"' % pkglistfile)
210 desiredresult = ['libz-dev', 'busybox-dev']
211 self.assertEqual(sorted(result.output.split()), sorted(desiredresult))
212 # The following should not error (because when we use this during rootfs construction, sometimes the complementary package won't exist)
213 result = runCmd('oe-pkgdata-util glob %s "*-nonexistent"' % pkglistfile)
214 self.assertEqual(result.output, '')
215 # Test exclude option
216 result = runCmd('oe-pkgdata-util glob %s "*-dev *-dbg" -x "^libz"' % pkglistfile)
217 resultlist = result.output.split()
218 self.assertNotIn('libz-dev', resultlist)
219 self.assertNotIn('libz-dbg', resultlist)
220
221 @OETestID(1206)
222 def test_specify_pkgdatadir(self):
223 result = runCmd('oe-pkgdata-util -p %s lookup-pkg zlib' % get_bb_var('PKGDATA_DIR'))
224 self.assertEqual(result.output, 'libz1')