diff options
Diffstat (limited to 'meta/lib/oeqa/selftest/cases/pkgdata.py')
-rw-r--r-- | meta/lib/oeqa/selftest/cases/pkgdata.py | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/meta/lib/oeqa/selftest/cases/pkgdata.py b/meta/lib/oeqa/selftest/cases/pkgdata.py new file mode 100644 index 0000000000..0b4caf1b2c --- /dev/null +++ b/meta/lib/oeqa/selftest/cases/pkgdata.py | |||
@@ -0,0 +1,224 @@ | |||
1 | import os | ||
2 | import tempfile | ||
3 | import fnmatch | ||
4 | |||
5 | from oeqa.selftest.case import OESelftestTestCase | ||
6 | from oeqa.utils.commands import runCmd, bitbake, get_bb_var, get_bb_vars | ||
7 | from oeqa.core.decorator.oeid import OETestID | ||
8 | |||
9 | class 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') | ||