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

# ensure that an update will only succeed entirely or not at all

TESTDIR="$(readlink -f "$(dirname "$0")")"
. "$TESTDIR/framework"

setupenvironment
configarchitecture 'i386'
configcompression '.' 'gz'

insertpackage 'unstable' 'foo' 'i386' '1.0'
insertsource 'unstable' 'foo' 'i386' '1.0'

setupaptarchive --no-update

breakfile() {
	mv "${1}" "${1}.bak"
	mv "${1}.gz" "${1}.gz.bak"
	cat > "$1" <<EOF
Package: bar
EOF
	compressfile "$1"
}
restorefile() {
	mv "${1}.bak" "$1"
	mv "${1}.gz.bak" "${1}.gz"
}

testrun() {
	rm -rf aptarchive/dists.good
	cp -a aptarchive/dists aptarchive/dists.good
	insertpackage 'unstable' 'bar' 'i386' '1.0'
	insertsource 'unstable' 'bar' 'i386' '1.0'
	buildaptarchivefromfiles '+1 hour'

	# produce an unsigned repository
	find aptarchive \( -name 'Release.gpg' -o -name 'InRelease' \) -delete
	testfailure aptget update --no-allow-insecure-repositories
	testfileequal "$1" "$(listcurrentlistsdirectory)"

	# signed but broken
	signreleasefiles

	onehashbroken() {
		rm -rf rootdir/var/lib/apt/lists/partial
		testfailure aptget update -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
		# each file generates two messages with this string
		testequal '2' grep --count 'Hash Sum mismatch' rootdir/tmp/testfailure.output
		testfileequal "$1" "$(listcurrentlistsdirectory)"
	}

	breakfile aptarchive/dists/unstable/main/binary-i386/Packages
	onehashbroken "$1"
	restorefile aptarchive/dists/unstable/main/binary-i386/Packages

	breakfile aptarchive/dists/unstable/main/source/Sources
	onehashbroken "$1"
	restorefile aptarchive/dists/unstable/main/source/Sources

	rm -rf aptarchive/dists
	cp -a aptarchive/dists.good aptarchive/dists
}

testsetup() {
	msgmsg 'Test with no initial data over' "$1"
	rm -rf rootdir/var/lib/apt/lists
	mkdir -p rootdir/var/lib/apt/lists/partial
	listcurrentlistsdirectory > listsdir.lst
	testrun 'listsdir.lst'

	msgmsg 'Test with initial data over' "$1"
	rm -rf rootdir/var/lib/apt/lists
	testsuccess aptget update -o Debug::pkgAcquire::Worker=1
	listcurrentlistsdirectory > listsdir.lst
	testrun 'listsdir.lst'
}

testsetup 'file'

changetowebserver
webserverconfig 'aptwebserver::support::modified-since' 'false' "$1"
webserverconfig 'aptwebserver::support::last-modified' 'false' "$1"  # curl is clever and sees hits here also
webserverconfig 'aptwebserver::response-header::Accept-Ranges' 'none' "$1"

testsetup 'http'

changetohttpswebserver

testsetup 'https'