From 8d87641558a7e0ee53b03e325614532aa686e01b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 25 Jul 2010 19:51:53 +0200 Subject: - prefer non-virtual packages in FindPreferredPkg (Closes: #590041) * test/integration/*: - add with bug#590041 testcase a small test "framework" --- test/integration/framework | 170 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 test/integration/framework (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework new file mode 100644 index 000000000..97dce1e19 --- /dev/null +++ b/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 +} -- cgit v1.2.3-70-g09d2 From 8f8169ac464249c8a2b35b13f9c5278d4c9e5a46 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 28 Jul 2010 21:47:42 +0200 Subject: auto-install Packages and status file of the testcase --- test/integration/framework | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index 97dce1e19..7e0d4b902 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -45,8 +45,9 @@ aptftparchive() { runapt apt-ftparchive $*; } setupenvironment() { local TMPWORKINGDIRECTORY=$(mktemp -d) + local TESTDIR=$(readlink -f $(dirname $0)) msgninfo "Preparing environment for ${CCMD}$0${CINFO} in ${TMPWORKINGDIRECTORY}… " - BUILDDIRECTORY=$(readlink -f $(dirname $0)/../../build/bin) + BUILDDIRECTORY="${TESTDIR}/../../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 @@ -55,10 +56,21 @@ setupenvironment() { 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 + local STATUSFILE=$(echo "$(basename $0)" | sed 's/^test-/status-/') + if [ -f "${TESTDIR}/${STATUSFILE}" ]; then + cp "${TESTDIR}/${STATUSFILE}" var/lib/dpkg/status + else + touch var/lib/dpkg/status + fi mkdir -p usr/lib/apt ln -s ${BUILDDIRECTORY}/methods usr/lib/apt/methods cd .. + local PACKAGESFILE=$(echo "$(basename $0)" | sed 's/^test-/Packages-/') + if [ -f "${TESTDIR}/${PACKAGESFILE}" ]; then + cp "${TESTDIR}/${PACKAGESFILE}" aptarchive/Packages + else + touch var/lib/dpkg/status + fi echo "RootDir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf echo "Debug::NoLocking \"true\";" >> aptconfig.conf echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf -- cgit v1.2.3-70-g09d2 From 685625bd308f62a382aaf61f1621a18b9441edfd Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 29 Jul 2010 12:26:26 +0200 Subject: configure also the replacement before remove by adding Immediate flag --- apt-pkg/orderlist.cc | 2 + debian/changelog | 3 +- ...g-590438-broken-provides-thanks-to-remove-order | 32 ++++++++++ test/integration/framework | 16 +++++ ...g-590438-broken-provides-thanks-to-remove-order | 69 +++++++++++++++++----- 5 files changed, 106 insertions(+), 16 deletions(-) (limited to 'test/integration/framework') diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc index cb55147c3..602b63d3b 100644 --- a/apt-pkg/orderlist.cc +++ b/apt-pkg/orderlist.cc @@ -936,6 +936,7 @@ bool pkgOrderList::DepRemove(DepIterator D) Cache[P].InstallVer != 0 && VisitNode(P) == true) { + Flag(P, Immediate); tryFixDeps = false; break; } @@ -970,6 +971,7 @@ bool pkgOrderList::DepRemove(DepIterator D) IsFlag(F.TargetPkg(), InList) == false || VisitNode(F.TargetPkg()) == false) continue; + Flag(F.TargetPkg(), Immediate); tryFixDeps = false; break; } diff --git a/debian/changelog b/debian/changelog index 86b154dab..b836aaab8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,8 +17,9 @@ apt (0.7.26~exp11) experimental; urgency=low * apt-pkg/orderlist.cc: - try to install another or-group member in DepRemove before breaking the or group (Closes: #590438) + - configure also the replacement before remove by adding Immediate flag - -- David Kalnischkies Wed, 28 Jul 2010 21:41:35 +0200 + -- David Kalnischkies Thu, 29 Jul 2010 12:24:49 +0200 apt (0.7.26~exp10) experimental; urgency=low diff --git a/test/integration/Packages-bug-590438-broken-provides-thanks-to-remove-order b/test/integration/Packages-bug-590438-broken-provides-thanks-to-remove-order index 16bf008f6..75a769e1a 100644 --- a/test/integration/Packages-bug-590438-broken-provides-thanks-to-remove-order +++ b/test/integration/Packages-bug-590438-broken-provides-thanks-to-remove-order @@ -33,3 +33,35 @@ SHA256: a2337dfe1cc82aeae46f2c722e5cc7be9ecefdea4aaf13f540cfe70bd8b1d627 Description-de: GNU awk, eine Mustererkennungs- und Verarbeitungssprache Homepage: http://www.gnu.org/software/gawk/ Tag: devel::interpreter, implemented-in::c, interface::commandline, role::program, scope::utility, suite::gnu, use::filtering, use::scanning, works-with::text + +Package: gawk2 +Priority: optional +Section: interpreters +Installed-Size: 2084 +Maintainer: Arthur Loiret +Architecture: i386 +Version: 1:3.1.7.dfsg-5 +Provides: awk +Pre-Depends: libc6 (>= 2.3) +Depends: coolstuff +Filename: pool/main/g/gawk/gawk_3.1.7.dfsg-5_i386.deb +Size: 766008 +MD5sum: 6459a02cfc1b9eafb3c0415e4ff4e252 +SHA1: ac033488dae4b7e8167d610e490319c047edf7e4 +SHA256: a2337dfe1cc82aeae46f2c722e5cc7be9ecefdea4aaf13f540cfe70bd8b1d627 +Description-de: GNU awk, eine Mustererkennungs- und Verarbeitungssprache +Homepage: http://www.gnu.org/software/gawk/ +Tag: devel::interpreter, implemented-in::c, interface::commandline, role::program, scope::utility, suite::gnu, use::filtering, use::scanning, works-with::text + +Package: coolstuff +Priority: optional +Section: cool +Installed-Size: 10 +Maintainer: David Kalnischkies +Architecture: all +Version: 1-1 +Filename: pool/main/c/coolstuff/coolstuff_1-1_all.deb +Size: 7608 +MD5sum: 6459aa2efc139eafb323ac3f4f5aeb22 +Description: We all need cool stuff + diff --git a/test/integration/framework b/test/integration/framework index 7e0d4b902..7b323fdb5 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -149,6 +149,22 @@ testequal() { $* 2>&1 | diff $COMPAREFILE - && msgpass || msgfail } +testequalor2() { + local COMPAREFILE1=$(mktemp) + local COMPAREFILE2=$(mktemp) + local COMPAREAGAINST=$(mktemp) + echo "$1" > $COMPAREFILE1 + echo "$2" > $COMPAREFILE2 + shift 2 + msgtest "Test for equality OR of" "$*" + $* 2>&1 1> $COMPAREAGAINST + (diff $COMPAREFILE1 $COMPAREAGAINST 1> /dev/null || + diff $COMPAREFILE2 $COMPAREAGAINST 1> /dev/null) && msgpass || + ( echo "\n${CINFO}Diff against OR 1${CNORMAL}" "$(diff $COMPAREFILE1 $COMPAREAGAINST)" \ + "\n${CINFO}Diff against OR 2${CNORMAL}" "$(diff $COMPAREFILE2 $COMPAREAGAINST)" && + msgfail ) +} + testshowvirtual() { local VIRTUAL="E: Can't select versions from package '$1' as it purely virtual" local PACKAGE="$1" diff --git a/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order b/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order index bb10c4f73..17ce50295 100755 --- a/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order +++ b/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order @@ -24,7 +24,7 @@ Size: 73986 MD5sum: 8489687ce10e656babd467c9ee389349 Description-de: Verschiedene Dateien für das Basis-System von Debian" -predependstest() { +predependsgawk() { # rm rootdir/var/cache/apt/*.bin cp $TESTDIR/$(echo "$(basename $0)" | sed 's/test-/status-/') rootdir/var/lib/dpkg/status echo "$pkgbasefile @@ -35,25 +35,64 @@ Conf gawk (1:3.1.7.dfsg-5 localhost [i386]) Remv mawk [1.3.3-15]" aptget install gawk mawk- -sqq -o PreDepends=$(echo "$1" | sed 's/ //g') } -predependstest "gawk | mawk" -predependstest "mawk | gawk" +predependsgawk "gawk | mawk" +predependsgawk "mawk | gawk" -predependstest "aawk | mawk | gawk" -predependstest "aawk | gawk | mawk" +predependsgawk "aawk | mawk | gawk" +predependsgawk "aawk | gawk | mawk" -predependstest "gawk | awk" -predependstest "aawk | gawk | awk" +predependsgawk "gawk | awk" +predependsgawk "aawk | gawk | awk" -predependstest "mawk | awk" +predependsgawk "mawk | awk" -predependstest "awk | gawk" -predependstest "awk | gawk | aawk" +predependsgawk "awk | gawk" +predependsgawk "awk | gawk | aawk" -predependstest "awk | mawk" +predependsgawk "awk | mawk" -predependstest "aawk | awk" -predependstest "awk | aawk" +predependsgawk "aawk | awk" +predependsgawk "awk | aawk" -predependstest "awk" +predependsgawk "awk" -# aptget install gawk mawk- -sqq -o Debug::pkgOrderList=1 #-o Debug::pkgPackageManager=1 +predependsgawk2() { +# rm rootdir/var/cache/apt/*.bin + cp $TESTDIR/$(echo "$(basename $0)" | sed 's/test-/status-/') rootdir/var/lib/dpkg/status + echo "$pkgbasefile +Pre-Depends: $1 +" >> rootdir/var/lib/dpkg/status + testequalor2 "Inst coolstuff (1-1 localhost [all]) +Conf coolstuff (1-1 localhost [all]) +Inst gawk2 (1:3.1.7.dfsg-5 localhost [i386]) +Conf gawk2 (1:3.1.7.dfsg-5 localhost [i386]) +Remv mawk [1.3.3-15]" "Inst coolstuff (1-1 localhost [all]) +Inst gawk2 (1:3.1.7.dfsg-5 localhost [i386]) +Conf coolstuff (1-1 localhost [all]) +Conf gawk2 (1:3.1.7.dfsg-5 localhost [i386]) +Remv mawk [1.3.3-15]" aptget install gawk2 mawk- -sqq -o PreDepends=$(echo "$1" | sed 's/ //g') +} + +predependsgawk2 "gawk2 | mawk" +predependsgawk2 "mawk | gawk2" + +predependsgawk2 "aawk | mawk | gawk2" +predependsgawk2 "aawk | gawk2 | mawk" + +predependsgawk2 "gawk2 | awk" +predependsgawk2 "aawk | gawk2 | awk" + +predependsgawk2 "mawk | awk" + +predependsgawk2 "awk | gawk2" +predependsgawk2 "awk | gawk2 | aawk" + +predependsgawk2 "awk | mawk" + +predependsgawk2 "aawk | awk" +predependsgawk2 "awk | aawk" + +predependsgawk2 "awk" + + +# aptget install gawk2 mawk- -s #-o Debug::pkgOrderList=1 #-o Debug::pkgPackageManager=1 -- cgit v1.2.3-70-g09d2 From 8e86786b2f0002a7512f97d0f9b5ef3e4794e26e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 29 Jul 2010 15:09:18 +0200 Subject: remove the temporary compare files we create --- test/integration/framework | 3 +++ 1 file changed, 3 insertions(+) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index 7b323fdb5..b4e9302e8 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -147,6 +147,7 @@ testequal() { shift msgtest "Test for equality of" "$*" $* 2>&1 | diff $COMPAREFILE - && msgpass || msgfail + rm $COMPAREFILE } testequalor2() { @@ -163,6 +164,7 @@ testequalor2() { ( echo "\n${CINFO}Diff against OR 1${CNORMAL}" "$(diff $COMPAREFILE1 $COMPAREAGAINST)" \ "\n${CINFO}Diff against OR 2${CNORMAL}" "$(diff $COMPAREFILE2 $COMPAREAGAINST)" && msgfail ) + rm $COMPAREFILE1 $COMPAREFILE2 $COMPAREAGAINST } testshowvirtual() { @@ -183,6 +185,7 @@ E: No packages found" 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 + rm $COMPAREFILE } testnopackage() { -- cgit v1.2.3-70-g09d2 From 7d0627b62aa24b970f18d52be8576c314556b680 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 14 Aug 2010 00:25:57 +0200 Subject: add a small script to automate the task of creating Packages and status files for tests with "real" problems --- test/integration/create-test-data | 33 +++++++++++++++++++++++++++++++++ test/integration/framework | 6 +++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100755 test/integration/create-test-data (limited to 'test/integration/framework') diff --git a/test/integration/create-test-data b/test/integration/create-test-data new file mode 100755 index 000000000..ff9405502 --- /dev/null +++ b/test/integration/create-test-data @@ -0,0 +1,33 @@ +#!/bin/sh +set +e # its okay to fail in these script, most of the time the apt* stuff will generate errors + +local TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +BUILDDIRECTORY="${TESTDIR}/../../build/bin" + +GENERATE=$1 +CODENAME=$2 +shift 2 + +WORKDIR=$(mktemp -d) +trap "rm -rf $WORKDIR" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM +touch $WORKDIR/status +TMPGEN=$WORKDIR/Packages +export LANG=C + +LISTOFPKGS=$(aptget install $* -t $CODENAME -so Dir::state::status=$WORKDIR/status -o Dir::Cache::archives=$WORKDIR -o pkgCacheGen::Essential=none -o APT::Immediate-Configure=0 2> /dev/null | awk '/^Inst/ {print $2}' | sed -e "s#\$#/$CODENAME#") +aptcache show $LISTOFPKGS --no-all-versions 2> /dev/null > $TMPGEN +sed -i $TMPGEN \ + -e '/^ / d' \ + -e '/^SHA1: / d' -e '/^SHA256: / d' \ + -e '/^Homepage: / d' -e '/^Tag: / d' \ + -e '/^Xul-Appid: / d' \ + -e '/^Status: / d' + +if echo "$GENERATE" | grep '^status-' > /dev/null; then + sed -i $TMPGEN -e '/^Package: / a\ +Status: install ok installed' \ + -e '/^Filename: / d' -e '/^Size: / d' -e '/^MD5sum: / d' +fi + +apt-sortpkgs $TMPGEN > $GENERATE diff --git a/test/integration/framework b/test/integration/framework index b4e9302e8..f01bb989b 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -36,7 +36,11 @@ msgdone() { if [ "$1" = "debug" -o "$1" = "info" ]; then true; else echo "${CDON runapt() { msgdebug "Executing: ${CCMD}$*${CDEBUG} " - APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$* + if [ -f ./aptconfig.conf ]; then + APT_CONFIG=aptconfig.conf LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$* + else + LD_LIBRARY_PATH=${BUILDDIRECTORY} ${BUILDDIRECTORY}/$* + fi } aptconfig() { runapt apt-config $*; } aptcache() { runapt apt-cache $*; } -- cgit v1.2.3-70-g09d2 From 4bec02c237e8e218bc7d4bcf7142e0450480138b Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 14 Aug 2010 01:18:11 +0200 Subject: fix testcase framework to test correctly for virtual packages --- test/integration/framework | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index f01bb989b..5e6c5427f 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -73,7 +73,7 @@ setupenvironment() { if [ -f "${TESTDIR}/${PACKAGESFILE}" ]; then cp "${TESTDIR}/${PACKAGESFILE}" aptarchive/Packages else - touch var/lib/dpkg/status + touch aptarchive/Packages fi echo "RootDir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf echo "Debug::NoLocking \"true\";" >> aptconfig.conf @@ -172,18 +172,18 @@ testequalor2() { } testshowvirtual() { - local VIRTUAL="E: Can't select versions from package '$1' as it purely virtual" + local VIRTUAL="N: 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" +N: 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" +N: No packages found" local COMPAREFILE=$(mktemp) local ARCH=$(dpkg-architecture -qDEB_HOST_ARCH_CPU) eval `apt-config shell ARCH APT::Architecture` -- cgit v1.2.3-70-g09d2 From ce9864a8bfdfc7f5380b3335a6a14f305d372d45 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 18 Aug 2010 12:56:57 +0200 Subject: implement the first round of automated dummy package building and archive building --- test/integration/framework | 129 +++++++++++++++++++-- .../test-bug-590041-prefer-non-virtual-packages | 2 +- ...g-590438-broken-provides-thanks-to-remove-order | 2 +- test/integration/test-bug-591882-conkeror | 2 +- 4 files changed, 125 insertions(+), 10 deletions(-) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index 5e6c5427f..e3d77c5cd 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -92,10 +92,124 @@ configarchitecture() { done } -buildflataptarchive() { - msginfo "Build APT archive for ${CCMD}$0${CINFO}…" +buildsimplenativepackage() { + local NAME="$1" + local ARCH="$2" + local VERSION="$3" + local RELEASE="${4:-unstable}" + local DEPENDENCIES="$5" + local DESCRIPTION="$6" + msgndebug "Build package ${CCMD}${NAME}=${VERSION}/${RELEASE}${CDEBUG}… " + local BUILDDIR=incoming/${NAME}-${VERSION} + mkdir -p ${BUILDDIR}/debian/source + cd ${BUILDDIR} + echo "* most suckless software product ever" > FEATURES + test -e debian/copyright || (echo "Copyleft by Joe Sixpack $(date +%Y)" > debian/copyright) + test -e debian/changelog || (echo "$NAME ($VERSION) $RELEASE; urgency=low + + * Initial release + + -- Joe Sixpack $(date -R)" > debian/changelog) + test -e debian/control || (echo "Source: $NAME +Section: admin +Priority: optional +Maintainer: Joe Sixpack +Build-Depends: debhelper (>= 7) +Standards-Version: 3.9.1 + +Package: $NAME +Architecture: $ARCH" > debian/control) + test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> debian/control + if [ -z "$DESCRIPTION" ]; then + echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + If you find such a package installed on your system, + YOU did something horribly wrong! They are autogenerated + und used only by testcases for APT and surf no other propose…" >> debian/control + else + echo "Description: $DESCRIPTION" >> debian/control + fi + test -e debian/compat || (echo "7" > debian/compat) + test -e debian/source/format || (echo "3.0 (native)" > debian/source/format) + test -e debian/rules || cp /usr/share/doc/debhelper/examples/rules.tiny debian/rules + dpkg-buildpackage -uc -us -a$ARCH > /dev/null 2> /dev/null + cd - > /dev/null + rm -rf $BUILDDIR + msgdone "debug" +} + +buildaptarchive() { + msgninfo "Build APT archive for ${CCMD}$0${CINFO} based on " + if [ -d incoming ]; then + buildaptarchivefromincoming $* + else + buildaptarchivefromfiles $* + fi +} + +createaptftparchiveconfig() { + local ARCHS="$(find pool/ -name '*.deb' | grep -oE '_[a-z0-9-]+\.deb$' | sort | uniq | sed -e '/^_all.deb$/ d' -e 's#^_\([a-z0-9-]*\)\.deb$#\1#' | tr '\n' ' ')" + echo -n 'Dir { + ArchiveDir "' >> ftparchive.conf + echo -n $(readlink -f .) >> ftparchive.conf + echo -n '"; + CacheDir "' >> ftparchive.conf + echo -n $(readlink -f ..) >> ftparchive.conf + echo -n '"; +}; +TreeDefault { + Directory "pool/"; + SrcDirectory "pool/"; +}; +APT { + FTPArchive { + Release { + Origin "joesixpack"; + Label "apttestcases"; + Suite "unstable"; + Description "repository with dummy packages"; + Architectures "' >> ftparchive.conf + echo -n "$ARCHS" >> ftparchive.conf + echo 'source"; + }; + }; +};' >> ftparchive.conf + if [ -z "$1" ]; then + echo -n 'tree "dists/unstable" { + Architectures "' >> ftparchive.conf + echo -n "$ARCHS" >> ftparchive.conf + echo 'source"; + Sections "main"; +};' >> ftparchive.conf + fi +} + +buildaptftparchivedirectorystructure() { + local ARCHS="$(find pool/ -name '*.deb' | grep -oE '_[a-z0-9-]+\.deb$' | sort | uniq | sed -e '/^_all.deb$/ d' -e 's#^_\([a-z0-9-]*\)\.deb$#\1#')" + for arch in $ARCHS; do + mkdir -p dists/unstable/main/binary-${arch} + done + mkdir -p dists/unstable/main/source + mkdir -p dists/unstable/main/i18n +} + +buildaptarchivefromincoming() { + msginfo "incoming packages…" + cd aptarchive + [ -e pool ] || ln -s ../incoming pool + [ -e ftparchive.conf ] || createaptftparchiveconfig + [ -e dists ] || buildaptftparchivedirectorystructure + aptftparchive -qq generate ftparchive.conf + for dir in $(find ./dists -mindepth 1 -maxdepth 1 -type d); do + aptftparchive -qq release $dir > $dir/Release + sed -i -e '/0 Release$/ d' $dir/Release # remove the self reference + done + cd - > /dev/null + msgdone "info" +} + +buildaptarchivefromfiles() { + msginfo "prebuild files…" cd aptarchive - APTARCHIVE=$(readlink -f .) if [ -f Packages ]; then msgninfo "\tPackages file… " cat Packages | gzip > Packages.gz @@ -110,13 +224,14 @@ buildflataptarchive() { cat Sources | lzma > Sources.lzma msgdone "info" fi + aptftparchive -qq release . > Release + sed -i -e '/0 Release$/ d' Release # remove the self reference cd .. - aptftparchive release . > Release } -setupflataptarchive() { - buildflataptarchive - APTARCHIVE=$(readlink -f ./aptarchive) +setupaptarchive() { + buildaptarchive + local 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 diff --git a/test/integration/test-bug-590041-prefer-non-virtual-packages b/test/integration/test-bug-590041-prefer-non-virtual-packages index aa9e487e1..3e2693f85 100755 --- a/test/integration/test-bug-590041-prefer-non-virtual-packages +++ b/test/integration/test-bug-590041-prefer-non-virtual-packages @@ -41,7 +41,7 @@ $pkglibc6 $pkglibdb1 EOF -setupflataptarchive +setupaptarchive testshowvirtual libc6:i386 testequal "$pkglibc6" aptcache show libc6:armel diff --git a/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order b/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order index 17ce50295..9fd7741f4 100755 --- a/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order +++ b/test/integration/test-bug-590438-broken-provides-thanks-to-remove-order @@ -6,7 +6,7 @@ local TESTDIR=$(readlink -f $(dirname $0)) setupenvironment configarchitecture "i386" -setupflataptarchive +setupaptarchive pkgbasefile="Package: base-files Status: install ok installed diff --git a/test/integration/test-bug-591882-conkeror b/test/integration/test-bug-591882-conkeror index cba7e7665..b1dbb3a0a 100755 --- a/test/integration/test-bug-591882-conkeror +++ b/test/integration/test-bug-591882-conkeror @@ -5,7 +5,7 @@ local TESTDIR=$(readlink -f $(dirname $0)) . $TESTDIR/framework setupenvironment configarchitecture "i386" -setupflataptarchive +setupaptarchive UPGRADEFAIL="Reading package lists... Building dependency tree... -- cgit v1.2.3-70-g09d2 From fc89263e0dc1eceb016d52f2007a458b2dc5afaf Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 18 Aug 2010 13:20:16 +0200 Subject: add proper MSGLEVEL handling by overriding methods dynamic --- test/integration/framework | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index e3d77c5cd..a4c857f17 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -28,11 +28,37 @@ 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 } +MSGLEVEL=${MSGLEVEL:-3} +if [ $MSGLEVEL -le 0 ]; then + msgdie() { true; } +fi +if [ $MSGLEVEL -le 1 ]; then + msgwarn() { true; } + msgnwarn() { true; } +fi +if [ $MSGLEVEL -le 2 ]; then + msgmsg() { true; } + msgnmsg() { true; } +fi +if [ $MSGLEVEL -le 3 ]; then + msginfo() { true; } + msgninfo() { true; } +fi +if [ $MSGLEVEL -le 4 ]; then + msgdebug() { true; } + msgndebug() { true; } +fi +msgdone() { + if [ "$1" = "debug" -a $MSGLEVEL -le 4 ] || + [ "$1" = "info" -a $MSGLEVEL -le 3 ] || + [ "$1" = "msg" -a $MSGLEVEL -le 2 ] || + [ "$1" = "warn" -a $MSGLEVEL -le 1 ] || + [ "$1" = "die" -a $MSGLEVEL -le 0 ]; then + true; + else + echo "${CDONE}DONE${CNORMAL}" >&2; + fi +} runapt() { msgdebug "Executing: ${CCMD}$*${CDEBUG} " -- cgit v1.2.3-70-g09d2 From b7899b004710a0050407d4c6cdfc792110dd03cd Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 18 Aug 2010 18:21:34 +0200 Subject: extend the magic which creates the test archive by using FileLists to ship the build packages in the correct distribution and section --- test/integration/framework | 119 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 91 insertions(+), 28 deletions(-) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index a4c857f17..66a0b5dc7 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -125,26 +125,33 @@ buildsimplenativepackage() { local RELEASE="${4:-unstable}" local DEPENDENCIES="$5" local DESCRIPTION="$6" + local SECTION="${7:-others}" + local DISTSECTION + if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then + DISTSECTION="main" + else + DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)" + fi msgndebug "Build package ${CCMD}${NAME}=${VERSION}/${RELEASE}${CDEBUG}… " local BUILDDIR=incoming/${NAME}-${VERSION} mkdir -p ${BUILDDIR}/debian/source cd ${BUILDDIR} echo "* most suckless software product ever" > FEATURES - test -e debian/copyright || (echo "Copyleft by Joe Sixpack $(date +%Y)" > debian/copyright) - test -e debian/changelog || (echo "$NAME ($VERSION) $RELEASE; urgency=low + test -e debian/copyright || echo "Copyleft by Joe Sixpack $(date +%Y)" > debian/copyright + test -e debian/changelog || echo "$NAME ($VERSION) $RELEASE; urgency=low * Initial release - -- Joe Sixpack $(date -R)" > debian/changelog) - test -e debian/control || (echo "Source: $NAME -Section: admin + -- Joe Sixpack $(date -R)" > debian/changelog + test -e debian/control || echo "Source: $NAME +Section: $SECTION Priority: optional Maintainer: Joe Sixpack Build-Depends: debhelper (>= 7) Standards-Version: 3.9.1 Package: $NAME -Architecture: $ARCH" > debian/control) +Architecture: $ARCH" > debian/control test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> debian/control if [ -z "$DESCRIPTION" ]; then echo "Description: an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} @@ -154,17 +161,24 @@ Architecture: $ARCH" > debian/control) else echo "Description: $DESCRIPTION" >> debian/control fi - test -e debian/compat || (echo "7" > debian/compat) - test -e debian/source/format || (echo "3.0 (native)" > debian/source/format) + test -e debian/compat || echo "7" > debian/compat + test -e debian/source/format || echo "3.0 (native)" > debian/source/format test -e debian/rules || cp /usr/share/doc/debhelper/examples/rules.tiny debian/rules - dpkg-buildpackage -uc -us -a$ARCH > /dev/null 2> /dev/null + local BUILT="$(dpkg-buildpackage -uc -us -a$ARCH 2> /dev/null)" + local PKGS="$( echo "$BUILT" | grep '^dpkg-deb: building package' | cut -d'/' -f 2 | sed -e "s#'\.##")" + local SRCS="$( echo "$BUILT" | grep '^dpkg-source: info: building' | grep -o '[a-z0-9._-]*$')" cd - > /dev/null + for PKG in $PKGS; do + echo "pool/${PKG}" >> ./incoming/${RELEASE}.${DISTSECTION}.pkglist + done + for SRC in $SRCS; do + echo "pool/${SRC}" >> ./incoming/${RELEASE}.${DISTSECTION}.srclist + done rm -rf $BUILDDIR msgdone "debug" } buildaptarchive() { - msgninfo "Build APT archive for ${CCMD}$0${CINFO} based on " if [ -d incoming ]; then buildaptarchivefromincoming $* else @@ -181,6 +195,14 @@ createaptftparchiveconfig() { CacheDir "' >> ftparchive.conf echo -n $(readlink -f ..) >> ftparchive.conf echo -n '"; + FileListDir "' >> ftparchive.conf + echo -n $(readlink -f pool/) >> ftparchive.conf + echo -n '"; +}; +Default { + Packages::Compress ". gzip bzip2 lzma"; + Sources::Compress ". gzip bzip2 lzma"; + Contents::Compress ". gzip bzip2 lzma"; }; TreeDefault { Directory "pool/"; @@ -199,42 +221,61 @@ APT { }; }; };' >> ftparchive.conf - if [ -z "$1" ]; then - echo -n 'tree "dists/unstable" { + for DIST in $(find ./pool/ -maxdepth 1 -name '*.pkglist' -type f | cut -d'/' -f 3 | cut -d'.' -f 1 | sort | uniq); do + echo -n 'tree "dists/' >> ftparchive.conf + echo -n "$DIST" >> ftparchive.conf + echo -n '" { Architectures "' >> ftparchive.conf echo -n "$ARCHS" >> ftparchive.conf - echo 'source"; - Sections "main"; + echo -n 'source"; + FileList "' >> ftparchive.conf + echo -n "${DIST}.\$(SECTION).pkglist" >> ftparchive.conf + echo -n '"; + SourceFileList "' >> ftparchive.conf + echo -n "${DIST}.\$(SECTION).srclist" >> ftparchive.conf + echo -n '"; + Sections "' >> ftparchive.conf + echo -n "$(find ./pool/ -maxdepth 1 -name "${DIST}.*.pkglist" -type f | cut -d'/' -f 3 | cut -d'.' -f 2 | sort | uniq | tr '\n' ' ')" >> ftparchive.conf + echo '"; };' >> ftparchive.conf - fi + done + less ftparchive.conf } buildaptftparchivedirectorystructure() { - local ARCHS="$(find pool/ -name '*.deb' | grep -oE '_[a-z0-9-]+\.deb$' | sort | uniq | sed -e '/^_all.deb$/ d' -e 's#^_\([a-z0-9-]*\)\.deb$#\1#')" - for arch in $ARCHS; do - mkdir -p dists/unstable/main/binary-${arch} + local DISTS="$(grep -i '^tree ' ftparchive.conf | cut -d'/' -f 2 | sed -e 's#".*##')" + for DIST in $DISTS; do + local SECTIONS="$(grep -i -A 5 "dists/$DIST" ftparchive.conf | grep -i 'Sections' | cut -d'"' -f 2)" + for SECTION in $SECTIONS; do + local ARCHS="$(grep -A 5 "dists/$DIST" ftparchive.conf | grep Architectures | cut -d'"' -f 2 | sed -e 's#source##')" + for ARCH in $ARCHS; do + mkdir -p dists/${DIST}/${SECTION}/binary-${ARCH} + done + mkdir -p dists/${DIST}/${SECTION}/source + mkdir -p dists/${DIST}/${SECTION}/i18n + done done - mkdir -p dists/unstable/main/source - mkdir -p dists/unstable/main/i18n } buildaptarchivefromincoming() { - msginfo "incoming packages…" + msginfo "Build APT archive for ${CCMD}$0${CINFO} based on incoming packages…" cd aptarchive [ -e pool ] || ln -s ../incoming pool [ -e ftparchive.conf ] || createaptftparchiveconfig [ -e dists ] || buildaptftparchivedirectorystructure + msgninfo "\tGenerate Packages, Sources and Contents files… " aptftparchive -qq generate ftparchive.conf + msgdone "info" + msgninfo "\tGenerate Release files… " for dir in $(find ./dists -mindepth 1 -maxdepth 1 -type d); do - aptftparchive -qq release $dir > $dir/Release - sed -i -e '/0 Release$/ d' $dir/Release # remove the self reference + aptftparchive -qq release $dir | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference done cd - > /dev/null msgdone "info" } buildaptarchivefromfiles() { - msginfo "prebuild files…" + msginfo "Build APT archive for ${CCMD}$0${CINFO} based on prebuild files…" cd aptarchive if [ -f Packages ]; then msgninfo "\tPackages file… " @@ -250,13 +291,26 @@ buildaptarchivefromfiles() { cat Sources | lzma > Sources.lzma msgdone "info" fi - aptftparchive -qq release . > Release - sed -i -e '/0 Release$/ d' Release # remove the self reference + msgninfo "\tRelease file… " + aptftparchive -qq release . | sed -e '/0 Release$/ d' > Release # remove the self reference + msgdone "info" cd .. } -setupaptarchive() { - buildaptarchive +setupdistsaptarchive() { + local APTARCHIVE=$(readlink -f ./aptarchive) + rm -f root/etc/apt/sources.list.d/apt-test-*-deb.list + rm -f root/etc/apt/sources.list.d/apt-test-*-deb-src.list + for DISTS in $(find ./aptarchive/dists/ -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 4); do + SECTIONS=$(find ./aptarchive/dists/${DISTS}/ -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 5 | tr '\n' ' ') + msgninfo "\tadd deb and deb-src sources.list lines for ${CCMD}${DISTS} ${SECTIONS}${CINFO}… " + echo "deb file://$APTARCHIVE $DISTS $SECTIONS" > rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb.list + echo "deb-src file://$APTARCHIVE $DISTS $SECTIONS" > rootdir/etc/apt/sources.list.d/apt-test-${DISTS}-deb-src.list + msgdone "info" + done +} + +setupflataptarchive() { local APTARCHIVE=$(readlink -f ./aptarchive) if [ -f ${APTARCHIVE}/Packages ]; then msgninfo "\tadd deb sources.list line… " @@ -272,6 +326,15 @@ setupaptarchive() { else rm -f rootdir/etc/apt/sources.list.d/apt-test-archive-deb-src.list fi +} + +setupaptarchive() { + buildaptarchive + if [ -e aptarchive/dists ]; then + setupdistsaptarchive + else + setupflataptarchive + fi aptget update -qq } -- cgit v1.2.3-70-g09d2 From cffea9af1a8819e7caf6d8655318867660a05bec Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 18 Aug 2010 21:03:50 +0200 Subject: setup the environment correctly for dpkg, too --- test/integration/framework | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index 66a0b5dc7..e964235b0 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -84,14 +84,16 @@ setupenvironment() { 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 + mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d var/cache + mkdir -p var/log/apt var/lib/apt + mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers local STATUSFILE=$(echo "$(basename $0)" | sed 's/^test-/status-/') if [ -f "${TESTDIR}/${STATUSFILE}" ]; then cp "${TESTDIR}/${STATUSFILE}" var/lib/dpkg/status else touch var/lib/dpkg/status fi + touch var/lib/apt/extended_states var/lib/dpkg/available mkdir -p usr/lib/apt ln -s ${BUILDDIRECTORY}/methods usr/lib/apt/methods cd .. @@ -101,9 +103,15 @@ setupenvironment() { else touch aptarchive/Packages fi - echo "RootDir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf + echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf echo "Debug::NoLocking \"true\";" >> aptconfig.conf echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf + echo "Dir::Bin::dpkg \"fakeroot\";" >> aptconfig.conf + echo "DPKG::options:: \"dpkg\";" >> aptconfig.conf + echo "DPKG::options:: \"--root=${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf + echo "DPKG::options:: \"--force-not-root\";" >> aptconfig.conf + echo "DPKG::options:: \"--force-bad-path\";" >> aptconfig.conf + echo "DPKG::options:: \"--log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log\";" >> aptconfig.conf export LC_ALL=C msgdone "info" } @@ -132,7 +140,7 @@ buildsimplenativepackage() { else DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)" fi - msgndebug "Build package ${CCMD}${NAME}=${VERSION}/${RELEASE}${CDEBUG}… " + msgninfo "Build package ${CCMD}${NAME}=${VERSION}/${RELEASE}${CINFO}… " local BUILDDIR=incoming/${NAME}-${VERSION} mkdir -p ${BUILDDIR}/debian/source cd ${BUILDDIR} @@ -175,7 +183,7 @@ Architecture: $ARCH" > debian/control echo "pool/${SRC}" >> ./incoming/${RELEASE}.${DISTSECTION}.srclist done rm -rf $BUILDDIR - msgdone "debug" + msgdone "info" } buildaptarchive() { @@ -239,7 +247,6 @@ APT { echo '"; };' >> ftparchive.conf done - less ftparchive.conf } buildaptftparchivedirectorystructure() { -- cgit v1.2.3-70-g09d2 From cd725954f6df5b809fe8d90ee135e222d1cef30e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 19 Aug 2010 00:32:56 +0200 Subject: sign the created Release files with our own dummy key "Joe Sixpack" --- test/integration/framework | 15 ++++++++++++--- test/integration/joesixpack.pub | Bin 0 -> 639 bytes test/integration/joesixpack.sec | Bin 0 -> 1290 bytes 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 test/integration/joesixpack.pub create mode 100644 test/integration/joesixpack.sec (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index e964235b0..01b795ba9 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -82,7 +82,7 @@ setupenvironment() { 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 + mkdir rootdir aptarchive keys 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 mkdir -p var/log/apt var/lib/apt @@ -93,7 +93,7 @@ setupenvironment() { else touch var/lib/dpkg/status fi - touch var/lib/apt/extended_states var/lib/dpkg/available + touch var/lib/dpkg/available mkdir -p usr/lib/apt ln -s ${BUILDDIRECTORY}/methods usr/lib/apt/methods cd .. @@ -103,6 +103,8 @@ setupenvironment() { else touch aptarchive/Packages fi + cp $(find $TESTDIR -name '*.pub' -o -name '*.sec') keys/ + ln -s ${TMPWORKINGDIRECTORY}/keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" > aptconfig.conf echo "Debug::NoLocking \"true\";" >> aptconfig.conf echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf @@ -275,7 +277,7 @@ buildaptarchivefromincoming() { msgdone "info" msgninfo "\tGenerate Release files… " for dir in $(find ./dists -mindepth 1 -maxdepth 1 -type d); do - aptftparchive -qq release $dir | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference + aptftparchive -qq release $dir -o APT::FTPArchive::Release::Codename="$(echo "$dir" | cut -d'/' -f 3)" | sed -e '/0 Release$/ d' > $dir/Release # remove the self reference done cd - > /dev/null msgdone "info" @@ -342,7 +344,14 @@ setupaptarchive() { else setupflataptarchive fi + msgninfo "\tSign archive with Joe Sixpack key… " + for RELEASE in $(find aptarchive/ -name Release); do + gpg --no-default-keyring --secret-keyring ./keys/joesixpack.sec --keyring ./keys/joesixpack.pub --default-key Joe -abs -o ${RELEASE}.gpg ${RELEASE} + done + msgdone "info" + msgninfo "\tSync APT's cache with the archive… " aptget update -qq + msgdone "info" } diff() { diff --git a/test/integration/joesixpack.pub b/test/integration/joesixpack.pub new file mode 100644 index 000000000..2b40b97b6 Binary files /dev/null and b/test/integration/joesixpack.pub differ diff --git a/test/integration/joesixpack.sec b/test/integration/joesixpack.sec new file mode 100644 index 000000000..92aaada76 Binary files /dev/null and b/test/integration/joesixpack.sec differ -- cgit v1.2.3-70-g09d2 From 75954ae2420ae7755d8482f2f1eecc03595a5153 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Fri, 20 Aug 2010 19:09:16 +0200 Subject: * apt-pkg/deb/dpkgpm.cc: - use the InstVer instead of the CurrentVer for the autobit transfer Add also a small testcase to check the handling automatical --- apt-pkg/deb/dpkgpm.cc | 6 ++-- debian/changelog | 4 ++- test/integration/framework | 54 +++++++++++++++++++++++++---- test/integration/test-disappearing-packages | 54 +++++++++++++++++++++++++++++ 4 files changed, 108 insertions(+), 10 deletions(-) create mode 100755 test/integration/test-disappearing-packages (limited to 'test/integration/framework') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index aa0b04bd5..5530ef129 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -554,7 +554,7 @@ void pkgDPkgPM::handleDisappearAction(string const &pkgname) // the disappeared package was auto-installed - nothing to do if ((Cache[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto) return; - pkgCache::VerIterator PkgVer = Pkg.CurrentVer(); + pkgCache::VerIterator PkgVer = Cache[Pkg].InstVerIter(Cache); if (unlikely(PkgVer.end() == true)) return; /* search in the list of dependencies for (Pre)Depends, @@ -571,7 +571,9 @@ void pkgDPkgPM::handleDisappearAction(string const &pkgname) // the package is already marked as manual if ((Cache[Tar].Flags & pkgCache::Flag::Auto) != pkgCache::Flag::Auto) continue; - pkgCache::VerIterator TarVer = Tar.CurrentVer(); + pkgCache::VerIterator TarVer = Cache[Tar].InstVerIter(Cache); + if (TarVer.end() == true) + continue; for (pkgCache::DepIterator Rep = TarVer.DependsList(); Rep.end() != true; ++Rep) { if (Rep->Type != pkgCache::Dep::Replaces) diff --git a/debian/changelog b/debian/changelog index 88b22c01b..a08dce97f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,8 +13,10 @@ apt (0.8.0~pre2) UNRELEASED; urgency=low - init valid-until correctly to prevent garbage entering Release file * apt-pkg/deb/debsystem.cc: - set dir::state::status based at least on dir + * apt-pkg/deb/dpkgpm.cc: + - use the InstVer instead of the CurrentVer for the autobit transfer - -- David Kalnischkies Thu, 19 Aug 2010 00:28:21 +0200 + -- David Kalnischkies Fri, 20 Aug 2010 19:06:29 +0200 apt (0.8.0~pre1) experimental; urgency=low diff --git a/test/integration/framework b/test/integration/framework index 01b795ba9..82fca2046 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -74,13 +74,13 @@ aptget() { runapt apt-get $*; } aptftparchive() { runapt apt-ftparchive $*; } setupenvironment() { - local TMPWORKINGDIRECTORY=$(mktemp -d) + TMPWORKINGDIRECTORY=$(mktemp -d) local TESTDIR=$(readlink -f $(dirname $0)) msgninfo "Preparing environment for ${CCMD}$0${CINFO} in ${TMPWORKINGDIRECTORY}… " BUILDDIRECTORY="${TESTDIR}/../../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 +# trap "cd /; rm -rf $TMPWORKINGDIRECTORY; cd $OLDWORKINGDIRECTORY" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM cd $TMPWORKINGDIRECTORY mkdir rootdir aptarchive keys cd rootdir @@ -128,7 +128,7 @@ configarchitecture() { done } -buildsimplenativepackage() { +setupsimplenativepackage() { local NAME="$1" local ARCH="$2" local VERSION="$3" @@ -142,7 +142,6 @@ buildsimplenativepackage() { else DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)" fi - msgninfo "Build package ${CCMD}${NAME}=${VERSION}/${RELEASE}${CINFO}… " local BUILDDIR=incoming/${NAME}-${VERSION} mkdir -p ${BUILDDIR}/debian/source cd ${BUILDDIR} @@ -174,17 +173,47 @@ Architecture: $ARCH" > debian/control test -e debian/compat || echo "7" > debian/compat test -e debian/source/format || echo "3.0 (native)" > debian/source/format test -e debian/rules || cp /usr/share/doc/debhelper/examples/rules.tiny debian/rules + cd - > /dev/null +} + +buildsimplenativepackage() { + local NAME="$1" + local ARCH="$2" + local VERSION="$3" + local RELEASE="${4:-unstable}" + local DEPENDENCIES="$5" + local DESCRIPTION="$6" + local SECTION="${7:-others}" + local DISTSECTION + if [ "$SECTION" = "$(echo "$SECTION" | cut -d'/' -f 2)" ]; then + DISTSECTION="main" + else + DISTSECTION="$(echo "$SECTION" | cut -d'/' -f 1)" + fi + setupsimplenativepackage "$NAME" "$ARCH" "$VERSION" "$RELEASE" "$DEPENDENCIES" "$DESCRIPTION" "$SECTION" + buildpackage "incoming/${NAME}-${VERSION}" "$RELEASE" "$DISTSECTION" + rm -rf "incoming/${NAME}-${VERSION}" +} + +buildpackage() { + local BUILDDIR=$1 + local RELEASE=$2 + local SECTION=$3 + msgninfo "Build package $(echo "$BUILDDIR" | grep -o '[^/]*$') for ${RELEASE} in ${SECTION}… " + cd $BUILDDIR + if [ "$ARCH" = "all" ]; then + ARCH="$(dpkg-architecture -qDEB_HOST_ARCH 2> /dev/null)" + fi local BUILT="$(dpkg-buildpackage -uc -us -a$ARCH 2> /dev/null)" local PKGS="$( echo "$BUILT" | grep '^dpkg-deb: building package' | cut -d'/' -f 2 | sed -e "s#'\.##")" local SRCS="$( echo "$BUILT" | grep '^dpkg-source: info: building' | grep -o '[a-z0-9._-]*$')" cd - > /dev/null for PKG in $PKGS; do - echo "pool/${PKG}" >> ./incoming/${RELEASE}.${DISTSECTION}.pkglist + echo "pool/${PKG}" >> ${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.pkglist done for SRC in $SRCS; do - echo "pool/${SRC}" >> ./incoming/${RELEASE}.${DISTSECTION}.srclist + echo "pool/${SRC}" >> ${TMPWORKINGDIRECTORY}/incoming/${RELEASE}.${SECTION}.srclist done - rm -rf $BUILDDIR msgdone "info" } @@ -365,6 +394,17 @@ diff() { fi } +testfileequal() { + local FILE="$1" + shift + msgtest "Test for correctness of file" "$FILE" + if [ -z "$*" ]; then + echo -n "" | diff $FILE - && msgpass || msgfail + else + echo "$*" | diff $FILE - && msgpass || msgfail + fi +} + testequal() { local COMPAREFILE=$(mktemp) echo "$1" > $COMPAREFILE diff --git a/test/integration/test-disappearing-packages b/test/integration/test-disappearing-packages new file mode 100755 index 000000000..ebf2bb14f --- /dev/null +++ b/test/integration/test-disappearing-packages @@ -0,0 +1,54 @@ +#!/bin/sh +set -e + +local TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture "i386" + +buildsimplenativepackage "old-pkg" "i386" "1.0" "stable" +buildsimplenativepackage "unrelated" "all" "0.5" "unstable" + +setupsimplenativepackage "new-pkg" "i386" "2.0" "unstable" "Provides: old-pkg +Replaces: old-pkg +Conflicts: old-pkg (<< 2.0)" +local BUILDDIR="incoming/new-pkg-2.0" +echo "/usr/share/doc/new-pkg /usr/share/doc/old-pkg" > ${BUILDDIR}/debian/new-pkg.links +buildpackage "$BUILDDIR" "unstable" "main" +rm -rf "$BUILDDIR" + +setupsimplenativepackage "old-pkg" "all" "2.0" "unstable" "Depends: new-pkg" +local BUILDDIR="incoming/old-pkg-2.0" +echo "/usr/share/doc/new-pkg /usr/share/doc/old-pkg" > ${BUILDDIR}/debian/old-pkg.links +echo " +override_dh_link: + rm -rf debian/old-pkg/usr/share/doc/old-pkg/ + dh_link" >> ${BUILDDIR}/debian/rules +buildpackage "$BUILDDIR" "unstable" "main" +rm -rf "$BUILDDIR" + +setupaptarchive + +aptget install old-pkg=1.0 --trivial-only -qq 2>&1 > /dev/null + +testfileequal "rootdir/var/lib/apt/extended_states" "" # old-pkg is manual installed + +local CMD="aptget dist-upgrade -y -q=0" +msgtest "Test for equality of" "$CMD" +local COMPAREFILE=$(mktemp) +echo "The following package disappeared from your system as +all files have been overwritten by other packages: + old-pkg +Note: This is done automatic and on purpose by dpkg." > $COMPAREFILE +$CMD 2>&1 | tail -n 4 | diff $COMPAREFILE - && msgpass || msgfail +rm $COMPAREFILE + +sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d' +testfileequal "rootdir/var/log/apt/history.log" " +Install: old-pkg:i386 (1.0) + +Install: new-pkg:i386 (2.0, automatic) +Upgrade: old-pkg:i386 (1.0, 2.0) +Disappeared: old-pkg (1.0)" + +testfileequal "rootdir/var/lib/apt/extended_states" "" # new-pkg should have get the manual flag from old-pkg -- cgit v1.2.3-70-g09d2 From f213b6ea7397f2ba5b770e1a30e57dc8438bf61e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 21 Aug 2010 22:19:56 +0200 Subject: * apt-pkg/acquire-item.cc: - don't use ReadOnlyGzip mode for PDiffs as this mode doesn't work in combination with the AddFd methods of our hashclasses Add also 2 testcases: one to test pdiffs in general and one to test the handling of compressed indexes. --- apt-pkg/acquire-item.cc | 6 +- debian/changelog | 5 +- test/integration/Packages-pdiff-usage | 34 ++++++++ test/integration/Packages-pdiff-usage-new | 37 +++++++++ test/integration/framework | 58 +++++++++---- test/integration/test-compressed-indexes | 131 ++++++++++++++++++++++++++++++ test/integration/test-pdiff-usage | 51 ++++++++++++ 7 files changed, 303 insertions(+), 19 deletions(-) create mode 100644 test/integration/Packages-pdiff-usage create mode 100644 test/integration/Packages-pdiff-usage-new create mode 100755 test/integration/test-compressed-indexes create mode 100755 test/integration/test-pdiff-usage (limited to 'test/integration/framework') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index a289fb7ba..752bc6a99 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -280,7 +280,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile) /*{{{*/ ss >> ServerSha1 >> size; unsigned long const ServerSize = atol(size.c_str()); - FileFd fd(CurrentPackagesFile, FileFd::ReadOnlyGzip); + FileFd fd(CurrentPackagesFile, FileFd::ReadOnly); SHA1Summation SHA1; SHA1.AddFD(fd.Fd(), fd.Size()); string const local_sha1 = SHA1.Result(); @@ -297,7 +297,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile) /*{{{*/ else { if(Debug) - std::clog << "SHA1-Current: " << ServerSha1 << std::endl; + std::clog << "SHA1-Current: " << ServerSha1 << " and we start at "<< fd.Name() << " " << fd.Size() << " " << local_sha1 << std::endl; // check the historie and see what patches we need string const history = Tags.FindS("SHA1-History"); @@ -511,7 +511,7 @@ bool pkgAcqIndexDiffs::QueueNextDiff() /*{{{*/ string FinalFile = _config->FindDir("Dir::State::lists"); FinalFile += URItoFileName(RealURI); - FileFd fd(FinalFile, FileFd::ReadOnlyGzip); + FileFd fd(FinalFile, FileFd::ReadOnly); SHA1Summation SHA1; SHA1.AddFD(fd.Fd(), fd.Size()); string local_sha1 = string(SHA1.Result()); diff --git a/debian/changelog b/debian/changelog index c2c0b605d..c05f9439c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,8 +19,11 @@ apt (0.8.0~pre2) UNRELEASED; urgency=low - some http servers violate HTTP1.1 by not issuing a Reason-Phrase (or at least a space after the code) especially for 200, but lets be nice and ignore it as we don't need the reason in general + * apt-pkg/acquire-item.cc: + - don't use ReadOnlyGzip mode for PDiffs as this mode doesn't work + in combination with the AddFd methods of our hashclasses - -- David Kalnischkies Fri, 20 Aug 2010 23:00:54 +0200 + -- David Kalnischkies Sat, 21 Aug 2010 22:18:41 +0200 apt (0.8.0~pre1) experimental; urgency=low diff --git a/test/integration/Packages-pdiff-usage b/test/integration/Packages-pdiff-usage new file mode 100644 index 000000000..d1530a95c --- /dev/null +++ b/test/integration/Packages-pdiff-usage @@ -0,0 +1,34 @@ +Package: apt +Version: 0.7.25.3 +Architecture: i386 +Maintainer: APT Development Team +Installed-Size: 5244 +Replaces: libapt-pkg-dev (<< 0.3.7), libapt-pkg-doc (<< 0.3.7) +Provides: libapt-pkg-libc6.9-6-4.8 +Depends: libc6 (>= 2.3.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0), debian-archive-keyring +Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt +Filename: pool/main/a/apt/apt_0.7.25.3_i386.deb +Size: 1750610 +MD5sum: 311aadc67d1b72428b54c9b4e1f76671 +SHA1: 3c695e028f74d5c55226f9ef30000bbbd881088c +SHA256: b46fd1546151c545fe4bfa56a5cc0e7811a9f68826326a529777fd660f28f050 +Description: Advanced front-end for dpkg + This is Debian's next generation front-end for the dpkg package manager. + It provides the apt-get utility and APT dselect method that provides a + simpler, safer way to install and upgrade packages. + . + APT features complete installation ordering, multiple source capability + and several other unique features, see the Users Guide in apt-doc. + +Package: oldstuff +Version: 1.0 +Architecture: i386 +Maintainer: Joe Sixpack +Installed-Size: 100 +Filename: pool/oldstuff_1.0_i386.deb +Size: 100000 +MD5sum: 311aeeadf78324aaff54c9b4e1f76671 +SHA1: 3c695e028f74d5c544deeddaaa1242desa81088c +SHA256: b46fd1546151c545fe4bfa56a5cc0e7deaef23e2da3e4f129727fd660f28f050 +Description: some cool but old stuff + This package will disappear in the next mirror update diff --git a/test/integration/Packages-pdiff-usage-new b/test/integration/Packages-pdiff-usage-new new file mode 100644 index 000000000..9157596a7 --- /dev/null +++ b/test/integration/Packages-pdiff-usage-new @@ -0,0 +1,37 @@ +Package: newstuff +Version: 1.0 +Architecture: i386 +Maintainer: Joe Sixpack +Installed-Size: 101 +Filename: pool/newstuff_1.0_i386.deb +Size: 101100 +MD5sum: 311aeeadf78324aaff1ceaf3e1f76671 +SHA1: 3c695e028f7a1ae324deeddaaa1242desa81088c +SHA256: b46fd154615edefab321cc56a5cc0e7deaef23e2da3e4f129727fd660f28f050 +Description: some cool and shiny new stuff + This package will appear in the next mirror update + +Package: apt +Priority: important +Section: admin +Installed-Size: 5672 +Maintainer: APT Development Team +Architecture: i386 +Version: 0.8.0~pre1 +Replaces: manpages-pl (<< 20060617-3~) +Provides: libapt-pkg4.10 +Depends: libc6 (>= 2.3.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.4.0), zlib1g (>= 1:1.1.4), debian-archive-keyring, gnupg +Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt +Conflicts: python-apt (<< 0.7.93.2~) +Filename: pool/main/a/apt/apt_0.8.0~pre1_i386.deb +Size: 2013046 +MD5sum: 6786ca6270c988f2c201716ededaedec +SHA1: fe26559e745d4c2c977c27170938852041c9adff +SHA256: a12f968467e1e3cec24191b72bfe84f7aeed3ce422e1a60bb4f1454f2b89b8ee +Description: Advanced front-end for dpkg + This is Debian's next generation front-end for the dpkg package manager. + It provides the apt-get utility and APT dselect method that provides a + simpler, safer way to install and upgrade packages. + . + APT features complete installation ordering, multiple source capability + and several other unique features, see the Users Guide in apt-doc. diff --git a/test/integration/framework b/test/integration/framework index 82fca2046..8efe47330 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -80,7 +80,8 @@ setupenvironment() { BUILDDIRECTORY="${TESTDIR}/../../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 + CURRENTTRAP="cd /; rm -rf $TMPWORKINGDIRECTORY; cd $OLDWORKINGDIRECTORY" + trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM cd $TMPWORKINGDIRECTORY mkdir rootdir aptarchive keys cd rootdir @@ -373,17 +374,44 @@ setupaptarchive() { else setupflataptarchive fi - msgninfo "\tSign archive with Joe Sixpack key… " - for RELEASE in $(find aptarchive/ -name Release); do - gpg --no-default-keyring --secret-keyring ./keys/joesixpack.sec --keyring ./keys/joesixpack.pub --default-key Joe -abs -o ${RELEASE}.gpg ${RELEASE} - done - msgdone "info" + signreleasefiles msgninfo "\tSync APT's cache with the archive… " aptget update -qq msgdone "info" } -diff() { +signreleasefiles() { + local SIGNER="${1:-Joe Sixpack}" + msgninfo "\tSign archive with $SIGNER key… " + local SECKEYS="" + for KEY in $(find keys/ -name '*.sec'); do + SECKEYS="$SECKEYS --secret-keyring $KEY" + done + local PUBKEYS="" + for KEY in $(find keys/ -name '*.pub'); do + PUBKEYS="$PUBKEYS --keyring $KEY" + done + for RELEASE in $(find aptarchive/ -name Release); do + gpg --yes --no-default-keyring $SECKEYS $PUBKEYS --default-key "$SIGNER" -abs -o ${RELEASE}.gpg ${RELEASE} + done + msgdone "info" +} + +changetowebserver() { + if which weborf > /dev/null; then + weborf -xb aptarchive/ 2>&1 > /dev/null & + CURRENTTRAP="kill $(ps | grep weborf | sed -e 's#^[ ]*##' | cut -d' ' -f 1); $CURRENTTRAP" + trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM + local APTARCHIVE="file://$(readlink -f ./aptarchive)" + for LIST in $(find rootdir/etc/apt/sources.list.d/ -name 'apt-test-*.list'); do + sed -i $LIST -e "s#$APTARCHIVE#http://localhost:8080/#" + done + return 0 + fi + return 1 +} + +checkdiff() { local DIFFTEXT="$($(which diff) -u $* | sed -e '/^---/ d' -e '/^+++/ d' -e '/^@@/ d')" if [ -n "$DIFFTEXT" ]; then echo @@ -399,9 +427,9 @@ testfileequal() { shift msgtest "Test for correctness of file" "$FILE" if [ -z "$*" ]; then - echo -n "" | diff $FILE - && msgpass || msgfail + echo -n "" | checkdiff $FILE - && msgpass || msgfail else - echo "$*" | diff $FILE - && msgpass || msgfail + echo "$*" | checkdiff $FILE - && msgpass || msgfail fi } @@ -410,7 +438,7 @@ testequal() { echo "$1" > $COMPAREFILE shift msgtest "Test for equality of" "$*" - $* 2>&1 | diff $COMPAREFILE - && msgpass || msgfail + $* 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail rm $COMPAREFILE } @@ -423,10 +451,10 @@ testequalor2() { shift 2 msgtest "Test for equality OR of" "$*" $* 2>&1 1> $COMPAREAGAINST - (diff $COMPAREFILE1 $COMPAREAGAINST 1> /dev/null || - diff $COMPAREFILE2 $COMPAREAGAINST 1> /dev/null) && msgpass || - ( echo "\n${CINFO}Diff against OR 1${CNORMAL}" "$(diff $COMPAREFILE1 $COMPAREAGAINST)" \ - "\n${CINFO}Diff against OR 2${CNORMAL}" "$(diff $COMPAREFILE2 $COMPAREAGAINST)" && + (checkdiff $COMPAREFILE1 $COMPAREAGAINST 1> /dev/null || + checkdiff $COMPAREFILE2 $COMPAREAGAINST 1> /dev/null) && msgpass || + ( echo "\n${CINFO}Diff against OR 1${CNORMAL}" "$(checkdiff $COMPAREFILE1 $COMPAREAGAINST)" \ + "\n${CINFO}Diff against OR 2${CNORMAL}" "$(checkdiff $COMPAREFILE2 $COMPAREAGAINST)" && msgfail ) rm $COMPAREFILE1 $COMPAREFILE2 $COMPAREAGAINST } @@ -448,7 +476,7 @@ N: No packages found" 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 + aptcache show $PACKAGE 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail rm $COMPAREFILE } diff --git a/test/integration/test-compressed-indexes b/test/integration/test-compressed-indexes new file mode 100755 index 000000000..0b73f4c35 --- /dev/null +++ b/test/integration/test-compressed-indexes @@ -0,0 +1,131 @@ +#!/bin/sh +set -e + +local TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +buildsimplenativepackage "testpkg" "i386" "1.0" +setupaptarchive + +local GOODSHOW="$(aptcache show testpkg) +" +local GOODPOLICY="$(aptcache policy testpkg)" +local GOODSHOWSRC="$(aptcache showsrc testpkg) +" + +test $(echo "$GOODSHOW" | grep -e '^Package: testpkg' -e '^Version: 1.0' -e '^Architecture: i386' | wc -l) -eq 3 +testequal "$GOODSHOW" aptcache show testpkg +test $(echo "$GOODPOLICY" | grep -e '^testpkg:' -e '^ Candidate:' -e '^ Installed: (none)' -e '500 file:/' | wc -l) -eq 4 +testequal "$GOODPOLICY" aptcache policy testpkg +test $(echo "$GOODSHOWSRC" | grep -e '^Package: testpkg' -e '^Format: 3.0 (native)' -e '^Files:' -e '^Checksums-Sha256:' | wc -l) -eq 4 +testequal "$GOODSHOWSRC" aptcache showsrc testpkg + + +testrun() { + local F + if [ -e rootdir/var/lib/apt/lists/*localhost*Release ]; then + msgtest "Check if all index files are" "${1:-uncompressed}" + if [ "$1" = "compressed" ]; then + ! test -e rootdir/var/lib/apt/lists/*_Packages || F=1 + ! test -e rootdir/var/lib/apt/lists/*_Sources || F=1 + test -e rootdir/var/lib/apt/lists/*_Packages.gz || F=1 + test -e rootdir/var/lib/apt/lists/*_Sources.gz || F=1 + else + test -e rootdir/var/lib/apt/lists/*_Packages || F=1 + test -e rootdir/var/lib/apt/lists/*_Sources || F=1 + ! test -e rootdir/var/lib/apt/lists/*_Packages.gz || F=1 + ! test -e rootdir/var/lib/apt/lists/*_Sources.gz || F=1 + fi + if [ -n "$F" ]; then + ls -laR rootdir/var/lib/apt/lists/ + msgfail + else + msgpass + fi + msgtest "Check if package is downloadable" + aptget install -d testpkg -qq && msgpass || msgfail + msgtest "\tdeb file is present"; test -f rootdir/var/cache/apt/archives/testpkg_1.0_i386.deb && msgpass || msgfail + aptget clean + msgtest "\tdeb file is gone"; ! test -f rootdir/var/cache/apt/archives/testpkg_1.0_i386.deb && msgpass || msgfail + fi + rm rootdir/var/cache/apt/pkgcache.bin rootdir/var/cache/apt/srcpkgcache.bin + testequal "$GOODSHOW" aptcache show testpkg + testequal "$GOODSHOW" aptcache show testpkg + rm rootdir/var/cache/apt/pkgcache.bin rootdir/var/cache/apt/srcpkgcache.bin + testequal "$GOODPOLICY" aptcache policy testpkg + testequal "$GOODPOLICY" aptcache policy testpkg + rm rootdir/var/cache/apt/pkgcache.bin rootdir/var/cache/apt/srcpkgcache.bin + testequal "$GOODSHOWSRC" aptcache showsrc testpkg + testequal "$GOODSHOWSRC" aptcache showsrc testpkg + rm -f rootdir/var/cache/apt/pkgcache.bin rootdir/var/cache/apt/srcpkgcache.bin + rm -rf rootdir/var/cache/apt/archives + msgtest "Check if the source is aptgetable" + aptget source testpkg -qq 2> /dev/null > /dev/null && msgpass || msgfail + msgtest "\tdsc file is present"; test -f testpkg_1.0.dsc && msgpass || msgfail + msgtest "\tdirectory is present"; test -d testpkg-1.0 && msgpass || msgfail + rm -rf testpkg-1.0 +} + +msgmsg "File: Test with uncompressed indexes" +testrun + +aptget update -qq -o Acquire::Pdiffs=1 +msgmsg "File: Test with uncompressed indexes (update unchanged with pdiffs)" +testrun + +aptget update -qq -o Acquire::Pdiffs=0 +msgmsg "File: Test with uncompressed indexes (update unchanged without pdiffs)" +testrun + +rm -rf rootdir/var/lib/apt/lists +echo 'Acquire::CompressionTypes::Order:: "gz"; +Acquire::GzipIndexes "true";' > rootdir/etc/apt/apt.conf.d/02compressindex + +aptget update -qq +msgmsg "File: Test with compressed indexes" +testrun "compressed" + +aptget update -qq -o Acquire::Pdiffs=1 +msgmsg "File: Test with compressed indexes (update unchanged with pdiffs)" +testrun "compressed" + +aptget update -qq -o Acquire::Pdiffs=0 +msgmsg "File: Test with compressed indexes (update unchanged without pdiffs)" +testrun "compressed" + +rm rootdir/etc/apt/apt.conf.d/02compressindex +changetowebserver +aptget update -qq +local GOODPOLICY="$(aptcache policy testpkg)" +test $(echo "$GOODPOLICY" | grep -e '^testpkg:' -e '^ Candidate:' -e '^ Installed: (none)' -e '500 http://' | wc -l) -eq 4 +testequal "$GOODPOLICY" aptcache policy testpkg + +msgmsg "HTTP: Test with uncompressed indexes" +testrun + +aptget update -qq -o Acquire::Pdiffs=1 +msgmsg "HTTP: Test with uncompressed indexes (update unchanged with pdiffs)" +testrun + +aptget update -qq -o Acquire::Pdiffs=0 +msgmsg "HTTP: Test with uncompressed indexes (update unchanged without pdiffs)" +testrun + +rm -rf rootdir/var/lib/apt/lists +echo 'Acquire::CompressionTypes::Order:: "gz"; +Acquire::GzipIndexes "true";' > rootdir/etc/apt/apt.conf.d/02compressindex + +aptget update -qq +msgmsg "HTTP: Test with compressed indexes" +testrun "compressed" + +aptget update -qq -o Acquire::Pdiffs=1 +msgmsg "HTTP: Test with compressed indexes (update unchanged with pdiffs)" +testrun "compressed" + +aptget update -qq -o Acquire::Pdiffs=0 +msgmsg "HTTP: Test with compressed indexes (update unchanged without pdiffs)" +testrun "compressed" diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage new file mode 100755 index 000000000..85cbe9082 --- /dev/null +++ b/test/integration/test-pdiff-usage @@ -0,0 +1,51 @@ +#!/bin/sh +set -e + +local TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture "i386" + +buildaptarchive +setupflataptarchive +changetowebserver +signreleasefiles +aptget update -qq + +testnopackage newstuff +PKGFILE="${TESTDIR}/$(echo "$(basename $0)" | sed 's#^test-#Packages-#')" +testequal "$(cat ${PKGFILE}) +" aptcache show apt oldstuff + +cp ${PKGFILE}-new aptarchive/Packages +cat aptarchive/Packages | gzip > aptarchive/Packages.gz +cat aptarchive/Packages | bzip2 > aptarchive/Packages.bz2 +cat aptarchive/Packages | lzma > aptarchive/Packages.lzma +rm -rf aptarchive/Packages.diff +aptftparchive release aptarchive/ > aptarchive/Release +mkdir -p aptarchive/Packages.diff +PATCHFILE="aptarchive/Packages.diff/$(date +%Y-%m-%d-%H%M.%S)" +diff -e ${PKGFILE} ${PKGFILE}-new > ${PATCHFILE} || true +cat $PATCHFILE | gzip > ${PATCHFILE}.gz +PATCHINDEX="aptarchive/Packages.diff/Index" +echo "SHA1-Current: $(sha1sum ${PKGFILE}-new | cut -d' ' -f 1) $(stat -c%s ${PKGFILE}-new) +SHA1-History: + 9f4148e06d7faa37062994ff10d0c842d7017513 33053002 2010-08-18-2013.28 + $(sha1sum $PKGFILE | cut -d' ' -f 1) $(stat -c%s $PKGFILE) $(basename $PATCHFILE) +SHA1-Patches: + 7651fc0ac57cd83d41c63195a9342e2db5650257 19722 2010-08-18-0814.28 + $(sha1sum $PATCHFILE | cut -d' ' -f 1) $(stat -c%s $PATCHFILE) $(basename $PATCHFILE)" > $PATCHINDEX +sed -i aptarchive/Release \ + -e "/^MD5Sum:/ a\ + \ $(md5sum $PATCHINDEX | cut -d' ' -f 1) $(stat -c%s $PATCHINDEX) Packages.diff/Index" \ + -e "/^SHA1:/ a\ + \ $(sha1sum $PATCHINDEX | cut -d' ' -f 1) $(stat -c%s $PATCHINDEX) Packages.diff/Index" \ + -e "/^SHA256:/ a\ + \ $(sha256sum $PATCHINDEX | cut -d' ' -f 1) $(stat -c%s $PATCHINDEX) Packages.diff/Index" +signreleasefiles +aptget update -qq + +testnopackage oldstuff +testequal "$(cat ${PKGFILE}-new) +" aptcache show apt newstuff -- cgit v1.2.3-70-g09d2 From 158fda31be7d4ae1c80a56223faa8d01efc25acc Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 2 Sep 2010 12:22:33 +0200 Subject: add wrapper around dpkg to be able to use it easily in the tests --- test/integration/framework | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index 8efe47330..ba5f9dfa3 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -72,6 +72,9 @@ aptconfig() { runapt apt-config $*; } aptcache() { runapt apt-cache $*; } aptget() { runapt apt-get $*; } aptftparchive() { runapt apt-ftparchive $*; } +dpkg() { + $(which dpkg) --root=${TMPWORKINGDIRECTORY}/rootdir --force-not-root --force-bad-path --log=${TMPWORKINGDIRECTORY}/rootdir/var/log/dpkg.log $* +} setupenvironment() { TMPWORKINGDIRECTORY=$(mktemp -d) @@ -228,6 +231,10 @@ buildaptarchive() { createaptftparchiveconfig() { local ARCHS="$(find pool/ -name '*.deb' | grep -oE '_[a-z0-9-]+\.deb$' | sort | uniq | sed -e '/^_all.deb$/ d' -e 's#^_\([a-z0-9-]*\)\.deb$#\1#' | tr '\n' ' ')" + if [ -z "$ARCHS" ]; then + # the pool is empty, so we will operate on faked packages - let us use the configured archs + ARCHS="$(aptconfig dump | grep APT::Architecture | cut -d'"' -f 2 | sed '/^$/ d' | sort | uniq | tr '\n' ' ')" + fi echo -n 'Dir { ArchiveDir "' >> ftparchive.conf echo -n $(readlink -f .) >> ftparchive.conf -- cgit v1.2.3-70-g09d2 From b29c37128c2c77490f5851158a7631ed107c79fc Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 2 Sep 2010 12:47:48 +0200 Subject: * apt-pkg/deb/dpkgpm.cc: - create Dir::Log if needed to support /var/log as tmpfs or similar, inspired by Thomas Bechtold, thanks! (Closes: #523919, LP: #220239) Easily done by moving a private method from pkgAcquire into the public area of fileutl.cc to be able to use it also in here --- apt-pkg/acquire.cc | 21 --------------------- apt-pkg/acquire.h | 8 -------- apt-pkg/contrib/fileutl.cc | 21 +++++++++++++++++++++ apt-pkg/contrib/fileutl.h | 9 +++++++++ apt-pkg/deb/dpkgpm.cc | 3 ++- debian/changelog | 5 ++++- test/integration/framework | 4 ++-- 7 files changed, 38 insertions(+), 33 deletions(-) (limited to 'test/integration/framework') diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index 63825da93..6ec557397 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -93,27 +93,6 @@ bool pkgAcquire::Setup(pkgAcquireStatus *Progress, string const &Lock) return true; } /*}}}*/ -// Acquire::CheckDirectory - ensure that the given directory exists /*{{{*/ -// --------------------------------------------------------------------- -/* a small wrapper around CreateDirectory to check if it exists and to - remove the trailing "/apt/" from the parent directory if needed */ -bool pkgAcquire::CheckDirectory(string const &Parent, string const &Path) const -{ - if (DirectoryExists(Path) == true) - return true; - - size_t const len = Parent.size(); - if (len > 5 && Parent.find("/apt/", len - 6, 5) == len - 5) - { - if (CreateDirectory(Parent.substr(0,len-5), Path) == true) - return true; - } - else if (CreateDirectory(Parent, Path) == true) - return true; - - return false; -} - /*}}}*/ // Acquire::~pkgAcquire - Destructor /*{{{*/ // --------------------------------------------------------------------- /* Free our memory, clean up the queues (destroy the workers) */ diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h index 82be8b843..e3a4435b8 100644 --- a/apt-pkg/acquire.h +++ b/apt-pkg/acquire.h @@ -362,14 +362,6 @@ class pkgAcquire private: /** \brief FD of the Lock file we acquire in Setup (if any) */ int LockFD; - - /** \brief Ensure the existence of the given Path - * - * \param Parent directory of the Path directory - a trailing - * /apt/ will be removed before CreateDirectory call. - * \param Path which should exist after (successful) call - */ - bool CheckDirectory(string const &Parent, string const &Path) const; }; /** \brief Represents a single download source from which an item diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 2b73d1424..94d994e8b 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -251,6 +251,27 @@ bool CreateDirectory(string const &Parent, string const &Path) return true; } /*}}}*/ +// CheckDirectory - ensure that the given directory exists /*{{{*/ +// --------------------------------------------------------------------- +/* a small wrapper around CreateDirectory to check if it exists and to + remove the trailing "/apt/" from the parent directory if needed */ +bool CheckDirectory(string const &Parent, string const &Path) +{ + if (DirectoryExists(Path) == true) + return true; + + size_t const len = Parent.size(); + if (len > 5 && Parent.find("/apt/", len - 6, 5) == len - 5) + { + if (CreateDirectory(Parent.substr(0,len-5), Path) == true) + return true; + } + else if (CreateDirectory(Parent, Path) == true) + return true; + + return false; +} + /*}}}*/ // GetListOfFilesInDir - returns a vector of files in the given dir /*{{{*/ // --------------------------------------------------------------------- /* If an extension is given only files with this extension are included diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h index cb4655798..f79c9032f 100644 --- a/apt-pkg/contrib/fileutl.h +++ b/apt-pkg/contrib/fileutl.h @@ -94,6 +94,15 @@ int GetLock(string File,bool Errors = true); bool FileExists(string File); bool DirectoryExists(string const &Path) __attrib_const; bool CreateDirectory(string const &Parent, string const &Path); + +/** \brief Ensure the existence of the given Path + * + * \param Parent directory of the Path directory - a trailing + * /apt/ will be removed before CreateDirectory call. + * \param Path which should exist after (successful) call + */ +bool CheckDirectory(string const &Parent, string const &Path); + std::vector GetListOfFilesInDir(string const &Dir, string const &Ext, bool const &SortList, bool const &AllowNoExt=false); std::vector GetListOfFilesInDir(string const &Dir, std::vector const &Ext, diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 5530ef129..d3c432ce1 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -641,7 +641,8 @@ void pkgDPkgPM::WriteHistoryTag(string const &tag, string value) bool pkgDPkgPM::OpenLog() { string const logdir = _config->FindDir("Dir::Log"); - if(not FileExists(logdir)) + if(CheckDirectory(logdir, logdir) == false) + // FIXME: use a better string after freeze return _error->Error(_("Directory '%s' missing"), logdir.c_str()); // get current time diff --git a/debian/changelog b/debian/changelog index e37a5504f..2a3a9d89c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -40,8 +40,11 @@ apt (0.8.1) UNRELEASED; urgency=low - let the pin origin actually work as advertised in the manpage which means "" are optional and pinning a local archive does work - even if it is a non-flat archive (Closes: #594435) + * apt-pkg/deb/dpkgpm.cc: + - create Dir::Log if needed to support /var/log as tmpfs or similar, + inspired by Thomas Bechtold, thanks! (Closes: #523919, LP: #220239) - -- Michael Vogt Mon, 30 Aug 2010 11:53:30 +0200 + -- David Kalnischkies Thu, 02 Sep 2010 12:41:32 +0200 apt (0.8.0) unstable; urgency=low diff --git a/test/integration/framework b/test/integration/framework index ba5f9dfa3..2b26fc8f7 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -88,8 +88,8 @@ setupenvironment() { cd $TMPWORKINGDIRECTORY mkdir rootdir aptarchive keys 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 - mkdir -p var/log/apt var/lib/apt + mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d + mkdir -p var/cache var/lib var/log mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers local STATUSFILE=$(echo "$(basename $0)" | sed 's/^test-/status-/') if [ -f "${TESTDIR}/${STATUSFILE}" ]; then -- cgit v1.2.3-70-g09d2 From e8379ba3b9e4d5ab3e2225252ca6fde1217fac28 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 2 Sep 2010 12:52:04 +0200 Subject: set the quiet value for apt-cache so the tests will actually see the notices as they will not be shown otherwise --- test/integration/framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index 2b26fc8f7..b5fc46865 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -483,7 +483,7 @@ N: No packages found" 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 | checkdiff $COMPAREFILE - && msgpass || msgfail + aptcache show -q=0 $PACKAGE 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail rm $COMPAREFILE } -- cgit v1.2.3-70-g09d2 From 3cbbda3c5af73f73b2d32b34078c4e6b9fef8a6e Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 2 Sep 2010 13:03:38 +0200 Subject: show only the basename of the running test --- test/integration/framework | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index b5fc46865..e55563544 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -79,7 +79,7 @@ dpkg() { setupenvironment() { TMPWORKINGDIRECTORY=$(mktemp -d) local TESTDIR=$(readlink -f $(dirname $0)) - msgninfo "Preparing environment for ${CCMD}$0${CINFO} in ${TMPWORKINGDIRECTORY}… " + msgninfo "Preparing environment for ${CCMD}$(basename $0)${CINFO} in ${TMPWORKINGDIRECTORY}… " BUILDDIRECTORY="${TESTDIR}/../../build/bin" test -x "${BUILDDIRECTORY}/apt-get" || msgdie "You need to build tree first" local OLDWORKINGDIRECTORY=$(pwd) @@ -304,7 +304,7 @@ buildaptftparchivedirectorystructure() { } buildaptarchivefromincoming() { - msginfo "Build APT archive for ${CCMD}$0${CINFO} based on incoming packages…" + msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on incoming packages…" cd aptarchive [ -e pool ] || ln -s ../incoming pool [ -e ftparchive.conf ] || createaptftparchiveconfig @@ -321,7 +321,7 @@ buildaptarchivefromincoming() { } buildaptarchivefromfiles() { - msginfo "Build APT archive for ${CCMD}$0${CINFO} based on prebuild files…" + msginfo "Build APT archive for ${CCMD}$(basename $0)${CINFO} based on prebuild files…" cd aptarchive if [ -f Packages ]; then msgninfo "\tPackages file… " -- cgit v1.2.3-70-g09d2 From 2c6baa5a1f935eb3b8d4eb9fdef62e696416e27a Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 2 Sep 2010 15:24:44 +0200 Subject: do the right thing(TM) even if the (unfinished) testcase is named skip-* instead of test-* to avoid calling him with run-tests --- test/integration/framework | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test/integration/framework') diff --git a/test/integration/framework b/test/integration/framework index e55563544..d832bedbe 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -91,7 +91,7 @@ setupenvironment() { mkdir -p etc/apt/apt.conf.d etc/apt/sources.list.d etc/apt/trusted.gpg.d etc/apt/preferences.d mkdir -p var/cache var/lib var/log mkdir -p var/lib/dpkg/info var/lib/dpkg/updates var/lib/dpkg/triggers - local STATUSFILE=$(echo "$(basename $0)" | sed 's/^test-/status-/') + local STATUSFILE=$(echo "$(basename $0)" | sed -e 's/^test-/status-/' -e 's/^skip-/status-/') if [ -f "${TESTDIR}/${STATUSFILE}" ]; then cp "${TESTDIR}/${STATUSFILE}" var/lib/dpkg/status else @@ -101,7 +101,7 @@ setupenvironment() { mkdir -p usr/lib/apt ln -s ${BUILDDIRECTORY}/methods usr/lib/apt/methods cd .. - local PACKAGESFILE=$(echo "$(basename $0)" | sed 's/^test-/Packages-/') + local PACKAGESFILE=$(echo "$(basename $0)" | sed -e 's/^test-/Packages-/' -e 's/^skip-/Packages-/') if [ -f "${TESTDIR}/${PACKAGESFILE}" ]; then cp "${TESTDIR}/${PACKAGESFILE}" aptarchive/Packages else -- cgit v1.2.3-70-g09d2