Просмотр исходного кода

- prefer non-virtual packages in FindPreferredPkg (Closes: #590041)
* test/integration/*:
- add with bug#590041 testcase a small test "framework"

David Kalnischkies лет назад: 16
Родитель
Сommit
8d87641558

+ 4 - 2
debian/changelog

@@ -8,9 +8,11 @@ apt (0.7.26~exp11) experimental; urgency=low
   * apt-pkg/cacheset.cc:
   * apt-pkg/cacheset.cc:
     - move them back to the library as they look stable now
     - move them back to the library as they look stable now
   * apt-pkg/pkgcache.cc:
   * 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
 apt (0.7.26~exp10) experimental; urgency=low
 
 

+ 170 - 0
test/integration/framework

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

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

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