| 1 | #!/bin/sh |
| 2 | set -e |
| 3 | |
| 4 | TESTDIR="$(readlink -f "$(dirname "$0")")" |
| 5 | . "$TESTDIR/framework" |
| 6 | |
| 7 | setupenvironment |
| 8 | configarchitecture "i386" |
| 9 | |
| 10 | buildaptarchive |
| 11 | setupflataptarchive |
| 12 | |
| 13 | STATUS=$(readlink -f rootdir/var/lib/dpkg/status) |
| 14 | APTARCHIVE=$(readlink -f aptarchive) |
| 15 | |
| 16 | testequalpolicy() { |
| 17 | local SP="$1" |
| 18 | local AP="$2" |
| 19 | shift 2 |
| 20 | testsuccessequal "Package files: |
| 21 | $(echo "$SP" | awk '{ printf("%3s\n",$0) }') ${STATUS} |
| 22 | release a=now |
| 23 | $(echo "$AP" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} Packages |
| 24 | release c= |
| 25 | Pinned packages:" aptcache policy "$@" |
| 26 | } |
| 27 | |
| 28 | testglobalpolicy() { |
| 29 | aptgetupdate |
| 30 | |
| 31 | testequalpolicy 100 500 |
| 32 | testequalpolicy 990 500 -t now |
| 33 | |
| 34 | sed -i aptarchive/Release -e 1i"NotAutomatic: yes" |
| 35 | aptgetupdate |
| 36 | |
| 37 | testequalpolicy 100 1 -o Test=NotAutomatic |
| 38 | testequalpolicy 990 1 -o Test=NotAutomatic -t now |
| 39 | |
| 40 | sed -i aptarchive/Release -e 1i"ButAutomaticUpgrades: yes" |
| 41 | aptgetupdate |
| 42 | |
| 43 | testequalpolicy 100 100 -o Test=ButAutomaticUpgrades |
| 44 | testequalpolicy 990 100 -o Test=ButAutomaticUpgrades -t now |
| 45 | |
| 46 | sed -i aptarchive/Release -e 's#NotAutomatic: yes#NotAutomatic: no#' -e '/ButAutomaticUpgrades: / d' |
| 47 | aptgetupdate |
| 48 | |
| 49 | testequalpolicy 100 500 -o Test=Automatic |
| 50 | testequalpolicy 990 500 -o Test=Automatic -t now |
| 51 | |
| 52 | sed -i aptarchive/Release -e '/NotAutomatic: / d' -e '/ButAutomaticUpgrades: / d' |
| 53 | } |
| 54 | |
| 55 | msgmsg 'Test with not signed archive' |
| 56 | aptgetupdate() { |
| 57 | rm -rf rootdir/var/lib/apt |
| 58 | testwarning aptget update --allow-insecure-repositories |
| 59 | } |
| 60 | testglobalpolicy |
| 61 | |
| 62 | msgmsg 'Test with signed but no key in trusted' |
| 63 | aptgetupdate() { |
| 64 | rm -rf rootdir/var/lib/apt |
| 65 | signreleasefiles 'Marvin Paranoid' |
| 66 | testwarning aptget update --allow-insecure-repositories |
| 67 | } |
| 68 | testglobalpolicy |
| 69 | |
| 70 | # much the same tests will be executed below in more detail again for this one |
| 71 | msgmsg 'Test with signed and valid key' |
| 72 | aptgetupdate() { |
| 73 | rm -rf rootdir/var/lib/apt |
| 74 | signreleasefiles 'Joe Sixpack' |
| 75 | testsuccess aptget update |
| 76 | } |
| 77 | testglobalpolicy |
| 78 | |
| 79 | msgmsg 'Test with specific packages' |
| 80 | |
| 81 | buildsimplenativepackage "coolstuff" "all" "1.0" "stable" |
| 82 | buildsimplenativepackage "coolstuff" "all" "2.0~bpo1" "backports" |
| 83 | |
| 84 | setupaptarchive |
| 85 | |
| 86 | testsuccessequal "coolstuff: |
| 87 | Installed: (none) |
| 88 | Candidate: 2.0~bpo1 |
| 89 | Version table: |
| 90 | 2.0~bpo1 500 |
| 91 | 500 file:${APTARCHIVE} backports/main all Packages |
| 92 | 1.0 500 |
| 93 | 500 file:${APTARCHIVE} stable/main all Packages" apt policy '^cool.*' |
| 94 | |
| 95 | testequalpolicycoolstuff() { |
| 96 | local INSTALLED="${1:-(none)}" |
| 97 | local CANDIDATE="${2:-(none)}" |
| 98 | local AB="$3" |
| 99 | local AS="$4" |
| 100 | local PB="$5" |
| 101 | local IS="" |
| 102 | local IB="" |
| 103 | local SB="" |
| 104 | local SS="" |
| 105 | [ "$1" = "2.0~bpo1" ] && IB="***" && SB=" |
| 106 | 100 $STATUS" || IB=" " |
| 107 | [ "$1" = "1.0" ] && IS="***" && SS=" |
| 108 | 100 $STATUS" || IS=" " |
| 109 | local BPO1ARCHIVE="" |
| 110 | local BPO2ARCHIVE="" |
| 111 | if [ ! "$7" = "2.0~bpo2" ]; then |
| 112 | BPO1PIN="$AB" |
| 113 | BPO1ARCHIVE=" $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} backports/main all Packages" |
| 114 | else |
| 115 | BPO2ARCHIVE=" |
| 116 | 2.0~bpo2 $AB |
| 117 | $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} backports/main all Packages" |
| 118 | SB="$(echo "$SB" | tail -n 1)" |
| 119 | shift |
| 120 | fi |
| 121 | shift 6 |
| 122 | testsuccessequal "coolstuff: |
| 123 | Installed: $INSTALLED |
| 124 | Candidate: $CANDIDATE |
| 125 | Version table:${BPO2ARCHIVE} |
| 126 | $IB 2.0~bpo1 $PB |
| 127 | ${BPO1ARCHIVE}$SB |
| 128 | $IS 1.0 $AS |
| 129 | $(echo "$AS" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} stable/main all Packages$SS" \ |
| 130 | aptcache policy coolstuff -o Policy=${INSTALLED}-${CANDIDATE}-${AB}-${AS}-${PB} $* |
| 131 | } |
| 132 | |
| 133 | testequalpolicycoolstuff "" "2.0~bpo1" 500 500 500 "" |
| 134 | testequalpolicycoolstuff "" "1.0" 500 990 500 "" -t stable |
| 135 | testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -t backports |
| 136 | echo "Package: * |
| 137 | Pin: release n=backports |
| 138 | Pin-Priority: 200" > rootdir/etc/apt/preferences |
| 139 | testequalpolicycoolstuff "" "1.0" 200 500 200 "" -o Test=GlobalPin |
| 140 | testequalpolicycoolstuff "" "1.0" 200 990 200 "" -o Test=GlobalPin -t stable |
| 141 | testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -o Test=GlobalPin -t backports |
| 142 | echo "Package: * |
| 143 | Pin: release n=backports |
| 144 | Pin-Priority: 600" > rootdir/etc/apt/preferences |
| 145 | testequalpolicycoolstuff "" "2.0~bpo1" 600 500 600 "" -o Test=GlobalPin |
| 146 | testequalpolicycoolstuff "" "1.0" 600 990 600 "" -o Test=GlobalPin -t stable |
| 147 | echo "Package: coolstuff |
| 148 | Pin: release n=backports |
| 149 | Pin-Priority: 200" > rootdir/etc/apt/preferences |
| 150 | #FIXME: policy can't differentiate between two sources where one has a package specific pin in place |
| 151 | # testequalpolicycoolstuff "" "1.0" 500 500 200 "2.0~bpo1" -o Test=PackagePin |
| 152 | # testequalpolicycoolstuff "" "1.0" 990 500 200 "2.0~bpo1" -o Test=PackagePin -t backports |
| 153 | testequalpolicycoolstuff "" "1.0" 500 990 200 "2.0~bpo1" -o Test=PackagePin -t stable |
| 154 | echo "Package: coolstuff |
| 155 | Pin: release n=backports |
| 156 | Pin-Priority: 600" > rootdir/etc/apt/preferences |
| 157 | testequalpolicycoolstuff "" "2.0~bpo1" 500 500 600 "2.0~bpo1" -o Test=PackagePin |
| 158 | testequalpolicycoolstuff "" "1.0" 500 990 600 "2.0~bpo1" -o Test=PackagePin -t stable |
| 159 | testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=PackagePin -t backports |
| 160 | |
| 161 | echo "Package: coolstuff |
| 162 | Pin: release n=backports |
| 163 | Pin-Priority: -1" > rootdir/etc/apt/preferences |
| 164 | # testequalpolicycoolstuff "" "1.0" 500 500 -1 "2.0~bpo1" -o Test=PackagePin |
| 165 | # testequalpolicycoolstuff "" "1.0" 990 500 -1 "2.0~bpo1" -o Test=PackagePin -t backports |
| 166 | # testequalpolicycoolstuff "" "1.0" 500 990 -1 "2.0~bpo1" -o Test=PackagePin -t stable |
| 167 | |
| 168 | rm rootdir/etc/apt/preferences |
| 169 | sed -i aptarchive/dists/backports/Release -e 1i"NotAutomatic: yes" |
| 170 | signreleasefiles |
| 171 | aptgetupdate |
| 172 | |
| 173 | testequalpolicycoolstuff "" "1.0" 1 500 1 "" -o Test=NotAutomatic |
| 174 | testequalpolicycoolstuff "" "1.0" 1 990 1 "" -o Test=NotAutomatic -t stable |
| 175 | testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -o Test=NotAutomatic -t backports |
| 176 | echo "Package: * |
| 177 | Pin: release n=backports |
| 178 | Pin-Priority: 200" > rootdir/etc/apt/preferences |
| 179 | testequalpolicycoolstuff "" "1.0" 200 500 200 "" -o Test=NotAutomatic |
| 180 | echo "Package: * |
| 181 | Pin: release n=backports |
| 182 | Pin-Priority: 600" > rootdir/etc/apt/preferences |
| 183 | testequalpolicycoolstuff "" "2.0~bpo1" 600 500 600 "" -o Test=NotAutomatic |
| 184 | testequalpolicycoolstuff "" "1.0" 600 990 600 "" -o Test=NotAutomatic -t stable |
| 185 | echo "Package: coolstuff |
| 186 | Pin: release n=backports |
| 187 | Pin-Priority: 200" > rootdir/etc/apt/preferences |
| 188 | testequalpolicycoolstuff "" "1.0" 1 500 200 "2.0~bpo1" -o Test=NotAutomatic |
| 189 | echo "Package: coolstuff |
| 190 | Pin: release n=backports |
| 191 | Pin-Priority: 600" > rootdir/etc/apt/preferences |
| 192 | testequalpolicycoolstuff "" "2.0~bpo1" 1 500 600 "2.0~bpo1" -o Test=NotAutomatic |
| 193 | testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=NotAutomatic -t backports |
| 194 | testequalpolicycoolstuff "" "1.0" 1 990 600 "2.0~bpo1" -o Test=NotAutomatic -t stable |
| 195 | |
| 196 | rm rootdir/etc/apt/preferences |
| 197 | sed -i aptarchive/dists/backports/Release -e 1i"ButAutomaticUpgrades: yes" |
| 198 | signreleasefiles |
| 199 | aptgetupdate |
| 200 | |
| 201 | testequalpolicycoolstuff "" "1.0" 100 500 100 "" -o Test=ButAutomaticUpgrades |
| 202 | testequalpolicycoolstuff "" "1.0" 100 990 100 "" -o Test=ButAutomaticUpgrades -t stable |
| 203 | testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -o Test=ButAutomaticUpgrades -t backports |
| 204 | echo "Package: * |
| 205 | Pin: release n=backports |
| 206 | Pin-Priority: 200" > rootdir/etc/apt/preferences |
| 207 | testequalpolicycoolstuff "" "1.0" 200 500 200 "" -o Test=ButAutomaticUpgrades |
| 208 | echo "Package: * |
| 209 | Pin: release n=backports |
| 210 | Pin-Priority: 600" > rootdir/etc/apt/preferences |
| 211 | testequalpolicycoolstuff "" "2.0~bpo1" 600 500 600 "" -o Test=ButAutomaticUpgrades |
| 212 | testequalpolicycoolstuff "" "1.0" 600 990 600 "" -o Test=ButAutomaticUpgrades -t stable |
| 213 | echo "Package: coolstuff |
| 214 | Pin: release n=backports |
| 215 | Pin-Priority: 200" > rootdir/etc/apt/preferences |
| 216 | testequalpolicycoolstuff "" "1.0" 100 500 200 "2.0~bpo1" -o Test=ButAutomaticUpgrades |
| 217 | echo "Package: coolstuff |
| 218 | Pin: release n=backports |
| 219 | Pin-Priority: 600" > rootdir/etc/apt/preferences |
| 220 | testequalpolicycoolstuff "" "2.0~bpo1" 100 500 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades |
| 221 | testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades -t backports |
| 222 | testequalpolicycoolstuff "" "1.0" 100 990 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades -t stable |
| 223 | |
| 224 | rm rootdir/etc/apt/preferences |
| 225 | testsuccess aptget install coolstuff -y |
| 226 | testequalpolicycoolstuff "1.0" "1.0" 100 500 100 "" -o Test=ButAutomaticUpgrades |
| 227 | testsuccess aptget dist-upgrade -y |
| 228 | testequalpolicycoolstuff "1.0" "1.0" 100 500 100 "" -o Test=ButAutomaticUpgrades |
| 229 | testequalpolicycoolstuff "1.0" "1.0" 100 990 100 "" -o Test=ButAutomaticUpgrades -t stable |
| 230 | testequalpolicycoolstuff "1.0" "2.0~bpo1" 990 500 990 "" -o Test=ButAutomaticUpgrades -t backports |
| 231 | |
| 232 | testsuccess aptget install coolstuff -t backports -y |
| 233 | testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 500 100 "" -o Test=ButAutomaticUpgrades |
| 234 | testsuccess aptget dist-upgrade -y |
| 235 | testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 500 100 "" -o Test=ButAutomaticUpgrades |
| 236 | testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 990 100 "" -o Test=ButAutomaticUpgrades -t stable |
| 237 | testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 990 500 990 "" -o Test=ButAutomaticUpgrades -t backports |
| 238 | |
| 239 | rm incoming/backports.main.pkglist incoming/backports.main.srclist |
| 240 | buildsimplenativepackage "coolstuff" "all" "2.0~bpo2" "backports" |
| 241 | setupaptarchive |
| 242 | |
| 243 | sed -i aptarchive/dists/backports/Release -e 1i"NotAutomatic: yes" |
| 244 | signreleasefiles |
| 245 | aptgetupdate |
| 246 | |
| 247 | testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 1 500 100 "" "2.0~bpo2" -o Test=NotAutomatic |
| 248 | testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 1 990 100 "" "2.0~bpo2" -o Test=NotAutomatic -t stable |
| 249 | testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 990 500 100 "" "2.0~bpo2" -o Test=NotAutomatic -t backports |
| 250 | |
| 251 | sed -i aptarchive/dists/backports/Release -e 1i"ButAutomaticUpgrades: yes" |
| 252 | signreleasefiles |
| 253 | aptgetupdate |
| 254 | |
| 255 | testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 100 500 100 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades |
| 256 | testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 100 990 100 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades -t stable |
| 257 | testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 990 500 100 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades -t backports |
| 258 | |
| 259 | |
| 260 | tmppath=$(readlink -f .) |
| 261 | |
| 262 | # Check 16-bit integers |
| 263 | echo "Package: coolstuff |
| 264 | Pin: release n=backports |
| 265 | Pin-Priority: 32767 |
| 266 | " > rootdir/etc/apt/preferences |
| 267 | |
| 268 | testsuccess aptget install -s coolstuff -o PinPriority=32767 |
| 269 | |
| 270 | echo "Package: coolstuff |
| 271 | Pin: release n=backports |
| 272 | Pin-Priority: -32768 |
| 273 | " > rootdir/etc/apt/preferences |
| 274 | testsuccess aptget install -s coolstuff -o PinPriority=-32768 |
| 275 | |
| 276 | # Check for 32-bit integers |
| 277 | echo "Package: coolstuff |
| 278 | Pin: release n=backports |
| 279 | Pin-Priority: 32768 |
| 280 | " > rootdir/etc/apt/preferences |
| 281 | |
| 282 | testfailureequal "Reading package lists... |
| 283 | E: ${tmppath}/rootdir/etc/apt/preferences: Value 32768 is outside the range of valid pin priorities (-32768 to 32767)" \ |
| 284 | aptget install -s coolstuff -o PinPriority=32768 |
| 285 | |
| 286 | |
| 287 | echo "Package: coolstuff |
| 288 | Pin: release n=backports |
| 289 | Pin-Priority: -32769 |
| 290 | " > rootdir/etc/apt/preferences |
| 291 | |
| 292 | testfailureequal "Reading package lists... |
| 293 | E: ${tmppath}/rootdir/etc/apt/preferences: Value -32769 is outside the range of valid pin priorities (-32768 to 32767)" \ |
| 294 | aptget install -s coolstuff -o PinPriority=-32769 |
| 295 | |
| 296 | # Check for 64-bit integers |
| 297 | |
| 298 | echo "Package: coolstuff |
| 299 | Pin: release n=backports |
| 300 | Pin-Priority: 2147483648 |
| 301 | " > rootdir/etc/apt/preferences |
| 302 | |
| 303 | testfailureequal "Reading package lists... |
| 304 | E: Cannot convert 2147483648 to integer: out of range |
| 305 | E: ${tmppath}/rootdir/etc/apt/preferences: Value 2147483648 is outside the range of valid pin priorities (-32768 to 32767)" \ |
| 306 | aptget install -s coolstuff -o PinPriority=2147483648 |
| 307 | |
| 308 | # Check that short-max/min is a valid pin |
| 309 | currentpin() { |
| 310 | echo "Package: * |
| 311 | Pin: release n=backports |
| 312 | Pin-Priority: $1 |
| 313 | " > rootdir/etc/apt/preferences |
| 314 | testsuccessequal "coolstuff: |
| 315 | Installed: 2.0~bpo1 |
| 316 | Candidate: $2 |
| 317 | Version table: |
| 318 | 2.0~bpo2 $1 |
| 319 | $1 file:${tmppath}/aptarchive backports/main all Packages |
| 320 | *** 2.0~bpo1 100 |
| 321 | 100 ${tmppath}/rootdir/var/lib/dpkg/status |
| 322 | 1.0 500 |
| 323 | 500 file:${tmppath}/aptarchive stable/main all Packages" apt policy coolstuff |
| 324 | } |
| 325 | currentpin '32767' '2.0~bpo2' |
| 326 | currentpin '-32768' '2.0~bpo1' |
| 327 | |
| 328 | # Check for 0 |
| 329 | echo "Package: coolstuff |
| 330 | Pin: release n=backports |
| 331 | Pin-Priority: 0 |
| 332 | " > rootdir/etc/apt/preferences |
| 333 | |
| 334 | testfailureequal "Reading package lists... |
| 335 | E: No priority (or zero) specified for pin" \ |
| 336 | aptget install -s coolstuff -o PinPriority=0 |
| 337 | |
| 338 | # Check with comments |
| 339 | echo "#Package: coolstuff |
| 340 | #Pin: release n=backports |
| 341 | #Pin-Priority: 0 |
| 342 | |
| 343 | # Test |
| 344 | |
| 345 | Package: coolstuff |
| 346 | Pin: release n=backports |
| 347 | #Pin: release n=unstable |
| 348 | #Pin-Priority: 999 |
| 349 | Pin-Priority: 999 |
| 350 | #Pin-Priority: 999" > rootdir/etc/apt/preferences |
| 351 | |
| 352 | testsuccessequal "coolstuff: |
| 353 | Installed: 2.0~bpo1 |
| 354 | Candidate: 2.0~bpo2 |
| 355 | Version table: |
| 356 | 2.0~bpo2 999 |
| 357 | 100 file:${tmppath}/aptarchive backports/main all Packages |
| 358 | *** 2.0~bpo1 100 |
| 359 | 100 ${tmppath}/rootdir/var/lib/dpkg/status |
| 360 | 1.0 500 |
| 361 | 500 file:${tmppath}/aptarchive stable/main all Packages" aptcache policy coolstuff |