X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/d61960d9244340956a27f4ca46aecd15cc75e18b..f883d2c3675eae2700e4cd1532c1a236cae69a4e:/test/integration/test-apt-get-install-deb diff --git a/test/integration/test-apt-get-install-deb b/test/integration/test-apt-get-install-deb index f2e5229cd..3aacc301d 100755 --- a/test/integration/test-apt-get-install-deb +++ b/test/integration/test-apt-get-install-deb @@ -1,27 +1,135 @@ #!/bin/sh set -e -TESTDIR=$(readlink -f $(dirname $0)) -. $TESTDIR/framework +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" setupenvironment -configarchitecture "i386" +configarchitecture 'amd64' 'i386' # regression test for #754904 -testequal 'E: Unable to locate package /dev/null' aptget install -qq /dev/null +testfailureequal 'E: Unsupported file /dev/null given on commandline' aptget install -qq /dev/null -# and ensure we fail for invalid debs -cat > foo.deb <<EOF +# only consider .deb files +cat > foo.rpm <<EOF I'm not a deb, I'm a teapot. EOF -testfailure aptget install ./foo.deb -testsuccess grep '^E: Sub-process Popen returned an error code' rootdir/tmp/testfailure.output -testequal 'E: Encountered a section with no Package: header -E: Problem with MergeLister for ./foo.deb -E: The package lists or status file could not be parsed or opened.' tail -n 3 rootdir/tmp/testfailure.output - -# fakeroot is currently not found, framwork needs updating -buildsimplenativepackage 'foo' 'all' '1.0' -testdpkgnotinstalled 'foo' -testsuccess aptget install ./incoming/foo_1.0_all.deb -testdpkginstalled 'foo' +testfailureequal 'E: Unsupported file ./foo.rpm given on commandline' aptget install -qq ./foo.rpm + +# and ensure we fail for invalid debs +mv foo.rpm foo.deb +testfailuremsg "E: Sub-process Popen returned an error code (2) +E: Encountered a section with no Package: header +E: Problem with MergeList ${TMPWORKINGDIRECTORY}/foo.deb +E: The package lists or status file could not be parsed or opened." aptget install ./foo.deb + +buildsimplenativepackage 'foo' 'i386,amd64' '1.0' + +testfailureequal "Reading package lists... +Building dependency tree... +Note, selecting 'foo:i386' instead of './incoming/foo_1.0_i386.deb' +Note, selecting 'foo' instead of './incoming/foo_1.0_amd64.deb' +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: + foo:i386 : Conflicts: foo but 1.0 is to be installed + foo : Conflicts: foo:i386 but 1.0 is to be installed +E: Unable to correct problems, you have held broken packages." aptget install ./incoming/foo_1.0_i386.deb ./incoming/foo_1.0_amd64.deb -s + +testdpkgnotinstalled 'foo' 'foo:i386' +testsuccess aptget install ./incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1 +testdpkginstalled 'foo:i386' +testfailure aptget install incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1 +cd downloaded +testsuccess aptget install "$(readlink -f ../incoming/foo_1.0_i386.deb)" -o Debug::pkgCacheGen=1 -y --reinstall +testfailure grep 'is already the newest version' ../rootdir/tmp/testsuccess.output +testsuccess aptget install ../incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1 -y --reinstall +testfailure grep 'is already the newest version' ../rootdir/tmp/testsuccess.output +cd .. + +testsuccessequal "Reading package lists... +Building dependency tree... +Reading state information... +Note, selecting 'foo' instead of './incoming/foo_1.0_amd64.deb' +The following packages will be REMOVED: + foo:i386 +The following NEW packages will be installed: + foo +0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv foo:i386 [1.0] +Inst foo (1.0 local-deb [amd64]) +Conf foo (1.0 local-deb [amd64])" aptget install ./incoming/foo_1.0_amd64.deb -s + +# Check that installing the local deb works if it is not the candidate +echo "Package: foo +Pin: version 1.0 +Pin-Priority: -1" > rootdir/etc/apt/preferences + +testsuccessequal "Reading package lists... +Building dependency tree... +Reading state information... +Note, selecting 'foo' instead of './incoming/foo_1.0_amd64.deb' +The following packages will be REMOVED: + foo:i386 +The following NEW packages will be installed: + foo +0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv foo:i386 [1.0] +Inst foo (1.0 local-deb [amd64]) +Conf foo (1.0 local-deb [amd64])" aptget install ./incoming/foo_1.0_amd64.deb -s + +createpkg() { + local PKG="pkg-$1" + mkdir -p ./incoming/$PKG/DEBIAN + if [ -n "$2" ]; then + echo -n "$2" >> ./incoming/$PKG/DEBIAN/control + fi + echo "Package: $PKG +Version: 0 +Priority: extra +Maintainer: No Body <no@example.org> +Architecture: all +Depends: foo:i386 +Description: test package" >> ./incoming/$PKG/DEBIAN/control + if [ -n "$3" ]; then + echo -n "$3" >> ./incoming/$PKG/DEBIAN/control + fi + testsuccess dpkg-deb --build ./incoming/$PKG/ ./incoming + #dpkg-deb -I ./incoming/${PKG}_0_all.deb control +} +createpkg 'as-it-should-be' +createpkg 'leading-newline' ' + +' +createpkg 'trailing-newline' '' ' +' + +testsuccess aptget install ./incoming/pkg-as-it-should-be_0_all.deb +testsuccess aptget install ./incoming/pkg-leading-newline_0_all.deb +testsuccess aptget install ./incoming/pkg-trailing-newline_0_all.deb + +testempty apt clean +if [ "$(id -u)" = '0' ]; then + # see if permission dropping is checked before usage + chmod 711 ./incoming + testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb --reinstall + testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output + chmod 710 ./incoming + testsuccesswithnotice aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb --reinstall + testfailure grep 'is already the newest version' rootdir/tmp/testsuccesswithnotice.output + chmod 700 ./incoming + testsuccesswithnotice aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb --reinstall + testfailure grep 'is already the newest version' rootdir/tmp/testsuccesswithnotice.output + chmod 711 ./incoming +else + testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb --reinstall + testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output +fi + +sed -i -e '/^Depends: foo/ d' rootdir/var/lib/dpkg/status +testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.deb +testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output