]> git.saurik.com Git - apt.git/commitdiff
- prefer non-virtual packages in FindPreferredPkg (Closes: #590041)
authorDavid Kalnischkies <kalnischkies@gmail.com>
Sun, 25 Jul 2010 17:51:53 +0000 (19:51 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Sun, 25 Jul 2010 17:51:53 +0000 (19:51 +0200)
* test/integration/*:
  - add with bug#590041 testcase a small test "framework"

debian/changelog
test/integration/framework [new file with mode: 0644]
test/integration/run-tests [new file with mode: 0755]
test/integration/test-bug-590041-prefer-non-virtual-packages [new file with mode: 0755]

index aff194e1cc85bec20b4bef456e710a0ce2314bbe..1aa05adcb73ef2f7f6b7de419bbd3b7eb4a13ee7 100644 (file)
@@ -8,9 +8,11 @@ apt (0.7.26~exp11) experimental; urgency=low
   * apt-pkg/cacheset.cc:
     - move them back to the library as they look stable now
   * apt-pkg/pkgcache.cc:
-    - prefer non-virtual packages in FindPreferredPkg
+    - prefer non-virtual packages in FindPreferredPkg (Closes: #590041)
+  * test/integration/*:
+    - add with bug#590041 testcase a small test "framework"
 
- -- David Kalnischkies <kalnischkies@gmail.com>  Sun, 25 Jul 2010 08:20:41 +0200
+ -- David Kalnischkies <kalnischkies@gmail.com>  Sun, 25 Jul 2010 19:37:45 +0200
 
 apt (0.7.26~exp10) experimental; urgency=low
 
diff --git a/test/integration/framework b/test/integration/framework
new file mode 100644 (file)
index 0000000..97dce1e
--- /dev/null
@@ -0,0 +1,170 @@
+#!/bin/sh -- # no runable script, just for vi
+
+# we all like colorful messages
+CERROR="\e[1;31m" # red
+CWARNING="\e[1;33m" # yellow
+CMSG="\e[1;32m" # green
+CINFO="\e[1;96m" # light blue
+CDEBUG="\e[1;94m" # blue
+CNORMAL="\e[0;39m" # default system console color
+CDONE="\e[1;32m" # green
+CPASS="\e[1;32m" # green
+CFAIL="\e[1;31m" # red
+CCMD="\e[1;35m" # pink
+
+msgdie() { echo "${CERROR}E: $1${CNORMAL}" >&2; exit 1; }
+msgwarn() { echo "${CWARNING}W: $1${CNORMAL}" >&2; }
+msgmsg() { echo "${CMSG}$1${CNORMAL}" >&2; }
+msginfo() { echo "${CINFO}I: $1${CNORMAL}" >&2; }
+msgdebug() { echo "${CDEBUG}D: $1${CNORMAL}" >&2; }
+msgdone() { echo "${CDONE}DONE${CNORMAL}" >&2; }
+msgnwarn() { echo -n "${CWARNING}W: $1${CNORMAL}" >&2; }
+msgnmsg() { echo -n "${CMSG}$1${CNORMAL}" >&2; }
+msgninfo() { echo -n "${CINFO}I: $1${CNORMAL}" >&2; }
+msgndebug() { echo -n "${CDEBUG}D: $1${CNORMAL}" >&2; }
+msgtest() { echo -n "${CINFO}$1 ${CCMD}$(echo "$2" | sed -e 's/^aptc/apt-c/' -e 's/^aptg/apt-g/' -e 's/^aptf/apt-f/')${CINFO} …${CNORMAL} " >&2; }
+msgpass() { echo "${CPASS}PASS${CNORMAL}" >&2; }
+msgskip() { echo "${CWARNING}SKIP${CNORMAL}" >&2; }
+msgfail() { echo "${CFAIL}FAIL${CNORMAL}" >&2; }
+
+# enable / disable Debugging
+msginfo() { true; }
+msgdebug() { true; }
+msgninfo() { true; }
+msgndebug() { true; }
+msgdone() { if [ "$1" = "debug" -o "$1" = "info" ]; then true; else echo "${CDONE}DONE${CNORMAL}" >&2; fi }
+
+runapt() {
+       msgdebug "Executing: ${CCMD}$*${CDEBUG} "
+       APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$*
+}
+aptconfig() { runapt apt-config $*; }
+aptcache() { runapt apt-cache $*; }
+aptget() { runapt apt-get $*; }
+aptftparchive() { runapt apt-ftparchive $*; }
+
+setupenvironment() {
+       local TMPWORKINGDIRECTORY=$(mktemp -d)
+       msgninfo "Preparing environment for ${CCMD}$0${CINFO} in ${TMPWORKINGDIRECTORY}… "
+       BUILDDIRECTORY=$(readlink -f $(dirname $0)/../../build/bin)
+       test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first"
+       local OLDWORKINGDIRECTORY=$(pwd)
+       trap "cd /; rm -rf $TMPWORKINGDIRECTORY; cd $OLDWORKINGDIRECTORY" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM
+       cd $TMPWORKINGDIRECTORY
+       mkdir rootdir aptarchive
+       cd rootdir
+       mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d var/cache var/lib/dpkg
+       mkdir -p var/cache/apt/archives/partial var/lib/apt/lists/partial
+       touch var/lib/dpkg/status
+       mkdir -p usr/lib/apt
+       ln -s ${BUILDDIRECTORY}/methods usr/lib/apt/methods
+       cd ..
+       echo "RootDir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf
+       echo "Debug::NoLocking \"true\";" >> aptconfig.conf
+       echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf
+       export LC_ALL=C
+       msgdone "info"
+}
+
+configarchitecture() {
+       local CONFFILE=rootdir/etc/apt/apt.conf.d/01multiarch.conf
+       echo "APT::Architecture \"$1\";" > $CONFFILE
+       shift
+       while [ -n "$1" ]; do
+               echo "APT::Architectures:: \"$1\";" >> $CONFFILE
+               shift
+       done
+}
+
+buildflataptarchive() {
+       msginfo "Build APT archive for ${CCMD}$0${CINFO}…"
+       cd aptarchive
+       APTARCHIVE=$(readlink -f .)
+       if [ -f Packages ]; then
+               msgninfo "\tPackages file… "
+               cat Packages | gzip > Packages.gz
+               cat Packages | bzip2 > Packages.bz2
+               cat Packages | lzma > Packages.lzma
+               msgdone "info"
+       fi
+       if [ -f Sources ]; then
+               msgninfo "\tSources file… "
+               cat Sources | gzip > Sources.gz
+               cat Sources | bzip2 > Sources.bz2
+               cat Sources | lzma > Sources.lzma
+               msgdone "info"
+       fi
+       cd ..
+       aptftparchive release . > Release
+}
+
+setupflataptarchive() {
+       buildflataptarchive
+       APTARCHIVE=$(readlink -f ./aptarchive)
+       if [ -f ${APTARCHIVE}/Packages ]; then
+               msgninfo "\tadd deb sources.list line… "
+               echo "deb file://$APTARCHIVE /" > rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list
+               msgdone "info"
+       else
+               rm -f rootdir/etc/apt/sources.list.d/apt-test-archive-deb.list
+       fi
+       if [ -f ${APTARCHIVE}/Sources ]; then
+               msgninfo "\tadd deb-src sources.list line… "
+               echo "deb-src file://$APTARCHIVE /" > rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list
+               msgdone "info"
+       else
+               rm -f rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list
+       fi
+       aptget update -qq
+}
+
+diff() {
+       local DIFFTEXT="$($(which diff) -u $* | sed -e '/^---/ d' -e '/^+++/ d' -e '/^@@/ d')"
+       if [ -n "$DIFFTEXT" ]; then
+               echo
+               echo "$DIFFTEXT"
+               return 1
+       else
+               return 0
+       fi
+}
+
+testequal() {
+       local COMPAREFILE=$(mktemp)
+       echo "$1" > $COMPAREFILE
+       shift
+       msgtest "Test for equality of" "$*"
+       $* 2>&1 | diff $COMPAREFILE - && msgpass || msgfail
+}
+
+testshowvirtual() {
+       local VIRTUAL="E: Can't select versions from package '$1' as it purely virtual"
+       local PACKAGE="$1"
+       shift
+       while [ -n "$1" ]; do
+               VIRTUAL="${VIRTUAL}
+E: Can't select versions from package '$1' as it purely virtual"
+               PACKAGE="${PACKAGE} $1"
+               shift
+       done
+       msgtest "Test for virtual packages" "apt-cache show $PACKAGE"
+       VIRTUAL="${VIRTUAL}
+E: No packages found"
+       local COMPAREFILE=$(mktemp)
+       local ARCH=$(dpkg-architecture -qDEB_HOST_ARCH_CPU)
+       eval `apt-config shell ARCH APT::Architecture`
+       echo "$VIRTUAL" | sed -e "s/:$ARCH//" -e 's/:all//' > $COMPAREFILE
+       aptcache show $PACKAGE 2>&1 | diff $COMPAREFILE - && msgpass || msgfail
+}
+
+testnopackage() {
+       msgtest "Test for non-existent packages" "apt-cache show $*"
+       local SHOWPKG="$(aptcache show $* 2>&1 | grep '^Package: ')"
+       if [ -n "$SHOWPKG" ]; then
+               echo
+               echo "$SHOWPKG"
+               msgfail
+               return 1
+       fi
+       msgpass
+}
diff --git a/test/integration/run-tests b/test/integration/run-tests
new file mode 100755 (executable)
index 0000000..cb74f21
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+set -e
+
+local DIR=$(readlink -f $(dirname $0))
+for testcase in $(run-parts --list $DIR | grep '/test-'); do
+       echo "\033[1;32mRun Testcase \033[1;35m$(basename ${testcase})\033[0m"
+       ${testcase}
+done
diff --git a/test/integration/test-bug-590041-prefer-non-virtual-packages b/test/integration/test-bug-590041-prefer-non-virtual-packages
new file mode 100755 (executable)
index 0000000..aa9e487
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/sh
+set -e
+
+. $(readlink -f $(dirname $0))/framework
+setupenvironment
+configarchitecture "i386" "armel"
+
+pkglibc6="Package: libc6
+Architecture: armel
+Version: 2.11.2-2~0.3
+Description: Embedded GNU C Library: Shared libraries
+Filename: pool/main/e/eglibc/libc6_2.11.2-2_armel.deb
+Installed-Size: 9740
+MD5sum: f5b878ce5fb8aa01a7927fa1460df537
+Maintainer: GNU Libc Maintainers <debian-glibc@lists.debian.org>
+Priority: required
+SHA1: 0464d597dfbf949e8c17a42325b1f93fb4914afd
+SHA256: faca4a3d9ccff57568abf41f6cb81ddd835be7b5d8b0161e2d5f9a7f26aae3c0
+Section: libs
+Size: 4178958
+"
+
+pkglibdb1="Package: libdb1
+Architecture: i386
+Version: 2.1.3-13~0.3
+Replaces: libc6 (<< 2.2.5-13~0.3)
+Description: The Berkeley database routines [glibc 2.0/2.1 compatibility]
+Filename: pool/main/d/db1-compat/libdb1-compat_2.1.3-13_armel.deb
+Installed-Size: 136
+MD5sum: 4043f176ab2b40b0c01bc1211b8c103c
+Maintainer: Colin Watson <cjwatson@debian.org>
+Priority: extra
+SHA1: b9396fdd2e3e8d1d4ba9e74e7346075852d85666
+SHA256: f17decaa28d1db3eeb9eb17bebe50d437d293a509bcdd7cdfd3ebb56f5de3cea
+Section: oldlibs
+Size: 44168
+"
+
+cat <<-EOF >aptarchive/Packages
+$pkglibc6
+$pkglibdb1
+EOF
+
+setupflataptarchive
+
+testshowvirtual libc6:i386
+testequal "$pkglibc6" aptcache show libc6:armel
+testequal "$pkglibc6" aptcache show libc6
+testequal "$pkglibdb1" aptcache show libdb1:i386
+testnopackage libdb1:armel
+testequal "$pkglibdb1" aptcache show libdb1