summaryrefslogtreecommitdiff
path: root/test/integration/test-apt-update-ims
blob: 3a66a546f4b630a2731cdd49859f17bce1aad0c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#!/bin/sh
set -e

TESTDIR=$(readlink -f $(dirname $0))
. $TESTDIR/framework
setupenvironment
configarchitecture 'amd64'

insertpackage 'unstable' 'unrelated' 'all' '0.5~squeeze1'
insertsource 'unstable' 'unrelated' 'all' '0.5~squeeze1'

setupaptarchive --no-update
changetowebserver

runtest() {
    if [ -n "$1" ]; then
	configallowinsecurerepositories 'true'
    else
	configallowinsecurerepositories 'false'
    fi

    rm -rf rootdir/var/lib/apt/lists/

    local TEST="test${1:-success}"
    $TEST aptget update
    if [ "$1" = 'failure' ]; then
	# accept the outdated Release file so we can check Hit behaviour
	"test${2:-success}" aptget update -o Acquire::Min-ValidTime=9999999
    fi
    listcurrentlistsdirectory > listsdir.lst
    testsuccess grep '_Packages\(\.gz\)\?$' listsdir.lst
    testsuccess grep '_Sources\(\.gz\)\?$' listsdir.lst
    testsuccess grep '_Translation-en\(\.gz\)\?$' listsdir.lst

    # ensure no leftovers in partial
    testfailure ls 'rootdir/var/lib/apt/lists/partial/*'

    # check that I-M-S header is kept in redirections
    echo "$EXPECT" | sed -e 's#(invalid since [^)]\+)#(invalid since)#' > expected.output
    $TEST aptget update  -o Debug::pkgAcquire::Worker=0 -o Debug::Acquire::http=0 -q=0
    sed -i -e 's#(invalid since [^)]\+)#(invalid since)#' rootdir/tmp/${TEST}.output
    testequal "$(cat expected.output)" cat rootdir/tmp/${TEST}.output
    testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"

    # ensure that we still do a hash check for other files on ims hit of Release
    if grep -q '^Hit:[0-9]\+ .* InRelease$' expected.output || ! grep -q '^Ign:[0-9]\+ .* Release\(\.gpg\)\?$' expected.output; then
	    $TEST aptget update -o Debug::Acquire::gpgv=1
	    cp rootdir/tmp/${TEST}.output goodsign.output
	    testfileequal 'listsdir.lst' "$(listcurrentlistsdirectory)"
	    testsuccess grep '^Got GOODSIG, key ID:GOODSIG' goodsign.output
    fi

    # ensure no leftovers in partial
    testfailure ls 'rootdir/var/lib/apt/lists/partial/*'
}

msgmsg 'InRelease'
EXPECT="Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
Reading package lists..."
echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest
echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest

msgmsg 'Release/Release.gpg'
EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
  404  Not Found
Hit:2 http://localhost:${APTHTTPPORT} unstable Release
Reading package lists..."
find aptarchive -name 'InRelease' -delete
echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest
echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest

msgmsg 'Release only'
EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
  404  Not Found
Hit:2 http://localhost:${APTHTTPPORT} unstable Release
Ign:3 http://localhost:${APTHTTPPORT} unstable Release.gpg
  404  Not Found
Reading package lists...
W: The repository 'http://localhost:${APTHTTPPORT} unstable Release' is not signed.
N: Data from such a repository can not be authenticated and is therefore potentially dangerous to use."
find aptarchive -name 'Release.gpg' -delete
echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest 'warning'
echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest 'warning'


# make the release file old
find aptarchive -name '*Release' -exec sed -i \
	-e "s#^Date: .*\$#Date: $(date -d '-2 weeks' '+%a, %d %b %Y %H:%M:%S %Z')#" \
	-e '/^Valid-Until: / d' -e "/^Date: / a\
Valid-Until: $(date -d '-1 weeks' '+%a, %d %b %Y %H:%M:%S %Z')" '{}' \;
signreleasefiles

msgmsg 'expired InRelease'
EXPECT="Hit:1 http://localhost:${APTHTTPPORT} unstable InRelease
Reading package lists...
E: Release file for http://localhost:${APTHTTPPORT}/dists/unstable/InRelease is expired (invalid since). Updates for this repository will not be applied."
echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest 'failure'
echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest 'failure'

msgmsg 'expired Release/Release.gpg'
EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
  404  Not Found
Hit:2 http://localhost:${APTHTTPPORT} unstable Release
Reading package lists...
E: Release file for http://localhost:${APTHTTPPORT}/dists/unstable/Release is expired (invalid since). Updates for this repository will not be applied."
find aptarchive -name 'InRelease' -delete
echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest 'failure'
echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest 'failure'

msgmsg 'expired Release only'
EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
  404  Not Found
Hit:2 http://localhost:${APTHTTPPORT} unstable Release
Ign:3 http://localhost:${APTHTTPPORT} unstable Release.gpg
  404  Not Found
Reading package lists...
W: The repository 'http://localhost:${APTHTTPPORT} unstable Release' is not signed.
N: Data from such a repository can not be authenticated and is therefore potentially dangerous to use.
E: Release file for http://localhost:${APTHTTPPORT}/dists/unstable/Release is expired (invalid since). Updates for this repository will not be applied."
find aptarchive -name 'Release.gpg' -delete
echo 'Acquire::GzipIndexes "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest 'failure' 'warning'
echo 'Acquire::GzipIndexes "1";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest 'failure' 'warning'


msgmsg 'no Release at all'
EXPECT="Ign:1 http://localhost:${APTHTTPPORT} unstable InRelease
  404  Not Found
Ign:2 http://localhost:${APTHTTPPORT} unstable Release
  404  Not Found
Ign:3 http://localhost:${APTHTTPPORT} unstable/main Sources
  404  Not Found
Ign:4 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
  404  Not Found
Ign:5 http://localhost:${APTHTTPPORT} unstable/main Translation-en
  404  Not Found
Ign:3 http://localhost:${APTHTTPPORT} unstable/main Sources
  404  Not Found
Ign:4 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
  404  Not Found
Ign:5 http://localhost:${APTHTTPPORT} unstable/main Translation-en
  404  Not Found
Ign:3 http://localhost:${APTHTTPPORT} unstable/main Sources
  404  Not Found
Ign:4 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
  404  Not Found
Ign:5 http://localhost:${APTHTTPPORT} unstable/main Translation-en
  404  Not Found
Hit:3 http://localhost:${APTHTTPPORT} unstable/main Sources
Hit:4 http://localhost:${APTHTTPPORT} unstable/main amd64 Packages
Hit:5 http://localhost:${APTHTTPPORT} unstable/main Translation-en
Reading package lists...
W: The repository 'http://localhost:${APTHTTPPORT} unstable Release' does not have a Release file.
N: Data from such a repository can not be authenticated and is therefore potentially dangerous to use."
find aptarchive -name '*Release*' -delete
echo 'Acquire::GzipIndexes "0";
Acquire::PDiffs "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest 'warning'
echo 'Acquire::GzipIndexes "1";
Acquire::PDiffs "0";' > rootdir/etc/apt/apt.conf.d/02compressindex
runtest 'warning'