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 33using std::string; 34using std::vector; 35using std::cerr; 36using abigail::tests::get_src_dir; 37using abigail::tools_utils::split_string; 38 39struct 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 53static 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. 1096struct test_task : public abigail::workers::task 1097{ 1098 InOutSpec spec; 1099 bool is_ok; 1100 string diff_cmd; 1101 string error_message; 1102 1103 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 1116 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 1246typedef shared_ptr<test_task> test_task_sptr; 1247 1248int 1249main() 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