From fb51ce3295929947555f4883054f210a53d9fbdf Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Mon, 22 Aug 2016 21:33:38 +0200 Subject: do dpkg --configure before --remove/--purge --pending Commit 7ec343309b7bc6001b465c870609b3c570026149 got us most of the way, but the last mile was botched by having the pending calls in the wrong order as this way we potentially 'force' dpkg to remove/purge a package it doesn't want to as another package still depends on it and the replacement isn't fully installed yet. So what we do now is a configure before remove and purge (all with --no-triggers) and finishing off with another configure pending call to take care of the triggers. Note that in the bugreport example our current planner is forcing dpkg to remove the package earlier via --force-depends which we could do for the pending calls as well and could be used as a workaround, but we want to do less forcing eventually. Closes: 835094 --- .../test-bug-835094-configure-before-purge | 44 ++++++++++++++++++++++ .../test-no-fds-leaked-to-maintainer-scripts | 1 + 2 files changed, 45 insertions(+) create mode 100755 test/integration/test-bug-835094-configure-before-purge (limited to 'test/integration') diff --git a/test/integration/test-bug-835094-configure-before-purge b/test/integration/test-bug-835094-configure-before-purge new file mode 100755 index 000000000..16a196ccd --- /dev/null +++ b/test/integration/test-bug-835094-configure-before-purge @@ -0,0 +1,44 @@ +#!/bin/sh +set -e + +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" +setupenvironment +configarchitecture 'amd64' + +buildsimplenativepackage 'kernel' 'amd64' '1' 'unstable' 'Depends: initramfs-tools | linux-initramfs-tool' + +#buildsimplenativepackage 'initramfs-tools' 'amd64' '1.0.16' 'unstable' 'Provides: linux-initramfs-tool' +setupsimplenativepackage 'initramfs-tools' 'amd64' '1' 'unstable' 'Provides: linux-initramfs-tool' +BUILDDIR='incoming/initramfs-tools-1' +mkdir -p "${BUILDDIR}/debian/initramfs-tools/etc" +echo 'foo2=bar2;' > "${BUILDDIR}/init.conf" +echo 'init.conf /etc/init.conf' >> "${BUILDDIR}/debian/install" +buildpackage "$BUILDDIR" 'unstable' 'main' 'native' +rm -rf "$BUILDDIR" + +buildsimplenativepackage 'dracut' 'amd64' '1' 'unstable' 'Provides: linux-initramfs-tool +Conflicts: initramfs-tools' + +setupaptarchive + +testdpkgnotinstalled 'kernel' 'initramfs-tools' 'dracut' +testsuccess apt install kernel -y +testdpkginstalled 'kernel' 'initramfs-tools' +testsuccess test -s rootdir/etc/init.conf +testsuccessequal 'Reading package lists... +Building dependency tree... +Reading state information... +The following packages will be REMOVED: + initramfs-tools* +The following NEW packages will be installed: + dracut +0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Purg initramfs-tools [1] [kernel:amd64 ] +Inst dracut (1 unstable [amd64]) +Conf dracut (1 unstable [amd64])' apt install --purge dracut -s +testsuccess apt install --purge dracut -y -o Debug::pkgDpkgPm=1 -o Dpkg::Use-Pty=0 +testsuccess apt install --purge dracut -y +testdpkginstalled 'kernel' 'dracut' +testdpkgnotinstalled 'initramfs-tools' +testsuccess test ! -s rootdir/etc/init.conf diff --git a/test/integration/test-no-fds-leaked-to-maintainer-scripts b/test/integration/test-no-fds-leaked-to-maintainer-scripts index 21b394055..baf85e311 100755 --- a/test/integration/test-no-fds-leaked-to-maintainer-scripts +++ b/test/integration/test-no-fds-leaked-to-maintainer-scripts @@ -79,6 +79,7 @@ status half-configured $PKGNAME 1.0 status half-installed $PKGNAME 1.0 status config-files $PKGNAME 1.0 status config-files $PKGNAME 1.0 +startup packages configure startup packages purge remove $PKGNAME 1.0 purge $PKGNAME 1.0 -- cgit v1.2.3 From 2e2865ae53a65c00dd55a892d5b48458f3110366 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 24 Aug 2016 09:47:48 +0200 Subject: do fail on weakhash/loop earlier in acquire The bugreport shows a segfault caused by the code not doing the correct magical dance to remove an item from inside a queue in all cases. We could try hard to fix this, but it is actually better and also easier to perform these checks (which cause instant failure) earlier so that they haven't entered queue(s) yet, which in return makes cleanup trivial. The result is that we actually end up failing "too early" as if we wouldn't be careful download errors would be logged before that process was even started. Not a problem for the acquire system, but likely to confuse users and programs alike if they see the download process producing errors before apt was technically allowed to do an acquire (it didn't, so no violation, but it looks like it to the untrained eye). Closes: 835195 --- test/integration/framework | 1 + test/integration/test-apt-redirect-loop | 3 --- test/integration/test-bug-605394-versioned-or-groups | 4 ++++ test/integration/test-bug-722207-print-uris-even-if-very-quiet | 2 +- test/integration/test-handle-redirect-as-used-mirror-change | 6 ++++++ 5 files changed, 12 insertions(+), 4 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 1e356ffaf..d40c9f356 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -875,6 +875,7 @@ Filename: pool/main/${NAME}/${NAME}_${VERSION}_${arch}.deb" test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" echo "Description: $(printf '%s' "$DESCRIPTION" | head -n 1)" echo "Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)" + echo "SHA256: 0000000000000000000000000000000000000000000000000000000000000000" echo } >> "${PPATH}/Packages" done diff --git a/test/integration/test-apt-redirect-loop b/test/integration/test-apt-redirect-loop index b54f74276..e1a8aeea0 100755 --- a/test/integration/test-apt-redirect-loop +++ b/test/integration/test-apt-redirect-loop @@ -7,9 +7,6 @@ TESTDIR="$(readlink -f "$(dirname "$0")")" setupenvironment configarchitecture "i386" -insertpackage 'stable' 'apt' 'all' '1' -setupaptarchive --no-update - echo 'alright' > aptarchive/working changetohttpswebserver webserverconfig 'aptwebserver::redirect::replace::/redirectme3/' '/redirectme/' diff --git a/test/integration/test-bug-605394-versioned-or-groups b/test/integration/test-bug-605394-versioned-or-groups index a362463d5..43f35f79b 100755 --- a/test/integration/test-bug-605394-versioned-or-groups +++ b/test/integration/test-bug-605394-versioned-or-groups @@ -24,3 +24,7 @@ if aptget dist-upgrade --trivial-only -o Debug::pkgProblemResolver=1 -o Debug::p else msgpass fi + +# the Packages file includes only MD5 +testfailure aptget dist-upgrade -y +testsuccess grep 'Insufficient information available to perform this download securely' rootdir/tmp/testfailure.output diff --git a/test/integration/test-bug-722207-print-uris-even-if-very-quiet b/test/integration/test-bug-722207-print-uris-even-if-very-quiet index d8d3c7218..82c1d715f 100755 --- a/test/integration/test-bug-722207-print-uris-even-if-very-quiet +++ b/test/integration/test-bug-722207-print-uris-even-if-very-quiet @@ -20,7 +20,7 @@ APTARCHIVE=$(readlink -f ./aptarchive) testsuccessequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget upgrade -qq --print-uris testsuccessequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget dist-upgrade -qq --print-uris testsuccessequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget install apt -qq --print-uris -testsuccessequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 " aptget download apt -qq --print-uris +testsuccessequal "'file://${APTARCHIVE}/pool/main/apt/apt_2_all.deb' apt_2_all.deb 0 SHA256:0000000000000000000000000000000000000000000000000000000000000000" aptget download apt -qq --print-uris testsuccessequal "'file://${APTARCHIVE}/apt_2.dsc' apt_2.dsc 9 SHA256:7776436a6d741497f1cd958014e1a05b352224231428152aae39da3c17fd2fd4 'file://${APTARCHIVE}/apt_2.tar.gz' apt_2.tar.gz 12 SHA256:f57f565eabe3fde0ec6e6e0bcc8db1d86fe2b4d6344a380a23520ddbb7728e99" aptget source apt -qq --print-uris testsuccessequal "'http://metadata.ftp-master.debian.org/changelogs/main/a/apt/apt_2_changelog' apt.changelog" aptget changelog apt -qq --print-uris diff --git a/test/integration/test-handle-redirect-as-used-mirror-change b/test/integration/test-handle-redirect-as-used-mirror-change index 2e8fbeff6..2655f713c 100755 --- a/test/integration/test-handle-redirect-as-used-mirror-change +++ b/test/integration/test-handle-redirect-as-used-mirror-change @@ -78,3 +78,9 @@ testsuccessequal "Ign:1 http://0.0.0.0:${APTHTTPPORT}/storage unstable InRelease 404 Not Found Hit:2 http://0.0.0.0:${APTHTTPPORT} unstable Release Reading package lists..." aptget update + +rm -rf rootdir/var/lib/apt/lists +find aptarchive -name 'Release.gpg' -delete +find aptarchive -name 'Release' -delete +testwarning aptget update +testsuccess grep 'does not have a Release file' rootdir/tmp/testwarning.output -- cgit v1.2.3 From 70ff288b98a7aae2c2808112015d34f76f2d5114 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 24 Aug 2016 21:57:53 +0200 Subject: do not restore selections for already purged packages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In most cases apt was already skipping the (re)setting of packages as to be removed/purged if dpkg had told us that it already did, but we haven't dealt with it in the most obvious of the cases: Selections set for packages we touched in this operation which either restores selections even dpkg would have overridden or e.g. tries to restore a purge selection for a package which was just purged – does not happen with apt itself as it isn't using selections in this way, but higher frontends like aptitude do. The result in the later case is a warning printed by dpkg that we try to set selections for an unknown package, which is harmless per se, but can be confusing for users and we really shouldn't cause warnings in dpkg if we can help it. Reported-By: Guillem Jover on IRC --- test/integration/framework | 2 +- test/integration/test-apt-get-autoremove | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index d40c9f356..0daf776f5 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -1989,7 +1989,7 @@ testaptautotestnodpkgwarning() { if expr match "$2" '^-dy\?' >/dev/null 2>&1; then return; fi # download-only mode shift done - testfailure grep '^dpkg: warning:.*ignor.*' "${TMPWORKINGDIRECTORY}/rootdir/tmp-before/${TESTCALL}.output" + testfailure grep '^dpkg: warning:.*\(ignor\|unknown\).*' "${TMPWORKINGDIRECTORY}/rootdir/tmp-before/${TESTCALL}.output" } aptautotest_aptget_install() { testaptautotestnodpkgwarning "$@"; } diff --git a/test/integration/test-apt-get-autoremove b/test/integration/test-apt-get-autoremove index cfee748af..8af864acb 100755 --- a/test/integration/test-apt-get-autoremove +++ b/test/integration/test-apt-get-autoremove @@ -152,3 +152,6 @@ Remv foo-multi2-1 [1] Remv foo-multi2-2 [1] Remv foo-plus-1 [1] Remv foo-plus-2 [1]' apt autoremove -s + +testdpkgstatus 'pi' '1' 'unrelated' +testsuccess apt purge unrelated -y -- cgit v1.2.3 From 105503b4b470c124bc0c271bd8a50e25ecbe9133 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 25 Aug 2016 12:42:36 +0200 Subject: apt-key: warn instead of fail on unreadable keyrings apt-key has inconsistent behaviour if it can't read a keyring file: Commands like 'list' skipped silently over such keyrings while 'verify' failed hard resulting in apt to report cconfusing gpg errors (#834973). As a first step we teach apt-key to be more consistent here skipping in all commands over unreadable keyrings, but issuing a warning in the process, which is as usual for apt commands displayed at the end of the run. --- test/integration/test-apt-key | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'test/integration') diff --git a/test/integration/test-apt-key b/test/integration/test-apt-key index 759ce1487..96cfe41fa 100755 --- a/test/integration/test-apt-key +++ b/test/integration/test-apt-key @@ -81,6 +81,20 @@ gpg: unchanged: 1' aptkey --fakeroot update testsuccess --nomsg aptkey --fakeroot del d141dbac8dae testempty aptkey list + if [ "$(id -u)" != '0' ]; then + msgtest 'Test key removal with' 'unreadable key' + cleanplate + cp -a "${KEYDIR}/joesixpack.pub" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.gpg" + echo 'foobar' > "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.gpg" + chmod 000 "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.gpg" + testwarning --nomsg aptkey --fakeroot del d141dbac8dae + testwarning aptkey list + chmod 644 "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.gpg" + rm -f "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.gpg" + grep -v '^W: ' "${ROOTDIR}/tmp/testwarning.output" > "${ROOTDIR}/aptkeylist.output" || true + testempty cat "${ROOTDIR}/aptkeylist.output" + fi + msgtest 'Test key removal with' 'single key in real file' cleanplate cp -a "${KEYDIR}/joesixpack.pub" "${ROOTDIR}/etc/apt/trusted.gpg.d/joesixpack.gpg" @@ -202,6 +216,16 @@ gpg: unchanged: 1' aptkey --fakeroot update msgtest 'Test verify a file' 'with all keys' testsuccess --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}" + if [ "$(id -u)" != '0' ]; then + msgtest 'Test verify a file' 'with unreadable key' + echo 'foobar' > "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.gpg" + chmod 000 "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.gpg" + testwarning --nomsg aptkey --quiet --readonly verify "${SIGNATURE}.gpg" "${SIGNATURE}" + testwarning aptkey list + chmod 644 "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.gpg" + rm -f "${ROOTDIR}/etc/apt/trusted.gpg.d/unreadablekey.gpg" + fi + msgtest 'Test verify a file' 'with good keyring' testsuccess --nomsg aptkey --quiet --readonly --keyring "${KEYDIR}/testcase-multikey.pub" verify "${SIGNATURE}.gpg" "${SIGNATURE}" -- cgit v1.2.3 From 29c590951f812d9e9c4f17706e34f2c3315fb1f6 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 25 Aug 2016 15:22:28 +0200 Subject: show apt-key warnings in apt update In 105503b4b470c124bc0c271bd8a50e25ecbe9133 we got a warning implemented for unreadable files which greatly improves the behavior of apt update already as everything will work as long as we don't need the keys included in these files. The behavior if they are needed is still strange through as update will fail claiming missing keys and a manual test (which the user will likely perform as root) will be successful. Passing the new warning generated by apt-key through to apt is a bit strange from an interface point of view, but basically duplicating the warning code in multiple places doesn't feel right either. That means we have no translation for the message through as apt-key has no i18n yet. It also means that if the user has a bunch of sources each of them will generate a warning for each unreadable file which could result in quite a few duplicated warnings, but "too many" is better than none. Closes: 834973 --- test/integration/test-releasefile-verification | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'test/integration') diff --git a/test/integration/test-releasefile-verification b/test/integration/test-releasefile-verification index 20ca613da..e043fa8b5 100755 --- a/test/integration/test-releasefile-verification +++ b/test/integration/test-releasefile-verification @@ -107,6 +107,19 @@ runtest() { " aptcache show apt installaptold + if [ "$(id -u)" != '0' ]; then + msgmsg 'Cold archive signed by' 'Joe Sixpack + unreadable key' + rm -rf rootdir/var/lib/apt/lists + echo 'foobar' > rootdir/etc/apt/trusted.gpg.d/unreadablekey.gpg + chmod 000 rootdir/etc/apt/trusted.gpg.d/unreadablekey.gpg + updatewithwarnings '^W: .* is not readable by user' + chmod 644 rootdir/etc/apt/trusted.gpg.d/unreadablekey.gpg + rm -f rootdir/etc/apt/trusted.gpg.d/unreadablekey.gpg + testsuccessequal "$(cat "${PKGFILE}") +" aptcache show apt + installaptold + fi + msgmsg 'Good warm archive signed by' 'Joe Sixpack' prepare "${PKGFILE}-new" signreleasefiles 'Joe Sixpack' -- cgit v1.2.3 From 4f242a2289cc5db7a53afdb875291c94de64fd90 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 25 Aug 2016 15:52:30 +0200 Subject: treat .ddeb files like .deb, especially for dpkg Ubuntu uses *.ddeb files for their debug packages, but the interface we are using since f495992428a396e0f98886c9a761a804aa161c68 to talk to dpkg isn't supporting *.ddeb files. This used to work previously as apt itself isn't caring about the filenames at all and if they are explicitly mentioned dpkg will accept all, too. It might or might not be a good idea to patch dpkg, too, but regardless of it happening, we don't want to couple us to closely to dpkg for this minor feature but testing for this at runtime as it would delay shipping the fix for the too long commandlines further. It is also questionable if it is really a good idea to allow any file extension to be used here (like .foobar in the testcase), but we used to and we tend to avoid breaking existing usecases if we can help it. As a bonus, this also allows the installation of ddeb files directly from the commandline as you can with deb files already. We continue to ignore udeb through as the user-mistake to useful ratio is too high. LP: #1616909 --- test/integration/test-apt-get-install-deb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'test/integration') diff --git a/test/integration/test-apt-get-install-deb b/test/integration/test-apt-get-install-deb index 5f2877dfd..7baaf0ee5 100755 --- a/test/integration/test-apt-get-install-deb +++ b/test/integration/test-apt-get-install-deb @@ -168,3 +168,29 @@ testsuccess apt show --with-source ./Packages pkg-as-it-should-be testequal 'Package: pkg-as-it-should-be' head -n1 rootdir/tmp/testsuccess.output testsuccess apt install -y --with-source ./Packages pkg-as-it-should-be testdpkginstalled 'pkg-as-it-should-be' +rm -f ./Packages + +echo 'dpkg::install::recursive "true"; +dpkg::install::recursive::force "true"; +dpkg::install::recursive::minimum "0";' > rootdir/etc/apt/apt.conf.d/lowerminimum.conf +mv ./incoming/pkg-as-it-should-be_0_all.deb ./incoming/pkg-as-it-should-be_0_all.ddeb +testsuccess aptget install -y ./incoming/pkg-as-it-should-be_0_all.ddeb --reinstall +testfailure grep 'is already the newest version' rootdir/tmp/testsuccess.output +testsuccess apt purge -y pkg-as-it-should-be +testdpkgnotinstalled 'pkg-as-it-should-be' + +mv ./incoming/pkg-as-it-should-be_0_all.ddeb ./incoming/pkg-as-it-should-be_0_all.foobar +echo "Package: pkg-as-it-should-be +Architecture: all +Version: 0 +Installed-Size: 2903 +Filename: incoming/pkg-as-it-should-be_0_all.foobar +Size: $(stat -c %s incoming/pkg-as-it-should-be_0_all.foobar) +SHA256: $(sha256sum incoming/pkg-as-it-should-be_0_all.foobar | cut -d' ' -f 1) +" | gzip > Packages.gz +testsuccess apt install --with-source ./Packages.gz pkg-as-it-should-be -s +testsuccess apt install --with-source ./Packages.gz pkg-as-it-should-be --print-uris +testsuccess apt show --with-source ./Packages.gz pkg-as-it-should-be +testequal 'Package: pkg-as-it-should-be' head -n1 rootdir/tmp/testsuccess.output +testsuccess apt install -y --with-source ./Packages.gz pkg-as-it-should-be +testdpkginstalled 'pkg-as-it-should-be' -- cgit v1.2.3 From 8757a0fdeee00ea6a7cc717188a0e129ad8a553c Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 23 Aug 2016 19:41:58 +0200 Subject: Make directory paths configurable This allows other vendors to use different paths, or to build your own APT in /opt for testing. Note that this uses + 1 in some places, as the paths we receive are absolute, but we need to strip of the initial /. --- test/integration/framework | 5 +++++ test/integration/test-apt-config | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 1e356ffaf..9589ca84c 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -352,6 +352,11 @@ setupenvironment() { ln -s "${TMPWORKINGDIRECTORY}/keys/joesixpack.pub" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg echo "Dir \"${TMPWORKINGDIRECTORY}/rootdir\";" >> aptconfig.conf + echo "Dir::Etc \"etc\";" >> aptconfig.conf + echo "Dir::State \"var/lib/apt\";" >> aptconfig.conf + echo "Dir::Cache \"var/cache/apt\";" >> aptconfig.conf + echo "Dir::Etc \"etc/apt\";" >> aptconfig.conf + echo "Dir::Log \"var/log/apt\";" >> aptconfig.conf echo "APT::Get::Show-User-Simulation-Note \"false\";" >> aptconfig.conf echo "Dir::Bin::Methods \"${TMPWORKINGDIRECTORY}/rootdir/usr/lib/apt/methods\";" >> aptconfig.conf # either store apt-key were we can access it, even if we run it as a different user diff --git a/test/integration/test-apt-config b/test/integration/test-apt-config index abae83ee6..f2068b789 100755 --- a/test/integration/test-apt-config +++ b/test/integration/test-apt-config @@ -24,7 +24,7 @@ testsuccessequal "ARCH='amd64'" aptconfig shell ARCH APT::Architecture ROOTDIR="$(readlink -f rootdir)" testsuccessequal "CONFIG='apt.conf'" aptconfig shell CONFIG Dir::Etc::main testsuccessequal "CONFIG='${ROOTDIR}/etc/apt/apt.conf'" aptconfig shell CONFIG Dir::Etc::main/f -testsuccessequal "CONFIG='etc/apt/'" aptconfig shell CONFIG Dir::Etc +testsuccessequal "CONFIG='etc/apt'" aptconfig shell CONFIG Dir::Etc testsuccessequal "CONFIG='${ROOTDIR}/etc/apt/'" aptconfig shell CONFIG Dir::Etc/ # old style testsuccessequal "CONFIG='${ROOTDIR}/etc/apt/'" aptconfig shell CONFIG Dir::Etc/d -- cgit v1.2.3 From 7c1177f6b82aaaf3b7d378ef516b7ccbd47ec07b Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 23 Aug 2016 21:53:39 +0200 Subject: test: Use C locale instead of C.UTF-8 Gbp-Dch: ignore --- test/integration/framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 9589ca84c..ff0df3226 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -442,7 +442,7 @@ EOF # cleanup the environment a bit # prefer our apt binaries over the system apt binaries export PATH="${BUILDDIRECTORY}:${PATH}:/usr/local/sbin:/usr/sbin:/sbin" - export LC_ALL=C.UTF-8 + export LC_ALL=C unset LANGUAGE APT_CONFIG unset GREP_OPTIONS DEB_BUILD_PROFILES unset http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy -- cgit v1.2.3 From 14e57111df6f8894ed47841b7471837c9d87c264 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 23 Aug 2016 21:47:54 +0200 Subject: test: Substitute GNU commands for other commands where available We are simply checking for gnuCMD and gCMD for each command we are interested in. Gbp-Dch: ignore --- test/integration/framework | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index ff0df3226..25cabc9f8 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -31,7 +31,6 @@ if [ "${MSGCOLOR:-YES}" = 'YES' ]; then fi fi - if [ "$MSGCOLOR" != 'NO' ]; then CERROR="\033[1;31m" # red CWARNING="\033[1;33m" # yellow @@ -276,8 +275,13 @@ find_project_binary_dir() { fi } setupenvironment() { + # Next check needs a gnu stat, let's figure that out early. + stat=stat + if command -v gnustat >/dev/null 2>&1; then + stat=gnustat + fi # privilege dropping and testing doesn't work if /tmp isn't world-writeable (as e.g. with libpam-tmpdir) - if [ -n "$TMPDIR" ] && [ "$(id -u)" = '0' ] && [ "$(stat --format '%a' "$TMPDIR")" != '1777' ]; then + if [ -n "$TMPDIR" ] && [ "$(id -u)" = '0' ] && [ "$($stat --format '%a' "$TMPDIR")" != '1777' ]; then unset TMPDIR fi TMPWORKINGDIRECTORY="$(mktemp -d)" @@ -290,6 +294,18 @@ setupenvironment() { fi msgninfo "Preparing environment for ${0##*/} in ${TMPWORKINGDIRECTORY}…" + # Setup coreutils on BSD systems + mkdir "${TMPWORKINGDIRECTORY}/bin" + for prefix in gnu g; do + for command in stat touch sed cp tr sha1sum sha256sum md5sum sha512sum grep date wc chmod head readlink tar expr base64; do + if command -v $prefix$command 2>/dev/null >/dev/null; then + [ -e "${TMPWORKINGDIRECTORY}/bin/$command" ] || ln -sf $(command -v $prefix$command) "${TMPWORKINGDIRECTORY}/bin/$command" + fi + done + done + export PATH="${TMPWORKINGDIRECTORY}/bin/:$PATH" + + mkdir -m 700 "${TMPWORKINGDIRECTORY}/downloaded" if [ "$(id -u)" = '0' ]; then # relax permissions so that running as root with user switching works -- cgit v1.2.3 From 144ce9208b39c1bf0d26e8ce071367ee668c0ae2 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 23 Aug 2016 23:01:18 +0200 Subject: test: Allow stunnel to be used instead of stunnel4 This is needed for Fedora and FreeBSD. Gbp-Dch: ignore --- test/integration/framework | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 25cabc9f8..ffcb8af04 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -1296,7 +1296,12 @@ changetowebserver() { } changetohttpswebserver() { - if ! command -v stunnel4 >/dev/null 2>&1; then + local stunnel4 + if command -v stunnel4 >/dev/null 2>&1; then + stunnel4=stunnel4 + elif command -v stunnel >/dev/null 2>&1; then + stunnel4=stunnel + else msgdie 'You need to install stunnel4 for https testcases' fi if [ ! -e "${TMPWORKINGDIRECTORY}/aptarchive/aptwebserver.pid" ]; then @@ -1310,14 +1315,14 @@ output = /dev/null accept = 0 connect = $APTHTTPPORT " > "${TMPWORKINGDIRECTORY}/stunnel.conf" - stunnel4 "${TMPWORKINGDIRECTORY}/stunnel.conf" + $stunnel4 "${TMPWORKINGDIRECTORY}/stunnel.conf" waitforpidfile "${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid" local PID="$(cat "${TMPWORKINGDIRECTORY}/aptarchive/stunnel.pid")" if [ -z "$PID" ]; then - msgdie 'Could not fork stunnel4 successfully' + msgdie 'Could not fork $stunnel4 successfully' fi addtrap 'prefix' "kill ${PID};" - APTHTTPSPORT="$(lsof -i -n | awk "/^stunnel4 / && \$2 == \"${PID}\" {print \$9; exit; }" | cut -d':' -f 2)" + APTHTTPSPORT="$(lsof -i -n | awk "/^$stunnel4 / && \$2 == \"${PID}\" {print \$9; exit; }" | cut -d':' -f 2)" webserverconfig 'aptwebserver::port::https' "$APTHTTPSPORT" "https://localhost:${APTHTTPSPORT}" rewritesourceslist "https://localhost:${APTHTTPSPORT}/" } -- cgit v1.2.3 From 3c973af2ff85e7aae7fbdd84e7633e9d9308dde7 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 23 Aug 2016 23:14:05 +0200 Subject: test: Allow moreutils-parallel instead of parallel That's what it's called on FreeBSD. Gbp-Dch: ignore --- test/integration/run-tests | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/run-tests b/test/integration/run-tests index 78f24fbaf..fad249994 100755 --- a/test/integration/run-tests +++ b/test/integration/run-tests @@ -89,7 +89,11 @@ if [ -n "$APT_TEST_JOBS" ]; then if [ "$MSGCOLOR" != 'NO' ]; then export MSGCOLOR='ALWAYS' fi - exec parallel -j "$APT_TEST_JOBS" "./$(basename "$0")" -- $(echo "$TESTLIST") + parallel=parallel + if command -v moreutils-parallel >/dev/null 2>&1; then + parallel=moreutils-parallel + fi + exec $parallel -j "$APT_TEST_JOBS" "./$(basename "$0")" -- $(echo "$TESTLIST") fi TOTAL="$(echo "$TESTLIST" | wc -l)" for testcase in $TESTLIST; do -- cgit v1.2.3 From 4b1fb7b1876bdb46cb7a0329158f12638baa2464 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 23 Aug 2016 23:19:14 +0200 Subject: test: Get rid of debhelper rules.tiny example dep Gbp-Dch: ignore --- test/integration/framework | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index ffcb8af04..39c9fcde2 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -701,13 +701,25 @@ Package: $NAME" echo '3.0 (native)' > "${BUILDDIR}/debian/source/format" } +make_tiny_rules() { + local OUT="$1" + if command -v gmake >/dev/null 2>&1; then + [ -e ${TMPWORKINGDIRECTORY}/bin/make ] || ln -s $(command -v gmake) ${TMPWORKINGDIRECTORY}/bin/make + echo "#!${TMPWORKINGDIRECTORY}/bin/make -f" > "$OUT" + else + echo '#!/usr/bin/make -f' > "$OUT" + fi + echo '%:' >> "$OUT" + echo ' dh $@' >> "$OUT" +} + setupsimplenativepackage() { _setupsimplenativepackage "$@" local NAME="$1" local VERSION="$3" local BUILDDIR="${TMPWORKINGDIRECTORY}/incoming/${NAME}-${VERSION}" test -e "${BUILDDIR}/debian/compat" || echo '7' > "${BUILDDIR}/debian/compat" - test -e "${BUILDDIR}/debian/rules" || cp /usr/share/doc/debhelper/examples/rules.tiny "${BUILDDIR}/debian/rules" + test -e "${BUILDDIR}/debian/rules" || make_tiny_rules "${BUILDDIR}/debian/rules" } buildsimplenativepackage() { -- cgit v1.2.3 From 1a7c66e40ffd2bdd404b2efdc6dc268ebfd508ec Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 23 Aug 2016 23:37:36 +0200 Subject: test: Fix building of noopchroot Gbp-Dch: ignore --- test/integration/framework | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 39c9fcde2..bf9cef4e8 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -589,7 +589,11 @@ int execvp(const char *file, char *const argv[]) { return func_execvp(newfile, argv); } EOF - testempty --nomsg gcc -Wall -Wextra -fPIC -shared -o noopchroot.so noopchroot.c -ldl + if cc -ldl 2>&1 | grep -q dl; then + testempty --nomsg cc -Wall -Wextra -fPIC -shared -o noopchroot.so noopchroot.c + else + testempty --nomsg cc -Wall -Wextra -fPIC -shared -o noopchroot.so noopchroot.c -ldl + fi } configcompression() { if [ "$1" = 'ALL' ]; then -- cgit v1.2.3 From f8e8a14f17cb41c588970fc57bb41fcf6058a703 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 24 Aug 2016 00:08:39 +0200 Subject: test: Explicitly pass --admindir=var/lib/dpkg to dpkg Our test suite assumes that dpkg's admindir is var/lib/dpkg. This might not always be true; for example, on FreeBSD, it is located at /var/db/dpkg. Gbp-Dch: ignore --- test/integration/framework | 2 ++ 1 file changed, 2 insertions(+) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index bf9cef4e8..827226b7d 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -407,11 +407,13 @@ EOF cp "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg" cat >> "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" <> "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/gdb-dpkg" < Date: Wed, 24 Aug 2016 00:25:26 +0200 Subject: test: Avoid use of /proc/self/fd Use /dev/fd in test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch, skip test-no-fds-leaked-to-maintainer-scripts (it is not guaranteed that /dev/fd contains all file descriptors), and avoid the unneeded use of /proc/fd in another test case. Gbp-Dch: ignore --- .../test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch | 2 +- .../test-bug-769609-triggers-still-pending-after-run | 10 +++++----- test/integration/test-no-fds-leaked-to-maintainer-scripts | 5 +++++ 3 files changed, 11 insertions(+), 6 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch b/test/integration/test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch index d9fd3d30d..bf93367c9 100755 --- a/test/integration/test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch +++ b/test/integration/test-bug-712116-dpkg-pre-install-pkgs-hook-multiarch @@ -32,7 +32,7 @@ if [ -n \"${2}\" ]; then FD=\$APT_HOOK_INFO_FD if [ "\$FD" != \"${2}\" ]; then echo \"ERROR: Information is not on requested FD: \$FD != ${2}\" >> ${hook}-v${1}.list; fi fi -while read "${BUILDDIR}/debian/postinst" < "${BUILDDIR}/debian/triggers" @@ -49,26 +49,26 @@ runtests() { testsuccess aptget install trigdepends-$TYPE -y --reinstall cp rootdir/tmp/testsuccess.output terminal.output testsuccess grep '^REWRITE ' terminal.output - testsuccess grep ' root root ' terminal.output + testsuccess grep 'TRIGGER IS RUNNING' terminal.output testdpkginstalled triggerable-$TYPE trigdepends-$TYPE testsuccess aptget install trigstuff -y cp rootdir/tmp/testsuccess.output terminal.output testsuccess grep '^REWRITE ' terminal.output - testsuccess grep ' root root ' terminal.output + testsuccess grep 'TRIGGER IS RUNNING' terminal.output testdpkginstalled triggerable-$TYPE trigdepends-$TYPE trigstuff testsuccess aptget purge trigstuff -y cp rootdir/tmp/testsuccess.output terminal.output testsuccess grep '^REWRITE ' terminal.output - testsuccess grep ' root root ' terminal.output + testsuccess grep 'TRIGGER IS RUNNING' terminal.output testdpkginstalled triggerable-$TYPE trigdepends-$TYPE testdpkgnotinstalled trigstuff testsuccess aptget purge trigdepends-$TYPE -y cp rootdir/tmp/testsuccess.output terminal.output testfailure grep '^REWRITE ' terminal.output - testfailure grep ' root root ' terminal.output + testfailure grep 'TRIGGER IS RUNNING' terminal.output testdpkgnotinstalled triggerable-$TYPE trigdepends-$TYPE } #runtests 'interest' diff --git a/test/integration/test-no-fds-leaked-to-maintainer-scripts b/test/integration/test-no-fds-leaked-to-maintainer-scripts index baf85e311..ca93f78b4 100755 --- a/test/integration/test-no-fds-leaked-to-maintainer-scripts +++ b/test/integration/test-no-fds-leaked-to-maintainer-scripts @@ -8,6 +8,11 @@ setupenvironment configarchitecture 'amd64' 'i386' configdpkgnoopchroot +if [ ! -e /proc/self/fd ]; then + msgskip "needs /proc/self/fd" + exit 0 +fi + setupsimplenativepackage "fdleaks" 'all' '1.0' 'unstable' BUILDDIR="incoming/fdleaks-1.0" for script in 'preinst' 'postinst' 'prerm' 'postrm'; do -- cgit v1.2.3 From c5306b16a34a6f82cb53668287267e4de3065ea1 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 24 Aug 2016 00:48:22 +0200 Subject: test: Make sure we always find a dpkg in status file Especially on non-Debian platforms, dpkg might not list itself on the host system, and thus dpkg --assert-multi-arch fails. Gbp-Dch: ignore --- test/integration/framework | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 827226b7d..3bbb8bc25 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -523,6 +523,14 @@ configdpkg() { fi fi rm -f rootdir/etc/apt/apt.conf.d/00foreigndpkg + # if multi-arch make sure dpkg can detect itself as capable of it + if getarchitectures | grep -E -q '[^ ]+ [^ ]+'; then + if [ "0" = "$(dpkg -l dpkg 2> /dev/null | grep '^i' | wc -l)" ]; then + # dpkg doesn't really check the version as long as it is fully installed, + # but just to be sure we choose one above the required version + insertinstalledpackage 'dpkg' "all" '1.16.2+fake' + fi + fi if command dpkg --assert-multi-arch >/dev/null 2>&1 ; then local ARCHS="$(getarchitectures)" local DPKGARCH="$(dpkg --print-architecture)" @@ -538,14 +546,6 @@ configdpkg() { fi fi done - # if multi-arch make sure dpkg can detect itself as capable of it - if echo "$ARCHS" | grep -E -q '[^ ]+ [^ ]+'; then - if [ "0" = "$(dpkg -l dpkg 2> /dev/null | grep '^i' | wc -l)" ]; then - # dpkg doesn't really check the version as long as it is fully installed, - # but just to be sure we choose one above the required version - insertinstalledpackage 'dpkg' "all" '1.16.2+fake' - fi - fi fi } -- cgit v1.2.3 From 76325a660e09d3af503c292ae12c9de2830994e5 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 24 Aug 2016 01:40:43 +0200 Subject: test: Use printf "%b\n" instead of echo for strings with '\' Use of echo with special characters is not portable. On a normal POSIX system, the behavior with backslash escaped strings is implementation-defined. On an XSI-conformant system, they must be interpreted. A way out is the printf command - printf "%b" specifies that the following argument is to be printed with backslash escapes interpreted. Gbp-Dch: ignore --- test/integration/framework | 14 +++++++------- test/integration/test-external-dependency-solver-protocol | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 3bbb8bc25..3ef8597a8 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -689,7 +689,7 @@ Standards-Version: 3.9.3" if [ "$SECTION" != '' ]; then echo "Section: $SECTION" fi - local BUILDDEPS="$(echo "$DEPENDENCIES" | grep '^Build-')" + local BUILDDEPS="$(printf "%b\n" "$DEPENDENCIES" | grep '^Build-')" test -z "$BUILDDEPS" || echo "$BUILDDEPS" echo " Package: $NAME" @@ -699,9 +699,9 @@ Package: $NAME" else echo "Architecture: any" fi - local DEPS="$(echo "$DEPENDENCIES" | grep -v '^Build-')" + local DEPS="$(printf "%b\n" "$DEPENDENCIES" | grep -v '^Build-')" test -z "$DEPS" || echo "$DEPS" - echo "Description: $DESCRIPTION" + printf "%b\n" "Description: $DESCRIPTION" } > "${BUILDDIR}/debian/control" echo '3.0 (native)' > "${BUILDDIR}/debian/source/format" @@ -911,7 +911,7 @@ Maintainer: Joe Sixpack " test "$arch" = 'none' || echo "Architecture: $arch" echo "Version: $VERSION Filename: pool/main/${NAME}/${NAME}_${VERSION}_${arch}.deb" - test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" + test -z "$DEPENDENCIES" || printf "%b\n" "$DEPENDENCIES" echo "Description: $(printf '%s' "$DESCRIPTION" | head -n 1)" echo "Description-md5: $(printf '%s' "$DESCRIPTION" | md5sum | cut -d' ' -f 1)" echo @@ -946,7 +946,7 @@ Binary: $BINARY Version: $VERSION Maintainer: Joe Sixpack Architecture: $ARCH" >> $FILE - test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> "$FILE" + test -z "$DEPENDENCIES" || printf "%b\n" "$DEPENDENCIES" >> "$FILE" echo "Files: $(echo -n "$DSCFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$DSCFILE" | wc -c) "$DSCFILE" $(echo -n "$TARFILE" | md5sum | cut -d' ' -f 1) $(echo -n "$TARFILE" | wc -c) "$TARFILE" @@ -980,8 +980,8 @@ Installed-Size: 42 Maintainer: Joe Sixpack Version: $VERSION" >> "$FILE" test "$arch" = 'none' || echo "Architecture: $arch" >> "$FILE" - test -z "$DEPENDENCIES" || echo "$DEPENDENCIES" >> "$FILE" - echo "Description: $DESCRIPTION" >> "$FILE" + test -z "$DEPENDENCIES" || printf "%b\n" "$DEPENDENCIES" >> "$FILE" + printf "%b\n" "Description: $DESCRIPTION" >> "$FILE" echo >> "$FILE" if [ "$(dpkg-query -W --showformat='${Multi-Arch}')" = 'same' ]; then echo -n > "${INFO}/${NAME}:${arch}.list" diff --git a/test/integration/test-external-dependency-solver-protocol b/test/integration/test-external-dependency-solver-protocol index 10b07e896..c86038b1b 100755 --- a/test/integration/test-external-dependency-solver-protocol +++ b/test/integration/test-external-dependency-solver-protocol @@ -152,7 +152,7 @@ testsuccess grep 'ERR_UNSOLVABLE' rootdir/tmp/testfailure.output configarchitecture 'armel' testfailure aptget install --solver apt awesomecoolstuff:i386 -s msgtest 'An invalid EDSP file generates a' 'hard error' -if echo "Request: This is a test\nFoo: bar\n\n" | aptinternalsolver > solver.result 2>&1; then +if printf "%b\n" "Request: This is a test\nFoo: bar\n\n" | aptinternalsolver > solver.result 2>&1; then cat solver.result msgfail else -- cgit v1.2.3 From 34f0d758a46961f3b49991960f58fea14cf7dc4a Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 24 Aug 2016 01:51:50 +0200 Subject: test: Fix invalid quoting in variable expansion This breaks the tests with FreeBSD's shell, and is not needed - it works fine without it. Gbp-Dch: ignore --- test/integration/framework | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 3ef8597a8..9dce3dc11 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -653,10 +653,10 @@ _setupsimplenativepackage() { local VERSION="$3" local RELEASE="${4:-unstable}" local DEPENDENCIES="$5" - local DESCRIPTION="${6:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} + local DESCRIPTION="${6:-an autogenerated dummy ${NAME}=${VERSION}/${RELEASE} If you find such a package installed on your system, something went horribly wrong! They are autogenerated - und used only by testcases and serve no other purpose…"}" + und used only by testcases and serve no other purpose…}" local SECTION="${7:-others}" local PRIORITY="${8:-optional}" @@ -883,10 +883,10 @@ insertpackage() { local VERSION="$4" local DEPENDENCIES="$5" local PRIORITY="${6:-optional}" - local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/${RELEASES} + local DESCRIPTION="${7:-an autogenerated dummy ${NAME}=${VERSION}/${RELEASES} If you find such a package installed on your system, something went horribly wrong! They are autogenerated - und used only by testcases and serve no other purpose…"}" + und used only by testcases and serve no other purpose…}" local ARCHS="" for RELEASE in $(printf '%s' "$RELEASES" | tr ',' '\n'); do if [ "$RELEASE" = 'installed' ]; then @@ -964,10 +964,10 @@ insertinstalledpackage() { local DEPENDENCIES="$4" local PRIORITY="${5:-optional}" local STATUS="${6:-install ok installed}" - local DESCRIPTION="${7:-"an autogenerated dummy ${NAME}=${VERSION}/installed + local DESCRIPTION="${7:-an autogenerated dummy ${NAME}=${VERSION}/installed If you find such a package installed on your system, something went horribly wrong! They are autogenerated - und used only by testcases and serve no other purpose…"}" + und used only by testcases and serve no other purpose…}" local FILE='rootdir/var/lib/dpkg/status' local INFO='rootdir/var/lib/dpkg/info' -- cgit v1.2.3 From bd95e2b29d1048f4c8ada07def7b1a5da5eb7716 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 24 Aug 2016 02:22:45 +0200 Subject: Always pass a directory to find before an option On BSD systems, we cannot simply use find -name or stuff, we always have to pass a directory name first. Gbp-Dch: ignore --- test/integration/test-external-dependency-solver-protocol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/test-external-dependency-solver-protocol b/test/integration/test-external-dependency-solver-protocol index c86038b1b..17a30cf2f 100755 --- a/test/integration/test-external-dependency-solver-protocol +++ b/test/integration/test-external-dependency-solver-protocol @@ -26,7 +26,7 @@ insertpackage 'experimental' 'coolstuff' 'i386,amd64' '3' 'Depends: cool, stuff' setupaptarchive testsuccess aptget install --solver apt coolstuff -s -testempty find -name 'edsp.last.*' +testempty find . -name 'edsp.last.*' echo 'Dir::Log::Solver "edsp.last.xz";' > rootdir/etc/apt/apt.conf.d/log-edsp.conf testfailure aptget install --solver dump coolstuff -s -- cgit v1.2.3 From 4aa8cc9127bdf5837b51b49d917c4ac229b2c540 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 24 Aug 2016 13:36:26 +0200 Subject: test: Allow db_dump-5 instead of db_dump Gbp-Dch: ignore --- test/integration/test-apt-ftparchive-cachedb-lp1274466 | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-apt-ftparchive-cachedb-lp1274466 b/test/integration/test-apt-ftparchive-cachedb-lp1274466 index c230e47dc..3a5527230 100755 --- a/test/integration/test-apt-ftparchive-cachedb-lp1274466 +++ b/test/integration/test-apt-ftparchive-cachedb-lp1274466 @@ -11,14 +11,19 @@ setupenvironment configarchitecture "i386" confighashes 'MD5' 'SHA1' 'SHA256' 'SHA512' +db_dump=db_dump +if command -v db_dump-5 >/dev/null 2>&1; then + db_dump=db_dump-5 +fi + # gather the db and the deb, ensure mtime is not modfied as its saved in the DB cp -p "$TESTDIR/deb-lp1274466-cachedb.deb" foo_1_i386.deb cp -p "$TESTDIR/cachedb-lp1274466-old-format.db" old-format.db # verify that the format is different testsuccess aptftparchive --db new-format.db packages . -db_dump new-format.db > new-format.dump -db_dump old-format.db > old-format.dump +$db_dump new-format.db > new-format.dump +$db_dump old-format.db > old-format.dump testfailure diff -u old-format.dump new-format.dump # ensure the new format as the sha512 @@ -47,7 +52,7 @@ Description: an autogenerated dummy foo=1/test " aptftparchive --db old-format.db packages . # ensure that the db is updated and contains the new sha512 -db_dump old-format.db > old-format.dump +$db_dump old-format.db > old-format.dump testsuccess grep 7da58ff901a40ecf42a730dc33198b182e9ba9ec98799fc2c2b6fabeeee40cc12a0e7cadb4b66764235c56e1009dbfe8a9a566fb1eedf47a992d1fff2cc3332c old-format.dump -- cgit v1.2.3 From 71e22da91ff888cf645e5083fbac7839846111d2 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 24 Aug 2016 16:05:37 +0200 Subject: test: Use a file to determine TEST_DEFAULT_GROUP This is more safe against sticky bits. For example, in FreeBSD all files created in /tmp have the group set to wheel. Gbp-Dch: ignore --- test/integration/framework | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 9dce3dc11..677c40711 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -451,11 +451,8 @@ EOF # create some files in /tmp and look at user/group to get what this means TEST_DEFAULT_USER="$(id -un)" - if [ "$(uname)" = 'GNU/kFreeBSD' ]; then - TEST_DEFAULT_GROUP='root' - else - TEST_DEFAULT_GROUP="$(id -gn)" - fi + touch "${TMPWORKINGDIRECTORY}/test-file" + TEST_DEFAULT_GROUP=$(stat --format '%G' "${TMPWORKINGDIRECTORY}/test-file") # cleanup the environment a bit # prefer our apt binaries over the system apt binaries -- cgit v1.2.3 From 03ae49aca57b499f8ef497c2777b3eaef2516d1a Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 24 Aug 2016 16:21:12 +0200 Subject: test: More portable check for dpkg versions This check should work regardless if dpkg was installed by dpkg or by a native package manager like RPM or pkg. Gbp-Dch: ignore --- test/integration/framework | 3 +++ test/integration/test-bug-661537-build-profiles-support | 2 +- test/integration/test-bug-769609-triggers-still-pending-after-run | 2 +- test/integration/test-no-fds-leaked-to-maintainer-scripts | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 677c40711..ec57a23c3 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -195,6 +195,9 @@ aptinternalplanner() { runapt "${APTINTERNALPLANNER}" "$@"; } dpkg() { "${TMPWORKINGDIRECTORY}/rootdir/usr/bin/dpkg" "$@" } +dpkg_version() { + command perl -MDpkg -E 'say $Dpkg::PROGVERSION' +} dpkgcheckbuilddeps() { command dpkg-checkbuilddeps --admindir="${TMPWORKINGDIRECTORY}/rootdir/var/lib/dpkg" "$@" } diff --git a/test/integration/test-bug-661537-build-profiles-support b/test/integration/test-bug-661537-build-profiles-support index 91115ea18..d24484de9 100755 --- a/test/integration/test-bug-661537-build-profiles-support +++ b/test/integration/test-bug-661537-build-profiles-support @@ -76,7 +76,7 @@ Building dependency tree... } msgtest 'Check if version of installed dpkg is high enough for' 'build profiles support' -if dpkg --compare-versions "$(command dpkg-query --showformat='${Version}' --show dpkg)" 'ge' '1.17.14'; then +if dpkg --compare-versions "$(dpkg_version)" 'ge' '1.17.14'; then msgpass testwithdpkg() { msgtest "Test with" "dpkg-checkbuilddeps -d '$1' -P '$2'" diff --git a/test/integration/test-bug-769609-triggers-still-pending-after-run b/test/integration/test-bug-769609-triggers-still-pending-after-run index b44ebf74f..ce2c193dd 100755 --- a/test/integration/test-bug-769609-triggers-still-pending-after-run +++ b/test/integration/test-bug-769609-triggers-still-pending-after-run @@ -8,7 +8,7 @@ setupenvironment configarchitecture 'amd64' msgtest 'Check if installed dpkg supports' 'noawait trigger' -if dpkg-checkbuilddeps -d 'dpkg (>= 1.16.1)' /dev/null; then +if dpkg --compare-versions "$(dpkg_version)" 'ge' '1.16.1'; then msgpass else msgskip 'dpkg version too old' diff --git a/test/integration/test-no-fds-leaked-to-maintainer-scripts b/test/integration/test-no-fds-leaked-to-maintainer-scripts index ca93f78b4..7b5d6727e 100755 --- a/test/integration/test-no-fds-leaked-to-maintainer-scripts +++ b/test/integration/test-no-fds-leaked-to-maintainer-scripts @@ -29,7 +29,7 @@ buildpackage "$BUILDDIR" 'unstable' 'main' 'native' rm -rf "$BUILDDIR" PKGNAME='fdleaks:all' -if ! dpkg-checkbuilddeps -d 'dpkg (>= 1.16.2)' /dev/null >/dev/null 2>&1; then +if dpkg --compare-versions "$(dpkg_version)" 'lt' '1.16.2'; then PKGNAME='fdleaks' fi -- cgit v1.2.3 From 15134a8e5458fc634482386f1fd2acbccc3ac892 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Wed, 24 Aug 2016 16:28:47 +0200 Subject: Lower-case uname -r output in kernel autoremove helper This is needed on FreeBSD which has versions like 11.0-RC1, otherwise the tests would fail. --- test/integration/test-kernel-helper-autoremove | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove index 417dafd65..a70841d9d 100755 --- a/test/integration/test-kernel-helper-autoremove +++ b/test/integration/test-kernel-helper-autoremove @@ -6,7 +6,7 @@ TESTDIR="$(readlink -f "$(dirname "$0")")" setupenvironment configarchitecture 'amd64' -CURRENTKERNEL="linux-image-$(uname -r)" +CURRENTKERNEL="linux-image-$(uname -r | tr '[A-Z]' '[a-z]')" insertinstalledpackage "$CURRENTKERNEL" 'amd64' '5-1' # debug packages do not need our protection insertinstalledpackage "${CURRENTKERNEL}-dbg" 'amd64' '5-1' @@ -49,7 +49,7 @@ testprotected() { testsuccess --nomsg grep '^\^linux-image-100\\\.0\\\.0-1-generic\$$' protected.list msgtest 'Check kernel autoremoval protection list includes' 'running kernel' - testsuccess --nomsg grep "^\\^linux-image-$(uname -r | sed -e 's#\.#\\\\.#g')\\\$\$" protected.list + testsuccess --nomsg grep "^\\^linux-image-$(uname -r | tr '[A-Z]' '[a-z]' | sed -e 's#\.#\\\\.#g')\\\$\$" protected.list msgtest 'Check kernel autoremoval protection list does not include' 'metapackages' testfailure --nomsg grep -e '^\^linux-image-amd64\$$' -e '^\^linux-image-686-pae\$$' -e ':i386' protected.list -- cgit v1.2.3 From 2ed62ba6abcad809d1898a40950f86217af73812 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Thu, 25 Aug 2016 14:24:49 +0200 Subject: changelog: Respect Dir setting for local changelog getting This fixes issues with chroots, but the goal here was to get the test suite working on systems without dpkg. --- test/integration/test-apt-get-changelog | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test-apt-get-changelog b/test/integration/test-apt-get-changelog index 0812db500..ee7b3ef97 100755 --- a/test/integration/test-apt-get-changelog +++ b/test/integration/test-apt-get-changelog @@ -122,13 +122,13 @@ testsuccess apt install dpkg -y # at this moment, we still have the Releasefile claim to be origin:ubuntu echo 'Acquire::Changelogs::AlwaysOnline::Origin::Ubuntu "false";' >> rootdir/etc/apt/apt.conf.d/nooriginchangelogs testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/main/d/dpkg/dpkg_42/changelog' dpkg.changelog" apt changelog dpkg --print-uris -testsuccessequal "'gzip:///usr/share/doc/dpkg/changelog.Debian.gz' dpkg.changelog" apt changelog dpkg --print-uris -o Acquire::Changelogs::AlwaysOnline=false +testsuccessequal "'copy://${TMPWORKINGDIRECTORY}/rootdir/usr/share/doc/dpkg/changelog' dpkg.changelog" apt changelog dpkg --print-uris -o Acquire::Changelogs::AlwaysOnline=false testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/main/d/dpkg/dpkg_42/changelog' dpkg.changelog" apt changelog dpkg --print-uris -o Acquire::Changelogs::AlwaysOnline=true testsuccessequal "'http://localhost:${APTHTTPPORT}/pool/main/d/dpkg/dpkg_42/changelog' dpkg.changelog" apt changelog dpkg --print-uris -o Acquire::Changelogs::AlwaysOnline=false -o Acquire::Changelogs::AlwaysOnline::Origin::Ubuntu=true -testsuccessequal "'gzip:///usr/share/doc/dpkg/changelog.Debian.gz' dpkg.changelog" apt changelog dpkg --print-uris -o Acquire::Changelogs::AlwaysOnline=false -o Acquire::Changelogs::AlwaysOnline::Origin::Debian=true +testsuccessequal "'copy://${TMPWORKINGDIRECTORY}/rootdir/usr/share/doc/dpkg/changelog' dpkg.changelog" apt changelog dpkg --print-uris -o Acquire::Changelogs::AlwaysOnline=false -o Acquire::Changelogs::AlwaysOnline::Origin::Debian=true testsuccess apt changelog dpkg -d testfilestats 'dpkg.changelog' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:644" head -n 3 dpkg.changelog > dpkg.change -testfileequal 'dpkg.change' "$(apthelper cat-file '/usr/share/doc/dpkg/changelog.Debian.gz' | head -n 3)" +testfileequal 'dpkg.change' "$(apthelper cat-file 'rootdir/usr/share/doc/dpkg/changelog' | head -n 3)" rm -f dpkg.change dpkg.changelog -- cgit v1.2.3 From f878d3a862128bc1385616751ae1d78246b1bd01 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Thu, 25 Aug 2016 15:02:13 +0200 Subject: test: Assert multi-arch in the chroot The host system might not have a dpkg installed, which makes dpkg fail with: dpkg not recorded as installed, cannot check for multi-arch support! That's entirely useless of course. We want to know if dpkg could support multi-arch in our chroot, so we pseudo-install dpkg into the chroot and pretend it's version is one version higher than the minimum dpkg version, so dpkg --assert-multi-arch works on recent dpkgs. Gbp-Dch: ignore --- test/integration/framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index ec57a23c3..546f070d7 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -531,7 +531,7 @@ configdpkg() { insertinstalledpackage 'dpkg' "all" '1.16.2+fake' fi fi - if command dpkg --assert-multi-arch >/dev/null 2>&1 ; then + if dpkg --assert-multi-arch >/dev/null 2>&1 ; then local ARCHS="$(getarchitectures)" local DPKGARCH="$(dpkg --print-architecture)" # this ensures that even if multi-arch isn't active in the view -- cgit v1.2.3 From 757ec4e1ef633f9867928559df82adf3d0ac7b78 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Thu, 25 Aug 2016 15:35:32 +0200 Subject: test: Use :$(id -gn) instead of :root (when run as root) On BSD systems, the root group is wheel, not root, so let's just use the default group here. Gbp-Dch: ignore --- test/integration/framework | 6 +++--- test/integration/test-authentication-basic | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 546f070d7..c513ed12c 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -314,7 +314,7 @@ setupenvironment() { # relax permissions so that running as root with user switching works umask 022 chmod 711 "$TMPWORKINGDIRECTORY" - chown _apt:root "${TMPWORKINGDIRECTORY}/downloaded" + chown _apt:$(id -gn) "${TMPWORKINGDIRECTORY}/downloaded" fi TESTDIRECTORY="$(readlink -f "$(dirname $0)")" @@ -442,7 +442,7 @@ EOF cp "${TESTDIRECTORY}/apt.pem" "${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem" if [ "$(id -u)" = '0' ]; then - chown _apt:root "${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem" + chown _apt:$(id -gn) "${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem" fi echo "Acquire::https::CaInfo \"${TMPWORKINGDIRECTORY}/rootdir/etc/webserver.pem\";" > rootdir/etc/apt/apt.conf.d/99https echo "Apt::Cmd::Disable-Script-Warning \"1\";" > rootdir/etc/apt/apt.conf.d/apt-binary @@ -1960,7 +1960,7 @@ mkdir() { command mkdir -m 700 -p "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial" touch "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/lock" if [ "$(id -u)" = '0' ]; then - chown _apt:root "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial" + chown _apt:$(id -gn) "${TMPWORKINGDIRECTORY}/rootdir/var/lib/apt/lists/partial" fi else command mkdir "$@" diff --git a/test/integration/test-authentication-basic b/test/integration/test-authentication-basic index 9a15c7604..3bfd076ce 100755 --- a/test/integration/test-authentication-basic +++ b/test/integration/test-authentication-basic @@ -30,7 +30,7 @@ testauthsuccess() { # lets see if got/retains acceptable permissions if [ -n "$AUTHCONF" ]; then if [ "$(id -u)" = '0' ]; then - testfilestats "$AUTHCONF" '%U:%G:%a' '=' "_apt:root:600" + testfilestats "$AUTHCONF" '%U:%G:%a' '=' "_apt:$(id -gn):600" else testfilestats "$AUTHCONF" '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:600" fi -- cgit v1.2.3 From 4ff5e237d5685be187a75c563b86e80ea3e7cc01 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 28 Aug 2016 12:58:20 +0200 Subject: randomize acquire order for same type index files Without randomizing the order in which we download the index files we leak needlessly information to the mirrors of which architecture is native or foreign on this system. More importantly, we leak the order in which description translations will be used which in most cases will e.g. have the native tongue first. Note that the leak effect in practice is limited as apt detects if a file it wants to download is already available in the latest version from a previous download and does not query the server in such cases. Combined with the fact that Translation files are usually updated infrequently and not all at the same time, so a mirror can never be sure if it got asked about all files the user wants. --- test/integration/framework | 2 ++ test/integration/test-apt-update-simple | 24 +++++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 62720fedd..243996e14 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -436,6 +436,8 @@ EOF # in testcases, it can appear as if localhost has a rotation setup, # hide this as we can't really deal with it properly echo 'Acquire::Failure::ShowIP "false";' + # randomess and tests don't play well together + echo 'Acquire::IndexTargets::Randomized "false";' # fakeroot can't fake everything, so disabled in production but good for tests echo 'APT::Sandbox::Verify "true";' } >> aptconfig.conf diff --git a/test/integration/test-apt-update-simple b/test/integration/test-apt-update-simple index ca969e61b..ccf719790 100755 --- a/test/integration/test-apt-update-simple +++ b/test/integration/test-apt-update-simple @@ -6,10 +6,28 @@ TESTDIR="$(readlink -f "$(dirname "$0")")" setupenvironment configarchitecture 'amd64' -insertpackage 'unstable' 'unrelated' 'all' '0.5~squeeze1' -insertsource 'unstable' 'unrelated' 'all' '0.5~squeeze1' +insertpackage 'unstable' 'foo' 'all' '1' +insertpackage 'unstable' 'bar' 'amd64' '1' +insertpackage 'unstable' 'bar' 'i386' '1' +insertsource 'unstable' 'foo' 'all' '1' + +sed -e 's#^Description-en:#Description-de:#' \ + aptarchive/dists/unstable/main/i18n/Translation-en > aptarchive/dists/unstable/main/i18n/Translation-de setupaptarchive --no-update changetowebserver -testsuccess aptget update -o Debug::Acquire::Auth=1 +# the framework modifies some configs to ensure testability, +# at the expense of creating an environment which doesn't always +# reflect apts "normal" behavior on a "normal" system +echo 'Acquire::IndexTargets::Randomized "true"; +Acquire::Languages { "environment"; "en"; "de"; }; +' > rootdir/etc/apt/apt.conf.d/restore-simplicity + +testempty aptget indextargets +testsuccess aptget update +testequal 'main/source/Sources +main/binary-amd64/Packages +main/binary-all/Packages +main/i18n/Translation-en +main/i18n/Translation-de' aptget indextargets --format '$(METAKEY)' -- cgit v1.2.3 From e950b7e2f89b5e48192cd469c963a44fff9f1450 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 28 Aug 2016 22:56:17 +0200 Subject: don't loop on pinning pkgs from absolute debs by regex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit An absolute filename for a *.deb file starts with a /. A package with the name of the file is inserted in the cache which is provided by the "real" package for internal reasons. The pinning code detects a regex based wildcard by having the regex start with /. That is no problem as a / can not be included in a package name… expect that our virtual filename package can and does. We fix this two ways actually: First, a regex is only being considered a regex if it also ends with / (we don't support flags). That stops our problem with the virtual filename packages already, but to be sure we also do not enter the loop if matcher and package name are equal. It has to be noted that the creation of pins for virtual packages like the here effected filename packages is pointless as only versions can be pinned, but checking that a package is really purely virtual is too costly compared to just creating an unused pin. Closes: 835818 --- test/integration/test-apt-get-install-deb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/test-apt-get-install-deb b/test/integration/test-apt-get-install-deb index 7baaf0ee5..36e94a2dc 100755 --- a/test/integration/test-apt-get-install-deb +++ b/test/integration/test-apt-get-install-deb @@ -125,8 +125,12 @@ createpkg 'leading-newline' ' createpkg 'trailing-newline' '' ' ' +echo 'Package: /pkg-/ +Pin: release a=experimental +Pin-Priority: 501' > rootdir/etc/apt/preferences.d/pinit + testsuccess aptget install ./incoming/pkg-as-it-should-be_0_all.deb -testsuccess aptget install ./incoming/pkg-leading-newline_0_all.deb +testsuccess aptget install "$(readlink -f ./incoming/pkg-leading-newline_0_all.deb)" testsuccess aptget install ./incoming/pkg-trailing-newline_0_all.deb testempty apt clean -- cgit v1.2.3 From 30ea7a60404ee53393235827202968393951d106 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Fri, 19 Aug 2016 20:37:28 +0200 Subject: test, travis: Quieter testing with a new -qq mode Introduce a new -qq mode for our integration test framework, and make travis use it. The new -qq mode sets MSGLEVEL to 1. In MSGLEVEL=1, no messages are generated for passed tests, and all testcase filenames are printed in the same line. Also install first in travis, do not ls the installed output and run the install with chronic, so we only get output if it failed. Gbp-Dch: ignore --- test/integration/framework | 5 +++++ test/integration/run-tests | 34 +++++++++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 5 deletions(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 243996e14..9a908a9ec 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -5,6 +5,8 @@ EXIT_CODE=0 while [ -n "$1" ]; do if [ "$1" = "-q" ]; then export MSGLEVEL=2 + elif [ "$1" = "-qq" ]; then + export MSGLEVEL=1 elif [ "$1" = "-v" ]; then export MSGLEVEL=4 elif [ "$1" = '--color=no' ]; then @@ -142,6 +144,9 @@ if [ $MSGLEVEL -le 4 ]; then msgdebug() { true; } msgndebug() { true; } fi +if [ $MSGLEVEL -le 1 ]; then + msgpass() { true; } +fi msgdone() { if [ "$1" = "debug" -a $MSGLEVEL -le 4 ] || [ "$1" = "info" -a $MSGLEVEL -le 3 ] || diff --git a/test/integration/run-tests b/test/integration/run-tests index fad249994..7c0b74ce2 100755 --- a/test/integration/run-tests +++ b/test/integration/run-tests @@ -5,6 +5,8 @@ TESTTORUN='' while [ -n "$1" ]; do if [ "$1" = "-q" ]; then export MSGLEVEL=2 + elif [ "$1" = "-qq" ]; then + export MSGLEVEL=1 elif [ "$1" = "-v" ]; then export MSGLEVEL=4 elif [ "$1" = '--color=no' ]; then @@ -50,7 +52,9 @@ if [ -n "$TESTTORUN" ]; then CURRENTTRAP="rm -f \"$OUTPUT\"; $CURRENTTRAP" trap "$CURRENTTRAP" 0 HUP INT QUIT ILL ABRT FPE SEGV PIPE TERM { - if [ "$MSGLEVEL" -le 2 ]; then + if [ "$MSGLEVEL" -le 1 ]; then + printf "${TESTTORUN##*/}" + elif [ "$MSGLEVEL" -le 2 ]; then printf "${CTEST}Testcase ${CHIGH}${TESTTORUN##*/}${CRESET}: " else printf "${CTEST}Run Testcase ${CHIGH}${TESTTORUN##*/}${CRESET}\n" @@ -58,12 +62,20 @@ if [ -n "$TESTTORUN" ]; then if ! "$TESTTORUN"; then FAIL='yes' if [ "$MSGLEVEL" -le 2 ]; then + printf >&2 "\n${CHIGH}Running ${TESTTORUN##*/} -> FAILED${CRESET}\n" + elif [ "$MSGLEVEL" -le 2 ]; then printf >&2 "\n${CHIGH}Running ${TESTTORUN##*/} -> FAILED${CRESET}" else echo >&2 "${CHIGH}Running ${TESTTORUN##*/} -> FAILED${CRESET}" fi + else + if [ "$MSGLEVEL" -le 1 ]; then + printf " " + fi fi - if [ "$MSGLEVEL" -le 2 ]; then + if [ "$MSGLEVEL" -le 1 ]; then + : + elif [ "$MSGLEVEL" -le 2 ]; then echo fi } >"$OUTPUT" 2>&1 @@ -96,8 +108,13 @@ if [ -n "$APT_TEST_JOBS" ]; then exec $parallel -j "$APT_TEST_JOBS" "./$(basename "$0")" -- $(echo "$TESTLIST") fi TOTAL="$(echo "$TESTLIST" | wc -l)" +if [ "$MSGLEVEL" -le 1 ]; then + printf "${CTEST}Running testcases${CRESET}: " +fi for testcase in $TESTLIST; do - if [ "$MSGLEVEL" -le 2 ]; then + if [ "$MSGLEVEL" -le 1 ]; then + printf "${testcase##*/}" + elif [ "$MSGLEVEL" -le 2 ]; then printf "($(($ALL+1))/${TOTAL}) ${CTEST}Testcase ${CHIGH}${testcase##*/}${CRESET}: " else printf "${CTEST}Run Testcase ($(($ALL+1))/${TOTAL}) ${CHIGH}${testcase##*/}${CRESET}\n" @@ -105,16 +122,23 @@ for testcase in $TESTLIST; do if ! ${testcase}; then FAIL=$((FAIL+1)) FAILED_TESTS="$FAILED_TESTS ${testcase##*/}" - if [ "$MSGLEVEL" -le 2 ]; then + if [ "$MSGLEVEL" -le 1 ]; then + printf >&2 "\n${CHIGH}Running ${testcase##*/} -> FAILED${CRESET}\n" + elif [ "$MSGLEVEL" -le 2 ]; then printf >&2 "\n${CHIGH}Running ${testcase##*/} -> FAILED${CRESET}" else echo >&2 "${CHIGH}Running ${testcase##*/} -> FAILED${CRESET}" fi else PASS=$((PASS+1)) + if [ "$MSGLEVEL" -le 1 ]; then + printf " " + fi fi ALL=$((ALL+1)) - if [ "$MSGLEVEL" -le 2 ]; then + if [ "$MSGLEVEL" -le 1 ]; then + : + elif [ "$MSGLEVEL" -le 2 ]; then echo fi done -- cgit v1.2.3 From 9109c3c309e95a6d99a88f945f17c37e5c04c105 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 30 Aug 2016 17:37:59 +0200 Subject: test: Pass -d to dpkg-buildpackage This works around an issue on Fedora where dpkg complains about missing build-essential: dpkg-checkbuilddeps: Unmet build dependencies: build-essential:native Gbp-Dch: ignore --- test/integration/framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 9a908a9ec..067cc6e8a 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -813,7 +813,7 @@ buildpackage() { if [ "$ARCH" = "all" ]; then ARCH="$(dpkg-architecture -qDEB_HOST_ARCH 2> /dev/null)" fi - testsuccess --nomsg dpkg-buildpackage -uc -us -a$ARCH + testsuccess --nomsg dpkg-buildpackage -uc -us -a$ARCH -d cp "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" "$BUILDLOG" local PKGS="$(grep '^dpkg-deb: building package' "$BUILDLOG" | cut -d'/' -f 2 | sed -e "s#'\.##")" local SRCS="$(grep '^dpkg-source: info: building' "$BUILDLOG" | grep -o '[a-z0-9._+~-]*$')" -- cgit v1.2.3