test-apt-update-transactions 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. if [ "$(id -u)" = '0' ]; then
  42. chown _apt:root rootdir/var/lib/apt/lists/partial
  43. fi
  44. listcurrentlistsdirectory > listsdir.lst
  45. testrun 'listsdir.lst'
  46. msgmsg 'Test with initial data over' "$1"
  47. testsuccess aptget update
  48. listcurrentlistsdirectory > listsdir.lst
  49. testrun 'listsdir.lst'
  50. }
  51. testsetup 'file'
  52. changetowebserver
  53. testsetup 'http'