#!/bin/sh set -e TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment configarchitecture 'amd64' 'i386' 'armel' insertpackage 'unstable' 'cool-foo' 'amd64,i386' '1.0' 'Depends: foo' insertpackage 'unstable' 'cool-foo-x64' 'amd64' '1.0' 'Depends: foo:amd64' insertpackage 'unstable' 'cool-foo-x32' 'amd64' '1.0' 'Depends: foo:i386' insertpackage 'unstable' 'hates-foo' 'amd64,i386' '1.0' 'Conflicts: foo' insertpackage 'unstable' 'hates-foo-x64' 'amd64' '1.0' 'Conflicts: foo:amd64' insertpackage 'unstable' 'hates-foo-x32' 'amd64' '1.0' 'Conflicts: foo:i386' insertpackage 'unstable' 'foo' 'amd64,i386,armel' '1.0' 'Multi-Arch: foreign' insertpackage 'unstable' 'cool-bar' 'amd64,i386' '1.0' 'Depends: bar-provider' insertpackage 'unstable' 'cool-bar-x64' 'amd64' '1.0' 'Depends: bar-provider:amd64' insertpackage 'unstable' 'cool-bar-x32' 'amd64' '1.0' 'Depends: bar-provider:i386' insertpackage 'unstable' 'hates-bar' 'amd64,i386' '1.0' 'Conflicts: bar-provider' insertpackage 'unstable' 'hates-bar-x64' 'amd64' '1.0' 'Conflicts: bar-provider:amd64' insertpackage 'unstable' 'hates-bar-x32' 'amd64' '1.0' 'Conflicts: bar-provider:i386' insertpackage 'unstable' 'bar' 'amd64,i386,armel' '1.0' 'Provides: bar-provider Multi-Arch: foreign' setupaptarchive testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: foo The following NEW packages will be installed: cool-foo:i386 foo 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo (1.0 unstable [amd64]) Inst cool-foo:i386 (1.0 unstable [i386]) Conf foo (1.0 unstable [amd64]) Conf cool-foo:i386 (1.0 unstable [i386])' aptget install cool-foo:i386 -s testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: cool-foo foo:i386 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo:i386 (1.0 unstable [i386]) Inst cool-foo (1.0 unstable [amd64]) Conf foo:i386 (1.0 unstable [i386]) Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:i386 -s testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: cool-foo foo:armel 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo:armel (1.0 unstable [armel]) Inst cool-foo (1.0 unstable [amd64]) Conf foo:armel (1.0 unstable [armel]) Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:armel -s testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: bar The following NEW packages will be installed: bar cool-bar:i386 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar (1.0 unstable [amd64]) Inst cool-bar:i386 (1.0 unstable [i386]) Conf bar (1.0 unstable [amd64]) Conf cool-bar:i386 (1.0 unstable [i386])' aptget install cool-bar:i386 -s testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: bar:i386 cool-bar 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar:i386 (1.0 unstable [i386]) Inst cool-bar (1.0 unstable [amd64]) Conf bar:i386 (1.0 unstable [i386]) Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:i386 -s testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: bar:armel cool-bar 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar:armel (1.0 unstable [armel]) Inst cool-bar (1.0 unstable [amd64]) Conf bar:armel (1.0 unstable [armel]) Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:armel -s testsuccessequal "Reading package lists... Building dependency tree... Note, selecting 'bar:i386' instead of 'bar-provider:i386' The following NEW packages will be installed: bar:i386 cool-bar 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar:i386 (1.0 unstable [i386]) Inst cool-bar (1.0 unstable [amd64]) Conf bar:i386 (1.0 unstable [i386]) Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider:i386 -s satisfiable_in_singlearch() { testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: foo The following NEW packages will be installed: cool-foo foo 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo (1.0 unstable [amd64]) Inst cool-foo (1.0 unstable [amd64]) Conf foo (1.0 unstable [amd64]) Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 -s testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: cool-foo foo 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo (1.0 unstable [amd64]) Inst cool-foo (1.0 unstable [amd64]) Conf foo (1.0 unstable [amd64]) Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:amd64 -s testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: bar The following NEW packages will be installed: bar cool-bar 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar (1.0 unstable [amd64]) Inst cool-bar (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 -s testsuccessequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: bar cool-bar 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar (1.0 unstable [amd64]) Inst cool-bar (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:amd64 -s testsuccessequal "Reading package lists... Building dependency tree... Note, selecting 'bar' instead of 'bar-provider' The following NEW packages will be installed: bar cool-bar 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar (1.0 unstable [amd64]) Inst cool-bar (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider -s testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: foo The following NEW packages will be installed: cool-foo-x64 foo 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo (1.0 unstable [amd64]) Inst cool-foo-x64 (1.0 unstable [amd64]) Conf foo (1.0 unstable [amd64]) Conf cool-foo-x64 (1.0 unstable [amd64])' aptget install cool-foo-x64 -s } hatersgonnahate() { 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: ' testfailureequal "$BADPREFIX The following packages have unmet dependencies: hates-foo : Conflicts: foo Conflicts: foo:i386 Conflicts: foo:armel E: Unable to correct problems, you have held broken packages." aptget install $1 hates-foo -s testfailureequal "$BADPREFIX The following packages have unmet dependencies: $2 : Conflicts: foo:$4 E: Unable to correct problems, you have held broken packages." aptget install $1 $2 -s testsuccessequal "Reading package lists... Building dependency tree... The following NEW packages will be installed: $1 $3 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst $1 (1.0 unstable [$4]) Inst $3 (1.0 unstable [amd64]) Conf $1 (1.0 unstable [$4]) Conf $3 (1.0 unstable [amd64])" aptget install $1 $3 -s } hatersgonnahate 'foo' 'hates-foo-x64' 'hates-foo-x32' 'amd64' hatersgonnahate 'foo:i386' 'hates-foo-x32' 'hates-foo-x64' 'i386' testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: foo:i386 The following NEW packages will be installed: cool-foo-x32 foo:i386 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst foo:i386 (1.0 unstable [i386]) Inst cool-foo-x32 (1.0 unstable [amd64]) Conf foo:i386 (1.0 unstable [i386]) Conf cool-foo-x32 (1.0 unstable [amd64])' aptget install cool-foo-x32 -s testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: bar:i386 The following NEW packages will be installed: bar:i386 cool-bar-x32 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar:i386 (1.0 unstable [i386]) Inst cool-bar-x32 (1.0 unstable [amd64]) Conf bar:i386 (1.0 unstable [i386]) Conf cool-bar-x32 (1.0 unstable [amd64])' aptget install cool-bar-x32 -s testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: bar The following NEW packages will be installed: bar cool-bar-x64 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar (1.0 unstable [amd64]) Inst cool-bar-x64 (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) Conf cool-bar-x64 (1.0 unstable [amd64])' aptget install cool-bar-x64 -s satisfiable_in_singlearch msgmsg 'switch to single architecture' configarchitecture 'amd64' satisfiable_in_singlearch msgmsg 'switch to multi-arch with barbarian architecture' insertinstalledpackage 'foo' 'armhf' '1.0' 'Multi-Arch: foreign' insertinstalledpackage 'bar' 'armhf' '1.0' 'Provides: bar-provider Multi-Arch: foreign' insertinstalledpackage 'bar-needer' 'armhf' '1.0' 'Depends: bar-provider' 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:armhf The following NEW packages will be installed: cool-foo foo 0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded. Remv foo:armhf [1.0] Inst foo (1.0 unstable [amd64]) Inst cool-foo (1.0 unstable [amd64]) Conf foo (1.0 unstable [amd64]) Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo -s testsuccessequal 'Reading package lists... Building dependency tree... The following additional packages will be installed: bar The following packages will be REMOVED: bar:armhf The following NEW packages will be installed: bar cool-bar 0 upgraded, 2 newly installed, 1 to remove and 0 not upgraded. Remv bar:armhf [1.0] [bar-needer:armhf ] Inst bar (1.0 unstable [amd64]) Inst cool-bar (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar -s # a barbarian doesn't satisfy another either insertinstalledpackage 'bar-needer2' 's390x' '1.0' 'Depends: bar-provider' testfailure aptget check