test-pdiff-usage 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. #!/bin/sh
  2. set -e
  3. TESTDIR="$(readlink -f "$(dirname "$0")")"
  4. . "$TESTDIR/framework"
  5. setupenvironment
  6. configarchitecture 'i386'
  7. LOWCOSTEXT='lz4'
  8. buildaptarchive
  9. setupflataptarchive
  10. changetowebserver
  11. cat >rootdir/etc/apt/apt.conf.d/contents.conf <<EOF
  12. Acquire::IndexTargets::deb::Contents {
  13. MetaKey "\$(COMPONENT)/Contents-\$(ARCHITECTURE)";
  14. ShortDescription "Contents";
  15. Description "\$(RELEASE)/\$(COMPONENT) \$(ARCHITECTURE) Contents";
  16. MetaKey "\$(COMPONENT)/Contents-\$(ARCHITECTURE)";
  17. flatMetaKey "Contents-\$(ARCHITECTURE)";
  18. flatDescription "\$(RELEASE) \$(ARCHITECTURE) Contents";
  19. };
  20. EOF
  21. PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')"
  22. echo 'contents for stuff' > aptarchive/Contents-i386
  23. compressfile aptarchive/Contents-i386
  24. echo 'hacked' > aptarchive/hacked-i386
  25. compressfile aptarchive/hacked-i386
  26. wasmergeused() {
  27. testsuccess apt update "$@"
  28. msgtest 'No intermediate patch files' 'still exist'
  29. local EDS="$(find rootdir/var/lib/apt/lists -name '*.ed' -o -name '*.ed.*')"
  30. if [ -z "$EDS" ]; then
  31. msgpass
  32. else
  33. echo
  34. echo "$EDS"
  35. msgfail
  36. fi
  37. if echo "$*" | grep -q -- '-o test::cannot-use-pdiff=1'; then
  38. msgtest 'Check if pdiff was' 'not used'
  39. cp -a rootdir/tmp/testsuccess.output rootdir/tmp/aptupdate.output
  40. testsuccess --nomsg grep "diff/Index with Message: Couldn't parse pdiff index" rootdir/tmp/aptupdate.output
  41. return;
  42. fi
  43. msgtest 'Check if the right pdiff merger was used'
  44. if grep -q '^pkgAcqIndexMergeDiffs::Done(): rred' rootdir/tmp/testsuccess.output; then
  45. if echo "$*" | grep -q -- '-o Acquire::PDiffs::Merge=1'; then
  46. msgpass
  47. else
  48. msgfail "Merge shouldn't have been used, but was"
  49. fi
  50. elif echo "$*" | grep -q -- '-o Acquire::PDiffs::Merge=1'; then
  51. msgfail "Merge should have been used, but wasn't"
  52. else
  53. msgpass
  54. fi
  55. }
  56. testrun() {
  57. configcompression '.' 'xz'
  58. msgmsg "Testcase: setup the base with: $*"
  59. find aptarchive -name 'Packages*' -type f -delete
  60. cp "${PKGFILE}" aptarchive/Packages
  61. compressfile 'aptarchive/Packages'
  62. generatereleasefiles
  63. signreleasefiles
  64. rm -rf aptarchive/Packages.diff rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists-bak
  65. testsuccess aptget update "$@"
  66. cp -a rootdir/var/lib/apt/lists rootdir/var/lib/apt/lists-bak
  67. testnopackage newstuff
  68. testsuccessequal "$(cat "${PKGFILE}")
  69. " aptcache show apt oldstuff
  70. configcompression '.' 'gz'
  71. # see if the code deals properly with leftover partial files
  72. partialleftovers
  73. msgmsg "Testcase: apply with one patch: $*"
  74. find aptarchive -name 'Packages*' -type f -delete
  75. cp "${PKGFILE}-new" aptarchive/Packages
  76. compressfile 'aptarchive/Packages'
  77. mkdir -p aptarchive/Packages.diff
  78. PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
  79. diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
  80. cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
  81. PATCHINDEX='aptarchive/Packages.diff/Index'
  82. echo "SHA256-Current: $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
  83. SHA256-History:
  84. 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
  85. $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
  86. SHA256-Patches:
  87. e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
  88. $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
  89. SHA256-Download:
  90. d2a1b33187ed2d248eeae3b1223ea71791ea35f2138a713ed371332a6421f467 197 2010-08-18-2013.28.gz
  91. $(sha256sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz") $(basename "${PATCHFILE}.gz")" > "$PATCHINDEX"
  92. generatereleasefiles '+1hour'
  93. signreleasefiles
  94. find aptarchive -name 'Packages*' -type f -delete
  95. wasmergeused "$@"
  96. testnopackage oldstuff
  97. testsuccessequal "$(cat "${PKGFILE}-new")
  98. " aptcache show apt newstuff
  99. msgmsg "Testcase: SHA1-only patches are not used: $*"
  100. find aptarchive -name 'Packages*' -type f -delete
  101. cp "${PKGFILE}-new" aptarchive/Packages
  102. compressfile 'aptarchive/Packages'
  103. mkdir -p aptarchive/Packages.diff
  104. PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
  105. diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
  106. cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
  107. PATCHINDEX='aptarchive/Packages.diff/Index'
  108. echo "SHA1-Current: $(sha1sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
  109. SHA1-History:
  110. 9f4148e06d7faa37062994ff10d0c842d7017513 33053002 2010-08-18-2013.28
  111. $(sha1sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
  112. SHA1-Patches:
  113. 7651fc0ac57cd83d41c63195a9342e2db5650257 19722 2010-08-18-2013.28
  114. $(sha1sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
  115. SHA1-Download:
  116. 2365ac0ac57cde3d43c63145e8251a3bd5410213 197 2010-08-18-2013.28.gz
  117. $(sha1sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz") $(basename "${PATCHFILE}.gz")" > "$PATCHINDEX"
  118. generatereleasefiles '+1hour'
  119. signreleasefiles
  120. rm -rf rootdir/var/lib/apt/lists
  121. cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
  122. wasmergeused "$@" -o test::cannot-use-pdiff=1
  123. testnopackage oldstuff
  124. testsuccessequal "$(cat "${PKGFILE}-new")
  125. " aptcache show apt newstuff
  126. msgmsg "Testcase: no download-hashes patches are not used: $*"
  127. find aptarchive -name 'Packages*' -type f -delete
  128. cp "${PKGFILE}-new" aptarchive/Packages
  129. compressfile 'aptarchive/Packages'
  130. mkdir -p aptarchive/Packages.diff
  131. PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
  132. diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
  133. cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
  134. PATCHINDEX='aptarchive/Packages.diff/Index'
  135. echo "SHA256-Current: $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
  136. SHA256-History:
  137. 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
  138. $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
  139. SHA256-Patches:
  140. e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
  141. $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")" > "$PATCHINDEX"
  142. generatereleasefiles '+1hour'
  143. signreleasefiles
  144. rm -rf rootdir/var/lib/apt/lists
  145. cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
  146. wasmergeused "$@" -o test::cannot-use-pdiff=1
  147. testnopackage oldstuff
  148. testsuccessequal "$(cat "${PKGFILE}-new")
  149. " aptcache show apt newstuff
  150. msgmsg "Testcase: apply with two patches: $*"
  151. cp "${PKGFILE}-new" aptarchive/Packages
  152. echo '
  153. Package: futurestuff
  154. Version: 1.0
  155. Architecture: i386
  156. Maintainer: Joe Sixpack <joe@example.org>
  157. Installed-Size: 202
  158. Filename: pool/futurestuff_1.0_i386.deb
  159. Size: 202200
  160. SHA256: b46fd154615edaae5ba33c56a5cc0e7deaef23e2da3e4f129727fd660f28f050
  161. Description: some cool and shiny future stuff
  162. This package will appear in the next next mirror update
  163. Description-md5: d5f89fbbc2ce34c455dfee9b67d82b6b' >> aptarchive/Packages
  164. compressfile 'aptarchive/Packages'
  165. PATCHFILE2="aptarchive/Packages.diff/$(date -d 'now + 1hour' '+%Y-%m-%d-%H%M.%S')"
  166. diff -e "${PKGFILE}-new" aptarchive/Packages > "${PATCHFILE2}" || true
  167. cat "$PATCHFILE2" | gzip > "${PATCHFILE2}.gz"
  168. echo "SHA256-Current: $(sha256sum aptarchive/Packages | cut -d' ' -f 1) $(stat -c%s aptarchive/Packages)
  169. SHA256-History:
  170. 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
  171. $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
  172. $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new") $(basename "${PATCHFILE2}")
  173. SHA256-Patches:
  174. e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
  175. $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
  176. $(sha256sum "${PATCHFILE2}" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE2}") $(basename "${PATCHFILE2}")
  177. SHA256-Download:
  178. d2a1b33187ed2d248eeae3b1223ea71791ea35f2138a713ed371332a6421f467 197 2010-08-18-2013.28.gz
  179. $(sha256sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz") $(basename "${PATCHFILE}.gz")
  180. $(sha256sum "${PATCHFILE2}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE2}.gz") $(basename "${PATCHFILE2}.gz")" > "$PATCHINDEX"
  181. generatereleasefiles '+2hour'
  182. signreleasefiles
  183. cp -a aptarchive/Packages Packages-future
  184. find aptarchive -name 'Packages*' -type f -delete
  185. rm -rf rootdir/var/lib/apt/lists
  186. cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
  187. wasmergeused "$@"
  188. testnopackage oldstuff
  189. testsuccessequal "$(cat Packages-future)
  190. " aptcache show apt newstuff futurestuff
  191. # we reuse the archive state of the previous test here
  192. msgmsg "Testcase: pdiff handling is stopped if transaction fails $*"
  193. rm -rf rootdir/var/lib/apt/lists
  194. cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
  195. cp Packages-future aptarchive/Packages
  196. rm -f rootdir/var/lib/apt/lists/*_Contents-*
  197. webserverconfig 'aptwebserver::overwrite::.*Contents-.*::filename' '/hacked-i386.gz'
  198. testfailure apt update "$@" -o Debug::pkgAcquire::Worker=1 -o Debug::Acquire::http=1
  199. webserverconfig 'aptwebserver::overwrite::.*Contents-.*::filename' '/Contents-i386.gz'
  200. cp rootdir/tmp/testfailure.output patchdownload.output
  201. testfailure grep 'rred:600' patchdownload.output
  202. testnopackage newstuff futurestuff
  203. testsuccessequal "$(cat "${PKGFILE}")
  204. " aptcache show apt oldstuff
  205. # we reuse the archive state of the previous test here
  206. msgmsg "Testcase: downloading a patch fails, but successful fallback: $*"
  207. rm -rf rootdir/var/lib/apt/lists
  208. cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
  209. cp Packages-future aptarchive/Packages
  210. rm "${PATCHFILE}.gz"
  211. testsuccess apt update "$@"
  212. cp rootdir/tmp/testsuccess.output patchdownload.output
  213. testsuccess grep '^Falling back to normal index file acquire' patchdownload.output
  214. testnopackage oldstuff
  215. testsuccessequal "$(cat Packages-future)
  216. " aptcache show apt newstuff futurestuff
  217. msgmsg "Testcase: patch applying fails, but successful fallback: $*"
  218. rm -rf rootdir/var/lib/apt/lists
  219. cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
  220. cp "${PKGFILE}-new" aptarchive/Packages
  221. compressfile 'aptarchive/Packages'
  222. mkdir -p aptarchive/Packages.diff
  223. PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
  224. diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
  225. cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
  226. PATCHINDEX='aptarchive/Packages.diff/Index'
  227. echo "SHA256-Current: $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
  228. SHA256-History:
  229. 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
  230. $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
  231. SHA256-Patches:
  232. e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
  233. $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
  234. SHA256-Download:
  235. d2a1b33187ed2d248eeae3b1223ea71791ea35f2138a713ed371332a6421f467 197 2010-08-18-2013.28.gz
  236. $(sha256sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz") $(basename "${PATCHFILE}.gz")" > "$PATCHINDEX"
  237. # needs to look like a valid command, otherwise the parser will fail before hashes are checked
  238. echo '1d' > "$PATCHFILE"
  239. cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
  240. generatereleasefiles '+1hour'
  241. signreleasefiles
  242. testsuccess apt update "$@"
  243. cp -f rootdir/tmp/testsuccess.output rootdir/tmp/aptupdate.output
  244. testsuccess grep 'Hash Sum mismatch' rootdir/tmp/aptupdate.output
  245. testnopackage oldstuff
  246. testsuccessequal "$(cat "${PKGFILE}-new")
  247. " aptcache show apt newstuff
  248. msgmsg "Testcase: pdiff patch bigger than index itself: $*"
  249. rm -rf rootdir/var/lib/apt/lists
  250. cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
  251. # the general testcode checks for leftovers in partial, but as this file
  252. # is never touched in this test as it exits earlier its not a leftover…
  253. rm -f rootdir/var/lib/apt/lists/partial/localhost:${APTHTTPPORT}_Packages
  254. cp "${PKGFILE}-new" aptarchive/Packages
  255. compressfile 'aptarchive/Packages'
  256. mkdir -p aptarchive/Packages.diff
  257. PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)"
  258. diff -e "${PKGFILE}" "${PKGFILE}-new" > "${PATCHFILE}" || true
  259. cat "$PATCHFILE" | gzip > "${PATCHFILE}.gz"
  260. PATCHINDEX='aptarchive/Packages.diff/Index'
  261. echo "SHA256-Current: $(sha256sum "${PKGFILE}-new" | cut -d' ' -f 1) $(stat -c%s "${PKGFILE}-new")
  262. SHA256-History:
  263. 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b 33053002 2010-08-18-2013.28
  264. $(sha256sum "$PKGFILE" | cut -d' ' -f 1) $(stat -c%s "$PKGFILE") $(basename "$PATCHFILE")
  265. SHA256-Patches:
  266. e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 19722 2010-08-18-2013.28
  267. $(sha256sum "$PATCHFILE" | cut -d' ' -f 1) $(stat -c%s "$PATCHFILE") $(basename "$PATCHFILE")
  268. SHA256-Download:
  269. d2a1b33187ed2d248eeae3b1223ea71791ea35f2138a713ed371332a6421f467 197 2010-08-18-2013.28.gz
  270. $(sha256sum "${PATCHFILE}.gz" | cut -d' ' -f 1) $(stat -c%s "${PATCHFILE}.gz")000 $(basename "${PATCHFILE}.gz")" > "$PATCHINDEX"
  271. generatereleasefiles '+1hour'
  272. signreleasefiles
  273. testsuccess apt update -o Debug::pkgAcquire::Diffs=1 "$@"
  274. cp -f rootdir/tmp/testsuccess.output rootdir/tmp/aptupdate.output
  275. testsuccess grep 'bytes (Limit is' rootdir/tmp/aptupdate.output
  276. testnopackage oldstuff
  277. testsuccessequal "$(cat "${PKGFILE}-new")
  278. " aptcache show apt newstuff
  279. }
  280. echo 'Debug::pkgAcquire::Diffs "true";
  281. Debug::Acquire::Transaction "true";
  282. Debug::pkgAcquire::rred "true";' > rootdir/etc/apt/apt.conf.d/rreddebug.conf
  283. testcase() {
  284. testrun -o Acquire::PDiffs::Merge=0 -o APT::Get::List-Cleanup=1 "$@"
  285. testrun -o Acquire::PDiffs::Merge=1 -o APT::Get::List-Cleanup=1 "$@"
  286. testrun -o Acquire::PDiffs::Merge=0 -o APT::Get::List-Cleanup=0 "$@"
  287. testrun -o Acquire::PDiffs::Merge=1 -o APT::Get::List-Cleanup=0 "$@"
  288. }
  289. partialleftovers() { touch "rootdir/var/lib/apt/lists-bak/partial/localhost:${APTHTTPPORT}_Packages"; }
  290. aptautotest_apt_update() { aptautotest_aptget_update "$@"; testsuccess test -e "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_Packages"; }
  291. testcase -o Acquire::IndexTargets::deb::Packages::KeepCompressed=false
  292. partialleftovers() { touch "rootdir/var/lib/apt/lists-bak/partial/localhost:${APTHTTPPORT}_Packages.$LOWCOSTEXT"; }
  293. aptautotest_apt_update() { aptautotest_aptget_update "$@"; testsuccess test -e "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_Packages.$LOWCOSTEXT"; }
  294. testcase -o Acquire::IndexTargets::deb::Packages::KeepCompressed=true
  295. partialleftovers() { touch "rootdir/var/lib/apt/lists-bak/partial/localhost:${APTHTTPPORT}_redirectme_Packages.$LOWCOSTEXT"; }
  296. webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "http://0.0.0.0:${APTHTTPPORT}/"
  297. rewritesourceslist "http://localhost:${APTHTTPPORT}/redirectme"
  298. aptautotest_apt_update() {
  299. aptautotest_aptget_update "$@"
  300. testsuccess test -e "rootdir/var/lib/apt/lists/localhost:${APTHTTPPORT}_redirectme_Packages.$LOWCOSTEXT"
  301. testempty find rootdir/var/lib/apt/lists -type f \! \( -name lock -o -name '*_redirectme_*' \)
  302. }
  303. testcase -o Acquire::IndexTargets::deb::Packages::KeepCompressed=true