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