Hi - Presenting testing for the debuginfod .deb/.ddeb support patch, after finding a good debian-packaging tutorial, and generating a workable basic set of test deb's on a Ubuntu box.
This patch is also on the elfutils.git fche/debuginfod-deb branch. In the absence of objections, I plan to merge this next week. commit 1d9ff81da0f5e1c7383b255c15529402035ad5bf Author: Frank Ch. Eigler <f...@redhat.com> Date: Fri Dec 6 16:08:50 2019 -0500 debuginfod: deb support, tests Using a synthetic .deb/.ddeb from a Ubuntu 18 machine, extend the debuginfod testsuite with some .deb processing, if the dpkg-deb binary is installed. Signed-off-by: Frank Ch. Eigler <f...@redhat.com> diff --git a/config/ChangeLog b/config/ChangeLog index d71fb39..9b2a408 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,8 @@ +2019-12-06 Frank Ch. Eigler <f...@redhat.com> + + * elfutils.spec.in (debuginfod): Add BuildRequire dpkg + for deb testing. (Available on Fedora & EPEL, not base RHEL.) + 2019-11-28 Mark Wielaard <m...@klomp.org> * elfutils.spec.in (debuginfod): Add an explicit Requires diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in index 1cdca21..faeb7f8 100644 --- a/config/elfutils.spec.in +++ b/config/elfutils.spec.in @@ -35,6 +35,9 @@ BuildRequires: pkgconfig(libarchive) >= 3.1.2 BuildRequires: bzip2 # For the run-debuginfod-find.sh test case in %check for /usr/sbin/ss BuildRequires: iproute +%if 0%{?fedora} >= 20 +BuildRequires: dpkg +%endif BuildRequires: curl %define _gnu %{nil} diff --git a/tests/ChangeLog b/tests/ChangeLog index 8fcb161..ba3a10e 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,10 @@ +2019-12-06 Frank Ch. Eigler <f...@redhat.com> + + * debuginfod-debs/*: New test files, based on + https://wiki.debian.org/Packaging/Intro. + * run-debuginfod-find.sh: Test deb file processing (if dpkg + installed). + 2019-12-02 Frank Ch. Eigler <f...@redhat.com> * run-debuginfod-find.sh: Adjust to "rpm"->"archive" in metrics. diff --git a/tests/debuginfod-debs/hithere-dbgsym_1.0-1_amd64.ddeb b/tests/debuginfod-debs/hithere-dbgsym_1.0-1_amd64.ddeb new file mode 100644 index 0000000..f9879eb Binary files /dev/null and b/tests/debuginfod-debs/hithere-dbgsym_1.0-1_amd64.ddeb differ diff --git a/tests/debuginfod-debs/hithere_1.0-1.debian.tar.xz b/tests/debuginfod-debs/hithere_1.0-1.debian.tar.xz new file mode 100644 index 0000000..9f0ce68 Binary files /dev/null and b/tests/debuginfod-debs/hithere_1.0-1.debian.tar.xz differ diff --git a/tests/debuginfod-debs/hithere_1.0-1.dsc b/tests/debuginfod-debs/hithere_1.0-1.dsc new file mode 100644 index 0000000..d5f72b9 --- /dev/null +++ b/tests/debuginfod-debs/hithere_1.0-1.dsc @@ -0,0 +1,19 @@ +Format: 3.0 (quilt) +Source: hithere +Binary: hithere +Architecture: any +Version: 1.0-1 +Maintainer: Lars Wirzenius <l...@liw.fi> +Standards-Version: 3.9.2 +Build-Depends: debhelper (>= 9) +Package-List: + hithere deb misc optional arch=any +Checksums-Sha1: + 2dcd65497a12a3ea03223f52186447bd5733dce9 617 hithere_1.0.orig.tar.gz + 0b71331ef1c714c5bac67878551864b7356c56ce 764 hithere_1.0-1.debian.tar.xz +Checksums-Sha256: + 63062b582a712f169f37a5f52a41aa3ca9a405aafb8aa837bc906fa413b62cdb 617 hithere_1.0.orig.tar.gz + 9afa907e360e626639ccb86b86e799429bea27149034aec5d5c7e500971d651e 764 hithere_1.0-1.debian.tar.xz +Files: + 5b2830fa1fcd44ce489774771625526e 617 hithere_1.0.orig.tar.gz + 70106164d9397c70c2c1a4594e9897e4 764 hithere_1.0-1.debian.tar.xz diff --git a/tests/debuginfod-debs/hithere_1.0-1_amd64.deb b/tests/debuginfod-debs/hithere_1.0-1_amd64.deb new file mode 100644 index 0000000..11d1e95 Binary files /dev/null and b/tests/debuginfod-debs/hithere_1.0-1_amd64.deb differ diff --git a/tests/debuginfod-debs/hithere_1.0.orig.tar.gz b/tests/debuginfod-debs/hithere_1.0.orig.tar.gz new file mode 100644 index 0000000..23abea7 Binary files /dev/null and b/tests/debuginfod-debs/hithere_1.0.orig.tar.gz differ diff --git a/tests/run-debuginfod-find.sh b/tests/run-debuginfod-find.sh index c2926a0..cd31e30 100755 --- a/tests/run-debuginfod-find.sh +++ b/tests/run-debuginfod-find.sh @@ -18,6 +18,10 @@ . $srcdir/test-subr.sh # includes set -e +# for test case debugging, uncomment: +# set -x +# VERBOSE=-vvvv + DB=${PWD}/.debuginfod_tmp.sqlite tempfiles $DB export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache @@ -30,7 +34,7 @@ cleanup() if [ $PID1 -ne 0 ]; then kill $PID1; wait $PID1; fi if [ $PID2 -ne 0 ]; then kill $PID2; wait $PID2; fi - rm -rf F R L ${PWD}/.client_cache* + rm -rf F R D L ${PWD}/.client_cache* exit_cleanup } @@ -52,8 +56,8 @@ done # So we gather the LD_LIBRARY_PATH with this cunning trick: ldpath=`testrun sh -c 'echo $LD_LIBRARY_PATH'` -mkdir F R L -# not tempfiles F R L - they are directories which we clean up manually +mkdir F R L D +# not tempfiles F R L D - they are directories which we clean up manually ln -s ${abs_builddir}/dwfllines L/foo # any program not used elsewhere in this test wait_ready() @@ -82,7 +86,7 @@ wait_ready() fi } -env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod -F -R -d $DB -p $PORT1 -t0 -g0 R F L & +env LD_LIBRARY_PATH=$ldpath DEBUGINFOD_URLS= ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -R -d $DB -p $PORT1 -t0 -g0 R F L & PID1=$! # Server must become ready wait_ready $PORT1 'ready' 1 @@ -158,7 +162,7 @@ cmp $filename F/prog2 filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $BUILDID2 ${PWD}/prog2.c` cmp $filename ${PWD}/prog2.c -cp -rp ${abs_srcdir}/debuginfod-rpms R +cp -rvp ${abs_srcdir}/debuginfod-rpms R kill -USR1 $PID1 # All rpms need to be in the index rpms=$(find R -name \*rpm | wc -l) @@ -177,7 +181,7 @@ for i in $newrpms; do mkdir $subdir; cd $subdir; ls -lah ../$i - rpm2cpio ../$i | cpio -id; + rpm2cpio ../$i | cpio -ivd; cd ..; done sourcefiles=$(find -name \*\\.debug \ @@ -205,10 +209,12 @@ rpm_test() { buildid=`env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../src/readelf \ -a $filename | grep 'Build ID' | cut -d ' ' -f 7` test $__BUILDID = $buildid - - filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $__BUILDID $__SOURCEPATH` - hash=`cat $filename | sha1sum | awk '{print $1}'` - test $__SOURCESHA1 = $hash + + if test "x$__SOURCEPATH" != "x"; then + filename=`testrun ${abs_top_builddir}/debuginfod/debuginfod-find source $__BUILDID $__SOURCEPATH` + hash=`cat $filename | sha1sum | awk '{print $1}'` + test $__SOURCESHA1 = $hash + fi } @@ -257,13 +263,26 @@ export DEBUGINFOD_CACHE_PATH=${PWD}/.client_cache2 mkdir -p $DEBUGINFOD_CACHE_PATH # NB: inherits the DEBUGINFOD_URLS to the first server # NB: run in -L symlink-following mode for the L subdir -env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod -F -d ${DB}_2 -p $PORT2 -L L & +env LD_LIBRARY_PATH=$ldpath ${abs_builddir}/../debuginfod/debuginfod $VERBOSE -F -U -d ${DB}_2 -p $PORT2 -L L D & PID2=$! tempfiles ${DB}_2 wait_ready $PORT2 'ready' 1 # have clients contact the new server export DEBUGINFOD_URLS=http://127.0.0.1:$PORT2 + +if type dpkg-deb 2>/dev/null; then + # copy in the deb files + cp -rvp ${abs_srcdir}/debuginfod-debs/*deb D + kill -USR1 $PID2 + # All debs need to be in the index + debs=$(find D -name \*deb | wc -l) + wait_ready $PORT2 'scanned_total{source="archive"}' `expr $debs` + + # ubuntu + rpm_test f17a29b5a25bd4960531d82aa6b07c8abe84fa66 "" "" +fi + rm -rf $DEBUGINFOD_CACHE_PATH testrun ${abs_top_builddir}/debuginfod/debuginfod-find debuginfo $BUILDID