2021-11-29 10:58:36 +00:00
#!/bin/bash
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /tools/gdb/Sanity/gdb-testsuite-sanity
# Description: gdb testing by upstream testsuite
# Author: Michal Kolar <mkolar@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2021 Red Hat, Inc.
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see http://www.gnu.org/licenses/.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1
BUILD_USER = ${ BUILD_USER :- gdbbld }
export PACKAGE = " ${ PACKAGE :- $( rpm -qf --qf= '%{name}\n' ` which gdb` ) } "
RUNTESTFLAGS = ${ RUNTESTFLAGS :- GDB = ` rpm -ql $PACKAGE | grep -E 'bin/gdb$' ` }
TESTS_COUNT_MIN = ${ TESTS_COUNT_MIN :- 4000 }
REQUIRES = " $PACKAGE rpm-build dejagnu make gcc glibc "
if rlIsFedora; then
REQUIRES = " $REQUIRES dnf-utils "
else
REQUIRES = " $REQUIRES yum-utils "
fi
rlJournalStart
rlPhaseStartSetup
rlShowRunningKernel
rlAssertRpm --all
rlRun "TmpDir=\$(mktemp -d)"
rlRun " cp -r ./ref $TmpDir "
rlRun " pushd $TmpDir "
rlFetchSrcForInstalled $PACKAGE
rlRun " useradd -M -N $BUILD_USER " 0,9
[ $? -eq 0 ] && rlRun "del=yes"
rlRun " chown -R $BUILD_USER :users $TmpDir "
rlRun " cp /proc/sys/kernel/core_pattern $TmpDir /core_pattern.bckp "
rlRun "echo 'core.%p' >/proc/sys/kernel/core_pattern"
rlRun "ulimit -c unlimited"
rlPhaseEnd
rlPhaseStartSetup "build gdb"
rlRun " su -c 'rpm -D \"_topdir $TmpDir \" -U *.src.rpm &>rpm.log' $BUILD_USER "
rlRun " rlFileSubmit $TmpDir /rpm.log rpm.log "
rlRun " su -c 'rpmbuild -D \"_topdir $TmpDir \" -bs --with testsuite $TmpDir /SPECS/*.spec &>rpmbuild-bs.log' $BUILD_USER "
rlRun " rlFileSubmit $TmpDir /rpmbuild-bs.log rpmbuild-bs.log "
rlRun " yum-builddep -y -D \"_topdir $TmpDir \" $TmpDir /SRPMS/*.src.rpm &> $TmpDir /yum-builddep.log " 0,1; ret = $?
rlRun " rlFileSubmit $TmpDir /yum-builddep.log yum-builddep.log "
if [ $ret -ne 0 ] ; then
rlLogWarning "Dependencies was not successfully installed"
rlLogInfo "Trying to install dependencies of bare SPEC file ..."
rlRun " yum-builddep -y -D \"_topdir $TmpDir \" $TmpDir /SPECS/*.spec &> $TmpDir /yum-builddep-spec.log "
rlRun " rlFileSubmit $TmpDir /yum-builddep-spec.log yum-builddep-spec.log "
fi
rlRun " su -c 'rpmbuild -D \"_topdir $TmpDir \" -bp $TmpDir /SPECS/*.spec &> $TmpDir /rpmbuild-bp.log' $BUILD_USER "
rlRun " rlFileSubmit $TmpDir /rpmbuild-bp.log rpmbuild-bp.log "
if test -e $TmpDir /BUILD/gdb-*/gnulib/configure; then
rlRun " cd $TmpDir /BUILD/gdb-*/gnulib "
rlRun " su -c 'bash ./configure &> $TmpDir /configure-gnulib.log' $BUILD_USER "
rlRun " rlFileSubmit $TmpDir /configure-gnulib.log configure-gnulib.log "
fi
2021-12-15 16:24:38 +00:00
rlRun " configure_flags=\$(rpmspec -D \"_topdir $TmpDir \" -P $TmpDir /SPECS/*.spec | grep -o -E '\-\-(prefix|with\-gdb\-datadir|with\-separate\-debug\-dir|with\-python)=\S+' | tr '\n' ' ') "
2021-11-29 10:58:36 +00:00
rlRun " cd $TmpDir /BUILD/gdb-*/gdb "
2021-12-15 16:24:38 +00:00
rlRun " su -c './configure $configure_flags &> $TmpDir /configure.log' $BUILD_USER "
2021-11-29 10:58:36 +00:00
rlRun " rlFileSubmit $TmpDir /configure.log configure.log "
rlRun "DATADIR=`gdb -ex 'show data-directory' -batch | grep -o -E '/[^\"]+'`"
rlRun "mv data-directory data-directory.orig"
rlRun " ln -s $DATADIR ./data-directory "
rlPhaseEnd
rlPhaseStartSetup "filter testsuite"
rlRun "system=`uname -r | grep -o -E 'el[0-9]+a?|fc[0-9]+'` && [[ ! -z \$system ]]"
rlRun " ref_file= $TmpDir /ref/ $PACKAGE / $system .`arch` "
if ! test -e $ref_file ; then
rlLogWarning " Reference file $ref_file not found "
rlLogInfo "Using default reference file ..."
rlRun " ref_file= $TmpDir /ref/default "
fi
rlRun " test -e $ref_file "
rlRun "cd testsuite"
rlRun " find . -regex '^./gdb\..+\.exp $' -type f -printf '%P\n' | sort > $TmpDir /test_list "
rlRun " comm -23 $TmpDir /test_list $ref_file > $TmpDir /disable_list " # disable tests that are not included in the reference file
rlLogInfo "Testcase disabling ..."
while read file; do
mv " $file " " $file .disabled "
done <$TmpDir /disable_list
rlRun " cd $TmpDir /BUILD/gdb-*/gdb "
rlPhaseEnd
rlPhaseStartTest "run testsuite"
rlRun " su -c 'make check RUNTESTFLAGS=\" ${ RUNTESTFLAGS } \" |& tee $TmpDir /testsuite.log | grep -E \"^Running.+\.exp ... $\"; test \${PIPESTATUS[0]} -eq 0' $BUILD_USER "
rlRun " rlFileSubmit $TmpDir /testsuite.log testsuite.log "
rlRun "rlFileSubmit testsuite/gdb.sum gdb.sum"
rlRun "rlFileSubmit testsuite/gdb.log gdb.log"
rlLogInfo "`awk '/=== gdb Summary ===/,0' testsuite/gdb.sum`"
rlPhaseEnd
rlPhaseStartTest "evaluate results"
rlRun "tests_count=\$(grep -E '^PASS:' testsuite/gdb.sum | wc -l)"
[ " $tests_count " -ge " $TESTS_COUNT_MIN " ] && rlLogInfo " Test counter: $tests_count " || rlFail " Test counter $tests_count should be greater than or equal to $TESTS_COUNT_MIN "
rlRun " awk 'BEGIN { RS=\"Running /tmp/[^/]+/BUILD/gdb-[^/]+/gdb/testsuite/\" } /\sERROR:|\sFAIL:|\sKPASS:|\sUNRESOLVED:|\sXPASS:/ { print \$0 }' testsuite/gdb.sum > $TmpDir /error.log " # check for errors, unresolved testcases, unexpected failures and unexpected successes
if [ -s $TmpDir /error.log ] ; then
rlFail "Errors observed" ;
rlRun " rlFileSubmit $TmpDir /error.log error.log "
rlRun " awk 'BEGIN { RS=\"Running /tmp/[^/]+/BUILD/gdb-[^/]+/gdb/testsuite/\" } /\sERROR:|\sFAIL:|\sKPASS:|\sUNRESOLVED:|\sXPASS:/ { print \$1 }' testsuite/gdb.sum > $TmpDir /affected_testcases.log "
rlLogInfo " `echo 'Affected testcases:';cat $TmpDir /affected_testcases.log` "
rlRun " rlFileSubmit $TmpDir /affected_testcases.log affected_testcases.log "
else
rlPass "No errors observed"
fi
rlPhaseEnd
rlPhaseStartCleanup
rlRun " cat $TmpDir /core_pattern.bckp >/proc/sys/kernel/core_pattern "
rlRun "popd"
rlRun " rm -r $TmpDir "
[ " $del " = "yes" ] && rlRun " userdel -f $BUILD_USER "
rlPhaseEnd
rlJournalPrintText
rlJournalEnd