test-apt-update-transactions 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/bin/sh
  2. set -e
  3. # ensure that an update will only succeed entirely or not at all
  4. TESTDIR=$(readlink -f $(dirname $0))
  5. . $TESTDIR/framework
  6. setupenvironment
  7. configarchitecture 'i386'
  8. insertpackage 'unstable' 'foo' 'all' '1.0'
  9. insertsource 'unstable' 'foo' 'all' '1.0'
  10. setupaptarchive --no-update
  11. breakfile() {
  12. mv "$1" "${1}.bak"
  13. cat > "$1" <<EOF
  14. Package: bar
  15. EOF
  16. compressfile "$1"
  17. }
  18. restorefile() {
  19. mv "${1}.bak" "$1"
  20. }
  21. testrun() {
  22. # produce an unsigned repository
  23. find aptarchive \( -name 'Release.gpg' -o -name 'InRelease' \) -delete
  24. testfailure aptget update --no-allow-insecure-repositories
  25. testfileequal "$1" "$(listcurrentlistsdirectory)"
  26. # signed but broken
  27. signreleasefiles
  28. breakfile aptarchive/dists/unstable/main/binary-i386/Packages
  29. testfailure aptget update
  30. testfileequal "$1" "$(listcurrentlistsdirectory)"
  31. restorefile aptarchive/dists/unstable/main/binary-i386/Packages
  32. breakfile aptarchive/dists/unstable/main/source/Sources
  33. testfailure aptget update
  34. testfileequal "$1" "$(listcurrentlistsdirectory)"
  35. restorefile aptarchive/dists/unstable/main/source/Sources
  36. }
  37. testsetup() {
  38. msgmsg 'Test with no initial data over' "$1"
  39. rm -rf rootdir/var/lib/apt/lists
  40. mkdir -m 700 -p rootdir/var/lib/apt/lists/partial
  41. touch rootdir/var/lib/apt/lists/lock
  42. if [ "$(id -u)" = '0' ]; then
  43. chown _apt:root rootdir/var/lib/apt/lists/partial
  44. fi
  45. listcurrentlistsdirectory > listsdir.lst
  46. testrun 'listsdir.lst'
  47. msgmsg 'Test with initial data over' "$1"
  48. testsuccess aptget update
  49. listcurrentlistsdirectory > listsdir.lst
  50. testrun 'listsdir.lst'
  51. }
  52. testsetup 'file'
  53. changetowebserver
  54. testsetup 'http'