#!/bin/sh set -e # dpkg implements versioned provides in commit 5bb02fe80e9f40dcad9703a72f67cf615ff217b5 # but previous versions seem to allow parsing, working and ignoring it. TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment configarchitecture 'amd64' 'i386' insertinstalledpackage 'webapp' 'all' '1' 'Depends: httpd' insertinstalledpackage 'webserver' 'all' '1' 'Provides: httpd' insertpackage 'unstable' 'webapp' 'all' '2' 'Depends: httpd (>= 2)' insertpackage 'unstable' 'webserver' 'amd64' '2' 'Provides: httpd (= 2)' insertpackage 'unstable' 'foreign-webserver' 'i386' '2' 'Multi-Arch: foreign Provides: httpd (= 2)' insertpackage 'experimental' 'webapp' 'all' '3' 'Depends: httpd (>= 1.5)' insertpackage 'experimental' 'webserver' 'amd64' '3' 'Provides: httpd (= 3)' insertpackage 'experimental' 'foreign-webserver' 'i386' '4' 'Multi-Arch: foreign Provides: httpd (= 4)' insertpackage 'experimental' 'cool-webapp' 'all' '4' 'Depends: httpd (>= 4)' # arch-qualified provides, see #777071 insertpackage 'unstable' 'foo' 'all' '1' 'Provides: bar:i386' insertpackage 'unstable' 'baz' 'i386,amd64' '1' 'Depends: bar' insertpackage 'experimental' 'baz' 'i386,amd64' '2' 'Depends: bar:i386' insertpackage 'experimental' 'baz-broken' 'i386' '2' 'Depends: bar:amd64' insertpackage 'unstable' 'next' 'amd64' '1' 'Multi-Arch: foreign Provides: next (= 2)' insertpackage 'unstable' 'needsrealnext' 'amd64,i386' '2' 'Depends: next (>= 2)' insertpackage 'unstable' 'virtualnext2' 'amd64' '1' 'Multi-Arch: foreign Provides: next2 (= 2)' insertpackage 'unstable' 'needsnext2' 'amd64,i386' '2' 'Depends: next2 (>= 2)' insertpackage 'unstable' 'virtualnext3' 'amd64' '1' 'Multi-Arch: no Provides: next3 (= 2)' insertpackage 'unstable' 'needsnext3' 'amd64,i386' '2' 'Depends: next3 (>= 2)' insertpackage 'unstable' 'selfprov' 'amd64' '2' 'Provides: selfprov (= 1)' insertpackage 'unstable' 'needsselfprov1' 'amd64' '1' 'Depends: selfprov (= 1)' insertpackage 'unstable' 'needsselfprov2' 'amd64' '1' 'Depends: selfprov (= 2)' insertpackage 'unstable' 'needsselfprov12' 'amd64' '1' 'Depends: selfprov (= 1), selfprov (= 2)' insertpackage 'unstable' 'needsselfprov123' 'amd64' '1' 'Depends: selfprov (= 1), selfprov (= 2), selfprov (= 3)' setupaptarchive SOMEPACKAGESCOULDNOT='Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies:' for binary in 'aptget' 'apt'; do for method in 'upgrade' 'dist-upgrade'; do for solver in 'internal' 'apt'; do if [ "$solver" = 'apt' ]; then HEADER='Execute external solver...' else HEADER='Calculating upgrade...' fi testsuccessequal "Reading package lists... Building dependency tree... $HEADER The following packages will be upgraded: webapp webserver 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Inst webserver [1] (2 unstable [amd64]) Inst webapp [1] (2 unstable [all]) Conf webserver (2 unstable [amd64]) Conf webapp (2 unstable [all])" $binary $method -s --solver $solver done done done for solver in 'internal' 'apt'; do msgmsg 'Testing with solver' "$solver" HEADER_PRE='Reading package lists... Building dependency tree...' HEADER_POST='Execute external solver...' HEADER="${HEADER_PRE}" if [ "$solver" = 'apt' ]; then HEADER="${HEADER} ${HEADER_POST}" fi testsuccessequal "$HEADER The following packages will be upgraded: webapp webserver 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Inst webserver [1] (2 unstable [amd64]) Inst webapp [1] (2 unstable [all]) Conf webserver (2 unstable [amd64]) Conf webapp (2 unstable [all])" aptget install webapp webserver -s --solver $solver testsuccessequal "$HEADER The following packages will be upgraded: webapp webserver 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Inst webserver [1] (2 unstable [amd64]) Inst webapp [1] (3 experimental [all]) Conf webserver (2 unstable [amd64]) Conf webapp (3 experimental [all])" aptget install webapp=3 webserver -s --solver $solver testsuccessequal "$HEADER The following packages will be upgraded: webapp webserver 2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Inst webserver [1] (3 experimental [amd64]) Inst webapp [1] (2 unstable [all]) Conf webserver (3 experimental [amd64]) Conf webapp (2 unstable [all])" aptget install webapp webserver=3 -s --solver $solver testsuccessequal "$HEADER The following NEW packages will be installed: foreign-webserver:i386 The following packages will be upgraded: webapp 1 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. Inst foreign-webserver:i386 (2 unstable [i386]) Inst webapp [1] (2 unstable [all]) Conf foreign-webserver:i386 (2 unstable [i386]) Conf webapp (2 unstable [all])" aptget install webapp foreign-webserver:i386 -s --solver $solver testsuccessequal "$HEADER The following NEW packages will be installed: foreign-webserver:i386 The following packages will be upgraded: webapp 1 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. Inst foreign-webserver:i386 (2 unstable [i386]) Inst webapp [1] (3 experimental [all]) Conf foreign-webserver:i386 (2 unstable [i386]) Conf webapp (3 experimental [all])" aptget install webapp=3 foreign-webserver:i386 -s --solver $solver testsuccessequal "$HEADER The following NEW packages will be installed: foreign-webserver:i386 The following packages will be upgraded: webapp 1 upgraded, 1 newly installed, 0 to remove and 1 not upgraded. Inst foreign-webserver:i386 (4 experimental [i386]) Inst webapp [1] (2 unstable [all]) Conf foreign-webserver:i386 (4 experimental [i386]) Conf webapp (2 unstable [all])" aptget install webapp foreign-webserver:i386=4 -s --solver $solver if [ "$solver" = 'apt' ]; then WEBAPP_ERR="$HEADER The solver encountered an error of type: ERR_UNSOLVABLE The following information might help you to understand what is wrong: The following packages have unmet dependencies: cool-webapp : Depends: httpd (>= 4) $SOMEPACKAGESCOULDNOT cool-webapp : Depends: httpd (>= 4) E: External solver failed with: The following packages have unmet dependencies:" else WEBAPP_ERR="$HEADER $SOMEPACKAGESCOULDNOT cool-webapp : Depends: httpd (>= 4) E: Unable to correct problems, you have held broken packages." fi testfailureequal "$WEBAPP_ERR" aptget install cool-webapp -s --solver $solver testfailureequal "$WEBAPP_ERR" aptget install cool-webapp foreign-webserver:i386 -s --solver $solver testsuccessequal "$HEADER The following NEW packages will be installed: cool-webapp foreign-webserver:i386 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst foreign-webserver:i386 (4 experimental [i386]) Inst cool-webapp (4 experimental [all]) Conf foreign-webserver:i386 (4 experimental [i386]) Conf cool-webapp (4 experimental [all])" aptget install cool-webapp foreign-webserver:i386=4 -s --solver $solver testsuccessequal "$HEADER The following additional packages will be installed: foo The following NEW packages will be installed: baz:i386 foo 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst foo (1 unstable [all]) Inst baz:i386 (1 unstable [i386]) Conf foo (1 unstable [all]) Conf baz:i386 (1 unstable [i386])" aptget install baz:i386 -s --solver $solver if [ "$solver" = 'apt' ]; then testfailureequal "$HEADER The solver encountered an error of type: ERR_UNSOLVABLE The following information might help you to understand what is wrong: The following packages have unmet dependencies: baz : Depends: bar but it is not installable $SOMEPACKAGESCOULDNOT baz : Depends: bar but it is not installable E: External solver failed with: The following packages have unmet dependencies:" aptget install baz:amd64 -s --solver $solver else testfailureequal "$HEADER $SOMEPACKAGESCOULDNOT baz : Depends: bar but it is not installable E: Unable to correct problems, you have held broken packages." aptget install baz:amd64 -s --solver $solver fi HEADER="${HEADER_PRE} Selected version '2' (experimental [amd64]) for 'baz'" if [ "$solver" = 'apt' ]; then HEADER="${HEADER} ${HEADER_POST}" fi testsuccessequal "$HEADER The following additional packages will be installed: foo The following NEW packages will be installed: baz foo 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst foo (1 unstable [all]) Inst baz (2 experimental [amd64]) Conf foo (1 unstable [all]) Conf baz (2 experimental [amd64])" aptget install baz/experimental -s --solver $solver HEADER="${HEADER_PRE} Selected version '2' (experimental [i386]) for 'baz:i386'" if [ "$solver" = 'apt' ]; then HEADER="${HEADER} ${HEADER_POST}" fi testsuccessequal "$HEADER The following additional packages will be installed: foo The following NEW packages will be installed: baz:i386 foo 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst foo (1 unstable [all]) Inst baz:i386 (2 experimental [i386]) Conf foo (1 unstable [all]) Conf baz:i386 (2 experimental [i386])" aptget install baz:i386/experimental -s --solver $solver if [ "$solver" = 'apt' ]; then HEADER="${HEADER_PRE} ${HEADER_POST}" else HEADER="${HEADER_PRE}" fi if [ "$solver" = 'apt' ]; then testfailureequal "$HEADER The solver encountered an error of type: ERR_UNSOLVABLE The following information might help you to understand what is wrong: The following packages have unmet dependencies: baz-broken:i386 : Depends: bar:amd64 but it is not installable $SOMEPACKAGESCOULDNOT baz-broken:i386 : Depends: bar:amd64 but it is not installable E: External solver failed with: The following packages have unmet dependencies:" aptget install baz-broken -s --solver $solver else testfailureequal "$HEADER $SOMEPACKAGESCOULDNOT baz-broken:i386 : Depends: bar:amd64 but it is not installable E: Unable to correct problems, you have held broken packages." aptget install baz-broken -s --solver $solver fi testsuccessequal "$HEADER The following additional packages will be installed: next The following NEW packages will be installed: needsrealnext next 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst next (1 unstable [amd64]) Inst needsrealnext (2 unstable [amd64]) Conf next (1 unstable [amd64]) Conf needsrealnext (2 unstable [amd64])" aptget install needsrealnext -s --solver $solver testsuccessequal "$HEADER The following additional packages will be installed: next The following NEW packages will be installed: needsrealnext:i386 next 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst next (1 unstable [amd64]) Inst needsrealnext:i386 (2 unstable [i386]) Conf next (1 unstable [amd64]) Conf needsrealnext:i386 (2 unstable [i386])" aptget install needsrealnext:i386 -s --solver $solver testsuccessequal "$HEADER The following additional packages will be installed: virtualnext2 The following NEW packages will be installed: needsnext2 virtualnext2 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst virtualnext2 (1 unstable [amd64]) Inst needsnext2 (2 unstable [amd64]) Conf virtualnext2 (1 unstable [amd64]) Conf needsnext2 (2 unstable [amd64])" aptget install needsnext2 -s --solver $solver testsuccessequal "$HEADER The following additional packages will be installed: virtualnext2 The following NEW packages will be installed: needsnext2:i386 virtualnext2 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst virtualnext2 (1 unstable [amd64]) Inst needsnext2:i386 (2 unstable [i386]) Conf virtualnext2 (1 unstable [amd64]) Conf needsnext2:i386 (2 unstable [i386])" aptget install needsnext2:i386 -s --solver $solver testsuccessequal "$HEADER The following additional packages will be installed: virtualnext3 The following NEW packages will be installed: needsnext3 virtualnext3 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst virtualnext3 (1 unstable [amd64]) Inst needsnext3 (2 unstable [amd64]) Conf virtualnext3 (1 unstable [amd64]) Conf needsnext3 (2 unstable [amd64])" aptget install needsnext3 -s --solver $solver if [ "$solver" = 'apt' ]; then testfailureequal "$HEADER The solver encountered an error of type: ERR_UNSOLVABLE The following information might help you to understand what is wrong: The following packages have unmet dependencies: needsnext3:i386 : Depends: next3:i386 (>= 2) but it is not installable $SOMEPACKAGESCOULDNOT needsnext3:i386 : Depends: next3:i386 (>= 2) but it is not installable E: External solver failed with: The following packages have unmet dependencies:" aptget install needsnext3:i386 -s --solver $solver else testfailureequal "$HEADER $SOMEPACKAGESCOULDNOT needsnext3:i386 : Depends: next3:i386 (>= 2) but it is not installable E: Unable to correct problems, you have held broken packages." aptget install needsnext3:i386 -s --solver $solver fi testsuccessequal "$HEADER The following additional packages will be installed: selfprov The following NEW packages will be installed: needsselfprov1 selfprov 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst selfprov (2 unstable [amd64]) Inst needsselfprov1 (1 unstable [amd64]) Conf selfprov (2 unstable [amd64]) Conf needsselfprov1 (1 unstable [amd64])" aptget install needsselfprov1 -s --solver $solver testsuccessequal "$HEADER The following additional packages will be installed: selfprov The following NEW packages will be installed: needsselfprov2 selfprov 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst selfprov (2 unstable [amd64]) Inst needsselfprov2 (1 unstable [amd64]) Conf selfprov (2 unstable [amd64]) Conf needsselfprov2 (1 unstable [amd64])" aptget install needsselfprov2 -s --solver $solver testsuccessequal "$HEADER The following additional packages will be installed: selfprov The following NEW packages will be installed: needsselfprov12 selfprov 0 upgraded, 2 newly installed, 0 to remove and 2 not upgraded. Inst selfprov (2 unstable [amd64]) Inst needsselfprov12 (1 unstable [amd64]) Conf selfprov (2 unstable [amd64]) Conf needsselfprov12 (1 unstable [amd64])" aptget install needsselfprov12 -s --solver $solver if [ "$solver" = 'apt' ]; then testfailureequal "$HEADER The solver encountered an error of type: ERR_UNSOLVABLE The following information might help you to understand what is wrong: The following packages have unmet dependencies: needsselfprov123 : Depends: selfprov (= 3) $SOMEPACKAGESCOULDNOT needsselfprov123 : Depends: selfprov (= 1) Depends: selfprov (= 2) Depends: selfprov (= 3) E: External solver failed with: The following packages have unmet dependencies:" aptget install needsselfprov123 -s --solver $solver else testfailureequal "$HEADER $SOMEPACKAGESCOULDNOT needsselfprov123 : Depends: selfprov (= 3) E: Unable to correct problems, you have held broken packages." aptget install needsselfprov123 -s --solver $solver fi done