1 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
2 // -*- Mode: C++ -*-
3 //
4 // Copyright (C) 2013-2022 Red Hat, Inc.
5 //
6 // Author: Sinny Kumari
7
8 /// @file
9 ///
10 /// This test harness program computes the ABI changes between ELF
11 /// binaries present inside input packages. Some of the input
12 /// packages have debuginfo, some don't. The resulting ABI change
13 /// report is then compared with a reference one.
14 ///
15 /// The set of input files and reference reports to consider should be
16 /// present in the source distribution, which means they must be
17 /// referenced in tests/data/Makefile.am by the EXTRA_DIST variable.
18
19 // For package configuration macros.
20 #include "config.h"
21 #include <sys/wait.h>
22 #include <cassert>
23 #include <cstdlib>
24 #include <cstring>
25 #include <iostream>
26 #include <memory>
27 #include <string>
28 #include <vector>
29 #include "abg-workers.h"
30 #include "test-utils.h"
31 #include "abg-tools-utils.h"
32
33 using std::string;
34 using std::vector;
35 using std::cerr;
36 using abigail::tests::get_src_dir;
37 using abigail::tools_utils::split_string;
38
39 struct InOutSpec
40 {
41 const char* first_in_package_path;
42 const char* second_in_package_path;
43 const char* prog_options;
44 const char* suppression_path;
45 const char* first_in_debug_package_path;
46 const char* second_in_debug_package_path;
47 const char* first_in_devel_package_path;
48 const char* second_in_devel_package_path;
49 const char* ref_report_path;
50 const char* out_report_path;
51 };// end struct InOutSpec
52
53 static InOutSpec in_out_specs[] =
54 {
55 // dir1 contains a suppr spec - it should be ignored.
56 {
57 "data/test-diff-pkg/dirpkg-0-dir1",
58 "data/test-diff-pkg/dirpkg-0-dir2",
59 "--no-default-suppression --no-show-locs",
60 "",
61 "",
62 "",
63 "",
64 "",
65 "data/test-diff-pkg/dirpkg-0-report-0.txt",
66 "output/test-diff-pkg/dirpkg-0-report-0.txt"
67 },
68 // dir2 contains a suppr spec - it should be recognized.
69 {
70 "data/test-diff-pkg/dirpkg-1-dir1",
71 "data/test-diff-pkg/dirpkg-1-dir2",
72 "--no-default-suppression --no-show-locs",
73 "",
74 "",
75 "",
76 "",
77 "",
78 "data/test-diff-pkg/dirpkg-1-report-0.txt",
79 "output/test-diff-pkg/dirpkg-1-report-0.txt"
80 },
81 // dir2 contains a suppr spec but --no-abignore is specified,
82 // the file should be ignored.
83 {
84 "data/test-diff-pkg/dirpkg-1-dir1",
85 "data/test-diff-pkg/dirpkg-1-dir2",
86 "--no-default-suppression --no-abignore --no-show-locs",
87 "",
88 "",
89 "",
90 "",
91 "",
92 "data/test-diff-pkg/dirpkg-1-report-1.txt",
93 "output/test-diff-pkg/dirpkg-1-report-1.txt"
94 },
95 // dir2 contains several suppr spec files, ".abignore" and
96 // "dir.abignore", so the specs should be merged.
97 {
98 "data/test-diff-pkg/dirpkg-2-dir1",
99 "data/test-diff-pkg/dirpkg-2-dir2",
100 "--no-default-suppression --no-show-locs",
101 "",
102 "",
103 "",
104 "",
105 "",
106 "data/test-diff-pkg/dirpkg-2-report-0.txt",
107 "output/test-diff-pkg/dirpkg-2-report-0.txt"
108 },
109 // dir2 contains a suppr spec file, ".abignore" and
110 // an additional suppr file is specified on the command line,
111 // so the specs should be merged.
112 {
113 "data/test-diff-pkg/dirpkg-3-dir1",
114 "data/test-diff-pkg/dirpkg-3-dir2",
115 "--no-default-suppression --no-show-locs",
116 "data/test-diff-pkg/dirpkg-3.suppr",
117 "",
118 "",
119 "",
120 "",
121 "data/test-diff-pkg/dirpkg-3-report-0.txt",
122 "output/test-diff-pkg/dirpkg-3-report-0.txt"
123 },
124 // dir2 contains a suppr spec file, ".abignore", which should
125 // be ignored because of the program options and
126 // an additional suppr file is specified on the command line,
127 // which should be recognized.
128 {
129 "data/test-diff-pkg/dirpkg-3-dir1",
130 "data/test-diff-pkg/dirpkg-3-dir2",
131 "--no-default-suppression --no-show-locs --no-abignore",
132 "data/test-diff-pkg/dirpkg-3.suppr",
133 "",
134 "",
135 "",
136 "",
137 "data/test-diff-pkg/dirpkg-3-report-1.txt",
138 "output/test-diff-pkg/dirpkg-3-report-1.txt"
139 },
140 { // Just like the previous tests, but loc info is emitted.
141 "data/test-diff-pkg/dirpkg-3-dir1",
142 "data/test-diff-pkg/dirpkg-3-dir2",
143 "--no-default-suppression --no-abignore",
144 "data/test-diff-pkg/dirpkg-3.suppr",
145 "",
146 "",
147 "",
148 "",
149 "data/test-diff-pkg/dirpkg-3-report-2.txt",
150 "output/test-diff-pkg/dirpkg-3-report-2.txt"
151 },
152 {
153 "data/test-diff-pkg/symlink-dir-test1/dir1/symlinks",
154 "data/test-diff-pkg/symlink-dir-test1/dir2/symlinks",
155 "--no-default-suppression ",
156 "",
157 "",
158 "",
159 "",
160 "",
161 "data/test-diff-pkg/symlink-dir-test1-report0.txt ",
162 "output/test-diff-pkg/symlink-dir-test1-report0.txt "
163 },
164 #if WITH_TAR
165 {
166 "data/test-diff-pkg/tarpkg-0-dir1.tar",
167 "data/test-diff-pkg/tarpkg-0-dir2.tar",
168 "--no-default-suppression --no-show-locs",
169 "",
170 "",
171 "",
172 "",
173 "",
174 "data/test-diff-pkg/tarpkg-0-report-0.txt",
175 "output/test-diff-pkg/tarpkg-0-report-0.txt"
176 },
177 {
178 "data/test-diff-pkg/tarpkg-0-dir1.ta",
179 "data/test-diff-pkg/tarpkg-0-dir2.ta",
180 "--no-default-suppression --no-show-locs",
181 "",
182 "",
183 "",
184 "",
185 "",
186 "data/test-diff-pkg/tarpkg-0-report-0.txt",
187 "output/test-diff-pkg/tarpkg-0-report-01.txt"
188 },
189 {
190 "data/test-diff-pkg/tarpkg-0-dir1.tar.gz",
191 "data/test-diff-pkg/tarpkg-0-dir2.tar.gz",
192 "--no-default-suppression --no-show-locs",
193 "",
194 "",
195 "",
196 "",
197 "",
198 "data/test-diff-pkg/tarpkg-0-report-0.txt",
199 "output/test-diff-pkg/tarpkg-0-report-02.txt"
200 },
201 {
202 "data/test-diff-pkg/tarpkg-0-dir1.tar.bz2",
203 "data/test-diff-pkg/tarpkg-0-dir2.tar.bz2",
204 "--no-default-suppression --no-show-locs",
205 "",
206 "",
207 "",
208 "",
209 "",
210 "data/test-diff-pkg/tarpkg-0-report-0.txt",
211 "output/test-diff-pkg/tarpkg-0-report-03.txt"
212 },
213 {
214 "data/test-diff-pkg/tarpkg-1-dir1.tar.gz",
215 "data/test-diff-pkg/tarpkg-1-dir2.tar.gz",
216 "--no-default-suppression --dso-only",
217 "",
218 "",
219 "",
220 "",
221 "",
222 "data/test-diff-pkg/tarpkg-1-report-0.txt",
223 "output/test-diff-pkg/tarpkg-1-report-0.txt"
224 },
225 #endif //WITH_TAR
226
227 #ifdef WITH_RPM
228 // Two RPM packages with debuginfo available and have ABI changes
229 {
230 "data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm",
231 "data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm",
232 "--no-default-suppression --private-dso --no-show-locs",
233 "",
234 "data/test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm",
235 "data/test-diff-pkg/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm",
236 "",
237 "",
238 "data/test-diff-pkg/test-rpm-report-0.txt",
239 "output/test-diff-pkg/test-rpm-report-0.txt"
240 },
241 // Two RPM packages with 2nd package debuginfo missing
242 {
243 "data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm",
244 "data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm",
245 "--no-default-suppression --private-dso --no-show-locs",
246 "",
247 "data/test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm",
248 "",
249 "",
250 "",
251 "data/test-diff-pkg/test-rpm-report-1.txt",
252 "output/test-diff-pkg/test-rpm-report-1.txt"
253 },
254
255 // Two RPM packages with first package debuginfo missing
256 {
257 "data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm",
258 "data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm",
259 "--no-default-suppression --private-dso --no-show-locs",
260 "",
261 "",
262 "data/test-diff-pkg/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm",
263 "",
264 "",
265 "data/test-diff-pkg/test-rpm-report-2.txt",
266 "output/test-diff-pkg/test-rpm-report-2.txt"
267 },
268
269 // Two RPM packages with missing debuginfo
270 {
271 "data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm",
272 "data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm",
273 "--no-default-suppression --no-show-locs",
274 "",
275 "",
276 "",
277 "",
278 "",
279 "data/test-diff-pkg/test-rpm-report-3.txt",
280 "output/test-diff-pkg/test-rpm-report-3.txt"
281 },
282
283 // Two RPM packages with no ABI change
284 {
285 "data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm",
286 "data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm",
287 "--no-default-suppression --no-show-locs",
288 "",
289 "data/test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm",
290 "data/test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm",
291 "",
292 "",
293 "data/test-diff-pkg/test-rpm-report-4.txt",
294 "output/test-diff-pkg/test-rpm-report-4.txt"
295 },
296 // Two RPM packages with debuginfo available and we don't want to
297 // see added symbols.
298 {
299 "data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm",
300 "data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm",
301 "--no-default-suppression --no-show-locs --no-added-syms",
302 "",
303 "data/test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm",
304 "data/test-diff-pkg/dbus-glib-debuginfo-0.104-3.fc23.x86_64.rpm",
305 "",
306 "",
307 "data/test-diff-pkg/test-rpm-report-5.txt",
308 "output/test-diff-pkg/test-rpm-report-5.txt"
309 },
310 {
311 "data/test-diff-pkg/qemu-img-rhev-2.3.0-7.el7.ppc64.rpm",
312 "data/test-diff-pkg/qemu-img-rhev-2.3.0-20.el7.ppc64.rpm",
313 "--no-default-suppression --no-show-locs --no-added-syms",
314 "",
315 "data/test-diff-pkg/qemu-kvm-rhev-debuginfo-2.3.0-7.el7.ppc64.rpm",
316 "data/test-diff-pkg/qemu-kvm-rhev-debuginfo-2.3.0-20.el7.ppc64.rpm",
317 "",
318 "",
319 "data/test-diff-pkg/qemu-img-rhev-2.3.0-7.el7.ppc64--qemu-img-rhev-2.3.0-20.el7.ppc64-report-0.txt",
320 "output/test-diff-pkg/qemu-img-rhev-2.3.0-7.el7.ppc64--qemu-img-rhev-2.3.0-20.el7.ppc64-report-0.txt"
321 },
322 {
323 "data/test-diff-pkg/empty-pkg-libvirt-0.9.11.3-1.el7.ppc64.rpm",
324 "data/test-diff-pkg/empty-pkg-libvirt-1.2.17-13.el7_2.2.ppc64.rpm",
325 "",
326 "",
327 "",
328 "",
329 "",
330 "",
331 "data/test-diff-pkg/empty-pkg-report-0.txt",
332 "output/test-diff-pkg/empty-pkg-report-0.txt"
333 },
334 {
335 "data/test-diff-pkg/gmp-4.3.1-7.el6_2.2.ppc64.rpm",
336 "data/test-diff-pkg/gmp-4.3.1-10.el6.ppc64.rpm",
337 "",
338 "",
339 "data/test-diff-pkg/gmp-debuginfo-4.3.1-7.el6_2.2.ppc64.rpm",
340 "data/test-diff-pkg/gmp-debuginfo-4.3.1-10.el6.ppc64.rpm",
341 "",
342 "",
343 "data/test-diff-pkg/gmp-4.3.1-7.el6_2.2.ppc64--gmp-4.3.1-10.el6.ppc64-report-0.txt",
344 "output/test-diff-pkg/gmp-4.3.1-7.el6_2.2.ppc64--gmp-4.3.1-10.el6.ppc64-report-0.txt"
345 },
346 {
347 "data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64.rpm",
348 "data/test-diff-pkg/tbb-4.3-3.20141204.fc23.x86_64.rpm",
349 "--no-default-suppression --no-assume-odr-for-cplusplus",
350 "",
351 "data/test-diff-pkg/tbb-debuginfo-4.1-9.20130314.fc22.x86_64.rpm",
352 "data/test-diff-pkg/tbb-debuginfo-4.3-3.20141204.fc23.x86_64.rpm",
353 "",
354 "",
355 "data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt",
356 "output/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt"
357 },
358 {
359 "data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64.rpm",
360 "data/test-diff-pkg/tbb-4.3-3.20141204.fc23.x86_64.rpm",
361 "--no-default-suppression",
362 "",
363 "data/test-diff-pkg/tbb-debuginfo-4.1-9.20130314.fc22.x86_64.rpm",
364 "data/test-diff-pkg/tbb-debuginfo-4.3-3.20141204.fc23.x86_64.rpm",
365 "data/test-diff-pkg/tbb-devel-4.1-9.20130314.fc22.x86_64.rpm",
366 "data/test-diff-pkg/tbb-devel-4.3-3.20141204.fc23.x86_64.rpm",
367 "data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt",
368 "output/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt"
369 },
370 {
371 "data/test-diff-pkg/tbb-2017-8.20161128.fc26.x86_64.rpm",
372 "data/test-diff-pkg/tbb-2017-9.20170118.fc27.x86_64.rpm",
373 "--no-default-suppression",
374 "",
375 "data/test-diff-pkg/tbb-debuginfo-2017-8.20161128.fc26.x86_64.rpm",
376 "data/test-diff-pkg/tbb-debuginfo-2017-9.20170118.fc27.x86_64.rpm",
377 "",
378 "",
379 "data/test-diff-pkg/tbb-2017-8.20161128.fc26.x86_64--tbb-2017-9.20170118.fc27.x86_64.txt",
380 "output/test-diff-pkg/tbb-2017-8.20161128.fc26.x86_64--tbb-2017-9.20170118.fc27.x86_64.txt"
381 },
382 {
383 "data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm",
384 "data/test-diff-pkg/libICE-1.0.9-2.el7.x86_64.rpm",
385 "--no-default-suppression",
386 "",
387 "data/test-diff-pkg/libICE-debuginfo-1.0.6-1.el6.x86_64.rpm",
388 "data/test-diff-pkg/libICE-debuginfo-1.0.9-2.el7.x86_64.rpm",
389 "",
390 "",
391 "data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt",
392 "output/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt"
393 },
394 {
395 "data/test-diff-pkg/gtk2-immodule-xim-2.24.22-5.el7.i686.rpm",
396 "data/test-diff-pkg/gtk2-immodule-xim-2.24.28-8.el7.i686.rpm",
397 "--no-default-suppression",
398 "",
399 "data/test-diff-pkg/gtk2-debuginfo-2.24.22-5.el7.i686.rpm",
400 "data/test-diff-pkg/gtk2-debuginfo-2.24.28-8.el7.i686.rpm",
401 "",
402 "",
403 "data/test-diff-pkg/gtk2-immodule-xim-2.24.22-5.el7.i686--gtk2-immodule-xim-2.24.28-8.el7.i686-report-0.txt",
404 "output/test-diff-pkg/gtk2-immodule-xim-2.24.22-5.el7.i686--gtk2-immodule-xim-2.24.28-8.el7.i686-report-0.txt"
405 },
406 {
407 "data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm",
408 "data/test-diff-pkg/dbus-glib-0.80-3.fc12.x86_64.rpm",
409 "--no-default-suppression --show-identical-binaries",
410 "",
411 "data/test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm",
412 "data/test-diff-pkg/dbus-glib-debuginfo-0.80-3.fc12.x86_64.rpm",
413 "",
414 "",
415 "data/test-diff-pkg/test-dbus-glib-0.80-3.fc12.x86_64-report-0.txt",
416 "output/test-diff-pkg/test-dbus-glib-0.80-3.fc12.x86_64-report-0.txt"
417 },
418 {
419 "data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64.rpm",
420 "data/test-diff-pkg/dbus-glib-0.104-3.fc23.armv7hl.rpm",
421 "--no-default-suppression",
422 "",
423 "",
424 "",
425 "",
426 "",
427 "data/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64--dbus-glib-0.104-3.fc23.armv7hl-report-0.txt",
428 "output/test-diff-pkg/dbus-glib-0.104-3.fc23.x86_64--dbus-glib-0.104-3.fc23.armv7hl-report-0.txt"
429 },
430 {
431 "data/test-diff-pkg/nonexistent-0.rpm",
432 "data/test-diff-pkg/nonexistent-1.rpm",
433 "--no-default-suppression --private-dso",
434 "",
435 "",
436 "",
437 "",
438 "",
439 "data/test-diff-pkg/test-nonexistent-report-0.txt",
440 "output/test-diff-pkg/test-nonexistent-report-0.txt"
441 },
442 {
443 "data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64.rpm",
444 "data/test-diff-pkg/spice-server-0.12.8-1.el7.x86_64.rpm",
445 "--no-default-suppression",
446 "",
447 "data/test-diff-pkg/spice-debuginfo-0.12.4-19.el7.x86_64.rpm",
448 "data/test-diff-pkg/spice-debuginfo-0.12.8-1.el7.x86_64.rpm",
449 "data/test-diff-pkg/spice-server-devel-0.12.4-19.el7.x86_64.rpm",
450 "data/test-diff-pkg/spice-server-devel-0.12.8-1.el7.x86_64.rpm",
451 "data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt",
452 "output/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt"
453 },
454 {
455 "data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64.rpm",
456 "data/test-diff-pkg/spice-server-0.12.8-1.el7.x86_64.rpm",
457 "--no-default-suppression --redundant",
458 "",
459 "data/test-diff-pkg/spice-debuginfo-0.12.4-19.el7.x86_64.rpm",
460 "data/test-diff-pkg/spice-debuginfo-0.12.8-1.el7.x86_64.rpm",
461 "data/test-diff-pkg/spice-server-devel-0.12.4-19.el7.x86_64.rpm",
462 "data/test-diff-pkg/spice-server-devel-0.12.8-1.el7.x86_64.rpm",
463 "data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt",
464 "output/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt"
465 },
466 {
467 "data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64.rpm",
468 "data/test-diff-pkg/spice-server-0.12.8-1.el7.x86_64.rpm",
469 "--no-default-suppression --redundant",
470 "",
471 "data/test-diff-pkg/spice-debuginfo-0.12.4-19.el7.x86_64.rpm",
472 "data/test-diff-pkg/spice-debuginfo-0.12.8-1.el7.x86_64.rpm",
473 "",
474 "",
475 "data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt",
476 "output/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt"
477 },
478 {
479 "data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64.rpm",
480 "data/test-diff-pkg/libcdio-0.94-2.fc26.x86_64.rpm",
481 "--no-default-suppression --redundant",
482 "",
483 "data/test-diff-pkg/libcdio-debuginfo-0.94-1.fc26.x86_64.rpm",
484 "data/test-diff-pkg/libcdio-debuginfo-0.94-2.fc26.x86_64.rpm",
485 "",
486 "",
487 "data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt",
488 "output/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt"
489 },
490 {
491 "data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64.rpm",
492 "data/test-diff-pkg/spice-server-0.12.8-1.el7.x86_64.rpm",
493 "--no-default-suppression --leaf-changes-only --impacted-interfaces",
494 "",
495 "data/test-diff-pkg/spice-debuginfo-0.12.4-19.el7.x86_64.rpm",
496 "data/test-diff-pkg/spice-debuginfo-0.12.8-1.el7.x86_64.rpm",
497 "data/test-diff-pkg/spice-server-devel-0.12.4-19.el7.x86_64.rpm",
498 "data/test-diff-pkg/spice-server-devel-0.12.4-19.el7.x86_64.rpm",
499 "data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt",
500 "output/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt"
501 },
502 {
503 "data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64.rpm",
504 "data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64.rpm",
505 "--fail-no-dbg",
506 "",
507 "data/test-diff-pkg/libxfce4ui-devel-debuginfo-4.12.1-8.fc27.ppc64.rpm",
508 "data/test-diff-pkg/libxfce4ui-devel-debuginfo-4.12.1-8.fc27.ppc64.rpm",
509 "",
510 "",
511 "data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-0.txt",
512 "output/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-0.txt"
513 },
514 {
515 "data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64.rpm",
516 "data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64.rpm",
517 "--fail-no-dbg",
518 "",
519 "data/test-diff-pkg/libxfce4ui-debuginfo-4.12.1-8.fc27.ppc64.rpm "
520 "data/test-diff-pkg/libxfce4ui-devel-debuginfo-4.12.1-8.fc27.ppc64.rpm",
521 "data/test-diff-pkg/libxfce4ui-debuginfo-4.12.1-8.fc27.ppc64.rpm "
522 "data/test-diff-pkg/libxfce4ui-devel-debuginfo-4.12.1-8.fc27.ppc64.rpm",
523 "",
524 "",
525 "data/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-ok-0.txt",
526 "output/test-diff-pkg/libxfce4ui-devel-4.12.1-8.fc27.ppc64-self-report-ok-0.txt"
527 },
528 {
529 "data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64.rpm",
530 "data/test-diff-pkg/elfutils-libs-0.171-1.el7.x86_64.rpm",
531 "--fail-no-dbg",
532 "",
533 "data/test-diff-pkg/elfutils-debuginfo-0.170-4.el7.x86_64.rpm",
534 "data/test-diff-pkg/elfutils-debuginfo-0.171-1.el7.x86_64.rpm",
535 "data/test-diff-pkg/elfutils-devel-0.170-4.el7.x86_64.rpm",
536 "data/test-diff-pkg/elfutils-devel-0.171-1.el7.x86_64.rpm",
537 "data/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64-multiple-sym-vers-report-0.txt",
538 "output/test-diff-pkg/elfutils-libs-0.170-4.el7.x86_64-multiple-sym-vers-report-0.txt"
539 },
540 {
541 "data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64.rpm",
542 "data/test-diff-pkg/nss-3.24.0-1.0.fc23.x86_64.rpm",
543 "--fail-no-dbg",
544 "",
545 "data/test-diff-pkg/nss-debuginfo-3.23.0-1.0.fc23.x86_64.rpm",
546 "data/test-diff-pkg/nss-debuginfo-3.24.0-1.0.fc23.x86_64.rpm",
547 "data/test-diff-pkg/nss-devel-3.23.0-1.0.fc23.x86_64.rpm",
548 "data/test-diff-pkg/nss-devel-3.24.0-1.0.fc23.x86_64.rpm",
549 "data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt",
550 "output/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt"
551 },
552 {
553 "data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64.rpm",
554 "data/test-diff-pkg/GtkAda-gl-2.24.2-30.fc30.x86_64.rpm",
555 "--fail-no-dbg",
556 "",
557 "data/test-diff-pkg/GtkAda-debuginfo-2.24.2-29.fc29.x86_64.rpm, "
558 "data/test-diff-pkg/GtkAda-gl-debuginfo-2.24.2-29.fc29.x86_64.rpm",
559 "data/test-diff-pkg/GtkAda-debuginfo-2.24.2-30.fc30.x86_64.rpm, "
560 "data/test-diff-pkg/GtkAda-gl-debuginfo-2.24.2-30.fc30.x86_64.rpm",
561 "data/test-diff-pkg/GtkAda-devel-2.24.2-29.fc29.x86_64.rpm",
562 "data/test-diff-pkg/GtkAda-devel-2.24.2-30.fc30.x86_64.rpm",
563 "data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64--2.24.2-30.fc30.x86_64-report-0.txt",
564 "output/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64--2.24.2-30.fc30.x86_64-report-0.txt"
565 },
566 {
567 "data/test-diff-pkg/netcdf-fortran-mpich-4.4.4-10.fc29.x86_64.rpm",
568 "data/test-diff-pkg/netcdf-fortran-mpich-4.4.4-11.fc30.x86_64.rpm",
569 "--fail-no-dbg",
570 "",
571 "data/test-diff-pkg/netcdf-fortran-mpich-debuginfo-4.4.4-10.fc29.x86_64.rpm,"
572 "data/test-diff-pkg/netcdf-fortran-debuginfo-4.4.4-10.fc29.x86_64.rpm",
573 "data/test-diff-pkg/netcdf-fortran-mpich-debuginfo-4.4.4-11.fc30.x86_64.rpm,"
574 "data/test-diff-pkg/netcdf-fortran-debuginfo-4.4.4-11.fc30.x86_64.rpm",
575 "data/test-diff-pkg/netcdf-fortran-mpich-devel-4.4.4-10.fc29.x86_64.rpm",
576 "data/test-diff-pkg/netcdf-fortran-mpich-devel-4.4.4-11.fc30.x86_64.rpm",
577 "data/test-diff-pkg/netcdf-fortran-mpich-4.4.4-10.fc29.x86_64-4.4.4-11.fc30.x86_64-report-0.txt",
578 "output/test-diff-pkg/netcdf-fortran-mpich-4.4.4-10.fc29.x86_64-4.4.4-11.fc30.x86_64-report-0.txt"
579 },
580 {
581 "data/test-diff-pkg/PR24410-old/poppler-qt5-0.73.0-4.fc30.x86_64.rpm",
582 "data/test-diff-pkg/PR24410-new/poppler-qt5-0.73.0-8.fc30.x86_64.rpm",
583 "--fail-no-dbg",
584 "",
585 "data/test-diff-pkg/PR24410-old/poppler-debuginfo-0.73.0-4.fc30.x86_64.rpm, "
586 "data/test-diff-pkg/PR24410-old/poppler-qt5-debuginfo-0.73.0-4.fc30.x86_64.rpm",
587 "data/test-diff-pkg/PR24410-new/poppler-debuginfo-0.73.0-8.fc30.x86_64.rpm, "
588 "data/test-diff-pkg/PR24410-new/poppler-qt5-debuginfo-0.73.0-8.fc30.x86_64.rpm",
589 "data/test-diff-pkg/PR24410-old/poppler-qt5-devel-0.73.0-4.fc30.x86_64.rpm",
590 "data/test-diff-pkg/PR24410-new/poppler-qt5-devel-0.73.0-8.fc30.x86_64.rpm",
591 "data/test-diff-pkg/PR24410-report-0.txt",
592 "output/test-diff-pkg/PR24410-report-0.txt"
593 },
594 {
595 "data/test-diff-pkg/PR24690/flatpak-libs-1.2.4-3.fc30.x86_64.rpm",
596 "data/test-diff-pkg/PR24690/flatpak-libs-1.4.0-1.fc30.x86_64.rpm",
597 "--non-reachable-types",
598 "",
599 "data/test-diff-pkg/PR24690/flatpak-debuginfo-1.2.4-3.fc30.x86_64.rpm, "
600 "data/test-diff-pkg/PR24690/flatpak-libs-debuginfo-1.2.4-3.fc30.x86_64.rpm",
601 "data/test-diff-pkg/PR24690/flatpak-debuginfo-1.4.0-1.fc30.x86_64.rpm, "
602 "data/test-diff-pkg/PR24690/flatpak-libs-debuginfo-1.4.0-1.fc30.x86_64.rpm",
603 "data/test-diff-pkg/PR24690/flatpak-devel-1.2.4-3.fc30.x86_64.rpm",
604 "data/test-diff-pkg/PR24690/flatpak-devel-1.4.0-1.fc30.x86_64.rpm",
605 "data/test-diff-pkg/PR24690/PR24690-report-0.txt",
606 "output/test-diff-pkg/PR24690/PR24690-report-0.txt"
607 },
608 #if WITH_RPM_ZSTD
609 // RPMs from Fedora 31 onwards are compressed with zstd.
610 {
611 "data/test-diff-pkg/mesa-libGLU-9.0.1-3.fc33.x86_64.rpm",
612 "data/test-diff-pkg/mesa-libGLU-9.0.1-3.fc33.x86_64.rpm",
613 "--self-check",
614 "",
615 "data/test-diff-pkg/mesa-libGLU-debuginfo-9.0.1-3.fc33.x86_64.rpm",
616 "data/test-diff-pkg/mesa-libGLU-debuginfo-9.0.1-3.fc33.x86_64.rpm",
617 "",
618 "",
619 "data/test-diff-pkg/mesa-libGLU-9.0.1-3.fc33.x86_64.self-check-report-0.txt",
620 "output/test-diff-pkg/mesa-libGLU-9.0.1-3.fc33.x86_64.self-check-report-0.txt"
621 },
622 {
623 "data/test-diff-pkg/hdf5-1.10.6-2.fc33.x86_64.rpm",
624 "data/test-diff-pkg/hdf5-1.10.6-2.fc33.x86_64.rpm",
625 "--self-check",
626 "",
627 "data/test-diff-pkg/hdf5-debuginfo-1.10.6-2.fc33.x86_64.rpm",
628 "data/test-diff-pkg/hdf5-debuginfo-1.10.6-2.fc33.x86_64.rpm",
629 "",
630 "",
631 "data/test-diff-pkg/hdf5-1.10.6-2.fc33.x86_64.self-check-report-0.txt",
632 "output/test-diff-pkg/hdf5-1.10.6-2.fc33.x86_64.self-check-report-0.txt"
633 },
634 {
635 "data/test-diff-pkg/cogl-1.22.8-2.fc33.x86_64.rpm",
636 "data/test-diff-pkg/cogl-1.22.8-2.fc33.x86_64.rpm",
637 "--self-check",
638 "",
639 "data/test-diff-pkg/cogl-debuginfo-1.22.8-2.fc33.x86_64.rpm",
640 "data/test-diff-pkg/cogl-debuginfo-1.22.8-2.fc33.x86_64.rpm",
641 "",
642 "",
643 "data/test-diff-pkg/cogl-1.22.8-2.fc33.x86_64.self-check-report-0.txt",
644 "output/test-diff-pkg/cogl-1.22.8-2.fc33.x86_64.self-check-report-0.txt"
645 }
646 ,
647 {
648 "data/test-diff-pkg/glibc-2.32-3.fc33.aarch64.rpm",
649 "data/test-diff-pkg/glibc-2.32-3.fc33.aarch64.rpm",
650 "--self-check",
651 "",
652 "data/test-diff-pkg/glibc-debuginfo-2.32-3.fc33.aarch64.rpm",
653 "data/test-diff-pkg/glibc-debuginfo-2.32-3.fc33.aarch64.rpm",
654 "",
655 "",
656 "data/test-diff-pkg/glibc-2.32-3.fc33.aarch64-self-check-report-0.txt",
657 "output/test-diff-pkg/glibc-2.32-3.fc33.aarch64-self-check-report-0.txt"
658 }
659 ,
660 {
661 "data/test-diff-pkg/sshpass-1.07-1.fc34.x86_64.rpm",
662 "data/test-diff-pkg/sshpass-1.07-1.fc34.x86_64.rpm",
663 "--self-check",
664 "",
665 "data/test-diff-pkg/sshpass-debuginfo-1.07-1.fc34.x86_64.rpm",
666 "data/test-diff-pkg/sshpass-debuginfo-1.07-1.fc34.x86_64.rpm",
667 "",
668 "",
669 "data/test-diff-pkg/sshpass-1.07-1.fc34.x86_64-self-check-report-0.txt",
670 "output/test-diff-pkg/sshpass-1.07-1.fc34.x86_64-self-check-report-0.txt"
671 },
672 {
673 "data/test-diff-pkg/nmap-7.70-5.el8_testjcc.x86_64.rpm",
674 "data/test-diff-pkg/nmap-7.70-5.el8_testjcc.x86_64.rpm",
675 "--self-check",
676 "",
677 "data/test-diff-pkg/nmap-debuginfo-7.70-5.el8_testjcc.x86_64.rpm",
678 "data/test-diff-pkg/nmap-debuginfo-7.70-5.el8_testjcc.x86_64.rpm",
679 "",
680 "",
681 "data/test-diff-pkg/nmap-7.70-5.el8_testjcc.x86_64-self-check-report-0.txt",
682 "output/test-diff-pkg/nmap-7.70-5.el8_testjcc.x86_64-self-check-report-0.txt"
683 } ,
684 {
685 "data/test-diff-pkg/elfutils-libs-0.183-1.el9.x86_64.rpm",
686 "data/test-diff-pkg/elfutils-libs-0.183-1.el9.x86_64.rpm",
687 "--self-check",
688 "",
689 "data/test-diff-pkg/elfutils-debuginfo-0.183-1.el9.x86_64.rpm,"
690 "data/test-diff-pkg/elfutils-libs-debuginfo-0.183-1.el9.x86_64.rpm",
691 "data/test-diff-pkg/elfutils-debuginfo-0.183-1.el9.x86_64.rpm,"
692 "data/test-diff-pkg/elfutils-libs-debuginfo-0.183-1.el9.x86_64.rpm",
693 "",
694 "",
695 "data/test-diff-pkg/elfutils-libs-debuginfo-0.183-1.el9.x86_64-self-check-report-0.txt",
696 "output/test-diff-pkg/elfutils-libs-debuginfo-0.183-1.el9.x86_64-self-check-report-0.txt"
697 } ,
698 {
699 "data/test-diff-pkg/graphviz-2.44.0-18.el9.aarch64.rpm",
700 "data/test-diff-pkg/graphviz-2.44.0-18.el9.aarch64.rpm",
701 "--self-check",
702 "",
703 "data/test-diff-pkg/graphviz-debuginfo-2.44.0-18.el9.aarch64.rpm",
704 "data/test-diff-pkg/graphviz-debuginfo-2.44.0-18.el9.aarch64.rpm",
705 "",
706 "",
707 "data/test-diff-pkg/graphviz-2.44.0-18.el9.aarch64-self-check-report-0.txt",
708 "output/test-diff-pkg/graphviz-2.44.0-18.el9.aarch64-self-check-report-0.txt"
709 } ,
710 {
711 "data/test-diff-pkg/libxcrypt-4.1.1-6.el8.x86_64.rpm",
712 "data/test-diff-pkg/libxcrypt-4.4.18-3.el9.x86_64.rpm",
713 "",
714 "",
715 "data/test-diff-pkg/libxcrypt-debuginfo-4.1.1-6.el8.x86_64.rpm",
716 "data/test-diff-pkg/libxcrypt-debuginfo-4.4.18-3.el9.x86_64.rpm",
717 "",
718 "",
719 "data/test-diff-pkg/libxcrypt-4.1.1-6.el8.x86_64--libxcrypt-4.1.1-6.el8.x86_64-output-1.txt",
720 "output/test-diff-pkg/libxcrypt-4.1.1-6.el8.x86_64--libxcrypt-4.1.1-6.el8.x86_64-output-1.txt"
721 } ,
722 {
723 "data/test-diff-pkg/libxcrypt-4.1.1-6.el8.x86_64.rpm",
724 "data/test-diff-pkg/libxcrypt-compat-4.4.18-3.el9.x86_64.rpm",
725 "",
726 "",
727 "data/test-diff-pkg/libxcrypt-debuginfo-4.1.1-6.el8.x86_64.rpm",
728 "data/test-diff-pkg/libxcrypt-debuginfo-4.4.18-3.el9.x86_64.rpm,"
729 "data/test-diff-pkg/libxcrypt-compat-debuginfo-4.4.18-3.el9.x86_64.rpm",
730 "",
731 "",
732 "data/test-diff-pkg/libxcrypt-4.1.1-6.el8.x86_64--libxcrypt-compat-4.4.18-3.el9.x86_64-report-1.txt",
733 "output/test-diff-pkg/libxcrypt-4.1.1-6.el8.x86_64--libxcrypt-compat-4.4.18-3.el9.x86_64-report-1.txt"
734 } ,
735 {
736 "data/test-diff-pkg/wireshark/wireshark-cli-3.4.9-1.fc36.x86_64.rpm",
737 "data/test-diff-pkg/wireshark/wireshark-cli-3.4.9-1.fc36.x86_64.rpm",
738 "--self-check",
739 "",
740 "data/test-diff-pkg/wireshark/wireshark-cli-debuginfo-3.4.9-1.fc36.x86_64.rpm,"
741 "data/test-diff-pkg/wireshark/wireshark-debuginfo-3.4.9-1.fc36.x86_64.rpm",
742 "data/test-diff-pkg/wireshark/wireshark-cli-debuginfo-3.4.9-1.fc36.x86_64.rpm,"
743 "data/test-diff-pkg/wireshark/wireshark-debuginfo-3.4.9-1.fc36.x86_64.rpm",
744 "",
745 "",
746 "data/test-diff-pkg/wireshark/wireshark-cli-3.4.9-1.fc36.x86_64-self-check-report.txt",
747 "output/test-diff-pkg/wireshark/wireshark-cli-3.4.9-1.fc36.x86_64-self-check-report.txt"
748 } ,
749 #endif // WITH_RPM_ZSTD
750 #endif //WITH_RPM
751
752 #ifdef WITH_DEB
753 // Two debian packages.
754 {
755 "data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64.deb",
756 "data/test-diff-pkg/libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64.deb",
757 "--no-default-suppression --no-show-locs --fail-no-dbg",
758 "",
759 "data/test-diff-pkg/libsigc++-2.0-0c2a-dbgsym_2.4.0-1_amd64.ddeb",
760 "data/test-diff-pkg/libsigc++-2.0-0v5-dbgsym_2.4.1-1ubuntu2_amd64.ddeb",
761 "",
762 "",
763 "data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt",
764 "output/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt"
765 },
766 #endif // WITH_DEB
767 #ifdef WITH_CTF
768 // Specific test entries for CTF.
769
770 // dir1 contains a suppr spec - it should be ignored.
771 {
772 "data/test-diff-pkg-ctf/dirpkg-0-dir1",
773 "data/test-diff-pkg-ctf/dirpkg-0-dir2",
774 "--ctf --no-default-suppression",
775 "",
776 "",
777 "",
778 "",
779 "",
780 "data/test-diff-pkg-ctf/dirpkg-0-report-0.txt",
781 "output/test-diff-pkg-ctf/dirpkg-0-report-0.txt"
782 },
783 // dir2 contains a suppr spec - it should be recognized.
784 {
785 "data/test-diff-pkg-ctf/dirpkg-1-dir1",
786 "data/test-diff-pkg-ctf/dirpkg-1-dir2",
787 "--ctf --no-default-suppression",
788 "",
789 "",
790 "",
791 "",
792 "",
793 "data/test-diff-pkg-ctf/dirpkg-1-report-0.txt",
794 "output/test-diff-pkg-ctf/dirpkg-1-report-0.txt"
795 },
796 // dir2 contains a suppr spec but --no-abignore is specified,
797 // the file should be ignored.
798 {
799 "data/test-diff-pkg-ctf/dirpkg-1-dir1",
800 "data/test-diff-pkg-ctf/dirpkg-1-dir2",
801 "--ctf --no-default-suppression --no-abignore",
802 "",
803 "",
804 "",
805 "",
806 "",
807 "data/test-diff-pkg-ctf/dirpkg-1-report-1.txt",
808 "output/test-diff-pkg-ctf/dirpkg-1-report-1.txt"
809 },
810 // dir2 contains several suppr spec files, ".abignore" and
811 // "dir.abignore", so the specs should be merged.
812 {
813 "data/test-diff-pkg-ctf/dirpkg-2-dir1",
814 "data/test-diff-pkg-ctf/dirpkg-2-dir2",
815 "--ctf --no-default-suppression",
816 "",
817 "",
818 "",
819 "",
820 "",
821 "data/test-diff-pkg-ctf/dirpkg-2-report-0.txt",
822 "output/test-diff-pkg-ctf/dirpkg-2-report-0.txt"
823 },
824 // dir2 contains a suppr spec file, ".abignore" and
825 // an additional suppr file is specified on the command line,
826 // so the specs should be merged.
827 {
828 "data/test-diff-pkg-ctf/dirpkg-3-dir1",
829 "data/test-diff-pkg-ctf/dirpkg-3-dir2",
830 "--ctf --no-default-suppression",
831 "data/test-diff-pkg-ctf/dirpkg-3.suppr",
832 "",
833 "",
834 "",
835 "",
836 "data/test-diff-pkg-ctf/dirpkg-3-report-0.txt",
837 "output/test-diff-pkg-ctf/dirpkg-3-report-0.txt"
838 },
839 // dir2 contains a suppr spec file, ".abignore", which should
840 // be ignored because of the program options and
841 // an additional suppr file is specified on the command line,
842 // which should be recognized.
843 {
844 "data/test-diff-pkg-ctf/dirpkg-3-dir1",
845 "data/test-diff-pkg-ctf/dirpkg-3-dir2",
846 "--ctf --no-default-suppression --no-abignore",
847 "data/test-diff-pkg-ctf/dirpkg-3.suppr",
848 "",
849 "",
850 "",
851 "",
852 "data/test-diff-pkg-ctf/dirpkg-3-report-1.txt",
853 "output/test-diff-pkg-ctf/dirpkg-3-report-1.txt"
854 },
855 { // Just like the previous tests, but loc info is emitted.
856 "data/test-diff-pkg-ctf/dirpkg-3-dir1",
857 "data/test-diff-pkg-ctf/dirpkg-3-dir2",
858 "--ctf --no-default-suppression --no-abignore",
859 "data/test-diff-pkg-ctf/dirpkg-3.suppr",
860 "",
861 "",
862 "",
863 "",
864 "data/test-diff-pkg-ctf/dirpkg-3-report-2.txt",
865 "output/test-diff-pkg-ctf/dirpkg-3-report-2.txt"
866 },
867 {
868 "data/test-diff-pkg-ctf/symlink-dir-test1/dir1/symlinks",
869 "data/test-diff-pkg-ctf/symlink-dir-test1/dir2/symlinks",
870 "--ctf --no-default-suppression ",
871 "",
872 "",
873 "",
874 "",
875 "",
876 "data/test-diff-pkg-ctf/symlink-dir-test1-report0.txt ",
877 "output/test-diff-pkg-ctf/symlink-dir-test1-report0.txt "
878 },
879 #if WITH_TAR
880 {
881 "data/test-diff-pkg-ctf/tarpkg-0-dir1.tar",
882 "data/test-diff-pkg-ctf/tarpkg-0-dir2.tar",
883 "--ctf --no-default-suppression",
884 "",
885 "",
886 "",
887 "",
888 "",
889 "data/test-diff-pkg-ctf/tarpkg-0-report-0.txt",
890 "output/test-diff-pkg-ctf/tarpkg-0-report-0.txt"
891 },
892 {
893 "data/test-diff-pkg-ctf/tarpkg-0-dir1.ta",
894 "data/test-diff-pkg-ctf/tarpkg-0-dir2.ta",
895 "--ctf --no-default-suppression",
896 "",
897 "",
898 "",
899 "",
900 "",
901 "data/test-diff-pkg-ctf/tarpkg-0-report-0.txt",
902 "output/test-diff-pkg-ctf/tarpkg-0-report-01.txt"
903 },
904 {
905 "data/test-diff-pkg-ctf/tarpkg-0-dir1.tar.gz",
906 "data/test-diff-pkg-ctf/tarpkg-0-dir2.tar.gz",
907 "--ctf --no-default-suppression",
908 "",
909 "",
910 "",
911 "",
912 "",
913 "data/test-diff-pkg-ctf/tarpkg-0-report-0.txt",
914 "output/test-diff-pkg-ctf/tarpkg-0-report-02.txt"
915 },
916 {
917 "data/test-diff-pkg-ctf/tarpkg-0-dir1.tar.bz2",
918 "data/test-diff-pkg-ctf/tarpkg-0-dir2.tar.bz2",
919 "--ctf --no-default-suppression",
920 "",
921 "",
922 "",
923 "",
924 "",
925 "data/test-diff-pkg-ctf/tarpkg-0-report-0.txt",
926 "output/test-diff-pkg-ctf/tarpkg-0-report-03.txt"
927 },
928 {
929 "data/test-diff-pkg-ctf/tarpkg-1-dir1.tar.gz",
930 "data/test-diff-pkg-ctf/tarpkg-1-dir2.tar.gz",
931 "--ctf --no-default-suppression --dso-only",
932 "",
933 "",
934 "",
935 "",
936 "",
937 "data/test-diff-pkg-ctf/tarpkg-1-report-0.txt",
938 "output/test-diff-pkg-ctf/tarpkg-1-report-0.txt"
939 },
940 #endif //WITH_TAR
941 #ifdef WITH_RPM
942 // Two RPM packages with CTF debuginfo available and have ABI changes
943 {
944 "data/test-diff-pkg-ctf/libdwarf-20180129-4.x86_64.rpm",
945 "data/test-diff-pkg-ctf/libdwarf-20180129-5.x86_64.rpm",
946 "--ctf --no-default-suppression --private-dso",
947 "",
948 "",
949 "",
950 "",
951 "",
952 "data/test-diff-pkg-ctf/test-rpm-report-0.txt",
953 "output/test-diff-pkg-ctf/test-rpm-report-0.txt"
954 },
955 // Two RPM packages with 2nd package debuginfo missing (no -gctf)
956 {
957 "data/test-diff-pkg-ctf/libdwarf-20180129-4.x86_64.rpm",
958 "data/test-diff-pkg-ctf/libdwarf-20180129-5-no-ctf.x86_64.rpm",
959 "--ctf --no-default-suppression --private-dso",
960 "",
961 "",
962 "",
963 "",
964 "",
965 "data/test-diff-pkg-ctf/test-rpm-report-1.txt",
966 "output/test-diff-pkg-ctf/test-rpm-report-1.txt"
967 },
968
969 // Two RPM packages with first package debuginfo missing (no -gctf)
970 {
971 "data/test-diff-pkg-ctf/libdwarf-20180129-5-no-ctf.x86_64.rpm",
972 "data/test-diff-pkg-ctf/libdwarf-20180129-4.x86_64.rpm",
973 "--ctf --no-default-suppression --private-dso",
974 "",
975 "",
976 "",
977 "",
978 "",
979 "data/test-diff-pkg-ctf/test-rpm-report-2.txt",
980 "output/test-diff-pkg-ctf/test-rpm-report-2.txt"
981 },
982
983 // Two RPM packages with missing debuginfo
984 {
985 "data/test-diff-pkg-ctf/libdwarf-20180129-5-no-ctf.x86_64.rpm",
986 "data/test-diff-pkg-ctf/libdwarf-20180129-4-no-ctf.x86_64.rpm",
987 "--ctf --no-default-suppression",
988 "",
989 "",
990 "",
991 "",
992 "",
993 "data/test-diff-pkg-ctf/test-rpm-report-3.txt",
994 "output/test-diff-pkg-ctf/test-rpm-report-3.txt"
995 },
996
997 // Two RPM packages with no ABI change
998 {
999 "data/test-diff-pkg-ctf/libdwarf-20180129-4.x86_64.rpm",
1000 "data/test-diff-pkg-ctf/libdwarf-20180129-4.x86_64.rpm",
1001 "--ctf --no-default-suppression",
1002 "",
1003 "",
1004 "",
1005 "",
1006 "",
1007 "data/test-diff-pkg-ctf/test-rpm-report-4.txt",
1008 "output/test-diff-pkg-ctf/test-rpm-report-4.txt"
1009 },
1010 // Two RPM packages with debuginfo available and we don't want to
1011 // see added symbols.
1012 {
1013 "data/test-diff-pkg-ctf/libdwarf-20180129-4.x86_64.rpm",
1014 "data/test-diff-pkg-ctf/libdwarf-20180129-5.x86_64.rpm",
1015 "--ctf --no-default-suppression --no-added-syms",
1016 "",
1017 "",
1018 "",
1019 "",
1020 "",
1021 "data/test-diff-pkg-ctf/test-rpm-report-5.txt",
1022 "output/test-diff-pkg-ctf/test-rpm-report-5.txt"
1023 },
1024 {
1025 "data/test-diff-pkg-ctf/elfutils-libelf-0.186-1.x86_64.rpm",
1026 "data/test-diff-pkg-ctf/elfutils-libelf-0.186-2.x86_64.rpm",
1027 "--ctf --no-default-suppression --no-added-syms",
1028 "",
1029 "",
1030 "",
1031 "",
1032 "",
1033 "data/test-diff-pkg-ctf/elfutils-libelf-0.186-report-0.txt",
1034 "output/test-diff-pkg-ctf/elfutils-libelf-0.186-report-0.txt"
1035 },
1036 {
1037 "data/test-diff-pkg-ctf/elfutils-libelf-0.186-1.x86_64.rpm",
1038 "data/test-diff-pkg-ctf/elfutils-libelf-0.186-2.x86_64.rpm",
1039 "--ctf",
1040 "",
1041 "",
1042 "",
1043 "",
1044 "",
1045 "data/test-diff-pkg-ctf/elfutils-libelf-0.186-report-1.txt",
1046 "output/test-diff-pkg-ctf/elfutils-libelf-0.186-report-1.txt"
1047 },
1048 {
1049 "data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8u0.x86_64.rpm",
1050 "data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8u6.x86_64.rpm",
1051 "--ctf",
1052 "",
1053 "",
1054 "",
1055 "",
1056 "",
1057 "data/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8.x86_64-report-0.txt",
1058 "output/test-diff-pkg-ctf/cracklib-2.9.6-15-ol8.x86_64-report-0.txt"
1059 },
1060 {
1061 "data/test-diff-pkg-ctf/gmp-6.1.2-8-ol8u0.x86_64.rpm",
1062 "data/test-diff-pkg-ctf/gmp-6.2.0-10-ol9u0.x86_64.rpm",
1063 "--ctf --no-default-suppression",
1064 "",
1065 "",
1066 "",
1067 "",
1068 "",
1069 "data/test-diff-pkg-ctf/gmp-6.x.x86_64-report-0.txt",
1070 "output/test-diff-pkg-ctf/gmp-6.x.x86_64-report-0.txt"
1071 },
1072 // Even when CTF is thinking to be resided along with binary
1073 // files, it could be stripped out in an external location.
1074 {
1075 "data/test-diff-pkg-ctf/isl-0.16.1-6.x86_64.rpm",
1076 "data/test-diff-pkg-ctf/isl-0.16.1-7.x86_64.rpm",
1077 "--ctf --no-default-suppression",
1078 "",
1079 "data/test-diff-pkg-ctf/isl-debuginfo-0.16.1-6.x86_64.rpm",
1080 "data/test-diff-pkg-ctf/isl-debuginfo-0.16.1-7.x86_64.rpm",
1081 "",
1082 "",
1083 "data/test-diff-pkg-ctf/isl-0.16.1-report-0.txt",
1084 "output/test-diff-pkg-ctf/isl-0.16.1-report-0.txt"
1085 },
1086 #endif //WITH_RPM
1087 #endif //WITH_CTF
1088 // This should be the last entry.
1089 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
1090 };
1091
1092 /// A task which launches abipkgdiff on the binaries passed to the
1093 /// constructor of the task. The test also launches gnu diff on the
1094 /// result of abipkdiff to compare it against a reference abipkgdiff
1095 /// result.
1096 struct test_task : public abigail::workers::task
1097 {
1098 InOutSpec spec;
1099 bool is_ok;
1100 string diff_cmd;
1101 string error_message;
1102
test_tasktest_task1103 test_task(const InOutSpec& s)
1104 : spec(s),
1105 is_ok(true)
1106 {}
1107
1108 /// This virtual function overload actually performs the job of the
1109 /// task.
1110 ///
1111 /// It actually launches abipkgdiff on the binaries passed to the
1112 /// constructor of the task. It also launches gnu diff on the
1113 /// result of the abidiff to compare it against a reference abidiff
1114 /// result.
1115 virtual void
performtest_task1116 perform()
1117 {
1118 using abigail::tests::get_build_dir;
1119 using abigail::tools_utils::ensure_parent_dir_created;
1120
1121 string first_in_package_path, second_in_package_path,
1122 prog_options,
1123 ref_abi_diff_report_path, out_abi_diff_report_path, cmd, abipkgdiff,
1124 first_in_devel_package_path, second_in_devel_package_path,
1125 suppression_path;
1126 vector<string> first_in_debug_package_paths, second_in_debug_package_paths;
1127
1128 first_in_package_path =
1129 string(get_src_dir()) + "/tests/" + spec.first_in_package_path;
1130 second_in_package_path =
1131 string(get_src_dir()) + "/tests/" + spec.second_in_package_path;
1132
1133 prog_options = spec.prog_options;
1134
1135 if (spec.first_in_debug_package_path
1136 && strcmp(spec.first_in_debug_package_path, ""))
1137 {
1138 vector<string> debug_info_pkg_paths;
1139 split_string(spec.first_in_debug_package_path, ", ",
1140 debug_info_pkg_paths);
1141 ABG_ASSERT(!debug_info_pkg_paths.empty());
1142 for (vector<string>::const_iterator s = debug_info_pkg_paths.begin();
1143 s != debug_info_pkg_paths.end();
1144 ++s)
1145 first_in_debug_package_paths.push_back(string(get_src_dir()) +
1146 "/tests/" + *s);
1147 }
1148 else
1149 first_in_debug_package_paths.clear();
1150
1151 if (spec.second_in_debug_package_path
1152 && strcmp(spec.second_in_debug_package_path, ""))
1153 {
1154 vector<string> debug_info_pkg_paths;
1155 split_string(spec.second_in_debug_package_path,
1156 ", ",
1157 debug_info_pkg_paths);
1158 ABG_ASSERT(!debug_info_pkg_paths.empty());
1159 for (vector<string>::const_iterator s = debug_info_pkg_paths.begin();
1160 s != debug_info_pkg_paths.end();
1161 ++s)
1162 second_in_debug_package_paths.push_back(string(get_src_dir()) +
1163 "/tests/" + *s);
1164 }
1165 else
1166 second_in_debug_package_paths.clear();
1167
1168 if (spec.first_in_devel_package_path
1169 && strcmp(spec.first_in_devel_package_path, ""))
1170 first_in_devel_package_path =
1171 string(get_src_dir()) + "/tests/" + spec.first_in_devel_package_path;
1172
1173 if (spec.second_in_devel_package_path
1174 && strcmp(spec.second_in_devel_package_path, ""))
1175 second_in_devel_package_path =
1176 string(get_src_dir()) + "/tests/" + spec.second_in_devel_package_path;
1177
1178 if (spec.suppression_path
1179 && strcmp(spec.suppression_path, ""))
1180 suppression_path =
1181 string(get_src_dir()) + "/tests/" + spec.suppression_path;
1182 else
1183 suppression_path.clear();
1184
1185 ref_abi_diff_report_path =
1186 string(get_src_dir()) + "/tests/" + spec.ref_report_path;
1187 out_abi_diff_report_path =
1188 string(get_build_dir()) + "/tests/" + spec.out_report_path;
1189
1190 if (!ensure_parent_dir_created(out_abi_diff_report_path))
1191 {
1192 cerr << "could not create parent directory for "
1193 << out_abi_diff_report_path;
1194 is_ok = false;
1195 return;
1196 }
1197
1198 abipkgdiff = string(get_build_dir()) + "/tools/abipkgdiff";
1199
1200 if (!prog_options.empty())
1201 abipkgdiff += " " + prog_options;
1202
1203 for (vector<string>::const_iterator p =
1204 first_in_debug_package_paths.begin();
1205 p != first_in_debug_package_paths.end();
1206 ++p)
1207 abipkgdiff += " --d1 " + *p;
1208
1209 for (vector<string>::const_iterator p =
1210 second_in_debug_package_paths.begin();
1211 p != second_in_debug_package_paths.end();
1212 ++p)
1213 abipkgdiff += " --d2 " + *p;
1214
1215 if (!first_in_devel_package_path.empty())
1216 abipkgdiff += " --devel1 " + first_in_devel_package_path;
1217
1218 if (!second_in_devel_package_path.empty())
1219 abipkgdiff += " --devel2 " + second_in_devel_package_path;
1220
1221 if (!suppression_path.empty())
1222 abipkgdiff += " --suppressions " + suppression_path;
1223
1224 cmd =
1225 abipkgdiff + " " + first_in_package_path + " " + second_in_package_path;
1226 cmd += " > " + out_abi_diff_report_path + " 2>&1";
1227
1228 bool abipkgdiff_ok = true;
1229 int code = system(cmd.c_str());
1230 if (!WIFEXITED(code))
1231 abipkgdiff_ok = false;
1232
1233 if (abipkgdiff_ok)
1234 {
1235 cmd = "diff -u " + ref_abi_diff_report_path + " "
1236 + out_abi_diff_report_path;
1237 if (system(cmd.c_str()))
1238 is_ok = false;
1239 }
1240 else
1241 is_ok = false;
1242 }
1243 }; // end struct test_task
1244
1245 /// A convenience typedef for shared
1246 typedef shared_ptr<test_task> test_task_sptr;
1247
1248 int
main()1249 main()
1250 {
1251 using std::vector;
1252 using std::dynamic_pointer_cast;
1253 using abigail::workers::queue;
1254 using abigail::workers::task;
1255 using abigail::workers::task_sptr;
1256 using abigail::workers::get_number_of_threads;
1257
1258 /// Create a task queue. The max number of worker threads of the
1259 /// queue is the number of the concurrent threads supported by the
1260 /// processor of the machine this code runs on.
1261 const size_t num_tests = sizeof(in_out_specs) / sizeof (InOutSpec) - 1;
1262 size_t num_workers = std::min(get_number_of_threads(), num_tests);
1263 queue task_queue(num_workers);
1264
1265 bool is_ok = true;
1266
1267 for (InOutSpec *s = in_out_specs; s->first_in_package_path; ++s)
1268 {
1269 test_task_sptr t(new test_task(*s));
1270 ABG_ASSERT(task_queue.schedule_task(t));
1271 }
1272
1273 /// Wait for all worker threads to finish their job, and wind down.
1274 task_queue.wait_for_workers_to_complete();
1275
1276 // Now walk the results and print whatever error messages need to be
1277 // printed.
1278
1279 const vector<task_sptr>& completed_tasks =
1280 task_queue.get_completed_tasks();
1281 ABG_ASSERT(completed_tasks.size() == num_tests);
1282
1283 for (vector<task_sptr>::const_iterator ti = completed_tasks.begin();
1284 ti != completed_tasks.end();
1285 ++ti)
1286 {
1287 test_task_sptr t = dynamic_pointer_cast<test_task>(*ti);
1288 if (!t->is_ok)
1289 {
1290 is_ok = false;
1291 if (!t->diff_cmd.empty())
1292 if (system(t->diff_cmd.c_str()) == -1)
1293 cerr << "execution of '" << t->diff_cmd << "' failed\n";
1294 if (!t->error_message.empty())
1295 cerr << t->error_message << '\n';
1296 }
1297 }
1298
1299 return !is_ok;
1300 }
1301