From e8fb1cdfdd13e45f2b3abbd57a28b57ae6137f14 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 9 May 2015 18:55:41 +0200 Subject: sync TFRewrite*Order arrays with dpkg and dak dpkg and dak know various field names and order them in their output, while we have yet another order and have to play catch up with them as we are sitting between chairs here and neither order is ideal for us, too. A little testcase is from now on supposed to help ensureing that we do not derivate to far away from which fields dpkg knows and orders. --- test/integration/framework | 1 + test/integration/test-apt-ftparchive-cachedb | 6 +- .../test-apt-ftparchive-cachedb-lp1274466 | 6 +- test/integration/test-apt-ftparchive-src-cachedb | 18 ++--- test/integration/test-apt-tagfile-fields-order | 82 ++++++++++++++++++++++ 5 files changed, 98 insertions(+), 15 deletions(-) create mode 100755 test/integration/test-apt-tagfile-fields-order (limited to 'test/integration') diff --git a/test/integration/framework b/test/integration/framework index 7564a0faf..03c188189 100644 --- a/test/integration/framework +++ b/test/integration/framework @@ -189,6 +189,7 @@ setupenvironment() { TESTDIRECTORY=$(readlink -f $(dirname $0)) # allow overriding the default BUILDDIR location + SOURCEDIRECTORY=${APT_INTEGRATION_TESTS_SOURCE_DIR:-"${TESTDIRECTORY}/../../"} BUILDDIRECTORY=${APT_INTEGRATION_TESTS_BUILD_DIR:-"${TESTDIRECTORY}/../../build/bin"} LIBRARYPATH=${APT_INTEGRATION_TESTS_LIBRARY_PATH:-"${BUILDDIRECTORY}"} METHODSDIR=${APT_INTEGRATION_TESTS_METHODS_DIR:-"${BUILDDIRECTORY}/methods"} diff --git a/test/integration/test-apt-ftparchive-cachedb b/test/integration/test-apt-ftparchive-cachedb index 3454ee36a..962095320 100755 --- a/test/integration/test-apt-ftparchive-cachedb +++ b/test/integration/test-apt-ftparchive-cachedb @@ -3,12 +3,12 @@ set -e ensure_correct_packages_file() { testequal "Package: foo +Architecture: i386 +Version: 1 Priority: optional Section: others -$(dpkg-deb -I ./aptarchive/pool/main/foo_1_i386.deb | grep 'Installed-Size:' | sed 's#^ ##') Maintainer: Joe Sixpack -Architecture: i386 -Version: 1 +$(dpkg-deb -I ./aptarchive/pool/main/foo_1_i386.deb | grep 'Installed-Size:' | sed 's#^ ##') Filename: pool/main/foo_1_i386.deb" head -n8 ./aptarchive/dists/test/main/binary-i386/Packages } diff --git a/test/integration/test-apt-ftparchive-cachedb-lp1274466 b/test/integration/test-apt-ftparchive-cachedb-lp1274466 index 1f86e367f..8b768441a 100755 --- a/test/integration/test-apt-ftparchive-cachedb-lp1274466 +++ b/test/integration/test-apt-ftparchive-cachedb-lp1274466 @@ -27,12 +27,12 @@ testfailure grep 7da58ff901a40ecf42a730dc33198b182e9ba9ec98799fc2c2b6fabeeee40cc # regression test for corruption with previous generation of cachedb testsuccessequal "Package: foo +Architecture: i386 +Version: 1 Priority: optional Section: others -Installed-Size: 29 Maintainer: Joe Sixpack -Architecture: i386 -Version: 1 +Installed-Size: 29 Filename: ./foo_1_i386.deb Size: 1270 MD5sum: 85d0e908c1a897700e2c5dea72d7e3c0 diff --git a/test/integration/test-apt-ftparchive-src-cachedb b/test/integration/test-apt-ftparchive-src-cachedb index 2a361ecc0..66a3b7845 100755 --- a/test/integration/test-apt-ftparchive-src-cachedb +++ b/test/integration/test-apt-ftparchive-src-cachedb @@ -3,16 +3,16 @@ set -e assert_correct_sources_file() { testsuccessequal "Package: bar +Format: 3.0 (native) +Binary: bar Architecture: all Version: 1.0 -Binary: bar -Format: 3.0 (native) Directory: pool/main +Package-List: + bar deb admin extra Files: 7b57dd065e51de5905288a5104d4bef5 406 bar_1.0.dsc d41d8cd98f00b204e9800998ecf8427e 0 bar_1.0.tar.gz -Package-List: - bar deb admin extra Checksums-Sha1: 17a40b76715f393ab7fd6485c9392a02f1adf903 406 bar_1.0.dsc da39a3ee5e6b4b0d3255bfef95601890afd80709 0 bar_1.0.tar.gz @@ -24,16 +24,16 @@ Checksums-Sha512: cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 0 bar_1.0.tar.gz Package: foo +Format: 3.0 (native) +Binary: foo Architecture: all Version: 1.0 -Binary: foo -Format: 3.0 (native) Directory: pool/main +Package-List: + foo deb admin extra Files: d144826e6f02831c1933e910c92cd7e0 171 foo_1.0.dsc d41d8cd98f00b204e9800998ecf8427e 0 foo_1.0.tar.gz -Package-List: - foo deb admin extra Checksums-Sha1: 979306aa3ccff3d61bba062bb6977e2493c6f907 171 foo_1.0.dsc da39a3ee5e6b4b0d3255bfef95601890afd80709 0 foo_1.0.tar.gz @@ -43,7 +43,7 @@ Checksums-Sha256: Checksums-Sha512: 3da0240fd764657c2f3661b4d750578a9a99b0580591b133756379d48117ebda87a5ed2467f513200d6e7eaf51422cbe91c15720eef7fb4bba2cc8ff81ebc547 171 foo_1.0.dsc cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 0 foo_1.0.tar.gz -" aptsortpkgs ./aptarchive/dists/test/main/source/Sources +" aptsortpkgs ./aptarchive/dists/test/main/source/Sources -o APT::SortPkgs::Source=true } create_source_files() { diff --git a/test/integration/test-apt-tagfile-fields-order b/test/integration/test-apt-tagfile-fields-order new file mode 100755 index 000000000..27d5c14ff --- /dev/null +++ b/test/integration/test-apt-tagfile-fields-order @@ -0,0 +1,82 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment + +dpkg_field_ordered_list() { + local FIELDS="$(perl -e " +use Dpkg::Control; +use Dpkg::Control::Fields; +foreach \$f (field_ordered_list(${1})) { + print \"\$f\\n\"; +}" | sort -u)" + if [ -z "$FIELDS" ]; then + msgfail 'Could not get fields via libdpkg-perl' + fi + echo "$FIELDS" +} + +comparelsts() { + local DIFFOUTPUT="$(diff -u apt.lst dpkg.lst || true)" + if echo "$DIFFOUTPUT" | grep -q '^+[^+]'; then + echo + echo "$DIFFOUTPUT" | grep '^[+-][^+-]' + msgfail + else + msgpass + fi +} + +msgtest 'Check that apt knows all fields dpkg orders in' 'Packages' +dpkg_field_ordered_list 'CTRL_INDEX_PKG' > dpkg.lst +sed -ne 's#^ "\(.*\)",.*$#\1#p' ${SOURCEDIRECTORY}/apt-pkg/tagfile-order.c | sed -n '/^Package$/,/^Package$/ p' | head -n -1 | sort -u > apt.lst +comparelsts + +msgtest 'Check that apt knows all fields dpkg orders in' 'status' +dpkg_field_ordered_list 'CTRL_FILE_STATUS' > dpkg.lst +comparelsts + +msgtest 'Check that apt knows all fields dpkg orders in' 'DEBIAN/control' +dpkg_field_ordered_list 'CTRL_PKG_DEB' > dpkg.lst +comparelsts + +msgtest 'Check that apt knows all fields dpkg orders in' 'Sources' +dpkg_field_ordered_list 'CTRL_INDEX_SRC' > dpkg.lst +echo 'Package' > apt.tmp +sed -ne 's#^ "\(.*\)",.*$#\1#p' ${SOURCEDIRECTORY}/apt-pkg/tagfile-order.c | sed '/^Package$/,/^Package$/ d' >> apt.tmp +sort -u apt.tmp > apt.lst +comparelsts + +msgtest 'Check that apt knows all fields dpkg orders in' 'dsc' +dpkg_field_ordered_list 'CTRL_PKG_SRC' > dpkg.lst +comparelsts + +# HACK, but there is no good way to acquire sources in tests and/or to remember to run this regular manually +if [ "$USER" = 'david' ]; then + msgtest 'Check if we have somewhere the sources of' 'dpkg' + DPKGSOURCE="$(locate dpkg/lib/dpkg/parse.c | head -n 1 || true)" + if [ -z "$DPKGSOURCE" ]; then + msgskip 'Not found' + else + msgpass + msgtest 'Check that apt knows about all fields' 'dpkg parses' + sed -n 's#^.*FIELD("\(.*\)").*$#\1#p' "${DPKGSOURCE}" | sort -u > dpkg.lst + sed -ne 's#^ "\(.*\)",.*$#\1#p' ${SOURCEDIRECTORY}/apt-pkg/tagfile-order.c | sed -n '/^Package$/,/^Package$/ p' | head -n -1 | sort -u > apt.lst + comparelsts + fi + + msgtest 'Check if we have somewhere the sources of' 'dak' + DAKSOURCE="$(locate dak/setup/core-init.d/080_metadatakeys | head -n 1 || true)" + if [ -z "$DAKSOURCE" ]; then + msgskip 'Not found' + else + msgpass + msgtest 'Check that apt knows about all fields' 'dak knows' + # dak mixes both, so we can only check with the mixed one as well + sed -ne "s#^.* VALUES ('\(.*\)', \(.*\)).*\$#\1 \2#p" "${DAKSOURCE}" | cut -d ' ' -f 1 | sort -u > dpkg.lst + sed -ne 's#^ "\(.*\)",.*$#\1#p' ${SOURCEDIRECTORY}/apt-pkg/tagfile-order.c | sort -u > apt.lst + comparelsts + fi +fi -- cgit v1.2.3