upgrade.sh
1 #! /usr/bin/env atf-sh 2 3 . $(atf_get_srcdir)/test_environment.sh 4 5 tests_init \ 6 issue1881 \ 7 issue1881_newdep \ 8 three_digit_revision \ 9 dual_conflict \ 10 file_become_dir \ 11 dir_become_file \ 12 dir_is_symlink_to_a_dir \ 13 vital \ 14 vital_force \ 15 vital_force_cant_remove \ 16 upgrade_with_dependency \ 17 upgrade_glob_abi_os \ 18 upgrade_glob_abi_version \ 19 upgrade_glob_abi_arch \ 20 upgrade_autoremove \ 21 upgrade_autoremove_flag \ 22 symlink_to_dir_upgrade \ 23 newpkgversion_two_repos \ 24 25 issue1881_body() { 26 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg pkg1 pkg_a 1 27 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg pkg2 pkg_a 1_1 28 29 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg pkg3 pkg_b 1 30 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg pkg4 pkg_b 1_1 31 32 atf_check \ 33 -o match:".*Installing.*\.\.\.$" \ 34 -e empty \ 35 -s exit:0 \ 36 pkg register -M pkg1.ucl 37 38 atf_check \ 39 -o ignore \ 40 -e empty \ 41 -s exit:0 \ 42 pkg create -M ./pkg3.ucl 43 44 atf_check \ 45 -o ignore \ 46 -e empty \ 47 -s exit:0 \ 48 pkg create -M ./pkg2.ucl 49 50 atf_check \ 51 -o ignore \ 52 -e empty \ 53 -s exit:0 \ 54 pkg create -M ./pkg4.ucl 55 56 atf_check \ 57 -o inline:"Creating repository in .: done\nPacking files for repository: done\n" \ 58 -e empty \ 59 -s exit:0 \ 60 pkg repo . 61 62 mkdir repoconf 63 cat << EOF > repoconf/repo.conf 64 local: { 65 url: file:///$TMPDIR, 66 enabled: true 67 } 68 EOF 69 70 atf_check \ 71 -o not-match:"^[[:space:]]+pkg_b: 1$" \ 72 -e ignore \ 73 -s exit:0 \ 74 pkg -o REPOS_DIR="$TMPDIR/repoconf" -o PKG_CACHEDIR="$TMPDIR" upgrade -yx '^pkg_' 75 } 76 77 issue1881_newdep_body() { 78 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg pkg1 pkg_a 1 79 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg pkg2 pkg_a 1_1 80 81 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg pkg3 pkg_b 1 82 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg pkg4 pkg_b 1_1 83 84 cat <<EOF >> ./pkg2.ucl 85 deps: { 86 pkg_b: { 87 origin: "wedontcare", 88 version: "1" 89 } 90 } 91 EOF 92 93 atf_check \ 94 -o match:".*Installing.*\.\.\.$" \ 95 -e empty \ 96 -s exit:0 \ 97 pkg register -M pkg1.ucl 98 99 atf_check \ 100 -o ignore \ 101 -e empty \ 102 -s exit:0 \ 103 pkg create -M ./pkg3.ucl 104 105 atf_check \ 106 -o ignore \ 107 -e empty \ 108 -s exit:0 \ 109 pkg create -M ./pkg2.ucl 110 111 atf_check \ 112 -o ignore \ 113 -e empty \ 114 -s exit:0 \ 115 pkg create -M ./pkg4.ucl 116 117 atf_check \ 118 -o inline:"Creating repository in .: done\nPacking files for repository: done\n" \ 119 -e empty \ 120 -s exit:0 \ 121 pkg repo . 122 123 mkdir repoconf 124 cat << EOF > repoconf/repo.conf 125 local: { 126 url: file:///$TMPDIR, 127 enabled: true 128 } 129 EOF 130 131 atf_check \ 132 -o match:"^[[:space:]]+pkg_b: 1_1$" \ 133 -e ignore \ 134 -s exit:0 \ 135 pkg -o REPOS_DIR="$TMPDIR/repoconf" -o PKG_CACHEDIR="$TMPDIR" upgrade -yx '^pkg_' 136 } 137 138 three_digit_revision_body() { 139 140 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg pkg1 pkg_a 1_90 141 142 atf_check \ 143 -o ignore \ 144 -e empty \ 145 -s exit:0 \ 146 pkg register -M pkg1.ucl 147 148 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg pkg1 pkg_a 1_125 149 150 atf_check \ 151 -o ignore \ 152 -e empty \ 153 -s exit:0 \ 154 pkg create -M ./pkg1.ucl 155 156 atf_check \ 157 -o ignore \ 158 -e empty \ 159 -s exit:0 \ 160 pkg repo . 161 162 mkdir repoconf 163 cat << EOF > repoconf/repo.conf 164 local: { 165 url: file:///$TMPDIR, 166 enabled: true 167 } 168 EOF 169 170 atf_check \ 171 -o ignore \ 172 -e empty \ 173 -s exit:0 \ 174 pkg -o REPOS_DIR="$TMPDIR/repoconf" -o PKG_CACHEDIR="$TMPDIR" upgrade -yx '^pkg_' 175 atf_check \ 176 -o inline:"pkg_a-1_125\n" \ 177 -e empty \ 178 -s exit:0 \ 179 pkg info -q 180 } 181 182 dual_conflict_body() 183 { 184 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg-1" "pkg-1" "1" 185 echo "${TMPDIR}/file-pkg-1" > plist-1 186 echo "entry" > file-pkg-1 187 atf_check -s exit:0 pkg create -M pkg-1.ucl -p plist-1 188 189 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg-2" "pkg-2" "1" 190 echo "${TMPDIR}/file-pkg-2" > plist-2 191 echo "entry" > file-pkg-2 192 atf_check -s exit:0 pkg create -M pkg-2.ucl -p plist-2 193 194 mkdir repoconf 195 cat << EOF > repoconf/repo.conf 196 local: { 197 url: file:///$TMPDIR, 198 enabled: true 199 } 200 EOF 201 202 atf_check \ 203 -o inline:"Creating repository in .: done\nPacking files for repository: done\n" \ 204 -e empty \ 205 -s exit:0 \ 206 pkg repo . 207 208 mkdir ${TMPDIR}/target 209 atf_check \ 210 pkg -o REPOS_DIR="$TMPDIR/repoconf" -o PKG_CACHEDIR="$TMPDIR" -r ${TMPDIR}/target install -qy pkg-1 pkg-2 211 pkg -r ${TMPDIR}/target which ${TMPDIR}/file-pkg-1 212 pkg -r ${TMPDIR}/target which ${TMPDIR}/file-pkg-2 213 test -f ${TMPDIR}/target/${TMPDIR}/file-pkg-1 || atf_fail "file absent" 214 test -f ${TMPDIR}/target/${TMPDIR}/file-pkg-2 || atf_fail "file absent" 215 216 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg-1" "pkg-1" "2" 217 echo "${TMPDIR}/file-pkg-2" > plist-1 218 atf_check -s exit:0 pkg create -M pkg-1.ucl -p plist-1 219 220 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg-2" "pkg-2" "2" 221 echo "${TMPDIR}/file-pkg-1" > plist-2 222 atf_check -s exit:0 pkg create -M pkg-2.ucl -p plist-2 223 224 sleep 1 225 atf_check \ 226 -o inline:"Creating repository in .: done\nPacking files for repository: done\n" \ 227 -e empty \ 228 -s exit:0 \ 229 pkg repo -l . 230 231 atf_check \ 232 pkg -o REPOS_DIR="$TMPDIR/repoconf" -o PKG_CACHEDIR="$TMPDIR" -r ${TMPDIR}/target update -q 233 234 atf_check \ 235 pkg -o REPOS_DIR="$TMPDIR/repoconf" -o PKG_CACHEDIR="$TMPDIR" -r ${TMPDIR}/target upgrade -qy 236 237 atf_check \ 238 -o inline:'pkg-2-2\n' \ 239 pkg -r ${TMPDIR}/target which -q ${TMPDIR}/file-pkg-1 240 atf_check \ 241 -o inline:'pkg-1-2\n' \ 242 pkg -r ${TMPDIR}/target which -q ${TMPDIR}/file-pkg-2 243 } 244 245 file_become_dir_body() { 246 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg" "pkg" "1" 247 echo "${TMPDIR}/file-pkg-1" > plist-1 248 echo "entry" > file-pkg-1 249 atf_check pkg create -M pkg.ucl -p plist-1 250 mkdir target 251 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/pkg-1.pkg 252 atf_check test -f target/${TMPDIR}/file-pkg-1 253 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg" "pkg" "2" 254 rm file-pkg-1 255 mkdir file-pkg-1 256 echo entry > file-pkg-1/file 257 echo "${TMPDIR}/file-pkg-1/file" > plist-2 258 atf_check pkg create -M pkg.ucl -p plist-2 259 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/pkg-2.pkg 260 } 261 262 dir_become_file_body() { 263 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg" "pkg" "1" 264 mkdir file-pkg-1 265 echo entry > file-pkg-1/file 266 echo "${TMPDIR}/file-pkg-1/file" > plist-1 267 atf_check pkg create -M pkg.ucl -p plist-1 268 mkdir target 269 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/pkg-1.pkg 270 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg" "pkg" "2" 271 rm -rf file-pkg-1 272 echo entry > file-pkg-1 273 echo "${TMPDIR}/file-pkg-1" > plist-2 274 atf_check pkg create -M pkg.ucl -p plist-2 275 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/pkg-2.pkg 276 } 277 278 dir_is_symlink_to_a_dir_body() 279 { 280 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg" "pkg" "1" 281 mkdir share lib lib/something 282 ln -sf ../lib/something share/something 283 echo "entry" > lib/something/file 284 echo "${TMPDIR}/lib/something/file" > plist-1 285 echo "${TMPDIR}/share/something" >> plist-1 286 atf_check pkg create -M pkg.ucl -p plist-1 287 mkdir target 288 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/pkg-1.pkg 289 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg" "pkg" "2" 290 rm share/something 291 mkdir share/something 292 echo "entry" > share/something/file 293 echo "${TMPDIR}/lib/something/file" > plist-2 294 echo "${TMPDIR}/share/something/file" >> plist-2 295 atf_check pkg create -M pkg.ucl -p plist-2 296 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/pkg-2.pkg 297 } 298 299 vital_body() { 300 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "meta" "mymeta" "1" 301 mkdir file-pkg-1 302 cat << EOF >> meta.ucl 303 vital = true; 304 EOF 305 echo entry > file-pkg-1/file 306 echo "${TMPDIR}/file-pkg-1/file" > plist-1 307 atf_check pkg create -M meta.ucl -p plist-1 308 mkdir target 309 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/mymeta-1.pkg 310 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "plop" "myplop" "1" 311 atf_check pkg create -M plop.ucl 312 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/myplop-1.pkg 313 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "plop" "myplop" "2" 314 echo "${TMPDIR}/file-pkg-1/file" > plist-2 315 atf_check pkg create -M plop.ucl -p plist-2 316 mkdir repoconf 317 cat << EOF > repoconf/repo.conf 318 local: { 319 url: file:///$TMPDIR, 320 enabled: true 321 } 322 EOF 323 324 rm ${TMPDIR}/mymeta-1.pkg 325 atf_check -o ignore pkg repo . 326 atf_check -o ignore pkg -o REPOS_DIR="$TMPDIR/repoconf" -r ${TMPDIR}/target -o PKG_CACHEDIR="$TMPDIR" update 327 OUTPUT="Updating local repository catalogue... 328 local repository is up to date. 329 All repositories are up to date. 330 Checking for upgrades (1 candidates): done 331 Processing candidates (1 candidates): done 332 Checking integrity... done (1 conflicting) 333 - myplop-2 conflicts with mymeta-1 on ${TMPDIR}/file-pkg-1/file 334 Cannot solve problem using SAT solver, trying another plan 335 Checking integrity... done (0 conflicting) 336 Your packages are up to date. 337 " 338 ERROR="" 339 atf_check -o inline:"${OUTPUT}" -e inline:"${ERROR}" -s exit:0 pkg -o REPOS_DIR="$TMPDIR/repoconf" -r ${TMPDIR}/target -o PKG_CACHEDIR="$TMPDIR" upgrade -y 340 } 341 342 vital_force_body() { 343 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "meta" "mymeta" "1" 344 mkdir file-pkg-1 345 cat << EOF >> meta.ucl 346 vital = true; 347 EOF 348 echo entry > file-pkg-1/file 349 echo "${TMPDIR}/file-pkg-1/file" > plist-1 350 atf_check pkg create -M meta.ucl -p plist-1 351 mkdir target 352 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/mymeta-1.pkg 353 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "plop" "myplop" "1" 354 atf_check pkg create -M plop.ucl 355 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/myplop-1.pkg 356 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "plop" "myplop" "2" 357 echo "${TMPDIR}/file-pkg-1/file" > plist-2 358 atf_check pkg create -M plop.ucl -p plist-2 359 mkdir repoconf 360 cat << EOF > repoconf/repo.conf 361 local: { 362 url: file:///$TMPDIR, 363 enabled: true 364 } 365 EOF 366 367 atf_check -o ignore pkg repo . 368 atf_check -o ignore pkg -o REPOS_DIR="$TMPDIR/repoconf" -r ${TMPDIR}/target -o PKG_CACHEDIR="$TMPDIR" update 369 OUTPUT="Updating local repository catalogue... 370 local repository is up to date. 371 All repositories are up to date. 372 Checking integrity... done (1 conflicting) 373 - myplop-2 conflicts with mymeta-1 on ${TMPDIR}/file-pkg-1/file 374 Checking integrity... done (0 conflicting) 375 The following 2 package(s) will be affected (of 0 checked): 376 377 Installed packages to be UPGRADED: 378 myplop: 1 -> 2 379 380 Installed packages to be REMOVED: 381 mymeta: 1 382 383 Number of packages to be removed: 1 384 Number of packages to be upgraded: 1 385 [1/2] Deinstalling mymeta-1... 386 [1/2] Deleting files for mymeta-1: done 387 [2/2] Upgrading myplop from 1 to 2... 388 [2/2] Extracting myplop-2: done 389 " 390 ERROR="" 391 atf_check -o inline:"${OUTPUT}" -e inline:"${ERROR}" -s exit:0 pkg -o REPOS_DIR="$TMPDIR/repoconf" -r ${TMPDIR}/target -o PKG_CACHEDIR="$TMPDIR" upgrade -fy myplop 392 } 393 394 vital_force_cant_remove_body() { 395 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "meta" "mymeta" "1" 396 mkdir file-pkg-1 397 cat << EOF >> meta.ucl 398 vital = true; 399 EOF 400 echo entry > file-pkg-1/file 401 echo "${TMPDIR}/file-pkg-1/file" > plist-1 402 atf_check pkg create -M meta.ucl -p plist-1 403 mkdir target 404 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/mymeta-1.pkg 405 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "plop" "myplop" "1" 406 atf_check pkg create -M plop.ucl 407 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/myplop-1.pkg 408 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "plop" "myplop" "2" 409 echo "${TMPDIR}/file-pkg-1/file" > plist-2 410 atf_check pkg create -M plop.ucl -p plist-2 411 mkdir repoconf 412 cat << EOF > repoconf/repo.conf 413 local: { 414 url: file:///$TMPDIR, 415 enabled: true 416 } 417 EOF 418 419 atf_check -o ignore pkg repo . 420 atf_check -o ignore pkg -o REPOS_DIR="$TMPDIR/repoconf" -r ${TMPDIR}/target -o PKG_CACHEDIR="$TMPDIR" update 421 OUTPUT="Updating local repository catalogue... 422 local repository is up to date. 423 All repositories are up to date. 424 Checking integrity... done (1 conflicting) 425 - myplop-2 conflicts with mymeta-1 on ${TMPDIR}/file-pkg-1/file 426 Cannot solve problem using SAT solver, trying another plan 427 Checking integrity... done (0 conflicting) 428 Your packages are up to date. 429 " 430 ERROR="" 431 atf_check -o inline:"${OUTPUT}" -e inline:"${ERROR}" -s exit:0 pkg -o REPOS_DIR="$TMPDIR/repoconf" -r ${TMPDIR}/target -o PKG_CACHEDIR="$TMPDIR" -o FORCE_CAN_REMOVE_VITAL=NO upgrade -fy myplop 432 } 433 434 upgrade_with_dependency_body() { 435 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testa" "testa" "1.0" 436 atf_check pkg create -M testa.ucl -o ./repo 437 438 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testb" "testb" "1.0" 439 cat << EOF >> testb.ucl 440 deps: { 441 testa: { 442 origin: "testa", 443 } 444 } 445 EOF 446 atf_check pkg create -M testb.ucl -o ./repo 447 448 cat << EOF > pkg.conf 449 PKG_DBDIR=${TMPDIR} 450 REPOS_DIR=[] 451 repositories: { 452 local: { url : file://${TMPDIR}/repo } 453 } 454 EOF 455 atf_check \ 456 -o inline:"Creating repository in ./repo: done\nPacking files for repository: done\n" \ 457 -e empty \ 458 -s exit:0 \ 459 pkg -C ./pkg.conf repo ./repo 460 461 atf_check \ 462 -o ignore \ 463 -s exit:0 \ 464 pkg -C ./pkg.conf update -f 465 466 atf_check \ 467 pkg -C ./pkg.conf install -qy testb 468 469 rm -r ./repo 470 471 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testa" "testa" "2.0" 472 atf_check pkg create -M testa.ucl -o ./repo 473 474 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testb" "testb" "2.0" 475 cat << EOF >> testb.ucl 476 deps: { 477 testa: { 478 origin: "testa", 479 } 480 } 481 EOF 482 atf_check pkg create -M testb.ucl -o ./repo 483 484 atf_check \ 485 -o inline:"Creating repository in ./repo: done\nPacking files for repository: done\n" \ 486 -e empty \ 487 -s exit:0 \ 488 pkg -C ./pkg.conf repo ./repo 489 490 atf_check \ 491 -o ignore \ 492 -e empty \ 493 -s exit:0 \ 494 pkg -C ./pkg.conf update -f 495 496 OUTPUT="Updating local repository catalogue... 497 local repository is up to date. 498 All repositories are up to date. 499 Checking for upgrades (2 candidates): done 500 Processing candidates (2 candidates): done 501 Checking integrity... done (0 conflicting) 502 The following 2 package(s) will be affected (of 0 checked): 503 504 Installed packages to be UPGRADED: 505 testa: 1.0 -> 2.0 506 testb: 1.0 -> 2.0 507 508 Number of packages to be upgraded: 2 509 ${JAILED}[1/2] Upgrading testa from 1.0 to 2.0... 510 ${JAILED}[2/2] Upgrading testb from 1.0 to 2.0... 511 " 512 513 atf_check \ 514 -o inline:"${OUTPUT}" \ 515 -e empty \ 516 -s exit:0 \ 517 pkg -C ./pkg.conf upgrade -y 518 } 519 520 upgrade_glob_abi_os_body() { 521 atf_skip_on Darwin Irrelevant on OSX 522 523 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testa" "testa" "1.0" "/" 524 cc -shared -Wl,-soname=libtesta.so.2 -o libtesta.so.2 525 ln -s libtesta.so.2 libtesta.so 526 cc -shared -Wl,-rpath=${TMPDIR} -L. -ltesta -o dep.so 527 528 cat << EOF >> testa.ucl 529 shlibs_provided: [ "libtesta.so.2" ] 530 files: { 531 ${TMPDIR}/libtesta.so.2: "" 532 } 533 EOF 534 atf_check pkg create -M testa.ucl -o ./repo 535 cat << EOF > pkg.conf 536 PKG_DBDIR=${TMPDIR} 537 REPOS_DIR=[] 538 repositories: { 539 local: { url : file://${TMPDIR}/repo } 540 } 541 EOF 542 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testb" "testb" "2.0" 543 cat << EOF >> testb.ucl 544 shlibs_required: [ "libtesta.so.2" ] 545 files: { 546 ${TMPDIR}/dep.so: "" 547 } 548 EOF 549 atf_check pkg create -M testb.ucl -o ./repo 550 551 atf_check \ 552 -o inline:"Creating repository in ./repo: done\nPacking files for repository: done\n" \ 553 pkg -C ./pkg.conf repo ./repo 554 555 atf_check \ 556 -o ignore \ 557 pkg -C ./pkg.conf update -f 558 559 atf_check \ 560 pkg -C ./pkg.conf install -qy testb 561 } 562 563 upgrade_glob_abi_version_body() { 564 atf_skip_on Darwin Irrelevant on OSX 565 566 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testa" "testa" "1.0" "/" "${OS}:*" 567 cc -shared -Wl,-soname=libtesta.so.2 -o libtesta.so.2 568 ln -s libtesta.so.2 libtesta.so 569 cc -shared -Wl,-rpath=${TMPDIR} -L. -ltesta -o dep.so 570 571 cat << EOF >> testa.ucl 572 shlibs_provided: [ "libtesta.so.2" ] 573 files: { 574 ${TMPDIR}/libtesta.so.2: "" 575 } 576 EOF 577 atf_check pkg create -M testa.ucl -o ./repo 578 cat << EOF > pkg.conf 579 PKG_DBDIR=${TMPDIR} 580 REPOS_DIR=[] 581 repositories: { 582 local: { url : file://${TMPDIR}/repo } 583 } 584 EOF 585 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testb" "testb" "2.0" 586 cat << EOF >> testb.ucl 587 shlibs_required: [ "libtesta.so.2" ] 588 files: { 589 ${TMPDIR}/dep.so: "" 590 } 591 EOF 592 atf_check pkg create -M testb.ucl -o ./repo 593 594 atf_check \ 595 -o inline:"Creating repository in ./repo: done\nPacking files for repository: done\n" \ 596 pkg -C ./pkg.conf repo ./repo 597 598 atf_check \ 599 -o ignore \ 600 pkg -C ./pkg.conf update -f 601 602 atf_check \ 603 pkg -C ./pkg.conf install -qy testb 604 } 605 606 upgrade_glob_abi_arch_body() { 607 atf_skip_on Darwin Irrelevant on OSX 608 atf_skip_on Linux the versioning does not work for linux 609 610 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testa" "testa" "1.0" "/" "${OS}:16:*" 611 cc -shared -Wl,-soname=libtesta.so.2 -o libtesta.so.2 612 ln -s libtesta.so.2 libtesta.so 613 cc -shared -Wl,-rpath=${TMPDIR} -L. -ltesta -o dep.so 614 615 cat << EOF >> testa.ucl 616 shlibs_provided: [ "libtesta.so.2" ] 617 files: { 618 ${TMPDIR}/libtesta.so.2: "" 619 } 620 EOF 621 atf_check pkg create -M testa.ucl -o ./repo 622 cat << EOF > pkg.conf 623 PKG_DBDIR=${TMPDIR} 624 REPOS_DIR=[] 625 repositories: { 626 local: { url : file://${TMPDIR}/repo } 627 } 628 EOF 629 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "testb" "testb" "2.0" "/" "${OS}:16:*" 630 cat << EOF >> testb.ucl 631 shlibs_required: [ "libtesta.so.2" ] 632 files: { 633 ${TMPDIR}/dep.so: "" 634 } 635 EOF 636 atf_check pkg create -M testb.ucl -o ./repo 637 638 atf_check \ 639 -o inline:"Creating repository in ./repo: done\nPacking files for repository: done\n" \ 640 pkg -C ./pkg.conf repo ./repo 641 642 atf_check \ 643 -o ignore \ 644 -e ignore \ 645 pkg -o IGNORE_OSVERSION=yes -o ABI=${OS}:16:amd64 -o OSVERSION=1600000 -C ./pkg.conf update -f 646 647 atf_check \ 648 -e ignore \ 649 pkg -o IGNORE_OSVERSION=yes -o ABI=${OS}:16:amd64 -o OSVERSION=1600000 -C ./pkg.conf install -qy testb 650 } 651 652 upgrade_autoremove_body() { 653 # Install master v1 with olddep as automatic dependency 654 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "olddep" "olddep" "1.0" 655 atf_check -o ignore pkg register -A -M olddep.ucl 656 657 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "master" "master" "1.0" 658 cat << EOF >> master.ucl 659 deps: { 660 olddep { 661 origin: olddep, 662 version: "1.0" 663 } 664 } 665 EOF 666 atf_check -o ignore pkg register -M master.ucl 667 668 # Create master v2 in repo (no longer depends on olddep) 669 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "master2" "master" "2.0" 670 atf_check pkg create -M master2.ucl -o ./repo 671 672 cat << EOF > pkg.conf 673 PKG_DBDIR=${TMPDIR} 674 REPOS_DIR=[] 675 AUTOREMOVE=YES 676 repositories: { 677 local: { url : file://${TMPDIR}/repo } 678 } 679 EOF 680 681 atf_check -o ignore pkg -C ./pkg.conf repo ./repo 682 atf_check -o ignore pkg -C ./pkg.conf update -f 683 684 # Upgrade: master 1.0 -> 2.0, olddep should be autoremoved 685 atf_check \ 686 -o match:"Upgrading master" \ 687 -o match:"Deinstalling olddep" \ 688 -s exit:0 \ 689 pkg -C ./pkg.conf upgrade -y 690 691 atf_check -s exit:0 pkg info -e master 692 atf_check -s exit:1 pkg info -e olddep 693 } 694 695 upgrade_autoremove_flag_body() { 696 # Same but with --autoremove flag instead of config 697 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "olddep" "olddep" "1.0" 698 atf_check -o ignore pkg register -A -M olddep.ucl 699 700 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "master" "master" "1.0" 701 cat << EOF >> master.ucl 702 deps: { 703 olddep { 704 origin: olddep, 705 version: "1.0" 706 } 707 } 708 EOF 709 atf_check -o ignore pkg register -M master.ucl 710 711 # Create master v2 in repo (no longer depends on olddep) 712 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "master2" "master" "2.0" 713 atf_check pkg create -M master2.ucl -o ./repo 714 715 cat << EOF > pkg.conf 716 PKG_DBDIR=${TMPDIR} 717 REPOS_DIR=[] 718 repositories: { 719 local: { url : file://${TMPDIR}/repo } 720 } 721 EOF 722 723 atf_check -o ignore pkg -C ./pkg.conf repo ./repo 724 atf_check -o ignore pkg -C ./pkg.conf update -f 725 726 # Upgrade with --autoremove: olddep should be removed 727 atf_check \ 728 -o match:"Upgrading master" \ 729 -o match:"Deinstalling olddep" \ 730 -s exit:0 \ 731 pkg -C ./pkg.conf upgrade -y --autoremove 732 733 atf_check -s exit:0 pkg info -e master 734 atf_check -s exit:1 pkg info -e olddep 735 } 736 737 symlink_to_dir_upgrade_body() { 738 # PR #2041: when v1 has a symlink and v2 replaces it with a real 739 # directory containing files, pkg should remove the symlink before 740 # renaming the temporary directory into place. 741 742 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg" "pkg" "1" 743 mkdir -p base 744 echo "content" > base/file 745 ln -s ../base errors-mx 746 echo "${TMPDIR}/base/file" > plist-1 747 echo "${TMPDIR}/errors-mx" >> plist-1 748 atf_check pkg create -M pkg.ucl -p plist-1 749 mkdir target 750 atf_check -o ignore pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/pkg-1.pkg 751 752 # Verify symlink was installed 753 atf_check test -L target/${TMPDIR}/errors-mx 754 755 # v2: replaces symlink with a real directory containing a file 756 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg" "pkg" "2" 757 rm errors-mx 758 mkdir errors-mx 759 echo "new content" > errors-mx/newfile 760 echo "${TMPDIR}/errors-mx/newfile" > plist-2 761 atf_check pkg create -M pkg.ucl -p plist-2 762 763 # Upgrade: should succeed despite symlink existing at target 764 atf_check \ 765 -o ignore \ 766 -s exit:0 \ 767 pkg -o REPOS_DIR="${TMPDIR}" -r ${TMPDIR}/target install -Uy ${TMPDIR}/pkg-2.pkg 768 769 # Verify the directory replaced the symlink 770 atf_check test -d target/${TMPDIR}/errors-mx 771 atf_check test -f target/${TMPDIR}/errors-mx/newfile 772 } 773 774 newpkgversion_two_repos_body() { 775 # Issue #2023: when two repos provide the same newer version of "pkg", 776 # pkg upgrade could loop forever because newpkgversion was not reset 777 # when the solver found nothing to do. 778 779 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg1" "pkg" "1.0" 780 atf_check -o ignore pkg register -M pkg1.ucl 781 782 # Create two repos, both with pkg 2.0 783 atf_check -s exit:0 sh ${RESOURCEDIR}/test_subr.sh new_pkg "pkg2" "pkg" "2.0" 784 atf_check pkg create -M pkg2.ucl -o ./repo1 785 atf_check pkg create -M pkg2.ucl -o ./repo2 786 787 atf_check -o ignore pkg repo ./repo1 788 atf_check -o ignore pkg repo ./repo2 789 790 cat << EOF > pkg.conf 791 PKG_DBDIR=${TMPDIR} 792 REPOS_DIR=[] 793 repositories: { 794 repo1: { url : file://${TMPDIR}/repo1 } 795 repo2: { url : file://${TMPDIR}/repo2 } 796 } 797 EOF 798 799 atf_check -o ignore pkg -C ./pkg.conf update -f 800 801 # This must not loop forever; should exit 0 802 atf_check \ 803 -o ignore \ 804 -e empty \ 805 -s exit:0 \ 806 pkg -C ./pkg.conf upgrade -y 807 }