use 'best' hash for source authentication
[ntk/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 testequal "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 aptgetupdate() {
29 # just to be sure that no old files are used
30 rm -rf rootdir/var/lib/apt
31 if aptget update -qq 2>&1 | grep '^E: '; then
32 msgwarn 'apt-get update failed with an error'
33 fi
34 }
35
36 ### not signed archive
37
38 aptgetupdate
39 testequalpolicy 100 500
40 testequalpolicy 990 500 -t now
41
42 sed -i aptarchive/Release -e 1i"NotAutomatic: yes"
43 aptgetupdate
44
45 testequalpolicy 100 1 -o Test=NotAutomatic
46 testequalpolicy 990 1 -o Test=NotAutomatic -t now
47
48 sed -i aptarchive/Release -e 1i"ButAutomaticUpgrades: yes"
49 aptgetupdate
50
51 testequalpolicy 100 100 -o Test=ButAutomaticUpgrades
52 testequalpolicy 990 100 -o Test=ButAutomaticUpgrades -t now
53
54 sed -i aptarchive/Release -e 's#NotAutomatic: yes#NotAutomatic: no#' -e '/ButAutomaticUpgrades: / d'
55 aptgetupdate
56
57 testequalpolicy 100 500 -o Test=Automatic
58 testequalpolicy 990 500 -o Test=Automatic -t now
59
60 sed -i aptarchive/Release -e '/NotAutomatic: / d' -e '/ButAutomaticUpgrades: / d'
61
62 ### signed but no key in trusted
63
64 signreleasefiles 'Marvin Paranoid'
65 aptgetupdate
66 testequalpolicy 100 500
67 testequalpolicy 990 500 -t now
68
69 sed -i aptarchive/Release -e 1i"NotAutomatic: yes"
70 signreleasefiles 'Marvin Paranoid'
71 aptgetupdate
72
73 testequalpolicy 100 1 -o Test=NotAutomatic
74 testequalpolicy 990 1 -o Test=NotAutomatic -t now
75
76 sed -i aptarchive/Release -e 1i"ButAutomaticUpgrades: yes"
77 signreleasefiles 'Marvin Paranoid'
78 aptgetupdate
79
80 testequalpolicy 100 100 -o Test=ButAutomaticUpgrades
81 testequalpolicy 990 100 -o Test=ButAutomaticUpgrades -t now
82
83 sed -i aptarchive/Release -e 's#NotAutomatic: yes#NotAutomatic: no#' -e '/ButAutomaticUpgrades: / d'
84 signreleasefiles 'Marvin Paranoid'
85 aptgetupdate
86
87 testequalpolicy 100 500 -o Test=Automatic
88 testequalpolicy 990 500 -o Test=Automatic -t now
89
90 ### signed and valid key
91
92 buildsimplenativepackage "coolstuff" "all" "1.0" "stable"
93 buildsimplenativepackage "coolstuff" "all" "2.0~bpo1" "backports"
94
95 setupaptarchive
96
97 testequalpolicycoolstuff() {
98 local INSTALLED="${1:-(none)}"
99 local CANDIDATE="${2:-(none)}"
100 local AB="$3"
101 local AS="$4"
102 local PB="$5"
103 local PINVERSION="$6"
104 if [ -n "$PINVERSION" ]; then
105 PINVERSION="Package pin: $PINVERSION
106 "
107 fi
108 local IS=""
109 local IB=""
110 local SB=""
111 local SS=""
112 [ "$1" = "2.0~bpo1" ] && IB="***" && SB="
113 100 $STATUS" || IB=" "
114 [ "$1" = "1.0" ] && IS="***" && SS="
115 100 $STATUS" || IS=" "
116 local BPO1ARCHIVE=""
117 local BPO2ARCHIVE=""
118 if [ ! "$7" = "2.0~bpo2" ]; then
119 BPO1ARCHIVE=" $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE}/ backports/main i386 Packages"
120 else
121 BPO2ARCHIVE="
122 2.0~bpo2 $PB
123 $(echo "$AB" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE}/ backports/main i386 Packages"
124 SB="$(echo "$SB" | tail -n 1)"
125 shift
126 fi
127 shift 6
128 testequal "coolstuff:
129 Installed: $INSTALLED
130 Candidate: $CANDIDATE
131 ${PINVERSION}Version table:${BPO2ARCHIVE}
132 $IB 2.0~bpo1 $PB
133 ${BPO1ARCHIVE}$SB
134 $IS 1.0 $PB
135 $(echo "$AS" | awk '{ printf("%3s\n",$0) }') file:${APTARCHIVE}/ stable/main i386 Packages$SS" \
136 aptcache policy coolstuff -o Policy=${INSTALLED}-${CANDIDATE}-${AB}-${AS}-${PB} $*
137 }
138
139 testequalpolicycoolstuff "" "2.0~bpo1" 500 500 0 ""
140 testequalpolicycoolstuff "" "1.0" 500 990 0 "" -t stable
141 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 0 "" -t backports
142 echo "Package: *
143 Pin: release n=backports
144 Pin-Priority: 200" > rootdir/etc/apt/preferences
145 testequalpolicycoolstuff "" "1.0" 200 500 0 "" -o Test=GlobalPin
146 testequalpolicycoolstuff "" "1.0" 200 990 0 "" -o Test=GlobalPin -t stable
147 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 0 "" -o Test=GlobalPin -t backports
148 echo "Package: *
149 Pin: release n=backports
150 Pin-Priority: 600" > rootdir/etc/apt/preferences
151 testequalpolicycoolstuff "" "2.0~bpo1" 600 500 0 "" -o Test=GlobalPin
152 testequalpolicycoolstuff "" "1.0" 600 990 0 "" -o Test=GlobalPin -t stable
153 echo "Package: coolstuff
154 Pin: release n=backports
155 Pin-Priority: 200" > rootdir/etc/apt/preferences
156 #FIXME: policy can't differentiate between two sources where one has a package specific pin in place
157 # testequalpolicycoolstuff "" "1.0" 500 500 200 "2.0~bpo1" -o Test=PackagePin
158 # testequalpolicycoolstuff "" "1.0" 990 500 200 "2.0~bpo1" -o Test=PackagePin -t backports
159 testequalpolicycoolstuff "" "1.0" 500 990 200 "2.0~bpo1" -o Test=PackagePin -t stable
160 echo "Package: coolstuff
161 Pin: release n=backports
162 Pin-Priority: 600" > rootdir/etc/apt/preferences
163 testequalpolicycoolstuff "" "2.0~bpo1" 500 500 600 "2.0~bpo1" -o Test=PackagePin
164 testequalpolicycoolstuff "" "1.0" 500 990 600 "2.0~bpo1" -o Test=PackagePin -t stable
165 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=PackagePin -t backports
166
167 echo "Package: coolstuff
168 Pin: release n=backports
169 Pin-Priority: -1" > rootdir/etc/apt/preferences
170 # testequalpolicycoolstuff "" "1.0" 500 500 -1 "2.0~bpo1" -o Test=PackagePin
171 # testequalpolicycoolstuff "" "1.0" 990 500 -1 "2.0~bpo1" -o Test=PackagePin -t backports
172 # testequalpolicycoolstuff "" "1.0" 500 990 -1 "2.0~bpo1" -o Test=PackagePin -t stable
173
174 rm rootdir/etc/apt/preferences
175 sed -i aptarchive/dists/backports/Release -e 1i"NotAutomatic: yes"
176 signreleasefiles
177 aptgetupdate
178
179 testequalpolicycoolstuff "" "1.0" 1 500 0 "" -o Test=NotAutomatic
180 testequalpolicycoolstuff "" "1.0" 1 990 0 "" -o Test=NotAutomatic -t stable
181 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 0 "" -o Test=NotAutomatic -t backports
182 echo "Package: *
183 Pin: release n=backports
184 Pin-Priority: 200" > rootdir/etc/apt/preferences
185 testequalpolicycoolstuff "" "1.0" 200 500 0 "" -o Test=NotAutomatic
186 echo "Package: *
187 Pin: release n=backports
188 Pin-Priority: 600" > rootdir/etc/apt/preferences
189 testequalpolicycoolstuff "" "2.0~bpo1" 600 500 0 "" -o Test=NotAutomatic
190 testequalpolicycoolstuff "" "1.0" 600 990 0 "" -o Test=NotAutomatic -t stable
191 echo "Package: coolstuff
192 Pin: release n=backports
193 Pin-Priority: 200" > rootdir/etc/apt/preferences
194 testequalpolicycoolstuff "" "1.0" 1 500 200 "2.0~bpo1" -o Test=NotAutomatic
195 echo "Package: coolstuff
196 Pin: release n=backports
197 Pin-Priority: 600" > rootdir/etc/apt/preferences
198 testequalpolicycoolstuff "" "2.0~bpo1" 1 500 600 "2.0~bpo1" -o Test=NotAutomatic
199 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=NotAutomatic -t backports
200 testequalpolicycoolstuff "" "1.0" 1 990 600 "2.0~bpo1" -o Test=NotAutomatic -t stable
201
202 rm rootdir/etc/apt/preferences
203 sed -i aptarchive/dists/backports/Release -e 1i"ButAutomaticUpgrades: yes"
204 signreleasefiles
205 aptgetupdate
206
207 testequalpolicycoolstuff "" "1.0" 100 500 0 "" -o Test=ButAutomaticUpgrades
208 testequalpolicycoolstuff "" "1.0" 100 990 0 "" -o Test=ButAutomaticUpgrades -t stable
209 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 0 "" -o Test=ButAutomaticUpgrades -t backports
210 echo "Package: *
211 Pin: release n=backports
212 Pin-Priority: 200" > rootdir/etc/apt/preferences
213 testequalpolicycoolstuff "" "1.0" 200 500 0 "" -o Test=ButAutomaticUpgrades
214 echo "Package: *
215 Pin: release n=backports
216 Pin-Priority: 600" > rootdir/etc/apt/preferences
217 testequalpolicycoolstuff "" "2.0~bpo1" 600 500 0 "" -o Test=ButAutomaticUpgrades
218 testequalpolicycoolstuff "" "1.0" 600 990 0 "" -o Test=ButAutomaticUpgrades -t stable
219 echo "Package: coolstuff
220 Pin: release n=backports
221 Pin-Priority: 200" > rootdir/etc/apt/preferences
222 testequalpolicycoolstuff "" "1.0" 100 500 200 "2.0~bpo1" -o Test=ButAutomaticUpgrades
223 echo "Package: coolstuff
224 Pin: release n=backports
225 Pin-Priority: 600" > rootdir/etc/apt/preferences
226 testequalpolicycoolstuff "" "2.0~bpo1" 100 500 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades
227 testequalpolicycoolstuff "" "2.0~bpo1" 990 500 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades -t backports
228 testequalpolicycoolstuff "" "1.0" 100 990 600 "2.0~bpo1" -o Test=ButAutomaticUpgrades -t stable
229
230 rm rootdir/etc/apt/preferences
231 testsuccess aptget install coolstuff -y
232 testequalpolicycoolstuff "1.0" "1.0" 100 500 0 "" -o Test=ButAutomaticUpgrades
233 testsuccess aptget dist-upgrade -y
234 testequalpolicycoolstuff "1.0" "1.0" 100 500 0 "" -o Test=ButAutomaticUpgrades
235 testequalpolicycoolstuff "1.0" "1.0" 100 990 0 "" -o Test=ButAutomaticUpgrades -t stable
236 testequalpolicycoolstuff "1.0" "2.0~bpo1" 990 500 0 "" -o Test=ButAutomaticUpgrades -t backports
237
238 testsuccess aptget install coolstuff -t backports -y
239 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 500 0 "" -o Test=ButAutomaticUpgrades
240 testsuccess aptget dist-upgrade -y
241 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 500 0 "" -o Test=ButAutomaticUpgrades
242 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 100 990 0 "" -o Test=ButAutomaticUpgrades -t stable
243 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 990 500 0 "" -o Test=ButAutomaticUpgrades -t backports
244
245 rm incoming/backports.main.pkglist incoming/backports.main.srclist
246 buildsimplenativepackage "coolstuff" "all" "2.0~bpo2" "backports"
247 setupaptarchive
248
249 sed -i aptarchive/dists/backports/Release -e 1i"NotAutomatic: yes"
250 signreleasefiles
251 aptgetupdate
252
253 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 1 500 0 "" "2.0~bpo2" -o Test=NotAutomatic
254 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo1" 1 990 0 "" "2.0~bpo2" -o Test=NotAutomatic -t stable
255 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 990 500 0 "" "2.0~bpo2" -o Test=NotAutomatic -t backports
256
257 sed -i aptarchive/dists/backports/Release -e 1i"ButAutomaticUpgrades: yes"
258 signreleasefiles
259 aptgetupdate
260
261 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 100 500 0 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades
262 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 100 990 0 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades -t stable
263 testequalpolicycoolstuff "2.0~bpo1" "2.0~bpo2" 990 500 0 "" "2.0~bpo2" -o Test=ButAutomaticUpgrades -t backports