X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/a4221092e50af0b74040f5b4ee800c78b05fd84e..bd95e2b29d1048f4c8ada07def7b1a5da5eb7716:/test/integration/test-apt-update-transactions

diff --git a/test/integration/test-apt-update-transactions b/test/integration/test-apt-update-transactions
index 247334991..ab678c133 100755
--- a/test/integration/test-apt-update-transactions
+++ b/test/integration/test-apt-update-transactions
@@ -1,24 +1,91 @@
 #!/bin/sh
 set -e
 
-TESTDIR=$(readlink -f $(dirname $0))
-. $TESTDIR/framework
+# ensure that an update will only succeed entirely or not at all
+
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
 
 setupenvironment
-configarchitecture "i386"
+configarchitecture 'i386'
+configcompression '.' 'gz'
 
-insertpackage 'unstable' 'foo' 'all' '1.0'
+insertpackage 'unstable' 'foo' 'i386' '1.0'
+insertsource 'unstable' 'foo' 'i386' '1.0'
 
 setupaptarchive --no-update
-changetowebserver
 
-# break package file
-cat > aptarchive/dists/unstable/main/binary-i386/Packages <<EOF
+breakfile() {
+	mv "${1}" "${1}.bak"
+	mv "${1}.gz" "${1}.gz.bak"
+	cat > "$1" <<EOF
 Package: bar
 EOF
-compressfile aptarchive/dists/unstable/main/binary-i386/Packages '+1hour'
+	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'
 
-# ensure that a update will only succeed entirely or not at all
-testfailure aptget update
-testequal "partial" ls rootdir/var/lib/apt/lists
+changetohttpswebserver
 
+testsetup 'https'