]> git.saurik.com Git - apt.git/blobdiff - test/integration/test-apt-get-install-deb
add --with-source option and Packages/Sources support
[apt.git] / test / integration / test-apt-get-install-deb
index bd720bedec688cccb13acc04f90d4126a0d5b07e..5f2877dfd17b69794ee8081165a96600d04fd4d1 100755 (executable)
@@ -1,32 +1,28 @@
 #!/bin/sh
 set -e
 
-TESTDIR=$(readlink -f $(dirname $0))
-. $TESTDIR/framework
+TESTDIR="$(readlink -f "$(dirname "$0")")"
+. "$TESTDIR/framework"
 
 setupenvironment
 configarchitecture 'amd64' 'i386'
 
 # regression test for #754904
-testfailureequal '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
 
 # only consider .deb files
 cat > foo.rpm <<EOF
 I'm not a deb, I'm a teapot.
 EOF
-testfailureequal "E: Unable to locate package ./foo.rpm
-E: Couldn't find any package by glob './foo.rpm'
-E: Couldn't find any package by regex './foo.rpm'" aptget install -qq ./foo.rpm
+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
-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
+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." tail -n 3 rootdir/tmp/testfailure.output
+E: The package lists or status file could not be parsed or opened." aptget install ./foo.deb
 
-# fakeroot is currently not found, framwork needs updating
 buildsimplenativepackage 'foo' 'i386,amd64' '1.0'
 
 testfailureequal "Reading package lists...
@@ -42,11 +38,18 @@ 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 -q=0
+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'
+testdpkgnotinstalled 'foo' 'foo:i386'
 testsuccess aptget install ./incoming/foo_1.0_i386.deb -o Debug::pkgCacheGen=1
-testdpkginstalled 'foo'
+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...
@@ -59,4 +62,109 @@ The following NEW packages will be installed:
 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 -q=0
+Conf foo (1.0 local-deb [amd64])" aptget install ./incoming/foo_1.0_amd64.deb -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.' aptget install --with-source ./incoming/foo_1.0_amd64.deb -s
+
+testsuccessequal 'Reading package lists...
+Building dependency tree...
+Reading state information...
+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 --with-source ./incoming/foo_1.0_amd64.deb foo -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
+testsuccess apt purge -y pkg-as-it-should-be
+
+echo "Package: pkg-as-it-should-be
+Architecture: all
+Version: 0
+Installed-Size: 2903
+Filename: incoming/pkg-as-it-should-be_0_all.deb
+Size: $(stat -c %s incoming/pkg-as-it-should-be_0_all.deb)
+SHA256: $(sha256sum incoming/pkg-as-it-should-be_0_all.deb | cut -d' ' -f 1)
+" > Packages
+testdpkgnotinstalled 'pkg-as-it-should-be'
+testnopackage pkg-as-it-should-be
+testsuccess apt install --with-source ./Packages pkg-as-it-should-be -s
+testsuccess apt install --with-source ./Packages pkg-as-it-should-be --print-uris
+testsuccess apt show --with-source ./Packages pkg-as-it-should-be
+testequal 'Package: pkg-as-it-should-be' head -n1 rootdir/tmp/testsuccess.output
+testsuccess apt install -y --with-source ./Packages pkg-as-it-should-be
+testdpkginstalled 'pkg-as-it-should-be'