X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/4a808deaac462e7714a345dac676c6da294a2ee0..e07f3d5a9ed2870a0e2909cc1e5e55e826086c53:/test/integration/test-pdiff-usage diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage index 2318448f5..59a3fd8af 100755 --- a/test/integration/test-pdiff-usage +++ b/test/integration/test-pdiff-usage @@ -10,12 +10,32 @@ LOWCOSTEXT='lz4' buildaptarchive setupflataptarchive -changetowebserver -o aptwebserver::support::modified-since=false +changetowebserver + +cat >rootdir/etc/apt/apt.conf.d/contents.conf < aptarchive/Contents-i386 +compressfile aptarchive/Contents-i386 +echo 'hacked' > aptarchive/hacked-i386 +compressfile aptarchive/hacked-i386 wasmergeused() { + if echo "$*" | grep -q -- '-o test::cannot-use-pdiff=1'; then + find rootdir/var/lib/apt/lists/partial -name '*-patched*' -delete + fi + testsuccess apt update "$@" + #apt update "$@" 2>&1 | tee rootdir/tmp/testsuccess.output msgtest 'No intermediate patch files' 'still exist' local EDS="$(find rootdir/var/lib/apt/lists -name '*.ed' -o -name '*.ed.*')" @@ -46,6 +66,8 @@ wasmergeused() { else msgpass fi + + testequal '1' grep -c rred:601 rootdir/tmp/testsuccess.output } testrun() { @@ -65,7 +87,7 @@ testrun() { configcompression '.' 'gz' # see if the code deals properly with leftover partial files - touch rootdir/var/lib/apt/lists-bak/partial/localhost:${APTHTTPPORT}_Packages + partialleftovers msgmsg "Testcase: apply with one patch: $*" find aptarchive -name 'Packages*' -type f -delete @@ -95,6 +117,34 @@ SHA256-Download: testsuccessequal "$(cat "${PKGFILE}-new") " aptcache show apt newstuff + msgmsg "Testcase: apply with compressed Index and one patch: $*" + cp "${PKGFILE}-new" aptarchive/Packages + compressfile 'aptarchive/Packages' + cat "$PATCHINDEX" | gzip > "${PATCHINDEX}.gz" + generatereleasefiles '+1hour' + signreleasefiles + find aptarchive -name 'Packages*' -type f -delete + rm "$PATCHINDEX" + rm -rf rootdir/var/lib/apt/lists + cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists + wasmergeused "$@" + testnopackage oldstuff + testsuccessequal "$(cat "${PKGFILE}-new") +" aptcache show apt newstuff + + msgmsg "Testcase: apply with by-hash compressed Index and one patch: $*" + local NORMAL="$(readlink -f "./aptarchive/Packages.diff")" + local BYHASH="${NORMAL}/by-hash/SHA256" + mkdir -p "${BYHASH}" + find "${NORMAL}/" -maxdepth 1 -name "Index*" -exec mv '{}' "$BYHASH" \; + ln -s "${BYHASH}/Index.gz" "${BYHASH}/$(sha256sum "${BYHASH}/Index.gz" | cut -f1 -d' ')" + rm -rf rootdir/var/lib/apt/lists + cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists + wasmergeused "$@" -o Acquire::By-Hash=force + testnopackage oldstuff + testsuccessequal "$(cat "${PKGFILE}-new") +" aptcache show apt newstuff + msgmsg "Testcase: SHA1-only patches are not used: $*" find aptarchive -name 'Packages*' -type f -delete cp "${PKGFILE}-new" aptarchive/Packages @@ -192,6 +242,29 @@ SHA256-Download: testsuccessequal "$(cat Packages-future) " aptcache show apt newstuff futurestuff + # we reuse the archive state of the previous test here + msgmsg "Testcase: pdiff handling is stopped if transaction fails $*" + rm -rf rootdir/var/lib/apt/lists + cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists + cp Packages-future aptarchive/Packages + rm -f rootdir/var/lib/apt/lists/*_Contents-* + webserverconfig 'aptwebserver::overwrite::.*Contents-.*::filename' '/hacked-i386.gz' + testfailure apt update "$@" + webserverconfig 'aptwebserver::overwrite::.*Contents-.*::filename' '/Contents-i386.gz' + cp rootdir/tmp/testfailure.output patchdownload.output + testfailure grep 'rred:600' patchdownload.output + testnopackage newstuff futurestuff + testsuccessequal "$(cat "${PKGFILE}") +" aptcache show apt oldstuff + + # we reuse the entire state of the previous test here + msgmsg "Testcase: good files from previous fails are picked up from partial: $*" + wasmergeused "$@" + testfailure grep '^GET /Packages.diff/Index HTTP/1.1' rootdir/tmp/testsuccess.output + testnopackage oldstuff + testsuccessequal "$(cat Packages-future) +" aptcache show apt newstuff futurestuff + # we reuse the archive state of the previous test here msgmsg "Testcase: downloading a patch fails, but successful fallback: $*" rm -rf rootdir/var/lib/apt/lists @@ -262,8 +335,7 @@ SHA256-Download: $(sha256sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz")000 $(basename "${PATCHFILE}.gz")" > "$PATCHINDEX" generatereleasefiles '+1hour' signreleasefiles - testsuccess apt update -o Debug::pkgAcquire::Diffs=1 "$@" - cp -f rootdir/tmp/testsuccess.output rootdir/tmp/aptupdate.output + wasmergeused "$@" -o test::cannot-use-pdiff=1 testsuccess grep 'bytes (Limit is' rootdir/tmp/aptupdate.output testnopackage oldstuff testsuccessequal "$(cat "${PKGFILE}-new") @@ -271,7 +343,10 @@ SHA256-Download: } echo 'Debug::pkgAcquire::Diffs "true"; Debug::Acquire::Transaction "true"; -Debug::pkgAcquire::rred "true";' > rootdir/etc/apt/apt.conf.d/rreddebug.conf +Debug::pkgAcquire::Worker "true"; +Debug::Acquire::http "true"; +Debug::pkgAcquire "true"; +Debug::Acquire::rred "true";' > rootdir/etc/apt/apt.conf.d/rreddebug.conf testcase() { testrun -o Acquire::PDiffs::Merge=0 -o APT::Get::List-Cleanup=1 "$@" @@ -279,7 +354,27 @@ testcase() { testrun -o Acquire::PDiffs::Merge=0 -o APT::Get::List-Cleanup=0 "$@" testrun -o Acquire::PDiffs::Merge=1 -o APT::Get::List-Cleanup=0 "$@" } +generatepartialleftovers() { + for f in "$@"; do + cat "${PKGFILE}" "${PKGFILE}" > "rootdir/var/lib/apt/lists-bak/partial/localhost:${APTHTTPPORT}_${f}" + printf '\n\nInvalid\nStanza: yes\n\n' >> "rootdir/var/lib/apt/lists-bak/partial/localhost:${APTHTTPPORT}_${f}" + done +} + +partialleftovers() { generatepartialleftovers 'Packages' 'Packages-patched'; } aptautotest_apt_update() { aptautotest_aptget_update "$@"; testsuccess test -e "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_Packages"; } testcase -o Acquire::IndexTargets::deb::Packages::KeepCompressed=false +partialleftovers() { generatepartialleftovers "Packages.${LOWCOSTEXT}" "Packages-patched.${LOWCOSTEXT}"; } aptautotest_apt_update() { aptautotest_aptget_update "$@"; testsuccess test -e "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_Packages.$LOWCOSTEXT"; } testcase -o Acquire::IndexTargets::deb::Packages::KeepCompressed=true + + +partialleftovers() { generatepartialleftovers "redirectme_Packages.${LOWCOSTEXT}" "redirectme_Packages-patched.${LOWCOSTEXT}"; } +webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "http://0.0.0.0:${APTHTTPPORT}/" +rewritesourceslist "http://localhost:${APTHTTPPORT}/redirectme" +aptautotest_apt_update() { + aptautotest_aptget_update "$@" + testsuccess test -e "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_redirectme_Packages.$LOWCOSTEXT" + testempty find rootdir/var/lib/apt/lists -type f \! \( -name lock -o -name '*_redirectme_*' \) +} +testcase -o Acquire::IndexTargets::deb::Packages::KeepCompressed=true