Browse Source

- prefer non-virtual packages in FindPreferredPkg (Closes: #590041)

* test/integration/*:
  - add with bug#590041 testcase a small test "framework"
tags/debian/0.8.0
David Kalnischkies 11 years ago
parent
commit
8d87641558
4 changed files with 233 additions and 2 deletions
  1. +4
    -2
      debian/changelog
  2. +170
    -0
      test/integration/framework
  3. +8
    -0
      test/integration/run-tests
  4. +51
    -0
      test/integration/test-bug-590041-prefer-non-virtual-packages

+ 4
- 2
debian/changelog View 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



+ 170
- 0
test/integration/framework View File

@@ -0,0 +1,170 @@
#!/bin/sh -- # no runable script, just for vi

# we all like colorful messages
CERROR="" # red
CWARNING="" # yellow
CMSG="" # green
CINFO="" # light blue
CDEBUG="" # blue
CNORMAL="" # default system console color
CDONE="" # green
CPASS="" # green
CFAIL="" # red
CCMD="" # 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
}

+ 8
- 0
test/integration/run-tests View File

@@ -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

+ 51
- 0
test/integration/test-bug-590041-prefer-non-virtual-packages View File

@@ -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

Loading…
Cancel
Save