#!/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'