#!/bin/sh set -e TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment configarchitecture 'amd64' 'i386' insertpackage 'unstable' 'foo' 'amd64,i386' '1' 'Multi-Arch: allowed' insertpackage 'unstable' 'needsfoo' 'amd64,i386' '1' 'Depends: foo' insertpackage 'unstable' 'needsfooany' 'amd64,i386' '1' 'Depends: foo:any' insertpackage 'unstable' 'needsfoover1' 'amd64,i386' '1' 'Depends: foo:any (>= 1)' insertpackage 'unstable' 'needsfoover2' 'amd64,i386' '1' 'Depends: foo:any (>= 2)' insertpackage 'unstable' 'hatesfoo' 'amd64' '1' 'Conflicts: foo' insertpackage 'unstable' 'hatesfooany' 'amd64' '1' 'Conflicts: foo:any' # this makes no senseā€¦? insertpackage 'unstable' 'hatesfoonative' 'amd64' '1' 'Conflicts: foo:amd64' insertpackage 'unstable' 'coolfoo' 'amd64' '1' 'Multi-Arch:allowed Provides: coolbar' insertpackage 'unstable' 'coolfoover' 'amd64' '1' 'Multi-Arch:allowed Provides: coolbar (= 2)' insertpackage 'unstable' 'needscoolfoo' 'amd64,i386' '1' 'Depends: coolfoo, coolbar' insertpackage 'unstable' 'needscoolfooany' 'amd64,i386' '1' 'Depends: coolfoo:any, coolbar:any' insertpackage 'unstable' 'needscoolfoover0' 'amd64' '1' 'Depends: coolfoo:any (>= 1), coolbar:any' insertpackage 'unstable' 'needscoolfoover1' 'amd64' '1' 'Depends: coolfoo:any (>= 1), coolbar:any (>= 1)' insertpackage 'unstable' 'needscoolfoover2' 'amd64' '1' 'Depends: coolfoo:any (>= 2), coolbar:any (>= 1)' insertpackage 'unstable' 'needscoolfoover3' 'amd64' '1' 'Depends: coolfoo:any (>= 2), coolbar:any (>= 3)' setupaptarchive BADPREFIX='Reading package lists... Building dependency tree... 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: ' solveableinsinglearch0() { testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: foo The following NEW packages will be installed: foo needsfoo 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo (1 unstable [amd64]) Inst needsfoo (1 unstable [amd64]) Conf foo (1 unstable [amd64]) Conf needsfoo (1 unstable [amd64])' aptget install needsfoo -s } solveableinsinglearch0 testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: foo:i386 The following NEW packages will be installed: foo:i386 needsfoo:i386 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo:i386 (1 unstable [i386]) Inst needsfoo:i386 (1 unstable [i386]) Conf foo:i386 (1 unstable [i386]) Conf needsfoo:i386 (1 unstable [i386])' aptget install needsfoo:i386 -s testfailureequal "$BADPREFIX The following packages have unmet dependencies: foo : Conflicts: foo:i386 but 1 is to be installed foo:i386 : Conflicts: foo but 1 is to be installed E: Unable to correct problems, you have held broken packages." aptget install needsfoo:i386 foo:amd64 -s testfailureequal "$BADPREFIX The following packages have unmet dependencies: foo : Conflicts: foo:i386 but 1 is to be installed foo:i386 : Conflicts: foo but 1 is to be installed E: Unable to correct problems, you have held broken packages." aptget install needsfoo foo:i386 -s solveableinsinglearch1() { testsuccessequal "Reading package lists... Building dependency tree... The following additional packages will be installed: foo The following NEW packages will be installed: foo $1 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo (1 unstable [amd64]) Inst $1 (1 unstable [amd64]) Conf foo (1 unstable [amd64]) Conf $1 (1 unstable [amd64])" aptget install $1 -s } testneedsfooallgood() { solveableinsinglearch1 $1 testsuccessequal "Reading package lists... Building dependency tree... The following additional packages will be installed: foo The following NEW packages will be installed: foo $1:i386 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo (1 unstable [amd64]) Inst $1:i386 (1 unstable [i386]) Conf foo (1 unstable [amd64]) Conf $1:i386 (1 unstable [i386])" aptget install $1:i386 -s testsuccessequal "Reading package lists... Building dependency tree... The following NEW packages will be installed: foo:i386 $1:i386 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo:i386 (1 unstable [i386]) Inst $1:i386 (1 unstable [i386]) Conf foo:i386 (1 unstable [i386]) Conf $1:i386 (1 unstable [i386])" aptget install $1:i386 foo:i386 -s testsuccessequal "Reading package lists... Building dependency tree... The following NEW packages will be installed: foo:i386 $1 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo:i386 (1 unstable [i386]) Inst $1 (1 unstable [amd64]) Conf foo:i386 (1 unstable [i386]) Conf $1 (1 unstable [amd64])" aptget install $1 foo:i386 -s } testneedsfooallgood 'needsfooany' testneedsfooallgood 'needsfoover1' NEEDSFOO2NATIVE="$BADPREFIX The following packages have unmet dependencies: needsfoover2 : Depends: foo:any (>= 2) E: Unable to correct problems, you have held broken packages." NEEDSFOO2FOREIGN="$BADPREFIX The following packages have unmet dependencies: needsfoover2:i386 : Depends: foo:any (>= 2) E: Unable to correct problems, you have held broken packages." testfailureequal "$NEEDSFOO2NATIVE" aptget install needsfoover2 -s testfailureequal "$NEEDSFOO2FOREIGN" aptget install needsfoover2:i386 -s testfailureequal "$NEEDSFOO2FOREIGN" aptget install needsfoover2:i386 foo:i386 -s testfailureequal "$NEEDSFOO2NATIVE" aptget install needsfoover2 foo:i386 -s solveableinsinglearch2() { testfailureequal "$BADPREFIX The following packages have unmet dependencies: hatesfoo : Conflicts: foo but 1 is to be installed E: Unable to correct problems, you have held broken packages." aptget install foo hatesfoo -s # the message differs slightly between single and multiarch testfailuremsg 'E: Unable to correct problems, you have held broken packages.' aptget install foo hatesfooany -s testfailureequal "$BADPREFIX The following packages have unmet dependencies: hatesfoonative : Conflicts: foo:amd64 E: Unable to correct problems, you have held broken packages." aptget install foo hatesfoonative -s } solveableinsinglearch2 testfailureequal "$BADPREFIX The following packages have unmet dependencies: hatesfoo : Conflicts: foo:i386 but 1 is to be installed E: Unable to correct problems, you have held broken packages." aptget install foo:i386 hatesfoo -s testfailureequal "$BADPREFIX The following packages have unmet dependencies: hatesfooany : Conflicts: foo:any E: Unable to correct problems, you have held broken packages." aptget install foo:i386 hatesfooany -s testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: foo:i386 hatesfoonative 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo:i386 (1 unstable [i386]) Inst hatesfoonative (1 unstable [amd64]) Conf foo:i386 (1 unstable [i386]) Conf hatesfoonative (1 unstable [amd64])' aptget install foo:i386 hatesfoonative -s testfailureequal "$BADPREFIX The following packages have unmet dependencies: needscoolfoo:i386 : Depends: coolfoo:i386 but it is not installable Depends: coolbar:i386 but it is not installable E: Unable to correct problems, you have held broken packages." aptget install needscoolfoo:i386 -s solveneedscoolfooanyin() { local NEEDSCOOL='needscoolfooany' if [ "$1" != 'amd64' ]; then NEEDSCOOL="${NEEDSCOOL}:$1"; fi testsuccessequal "Reading package lists... Building dependency tree... The following additional packages will be installed: coolfoo The following NEW packages will be installed: coolfoo $NEEDSCOOL 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst coolfoo (1 unstable [amd64]) Inst $NEEDSCOOL (1 unstable [$1]) Conf coolfoo (1 unstable [amd64]) Conf $NEEDSCOOL (1 unstable [$1])" aptget install $NEEDSCOOL -s } solveneedscoolfooanyin 'i386' solveableinsinglearch3() { testsuccessequal "Reading package lists... Building dependency tree... The following additional packages will be installed: coolfoo The following NEW packages will be installed: coolfoo needscoolfoo 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst coolfoo (1 unstable [amd64]) Inst needscoolfoo (1 unstable [amd64]) Conf coolfoo (1 unstable [amd64]) Conf needscoolfoo (1 unstable [amd64])" aptget install needscoolfoo -s testsuccessequal "Reading package lists... Building dependency tree... The following additional packages will be installed: coolfoo The following NEW packages will be installed: coolfoo coolfoover needscoolfoo 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Inst coolfoo (1 unstable [amd64]) Inst coolfoover (1 unstable [amd64]) Inst needscoolfoo (1 unstable [amd64]) Conf coolfoo (1 unstable [amd64]) Conf coolfoover (1 unstable [amd64]) Conf needscoolfoo (1 unstable [amd64])" aptget install needscoolfoo coolfoover -s solveneedscoolfooanyin 'amd64' testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: coolfoo The following NEW packages will be installed: coolfoo needscoolfoover0 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst coolfoo (1 unstable [amd64]) Inst needscoolfoover0 (1 unstable [amd64]) Conf coolfoo (1 unstable [amd64]) Conf needscoolfoover0 (1 unstable [amd64])' aptget install needscoolfoover0 -s testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: coolfoo coolfoover The following NEW packages will be installed: coolfoo coolfoover needscoolfoover1 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Inst coolfoo (1 unstable [amd64]) Inst coolfoover (1 unstable [amd64]) Inst needscoolfoover1 (1 unstable [amd64]) Conf coolfoo (1 unstable [amd64]) Conf coolfoover (1 unstable [amd64]) Conf needscoolfoover1 (1 unstable [amd64])' aptget install needscoolfoover1 -s testfailureequal "$BADPREFIX The following packages have unmet dependencies: needscoolfoover2 : Depends: coolfoo:any (>= 2) E: Unable to correct problems, you have held broken packages." aptget install needscoolfoover2 -s testfailureequal "$BADPREFIX The following packages have unmet dependencies: needscoolfoover3 : Depends: coolfoo:any (>= 2) Depends: coolbar:any (>= 3) E: Unable to correct problems, you have held broken packages." aptget install needscoolfoover3 -s } solveableinsinglearch3 msgmsg 'switch to single architecture' configarchitecture 'amd64' solveableinsinglearch0 testfailureequal 'Reading package lists... Building dependency tree... E: Unable to locate package needsfoo:i386' aptget install needsfoo:i386 -s solveableinsinglearch1 'needsfooany' solveableinsinglearch1 'needsfoover1' testfailureequal "$NEEDSFOO2NATIVE" aptget install needsfoover2 -s solveableinsinglearch2 solveableinsinglearch3 testempty dpkg -C msgmsg 'multi-arch with barbarian archs' configarchitecture 'amd64' 'i386' insertinstalledpackage 'foo' 'armel' '1' 'Multi-Arch: allowed' insertinstalledpackage 'coolfoo' 'armel' '1' 'Multi-Arch:allowed Provides: coolbar' insertinstalledpackage 'bar-needer' 'armel' '1.0' 'Depends: coolbar' insertinstalledpackage 'bar-any-needer' 'armel' '1.0' 'Depends: coolbar:any' insertinstalledpackage 'bar-armel-needer' 'armel' '1.0' 'Depends: coolbar:armel' testsuccess aptget check testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: foo The following packages will be REMOVED: foo:armel The following NEW packages will be installed: foo needsfooany 0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded. Remv foo:armel [1] Inst foo (1 unstable [amd64]) Inst needsfooany (1 unstable [amd64]) Conf foo (1 unstable [amd64]) Conf needsfooany (1 unstable [amd64])' aptget install needsfooany -s testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: foo The following packages will be REMOVED: foo:armel The following NEW packages will be installed: foo needsfooany:i386 0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded. Remv foo:armel [1] Inst foo (1 unstable [amd64]) Inst needsfooany:i386 (1 unstable [i386]) Conf foo (1 unstable [amd64]) Conf needsfooany:i386 (1 unstable [i386])' aptget install needsfooany:i386 -s testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: coolfoo The following packages will be REMOVED: bar-armel-needer:armel bar-needer:armel coolfoo:armel The following NEW packages will be installed: coolfoo needscoolfoover0 0 upgraded, 2 newly installed, 3 to remove and 0 not upgraded. Remv bar-armel-needer:armel [1.0] Remv bar-needer:armel [1.0] Remv coolfoo:armel [1] [bar-any-needer:armel ] Inst coolfoo (1 unstable [amd64]) Inst needscoolfoover0 (1 unstable [amd64]) Conf coolfoo (1 unstable [amd64]) Conf needscoolfoover0 (1 unstable [amd64])' aptget install needscoolfoover0 -s