summaryrefslogtreecommitdiff
path: root/test/integration/test-apt-update-filesize-mismatch
blob: b484c5161645d36a03a456b7f74a3a426101ee62 (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
#!/bin/sh
set -e

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

insertpackage 'testing' 'foo' 'all' '1'
insertpackage 'testing' 'foo2' 'all' '1'
insertsource 'testing' 'foo' 'all' '1'
insertsource 'testing' 'foo2' 'all' '1'

setupaptarchive --no-update
changetowebserver

find aptarchive \( -name 'Packages' -o -name 'Sources' -o -name 'Translation-en' \) -delete
for release in $(find aptarchive -name 'Release'); do
	cp "$release" "${release}.backup"
done

testsuccess aptget update
testsuccess aptcache show foo
testsuccess aptget install foo -s

for get in $(sed -n 's#^GET /\([^ ]\+\.gz\) HTTP.\+$#\1#p' aptarchive/webserver.log); do
	for ext in '' '.gz'; do
		COMPRESSFILE="$get"
		get="${get}${ext}"
		FILE="$(basename "$get" '.gz')"
		msgmsg 'Test filesize mismatch with file' "$FILE"
		rm -rf rootdir/var/lib/apt/lists

		for release in $(find aptarchive -name 'Release'); do
			SIZE="$(awk "/$FILE\$/ { print \$2; exit }" "${release}.backup")"
			sed "s# $SIZE # $(($SIZE + 111)) #" "${release}.backup" > "$release"
		done
		signreleasefiles

		TEST='testfailure'
		if expr match "$COMPRESSFILE" '^.*Translation-.*$' >/dev/null; then
			TEST='testsuccess'
			unset COMPRESSFILE
		fi
		$TEST aptget update -o Debug::pkgAcquire::Worker=1
		cp rootdir/tmp/${TEST}.output rootdir/tmp/update.output
		testsuccess grep -E "$(basename -s '.gz' "$COMPRESSFILE").*Hash Sum mismatch" rootdir/tmp/update.output
		$TEST aptcache show foo
		$TEST aptget install foo -s

		testfailure aptcache show bar
		testfailure aptget install bar -s
	done
done