1# rpmverify.at: rpm verification tests 2 3AT_BANNER([RPM verification]) 4 5# ------------------------------ 6# 7AT_SETUP([dependency problems]) 8AT_KEYWORDS([verify]) 9AT_CHECK([ 10RPMDB_INIT 11 12runroot rpmbuild --quiet -bb \ 13 --define "pkg one" \ 14 --define "reqs deptest-two" \ 15 /data/SPECS/deptest.spec 16 17runroot rpm -U --nodeps /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm 18runroot rpm -Va --nofiles 19], 20[1], 21[Unsatisfied dependencies for deptest-one-1.0-1.noarch: 22 deptest-two is needed by (installed) deptest-one-1.0-1.noarch 23], 24[]) 25AT_CLEANUP 26 27# Test file verify when no errors expected. 28# Ignore dependencies here as we're not testing for them, and 29# --nogroup --nouser is required when running tests as non-root. 30AT_SETUP([files with no problems]) 31AT_KEYWORDS([verify]) 32AT_CHECK([ 33RPMDB_INIT 34 35runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \ 36 /data/RPMS/hello-1.0-1.i386.rpm 37runroot rpm -Va --nodeps --nouser --nogroup 38], 39[0], 40[], 41[]) 42AT_CLEANUP 43 44# Test file verify when no errors expected in verbose mode. 45AT_SETUP([files with no problems in verbose mode]) 46AT_KEYWORDS([verify]) 47AT_CHECK([ 48RPMDB_INIT 49 50runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \ 51 /data/RPMS/hello-1.0-1.i386.rpm 52runroot rpm -Vva --nodeps --nouser --nogroup 53], 54[0], 55[......... /usr/local/bin/hello 56......... /usr/share/doc/hello-1.0 57......... d /usr/share/doc/hello-1.0/FAQ 58], 59[]) 60AT_CLEANUP 61 62# Test file verify when no errors expected in verbose mode. 63AT_SETUP([directory replaced with a directory symlink]) 64AT_KEYWORDS([verify]) 65AT_CHECK([ 66RPMDB_INIT 67tf="${RPMTEST}"/opt/foo 68rm -rf "${RPMTEST}"/opt/* 69 70runroot rpmbuild --quiet -bb \ 71 --define "ver 1.0" \ 72 --define "filetype datadir" \ 73 --define "filedata README1" \ 74 --define "user $(id -u -n)" \ 75 --define "grp $(id -g -n)" \ 76 /data/SPECS/replacetest.spec 77 78runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm 79mv "${RPMTEST}"/opt/foo "${RPMTEST}"/opt/was 80ln -s was "${RPMTEST}"/opt/foo 81runroot rpm -Vv replacetest 82], 83[0], 84[......... /opt/foo 85......... /opt/foo/README1 86......... /opt/goo 87......... /opt/zoo 88], 89[]) 90AT_CLEANUP 91 92AT_SETUP([directory replaced with an invalid directory symlink]) 93AT_KEYWORDS([verify]) 94AT_XFAIL_IF([test `id -u` != 0 ]) 95AT_CHECK([ 96RPMDB_INIT 97tf="${RPMTEST}"/opt/foo 98rm -rf "${RPMTEST}"/opt/* 99 100runroot rpmbuild --quiet -bb \ 101 --define "ver 1.0" \ 102 --define "filetype datadir" \ 103 --define "filedata README1" \ 104 /data/SPECS/replacetest.spec 105 106runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm 107mv "${RPMTEST}"/opt/foo "${RPMTEST}"/opt/was 108ln -s was "${RPMTEST}"/opt/foo 109chown -h bin "${RPMTEST}"/opt/foo 110runroot rpm -Vv --nouser --nogroup replacetest 111], 112[1], 113[....L.... /opt/foo 114......... /opt/foo/README1 115......... /opt/goo 116......... /opt/zoo 117], 118[]) 119AT_CLEANUP 120 121# Test file verify after mutilating the files a bit. 122AT_SETUP([verify from db, with problems present]) 123AT_KEYWORDS([verify]) 124AT_CHECK([ 125RPMDB_INIT 126 127runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \ 128 /data/RPMS/hello-1.0-1.i386.rpm 129rm -f "${RPMTEST}"/usr/share/doc/hello-1.0/FAQ 130chmod u-x "${RPMTEST}"/usr/local/bin/hello 131dd if=/dev/zero of="${RPMTEST}"/usr/local/bin/hello \ 132 conv=notrunc bs=1 seek=5 count=6 2> /dev/null 133runroot rpm -Va --nodeps --nouser --nogroup 134], 135[1], 136[.M5....T. /usr/local/bin/hello 137missing d /usr/share/doc/hello-1.0/FAQ 138], 139[]) 140AT_CLEANUP 141 142# Test file verify from original package after mutilating the files a bit. 143AT_SETUP([verify from package, with problems present]) 144AT_KEYWORDS([verify]) 145AT_CHECK([ 146RPMDB_INIT 147 148runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \ 149 /data/RPMS/hello-1.0-1.i386.rpm 150rm -f "${RPMTEST}"/usr/share/doc/hello-1.0/FAQ 151chmod u-x "${RPMTEST}"/usr/local/bin/hello 152dd if=/dev/zero of="${RPMTEST}"/usr/local/bin/hello \ 153 conv=notrunc bs=1 seek=5 count=6 2> /dev/null 154runroot rpm -Vp --nodeps --nouser --nogroup /data/RPMS/hello-1.0-1.i386.rpm 155], 156[1], 157[.M5....T. /usr/local/bin/hello 158missing d /usr/share/doc/hello-1.0/FAQ 159], 160[]) 161AT_CLEANUP 162 163AT_SETUP([verify file attribute filtering]) 164AT_KEYWORDS([query]) 165AT_CHECK([ 166RPMDB_INIT 167 168runroot rpmbuild -bb --quiet \ 169 /data/SPECS/vattrtest.spec 170 171runroot rpm -U /build/RPMS/noarch/vattrtest-1.0-1.noarch.rpm 172runroot_other touch /opt/vattrtest/g 173runroot_other chmod 644 /opt/vattrtest/g 174 175cmd="rpm -Vv --nouser --nogroup" 176for filter in --noconfig --noghost --noartifact -A -c -d -L; do 177 echo ${filter} 178 runroot ${cmd} ${filter} vattrtest 179done 180], 181[ignore], 182[--noconfig 183......... /opt/vattrtest 184......... a /opt/vattrtest/a 185......... d /opt/vattrtest/d 186......... g /opt/vattrtest/g 187......... l /opt/vattrtest/l 188......... m /opt/vattrtest/m 189......... r /opt/vattrtest/r 190--noghost 191......... /opt/vattrtest 192......... a /opt/vattrtest/a 193......... c /opt/vattrtest/c 194......... c /opt/vattrtest/cn 195......... d /opt/vattrtest/d 196......... l /opt/vattrtest/l 197......... m /opt/vattrtest/m 198......... r /opt/vattrtest/r 199--noartifact 200......... /opt/vattrtest 201......... c /opt/vattrtest/c 202......... c /opt/vattrtest/cn 203......... d /opt/vattrtest/d 204......... g /opt/vattrtest/g 205......... l /opt/vattrtest/l 206......... m /opt/vattrtest/m 207......... r /opt/vattrtest/r 208-A 209......... a /opt/vattrtest/a 210-c 211......... c /opt/vattrtest/c 212......... c /opt/vattrtest/cn 213-d 214......... d /opt/vattrtest/d 215-L 216......... l /opt/vattrtest/l 217], 218[]) 219AT_CLEANUP 220 221# Test verify script success & failure behavior 222# Ignoring stderr spew for now 223AT_SETUP([verifyscript failure]) 224AT_KEYWORDS([verify]) 225AT_CHECK([ 226AT_SKIP_IF([$LUA_DISABLED]) 227RPMDB_INIT 228 229runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec 230runroot rpm -U --nodeps /build/RPMS/noarch/verifyscript-1.0-1.noarch.rpm 231rm -f "${RPMTEST}"/var/checkme 232runroot rpm -V --nodeps verifyscript 233], 234[1], 235[], 236[ignore]) 237AT_CLEANUP 238 239AT_SETUP([verifyscript success]) 240AT_KEYWORDS([verify]) 241AT_CHECK([ 242AT_SKIP_IF([$LUA_DISABLED]) 243RPMDB_INIT 244 245runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec 246runroot rpm -U --nodeps /build/RPMS/noarch/verifyscript-1.0-1.noarch.rpm 247touch "${RPMTEST}"/var/checkme 248runroot rpm -V --nodeps verifyscript 249], 250[0], 251[], 252[]) 253AT_CLEANUP 254 255# ------------------------------ 256# shared file timestamp behavior 257AT_SETUP([shared file timestamp behavior]) 258AT_KEYWORDS([verify]) 259AT_CHECK([ 260RPMDB_INIT 261 262# create packages sharing a file but with different timestamp 263for p in "one" "two"; do 264 runroot rpmbuild --quiet -bb \ 265 --define "pkg $p" \ 266 --define "filedata same_stuff" \ 267 /data/SPECS/conflicttest.spec 268 sleep 1 269done 270 271# first instance of a shared file is the one that actually gets created, 272# force the order so we know what to expect as these dont depend on each other 273runroot rpm -U --noorder /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm 274runroot rpm -e conflicttwo 275runroot rpm -Va --nouser --nogroup 276], 277[0], 278[], 279[]) 280AT_CLEANUP 281 282# ------------------------------ 283AT_SETUP([minimize writes (files)]) 284AT_KEYWORDS([upgrade verify min_writes]) 285RPMDB_INIT 286 287for v in "1.0" "2.0"; do 288 runroot rpmbuild --quiet -bb \ 289 --define "ver $v" \ 290 --define "filetype file" \ 291 --define "filedata foo" \ 292 /data/SPECS/replacetest.spec 293done 294 295for v in "3.0" "4.0"; do 296 runroot rpmbuild --quiet -bb \ 297 --define "ver $v" \ 298 --define "filetype file" \ 299 --define "filedata fox" \ 300 /data/SPECS/replacetest.spec 301done 302 303AT_CHECK([ 304RPMDB_INIT 305tf="${RPMTEST}"/opt/foo 306rm -rf "${tf}"* 307 308runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm 309cat "${tf}" 310touch -t 201703171717 ${tf} 311 312runroot rpm -U \ 313 --define "_minimize_writes 1" \ 314 /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm 315runroot rpm -Va --nouser --nogroup replacetest 316cat "${tf}" 317 318runroot rpm -U \ 319 --define "_minimize_writes 1" \ 320 /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm 321runroot rpm -Va --nouser --nogroup replacetest 322cat "${tf}" 323 324echo "xx" > "${tf}" 325cat "${tf}" 326 327runroot rpm -U \ 328 --define "_minimize_writes 1" \ 329 /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm 330runroot rpm -Va --nouser --nogroup replacetest 331cat "${tf}" 332 333touch -t 201703171717 ${tf} 334 335runroot rpm -U --oldpackage \ 336 --define "_minimize_writes 1" \ 337 /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm 338runroot rpm -Va --nouser --nogroup replacetest 339cat "${tf}" 340], 341[0], 342[foo 343foo 344fox 345xx 346fox 347fox 348], 349[]) 350 351AT_CHECK([ 352RPMDB_INIT 353tf="${RPMTEST}"/opt/foo 354rm -rf "${tf}"* 355 356runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm 357cat "${tf}" 358touch -t 201703171717 ${tf} 359 360runroot rpm -Uvv --fsmdebug \ 361 --define "_minimize_writes 1" \ 362 /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm > output.txt 2>&1 363runroot rpm -Va --nouser --nogroup replacetest 364grep -c "touch" output.txt 365cat "${tf}" 366 367 368runroot rpm -Uvv --fsmdebug \ 369 --define "_minimize_writes 1" \ 370 /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1 371runroot rpm -Va --nouser --nogroup replacetest 372grep -c "touch" output.txt 373cat "${tf}" 374echo "xx" > "${tf}" 375cat "${tf}" 376 377runroot rpm -Uvv --fsmdebug \ 378 --define "_minimize_writes 1" \ 379 /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm > output.txt 2>&1 380runroot rpm -Va --nouser --nogroup replacetest 381grep -c "touch" output.txt 382cat "${tf}" 383 384touch -t 201703171717 ${tf} 385 386runroot rpm -U -Uvv --fsmdebug --oldpackage \ 387 --define "_minimize_writes 1" \ 388 /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1 389runroot rpm -Va --nouser --nogroup replacetest 390grep -c "touch" output.txt 391cat "${tf}" 392], 393[0], 394[foo 3952 396foo 3971 398fox 399xx 4001 401fox 4022 403fox 404], 405[]) 406AT_CLEANUP 407 408AT_SETUP([minimize writes (hardlinks)]) 409AT_KEYWORDS([upgrade verify min_writes]) 410RPMDB_INIT 411for v in "0" "1"; do 412 runroot rpmbuild --quiet -bb --define "ver ${v}" /data/SPECS/hlbreak.spec 413done 414AT_CHECK([ 415RPMDB_INIT 416runroot rpm -U --define "_minimize_writes 1" /build/RPMS/noarch/hlbreak-0-0.noarch.rpm 417runroot rpm -Vav --nouser --nogroup 418runroot rpm -U --define "_minimize_writes 1" /build/RPMS/noarch/hlbreak-1-0.noarch.rpm 419runroot rpm -Vav --nouser --nogroup 420], 421[0], 422[......... /opt/file2 423......... /opt/file1 424......... /opt/file2 425], 426) 427AT_CLEANUP 428 429 430AT_SETUP([minimize writes (symlinks)]) 431AT_KEYWORDS([upgrade verify min_writes]) 432RPMDB_INIT 433for v in "1.0" "2.0"; do 434 runroot rpmbuild --quiet -bb \ 435 --define "ver $v" \ 436 --define "filetype link" \ 437 --define "filedata doh" \ 438 /data/SPECS/replacetest.spec 439done 440 441for v in "3.0" "4.0"; do 442 runroot rpmbuild --quiet -bb \ 443 --define "ver $v" \ 444 --define "filetype link" \ 445 --define "filedata fox" \ 446 /data/SPECS/replacetest.spec 447done 448 449AT_CHECK([ 450RPMDB_INIT 451tf="${RPMTEST}"/opt/foo 452rm -rf "${tf}"* 453 454runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm 455readlink "${tf}" 456 457runroot rpm -U \ 458 --define "_minimize_writes 1" \ 459 /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm 460runroot rpm -Va --nouser --nogroup replacetest 461readlink "${tf}" 462 463runroot rpm -U \ 464 --define "_minimize_writes 1" \ 465 /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm 466runroot rpm -Va --nouser --nogroup replacetest 467readlink "${tf}" 468 469ln -sf "xx" "${tf}" 470readlink "${tf}" 471 472runroot rpm -U \ 473 --define "_minimize_writes 1" \ 474 /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm 475runroot rpm -Va --nouser --nogroup replacetest 476readlink "${tf}" 477 478runroot rpm -U --oldpackage \ 479 --define "_minimize_writes 1" \ 480 /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm 481runroot rpm -Va --nouser --nogroup replacetest 482readlink "${tf}" 483], 484[0], 485[doh 486doh 487fox 488xx 489fox 490fox 491], 492[]) 493 494AT_CHECK([ 495RPMDB_INIT 496tf="${RPMTEST}"/opt/foo 497rm -rf "${tf}" "${tf}".rpm* 498 499runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm 500readlink "${tf}" 501 502runroot rpm -Uvv --fsmdebug \ 503 --define "_minimize_writes 1" \ 504 /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm > output.txt 2>&1 505runroot rpm -Va --nouser --nogroup replacetest 506grep -c "touch" output.txt 507readlink "${tf}" 508 509 510runroot rpm -Uvv --fsmdebug \ 511 --define "_minimize_writes 1" \ 512 /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1 513runroot rpm -Va --nouser --nogroup replacetest 514grep -c "touch" output.txt 515readlink "${tf}" 516ln -sf "xx" "${tf}" 517readlink "${tf}" 518 519runroot rpm -Uvv --fsmdebug \ 520 --define "_minimize_writes 1" \ 521 /build/RPMS/noarch/replacetest-4.0-1.noarch.rpm > output.txt 2>&1 522runroot rpm -Va --nouser --nogroup replacetest 523grep -c "touch" output.txt 524readlink "${tf}" 525 526runroot rpm -U -Uvv --fsmdebug --oldpackage \ 527 --define "_minimize_writes 1" \ 528 /build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1 529runroot rpm -Va --nouser --nogroup replacetest 530grep -c "touch" output.txt 531readlink "${tf}" 532], 533[0], 534[doh 5352 536doh 5371 538fox 539xx 5401 541fox 5422 543fox 544], 545[]) 546AT_CLEANUP 547 548AT_SETUP([minimize writes (SUID files)]) 549AT_KEYWORDS([upgrade verify min_writes]) 550AT_CHECK([ 551RPMDB_INIT 552tf="${RPMTEST}"/opt/foo 553rm -rf "${tf}" "${tf}".rpm* 554 555for v in "1.0" "2.0"; do 556 runroot rpmbuild --quiet -bb \ 557 --define "ver $v" \ 558 --define "filetype file" \ 559 --define "filedata foo" \ 560 --define "fileattr %attr(2755,-,-)" \ 561 /data/SPECS/replacetest.spec 562done 563 564runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm 565runroot rpm -Va --nouser --nogroup replacetest 566runroot rpm -U \ 567 --define "_minimize_writes 1" \ 568 /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm 569runroot rpm -Va --nouser --nogroup replacetest 570chmod 777 "${tf}" 571runroot rpm -U \ 572 --oldpackage \ 573 --define "_minimize_writes 1" \ 574 /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm 575runroot rpm -Va --nouser --nogroup replacetest 576], 577[0], 578[], 579[]) 580AT_CLEANUP 581 582AT_SETUP([verify empty/no capabilities 1]) 583AT_KEYWORDS([verify]) 584AT_SKIP_IF([$CAP_DISABLED]) 585AT_CHECK([ 586RPMDB_INIT 587 588runroot rpm -U --nocaps --ignoreos \ 589 /data/RPMS/capstest-1.0-1.noarch.rpm 590 591runroot rpm -Va --nouser --nogroup 592], 593[1], 594[........P /a/emptyCaps1 595........P /a/emptyCaps2 596], 597[]) 598AT_CLEANUP 599 600 601AT_SETUP([verify empty/no capabilities 2]) 602AT_KEYWORDS([verify]) 603AT_SKIP_IF([$CAP_DISABLED]) 604AT_CHECK([ 605RPMDB_INIT 606 607runroot rpm -U --nocaps --nodeps --noscripts --ignorearch --ignoreos \ 608 /data/RPMS/hello-1.0-1.ppc64.rpm 609 610runroot rpm -Va --nouser --nogroup --nodeps | grep "/bin/hello" 611], 612[1], 613[], 614[]) 615AT_CLEANUP 616