#!/bin/sh set -e TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment configarchitecture 'amd64' insertpackage 'testing' 'foo' 'all' '1' insertpackage 'unstable' 'foo' 'all' '2' insertpackage 'experimental' 'foo' 'all' '1:1' insertinstalledpackage 'foo' 'all' '3' setupaptarchive --no-update mkdir -p rootdir/var/lib/apt/lists/partial testsuccess test -d rootdir/var/lib/apt/lists/partial # nothing to do always works (part 1) for cmd in aptget apt; do for sub in distclean dist-clean; do testsuccess $cmd $sub testsuccess $cmd $sub -s done done testsuccess test -d rootdir/var/lib/apt/lists/partial testsuccess apt update # nothing to do always works (part 2) for cmd in aptget apt; do for sub in clean autoclean auto-clean; do testsuccess $cmd $sub testsuccess $cmd $sub -s done done # generate some dirt and clean it up generatedirt() { touch rootdir/var/lib/apt/lists/partial/http.debian.net_debian_dists_sid_main_i18n_Translation-en mkdir -p rootdir/var/cache/apt/archives/lost+found touch rootdir/var/cache/apt/archives/foo_1_all.deb touch rootdir/var/cache/apt/archives/foo_1%3a1_all.deb touch rootdir/var/cache/apt/archives/foo_2%3a1_all.deb touch rootdir/var/cache/apt/archives/foo_2_all.deb touch rootdir/var/cache/apt/archives/foo_3_all.deb touch rootdir/var/cache/apt/archives/foo_4_all.deb } generatedirt testsuccess aptget autoclean testsuccess test -e rootdir/var/lib/apt/lists/partial/http.debian.net_debian_dists_sid_main_i18n_Translation-en testsuccess test -e rootdir/var/cache/apt/archives/foo_1_all.deb testsuccess test -e rootdir/var/cache/apt/archives/foo_1%3a1_all.deb testfailure test -e rootdir/var/cache/apt/archives/foo_2%3a1_all.deb testsuccess test -e rootdir/var/cache/apt/archives/foo_2_all.deb testfailure test -e rootdir/var/cache/apt/archives/foo_3_all.deb testfailure test -e rootdir/var/cache/apt/archives/foo_4_all.deb generatedirt testsuccess aptget clean testfailure test -e rootdir/var/lib/apt/lists/partial/http.debian.net_debian_dists_sid_main_i18n_Translation-en testfailure test -e rootdir/var/cache/apt/archives/foo_1_all.deb testfailure test -e rootdir/var/cache/apt/archives/foo_1%3a1_all.deb testfailure test -e rootdir/var/cache/apt/archives/foo_2%3a1_all.deb testfailure test -e rootdir/var/cache/apt/archives/foo_2_all.deb testfailure test -e rootdir/var/cache/apt/archives/foo_3_all.deb testfailure test -e rootdir/var/cache/apt/archives/foo_4_all.deb if [ "$(id -u)" != '0' ]; then msgmsg 'No clean if lock can not be acquired' touch rootdir/var/cache/apt/archives/foo_4_all.deb touch rootdir/var/cache/apt/archives/lock chmod 444 rootdir/var/cache/apt/archives/lock testfailure apt clean testsuccess test -e rootdir/var/cache/apt/archives/foo_4_all.deb chmod 644 rootdir/var/cache/apt/archives/lock fi msgmsg 'distclean' listcurrentlistsdirectory > aptdistclean.before testsuccessequal '3' grep -c -e 'Release$' aptdistclean.before testsuccess grep -e 'Packages$' -e 'Sources$' -e 'Translation-*$' aptdistclean.before testsuccess apt distclean listcurrentlistsdirectory > aptdistclean.after testfailure cmp aptdistclean.before aptdistclean.after testsuccessequal '3' grep -c -e 'Release$' aptdistclean.after testfailureequal '0' grep -c -e 'Packages$' -e 'Sources$' -e 'Translation-*$' aptdistclean.after for dirt in Packages.gz Sources.xz Release2gpg Release_Packages; do touch "rootdir/var/lib/apt/lists/_foo_bar_$dirt" done listcurrentlistsdirectory > aptdistclean.before testsuccess apt distclean listcurrentlistsdirectory > aptdistclean.cleaned testsuccess cmp aptdistclean.after aptdistclean.cleaned directorygone() { rm -rf "$1" testsuccess apt autoclean testfailure test -d "$1" testsuccess apt clean # clean creates an empty partial directory via GetLock if [ "$(basename "$1")" = 'partial' ]; then testsuccess test -d "$1" else testfailure test -d "$1" fi } msgmsg 'Partial directory missing' directorygone 'rootdir/var/cache/apt/archives/partial' directorygone 'rootdir/var/lib/apt/lists/partial' msgmsg 'Archives directory missing' directorygone 'rootdir/var/cache/apt/archives' directorygone 'rootdir/var/lib/apt/lists' msgmsg 'apt directory missing' directorygone 'rootdir/var/cache/apt' directorygone 'rootdir/var/lib/apt'