]> git.saurik.com Git - apt.git/blob - test/integration/test-policy-pinning
ea266e934d25e598d4b89756f4158ddccd05c3bb
[apt.git] / test / integration / test-policy-pinning
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 testequalpolicycoolstuff() {
87 local INSTALLED="${1:-(none)}"
88 local CANDIDATE="${2:-(none)}"
89 local AB="$3"
90 local AS="$4"
91 local PB="$5"
92 local IS=""
93 local IB=""
94 local SB=""
95 local SS=""
96 [ "$1" = "2.0~bpo1" ] && IB="***" && SB="
97 100 $STATUS" || IB=" "
98 [ "$1" = "1.0" ] && IS="***" && SS="
99 100 $STATUS" || IS=" "
100 local BPO1ARCHIVE=""
101 local BPO2ARCHIVE=""
102 if [ ! "$7" = "2.0~bpo2" ]; then
103 BPO1PIN="$AB"
104 BPO1ARCHIVE=" $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} backports/main i386 Packages"
105 else
106 BPO2ARCHIVE="
107 2.0~bpo2 $AB
108 $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} backports/main i386 Packages"
109 SB="$(echo "$SB" | tail -n 1)"
110 shift
111 fi
112 shift 6
113 testsuccessequal "coolstuff:
114 Installed: $INSTALLED
115 Candidate: $CANDIDATE
116 Version table:${BPO2ARCHIVE}
117 $IB 2.0~bpo1 $PB
118 ${BPO1ARCHIVE}$SB
119 $IS 1.0 $AS
120 $(echo "$AS" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE} stable/main i386 Packages$SS" \
121 aptcache policy coolstuff -o Policy=${INSTALLED}-${CANDIDATE}-${AB}-${AS}-${PB} $*
122 }
123
124 testequalpolicycoolstuff "" "2.0~bpo1" 500 500 500 ""
125 testequalpolicycoolstuff "" "1.0" 500 990 500 "" -t stable
126 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -t backports
127 echo "Package: *
128 Pin: release n=backports
129 Pin-Priority: 200" > rootdir/etc/apt/preferences
130 testequalpolicycoolstuff "" "1.0" 200 500 200 "" -o Test=GlobalPin
131 testequalpolicycoolstuff "" "1.0" 200 990 200 "" -o Test=GlobalPin -t stable
132 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -o Test=GlobalPin -t backports
133 echo "Package: *
134 Pin: release n=backports
135 Pin-Priority: 600" > rootdir/etc/apt/preferences
136 testequalpolicycoolstuff "" "2.0~bpo1" 600 500 600 "" -o Test=GlobalPin
137 testequalpolicycoolstuff "" "1.0" 600 990 600 "" -o Test=GlobalPin -t stable
138 echo "Package: coolstuff
139 Pin: release n=backports
140 Pin-Priority: 200" > rootdir/etc/apt/preferences
141 #FIXME: policy can't differentiate between two sources where one has a package specific pin in place
142 # testequalpolicycoolstuff "" "1.0" 500 500 200 "2.0~bpo1" -o Test=PackagePin
143 # testequalpolicycoolstuff "" "1.0" 990 500 200 "2.0~bpo1" -o Test=PackagePin -t backports
144 testequalpolicycoolstuff "" "1.0" 500 990 200 "2.0~bpo1" -o Test=PackagePin -t stable
145 echo "Package: coolstuff
146 Pin: release n=backports
147 Pin-Priority: 600" > rootdir/etc/apt/preferences
148 testequalpolicycoolstuff "" "2.0~bpo1" 500 500 600 "2.0~bpo1" -o Test=PackagePin
149 testequalpolicycoolstuff "" "1.0" 500 990 600 "2.0~bpo1" -o Test=PackagePin -t stable
150 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=PackagePin -t backports
151
152 echo "Package: coolstuff
153 Pin: release n=backports
154 Pin-Priority: -1" > rootdir/etc/apt/preferences
155 # testequalpolicycoolstuff "" "1.0" 500 500 -1 "2.0~bpo1" -o Test=PackagePin
156 # testequalpolicycoolstuff "" "1.0" 990 500 -1 "2.0~bpo1" -o Test=PackagePin -t backports
157 # testequalpolicycoolstuff "" "1.0" 500 990 -1 "2.0~bpo1" -o Test=PackagePin -t stable
158
159 rm rootdir/etc/apt/preferences
160 sed -i aptarchive/dists/backports/Release -e 1i"NotAutomatic: yes"
161 signreleasefiles
162 aptgetupdate
163
164 testequalpolicycoolstuff "" "1.0" 1 500 1 "" -o Test=NotAutomatic
165 testequalpolicycoolstuff "" "1.0" 1 990 1 "" -o Test=NotAutomatic -t stable
166 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -o Test=NotAutomatic -t backports
167 echo "Package: *
168 Pin: release n=backports
169 Pin-Priority: 200" > rootdir/etc/apt/preferences
170 testequalpolicycoolstuff "" "1.0" 200 500 200 "" -o Test=NotAutomatic
171 echo "Package: *
172 Pin: release n=backports
173 Pin-Priority: 600" > rootdir/etc/apt/preferences
174 testequalpolicycoolstuff "" "2.0~bpo1" 600 500 600 "" -o Test=NotAutomatic
175 testequalpolicycoolstuff "" "1.0" 600 990 600 "" -o Test=NotAutomatic -t stable
176 echo "Package: coolstuff
177 Pin: release n=backports
178 Pin-Priority: 200" > rootdir/etc/apt/preferences
179 testequalpolicycoolstuff "" "1.0" 1 500 200 "2.0~bpo1" -o Test=NotAutomatic
180 echo "Package: coolstuff
181 Pin: release n=backports
182 Pin-Priority: 600" > rootdir/etc/apt/preferences
183 testequalpolicycoolstuff "" "2.0~bpo1" 1 500 600 "2.0~bpo1" -o Test=NotAutomatic
184 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=NotAutomatic -t backports
185 testequalpolicycoolstuff "" "1.0" 1 990 600 "2.0~bpo1" -o Test=NotAutomatic -t stable
186
187 rm rootdir/etc/apt/preferences
188 sed -i aptarchive/dists/backports/Release -e 1i"ButAutomaticUpgrades: yes"
189 signreleasefiles
190 aptgetupdate
191
192 testequalpolicycoolstuff "" "1.0" 100 500 100 "" -o Test=ButAutomaticUpgrades
193 testequalpolicycoolstuff "" "1.0" 100 990 100 "" -o Test=ButAutomaticUpgrades -t stable
194 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 990 "" -o Test=ButAutomaticUpgrades -t backports
195 echo "Package: *
196 Pin: release n=backports
197 Pin-Priority: 200" > rootdir/etc/apt/preferences
198 testequalpolicycoolstuff "" "1.0" 200 500 200 "" -o Test=ButAutomaticUpgrades
199 echo "Package: *
200 Pin: release n=backports
201 Pin-Priority: 600" > rootdir/etc/apt/preferences
202 testequalpolicycoolstuff "" "2.0~bpo1" 600 500 600 "" -o Test=ButAutomaticUpgrades
203 testequalpolicycoolstuff "" "1.0" 600 990 600 "" -o Test=ButAutomaticUpgrades -t stable
204 echo "Package: coolstuff
205 Pin: release n=backports
206 Pin-Priority: 200" > rootdir/etc/apt/preferences
207 testequalpolicycoolstuff "" "1.0" 100 500 200 "2.0~bpo1" -o Test=ButAutomaticUpgrades
208 echo "Package: coolstuff
209 Pin: release n=backports
210 Pin-Priority: 600" > rootdir/etc/apt/preferences
211 testequalpolicycoolstuff "" "2.0~bpo1" 100 500 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades
212 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades -t backports
213 testequalpolicycoolstuff "" "1.0" 100 990 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades -t stable
214
215 rm rootdir/etc/apt/preferences
216 testsuccess aptget install coolstuff -y
217 testequalpolicycoolstuff "1.0" "1.0" 100 500 100 "" -o Test=ButAutomaticUpgrades
218 testsuccess aptget dist-upgrade -y
219 testequalpolicycoolstuff "1.0" "1.0" 100 500 100 "" -o Test=ButAutomaticUpgrades
220 testequalpolicycoolstuff "1.0" "1.0" 100 990 100 "" -o Test=ButAutomaticUpgrades -t stable
221 testequalpolicycoolstuff "1.0" "2.0~bpo1" 990 500 990 "" -o Test=ButAutomaticUpgrades -t backports
222
223 testsuccess aptget install coolstuff -t backports -y
224 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 500 100 "" -o Test=ButAutomaticUpgrades
225 testsuccess aptget dist-upgrade -y
226 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 500 100 "" -o Test=ButAutomaticUpgrades
227 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 990 100 "" -o Test=ButAutomaticUpgrades -t stable
228 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 990 500 990 "" -o Test=ButAutomaticUpgrades -t backports
229
230 rm incoming/backports.main.pkglist incoming/backports.main.srclist
231 buildsimplenativepackage "coolstuff" "all" "2.0~bpo2" "backports"
232 setupaptarchive
233
234 sed -i aptarchive/dists/backports/Release -e 1i"NotAutomatic: yes"
235 signreleasefiles
236 aptgetupdate
237
238 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 1 500 100 "" "2.0~bpo2" -o Test=NotAutomatic
239 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 1 990 100 "" "2.0~bpo2" -o Test=NotAutomatic -t stable
240 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 990 500 100 "" "2.0~bpo2" -o Test=NotAutomatic -t backports
241
242 sed -i aptarchive/dists/backports/Release -e 1i"ButAutomaticUpgrades: yes"
243 signreleasefiles
244 aptgetupdate
245
246 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 100 500 100 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades
247 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 100 990 100 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades -t stable
248 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 990 500 100 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades -t backports
249
250
251 tmppath=$(readlink -f .)
252
253 # Check 16-bit integers
254 echo "Package: coolstuff
255 Pin: release n=backports
256 Pin-Priority: 32767
257 " > rootdir/etc/apt/preferences
258
259 testsuccess aptget install -s coolstuff -o PinPriority=32767
260
261 echo "Package: coolstuff
262 Pin: release n=backports
263 Pin-Priority: -32768
264 " > rootdir/etc/apt/preferences
265 testsuccess aptget install -s coolstuff -o PinPriority=-32768
266
267
268 # Check for 32-bit integers
269 echo "Package: coolstuff
270 Pin: release n=backports
271 Pin-Priority: 32768
272 " > rootdir/etc/apt/preferences
273
274 testfailureequal "Reading package lists...
275 E: ${tmppath}/rootdir/etc/apt/preferences: Value 32768 is outside the range of valid pin priorities (-32768 to 32767)" \
276 aptget install -s coolstuff -o PinPriority=32768
277
278
279 echo "Package: coolstuff
280 Pin: release n=backports
281 Pin-Priority: -32769
282 " > rootdir/etc/apt/preferences
283
284 testfailureequal "Reading package lists...
285 E: ${tmppath}/rootdir/etc/apt/preferences: Value -32769 is outside the range of valid pin priorities (-32768 to 32767)" \
286 aptget install -s coolstuff -o PinPriority=-32769
287
288 # Check for 64-bit integers
289
290 echo "Package: coolstuff
291 Pin: release n=backports
292 Pin-Priority: 2147483648
293 " > rootdir/etc/apt/preferences
294
295 testfailureequal "Reading package lists...
296 E: Cannot convert 2147483648 to integer - (34: Numerical result out of range)
297 E: ${tmppath}/rootdir/etc/apt/preferences: Value 2147483648 is outside the range of valid pin priorities (-32768 to 32767)" \
298 aptget install -s coolstuff -o PinPriority=2147483648
299
300 # Check for 0
301 echo "Package: coolstuff
302 Pin: release n=backports
303 Pin-Priority: 0
304 " > rootdir/etc/apt/preferences
305
306 testfailureequal "Reading package lists...
307 E: No priority (or zero) specified for pin" \
308 aptget install -s coolstuff -o PinPriority=0