use 'best' hash for source authentication
[ntk/apt.git] / test / integration / test-kernel-helper-autoremove
dissimilarity index 92%
index 2b165d1..22c3689 100755 (executable)
-#!/bin/sh
-
-set -e
-
-# setup testdir
-TESTDIR=$(readlink -f $(dirname $0))
-. $TESTDIR/framework
-
-TMPDIR=$(mktemp -d)
-cd $TMPDIR
-addtrap "cd /; rm -rf $TMPDIR"
-
-# create mock environment
-mkdir apt.conf.d
-cat > aptconfig.conf <<EOF
-Dir::Etc::parts "$TMPDIR/apt.conf.d";
-Dir::bin::dpkg "$TMPDIR/fake-dpkg";
-EOF
-APT_CONFIG=aptconfig.conf
-export APT_CONFIG
-
-# install fake-dpkg into it
-install -m755 $TESTDIR/test-kernel-helper-autoremove.fake-dpkg $TMPDIR/fake-dpkg
-
-# run the helper
-sh ${TESTDIR}/../../debian/apt.auto-removal.sh
-
-msgtest 'Check that kernel autoremoval list is correctly created'
-# and ensure its there, valid and version 10.0.0-1 is there too
-test -e $TMPDIR/apt.conf.d/01autoremove-kernels && msgpass || msgfail
-
-msgtest 'Check that most recent kernel is saved from autoremoval'
-apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic" && msgpass || msgfail
-
-# ... and also that the running kernel is excluded
-msgtest 'Check that running kernel is saved from autoremoval'
-apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)" && msgpass || msgfail
-
-# and that the old kernel is *not* excluded from autoremoval
-msgtest 'Check that older kernels are not excluded from autoremoval'
-apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic" && msgfail || msgpass
-
-msgtest "Check that the older kernel is retained when it's being installed"
-sh ${TESTDIR}/../../debian/apt.auto-removal.sh 1.0.01-2-generic
-test -e $TMPDIR/apt.conf.d/01autoremove-kernels
-if ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-10.0.0-1-generic" \
-   || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-$(uname -r)" \
-   || ! apt-config -c ${APT_CONFIG} dump|grep -q "APT::NeverAutoRemove::.*\^linux-image-1\.0\.01-2-generic"
-then
-       msgfail
-else
-       msgpass
-fi
-
-# done
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'amd64'
+
+# the executed script would use the installed apt-config,
+# which is outside of our control
+msgtest 'Check that the installed apt-config supports' '--no-empty'
+if /usr/bin/apt-config dump --no-empty >/dev/null 2>&1; then
+       msgpass
+else
+       msgskip
+       exit 0
+fi
+
+CURRENTKERNEL="linux-image-$(uname -r)"
+insertinstalledpackage "$CURRENTKERNEL" 'amd64' '1'
+insertinstalledpackage 'linux-image-1.0.0-2-generic' 'amd64' '1.0.0-2'
+insertinstalledpackage 'linux-image-100.0.0-1-generic' 'amd64' '100.0.0-1'
+insertinstalledpackage 'linux-image-amd64' 'amd64' '100.0.0-1'
+# ensure that the '.' is really a dot and not a wildcard
+insertinstalledpackage 'linux-headers-1000000-1-generic' 'amd64' '100.0.0-1'
+
+testsuccess aptmark auto "$CURRENTKERNEL" 'linux-image-1.0.0-2-generic' 'linux-image-100.0.0-1-generic' 'linux-headers-1000000-1-generic'
+
+cat > ./fake-dpkg <<EOF
+#!/bin/sh
+exec $(aptconfig dump --no-empty --format='%v ' 'DPKG::options') "\$@"
+EOF
+chmod +x ./fake-dpkg
+echo 'Dir::Bin::dpkg "./fake-dpkg";' > rootdir/etc/apt/apt.conf.d/99fakedpkg
+
+# install fake-dpkg into it
+catfail() {
+       echo >&2
+       echo >&2 '### List of protected kernels:'
+       cat >&2 protected.list
+       msgfail
+}
+
+testprotected() {
+       rm -f rootdir/etc/apt/apt.conf.d/01autoremove-kernels protected.list
+
+       testsuccess runapt sh ${TESTDIR}/../../debian/apt.auto-removal.sh "$@"
+
+       msgtest 'Check kernel autoremoval protection list' 'is created'
+       test -e rootdir/etc/apt/apt.conf.d/01autoremove-kernels && msgpass || msgfail
+
+       msgtest 'Check kernel autoremoval protection list' 'can be dumped'
+       aptconfig dump --no-empty --format '%v%n' 'APT::NeverAutoRemove' >protected.list 2>&1 && msgpass || catfail
+
+       msgtest 'Check kernel autoremoval protection list' 'can be parsed'
+       grep -q '^[A-Z]: ' protected.list && catfail || msgpass
+
+       msgtest 'Check kernel autoremoval protection list includes' 'most recent kernel'
+       grep -q '^\^linux-image-100\\\.0\\\.0-1-generic\$$' protected.list && msgpass || catfail
+
+       msgtest 'Check kernel autoremoval protection list includes' 'running kernel'
+       grep -q "^\\^linux-image-$(uname -r | sed -e 's#\.#\\\\.#g')\\\$\$" protected.list && msgpass || catfail
+}
+
+testequal "Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+   linux-headers-1000000-1-generic (100.0.0-1)
+   linux-image-1.0.0-2-generic (1.0.0-2)
+   linux-image-100.0.0-1-generic (100.0.0-1)
+   $CURRENTKERNEL (1)
+0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
+Remv linux-headers-1000000-1-generic [100.0.0-1]
+Remv linux-image-1.0.0-2-generic [1.0.0-2]
+Remv linux-image-100.0.0-1-generic [100.0.0-1]
+Remv $CURRENTKERNEL [1]" aptget autoremove -sV
+
+testprotected
+msgtest 'Check kernel autoremoval protection list does not include' 'old kernel'
+grep -q '^\^linux-image-1\\\.0\\\.0-2-generic\$$' protected.list && catfail || msgpass
+
+testequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+  linux-headers-1000000-1-generic linux-image-1.0.0-2-generic
+0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
+Remv linux-headers-1000000-1-generic [100.0.0-1]
+Remv linux-image-1.0.0-2-generic [1.0.0-2]' aptget autoremove -s
+
+testprotected 1.0.0-2-generic
+msgtest 'Check kernel autoremoval protection list includes' 'installed kernel'
+grep -q '^\^linux-image-1\\\.0\\\.0-2-generic\$$' protected.list && msgpass || catfail
+testequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+The following packages will be REMOVED:
+  linux-headers-1000000-1-generic
+0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
+Remv linux-headers-1000000-1-generic [100.0.0-1]' aptget autoremove -s