From 4e6a7e260eb713318b1b5019a72073050242ac3c Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 25 Nov 2014 10:50:58 +0100 Subject: properly handle already reinstall pkgs in ordering The bugreport itself describes the case of the ordering code detecting a loop where none is present, but the testcase finds also cases in which there is actually a loop and we fail to realize it. --reinstall can be considered an interactive command through and it usually doesn't encounter such "hard" problems (= looping essentials), so this is less serious than it sounds at first. Closes: 770291 --- test/integration/test-bug-770291-reinstall | 98 ++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100755 test/integration/test-bug-770291-reinstall (limited to 'test/integration/test-bug-770291-reinstall') diff --git a/test/integration/test-bug-770291-reinstall b/test/integration/test-bug-770291-reinstall new file mode 100755 index 000000000..ea1f57ede --- /dev/null +++ b/test/integration/test-bug-770291-reinstall @@ -0,0 +1,98 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'i386' + +insertpackage 'unstable,installed' 'libc6' 'i386' '1' +insertpackage 'unstable,installed' 'libselinux1' 'i386' '1' + +cp rootdir/var/lib/dpkg/status dpkg.status + +insertpackage 'unstable,installed' 'init' 'i386' '1' 'Depends: systemd-sysv +Essential: yes' +insertpackage 'unstable,installed' 'systemd-sysv' 'i386' '215-5+b1' 'Depends: systemd (= 215-5+b1) +Pre-Depends: systemd' +# fun fact: we need these two pre-depends to get systemd ordered before systemd-sysv as +# many pre-depends mean: do early (as they are a pain, so get them out of the way early) +insertpackage 'unstable,installed' 'systemd' 'i386' '215-5+b1' 'Pre-Depends: libc6, libselinux1' + +# depends loop +insertpackage 'unstable,installed' 'dependsA' 'i386' '1' 'Depends: dependsB +Essential: yes' +insertpackage 'unstable,installed' 'dependsB' 'i386' '1' 'Depends: dependsA +Essential: yes' + +# pre-depends loop +insertpackage 'unstable,installed' 'predependsA' 'i386' '1' 'Pre-Depends: predependsB +Essential: yes' +insertpackage 'unstable,installed' 'predependsB' 'i386' '1' 'Pre-Depends: predependsA +Essential: yes' + +# pre-depends-to-depends loop +insertpackage 'unstable,installed' 'predependsdependsA' 'i386' '1' 'Pre-Depends: predependsdependsB +Essential: yes' +insertpackage 'unstable,installed' 'predependsdependsB' 'i386' '1' 'Depends: predependsdependsA +Essential: yes' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded. +Inst systemd [215-5+b1] (215-5+b1 unstable [i386]) +Conf systemd (215-5+b1 unstable [i386]) +Inst systemd-sysv [215-5+b1] (215-5+b1 unstable [i386]) +Conf systemd-sysv (215-5+b1 unstable [i386])' aptget install --reinstall systemd systemd-sysv -s + +testequal 'Reading package lists... +Building dependency tree... +0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded. +Inst dependsA [1] (1 unstable [i386]) +Inst dependsB [1] (1 unstable [i386]) +Conf dependsB (1 unstable [i386]) +Conf dependsA (1 unstable [i386])' aptget install --reinstall dependsA dependsB -s + +# there is a chance dpkg can actually do these, BUT this depends on the maintainerscripts (not) present +# which is very very risky to depend on (and apt doesn't know about that anyhow). +testfailure aptget install --reinstall predependsA predependsB -s -o Debug::pkgPackageManager=1 +testequal "E: Couldn't configure predependsA:i386, probably a dependency cycle." tail -n1 rootdir/tmp/testfailure.output + +# FIXME: the error message is a catch all here, not like the one above +testfailure aptget install --reinstall predependsdependsA predependsdependsB -s -o Debug::pkgPackageManager=1 +testequal "E: Could not configure 'predependsdependsB:i386'. " tail -n1 rootdir/tmp/testfailure.output + + +msgmsg 'While we are at it, lets try these loops without reinstall as well' +cp dpkg.status rootdir/var/lib/dpkg/status + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + systemd systemd-sysv +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst systemd (215-5+b1 unstable [i386]) +Conf systemd (215-5+b1 unstable [i386]) +Inst systemd-sysv (215-5+b1 unstable [i386]) +Conf systemd-sysv (215-5+b1 unstable [i386])' aptget install systemd systemd-sysv -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + dependsA dependsB +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst dependsA (1 unstable [i386]) [] +Inst dependsB (1 unstable [i386]) +Conf dependsB (1 unstable [i386]) +Conf dependsA (1 unstable [i386])' aptget install dependsA dependsB -s + +# there is a chance dpkg can actually do these, BUT this depends on the maintainerscripts (not) present +# which is very very risky to depend on (and apt doesn't know about that anyhow). +testfailure aptget install predependsA predependsB -s -o Debug::pkgPackageManager=1 +testequal "E: Couldn't configure predependsA:i386, probably a dependency cycle." tail -n1 rootdir/tmp/testfailure.output + +# FIXME: the error message is a catch all here, not like the one above +testfailure aptget install predependsdependsA predependsdependsB -s -o Debug::pkgPackageManager=1 +testequal "E: Could not configure 'predependsdependsB:i386'. " tail -n1 rootdir/tmp/testfailure.output -- cgit v1.2.3 From 25b86db159fbc3c043628e285c0c1ef24dec2c6e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 10 Mar 2015 00:59:44 +0100 Subject: test exitcode as well as string equality We use test{success,failure} now all over the place in the framework, so its only consequencial to do this in the situations in which we test for a specific output as well. Git-Dch: Ignore --- test/integration/test-bug-770291-reinstall | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'test/integration/test-bug-770291-reinstall') diff --git a/test/integration/test-bug-770291-reinstall b/test/integration/test-bug-770291-reinstall index ea1f57ede..a5b2aff07 100755 --- a/test/integration/test-bug-770291-reinstall +++ b/test/integration/test-bug-770291-reinstall @@ -39,7 +39,7 @@ Essential: yes' setupaptarchive -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... 0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded. Inst systemd [215-5+b1] (215-5+b1 unstable [i386]) @@ -47,7 +47,7 @@ Conf systemd (215-5+b1 unstable [i386]) Inst systemd-sysv [215-5+b1] (215-5+b1 unstable [i386]) Conf systemd-sysv (215-5+b1 unstable [i386])' aptget install --reinstall systemd systemd-sysv -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... 0 upgraded, 0 newly installed, 2 reinstalled, 0 to remove and 0 not upgraded. Inst dependsA [1] (1 unstable [i386]) @@ -68,7 +68,7 @@ testequal "E: Could not configure 'predependsdependsB:i386'. " tail -n1 rootdir/ msgmsg 'While we are at it, lets try these loops without reinstall as well' cp dpkg.status rootdir/var/lib/dpkg/status -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: systemd systemd-sysv @@ -78,7 +78,7 @@ Conf systemd (215-5+b1 unstable [i386]) Inst systemd-sysv (215-5+b1 unstable [i386]) Conf systemd-sysv (215-5+b1 unstable [i386])' aptget install systemd systemd-sysv -s -testequal 'Reading package lists... +testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: dependsA dependsB -- cgit v1.2.3