1
0
Fork 0
apt/test/integration/test-failing-maintainer-scripts
Daniel Baumann 6810ba718b
Adding upstream version 3.0.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-20 21:10:43 +02:00

90 lines
2.4 KiB
Bash
Executable file

#!/bin/sh
set -e
TESTDIR="$(readlink -f "$(dirname "$0")")"
. "$TESTDIR/framework"
setupenvironment
configarchitecture 'native'
configdpkgnoopchroot
# create a bunch of failures
createfailure() {
setupsimplenativepackage "failure-$1" 'native' '1.0' 'unstable' 'Depends: dependee'
BUILDDIR="incoming/failure-$1-1.0"
echo '#!/bin/sh
exit 29' > "${BUILDDIR}/debian/$1"
buildpackage "$BUILDDIR" 'unstable' 'main' 'native'
rm -rf "$BUILDDIR"
}
buildsimplenativepackage 'dependee' 'native' '1.0' 'unstable'
createfailure 'preinst'
createfailure 'postinst'
createfailure 'prerm'
createfailure 'postrm'
setupaptarchive
# setup some pre- and post- invokes to check the output isn't garbled later
APTHOOK="${TMPWORKINGDIRECTORY}/rootdir/usr/bin/apthook"
echo '#!/bin/sh
echo "$1: START"
echo "$1: MaiN"
echo "$1: ENd"' > "$APTHOOK"
chmod +x "$APTHOOK"
echo "DPKG::Pre-Invoke:: \"${APTHOOK} PRE\";
DPKG::Post-Invoke:: \"${APTHOOK} POST\";" > rootdir/etc/apt/apt.conf.d/99apthooks
testmyfailure() {
local PROGRESS='rootdir/tmp/progress.log'
exec 3> "$PROGRESS"
testfailure "$@" -o APT::Status-Fd=3
msgtest 'Test for failure message of maintainerscript in' 'console log'
local TEST='rootdir/tmp/testfailure.output'
if grep -q 'exit status 29' "$TEST"; then
msgpass
else
cat "$TEST"
msgfail
fi
msgtest 'Test for proper execution of invoke scripts in' 'console log'
if grep -q '^PRE: START$' "$TEST" &&
grep -q '^PRE: MaiN$' "$TEST" &&
grep -q '^PRE: ENd$' "$TEST" &&
grep -q '^POST: START$' "$TEST" &&
grep -q '^POST: MaiN$' "$TEST" &&
grep -q '^POST: ENd$' "$TEST"; then
msgpass
else
cat "$TEST"
msgfail
fi
msgtest 'Test for failure message of maintainerscript in' 'progress log'
if grep -q '^pmerror:.\+exit status 29$' "$PROGRESS"; then
msgpass
else
cat "$PROGRESS"
msgfail
fi
testmarkedauto 'dependee'
}
testmyfailure aptget install failure-preinst -y
rm -f rootdir/var/lib/dpkg/status
testmyfailure aptget install failure-postinst -y
rm -f rootdir/var/lib/dpkg/status
testsuccess aptget install failure-prerm -y
testdpkginstalled failure-prerm
testmyfailure aptget purge failure-prerm -y
rm -f rootdir/var/lib/dpkg/status
testsuccess aptget install failure-postrm -y
testdpkginstalled failure-postrm
testmyfailure aptget purge failure-postrm -y
# FIXME: test with output going to a PTY as it usually does
if false; then
rm -f rootdir/var/lib/dpkg/status
apt install dependee -y || true
apt install failure-postinst -y || true
fi