From: Thomas Rast <trast@student.ethz.ch>
To: <git@vger.kernel.org>
Cc: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: Re: [PATCH/RFC] tests: WIP Infrastructure for Git smoke testing
Date: Fri, 30 Jul 2010 00:15:56 +0200 [thread overview]
Message-ID: <201007300015.57045.trast@student.ethz.ch> (raw)
In-Reply-To: <1280438455-16255-1-git-send-email-avarab@gmail.com>
Ævar Arnfjörð Bjarmason wrote:
>
> Currently we only notice bugs in the test suite when it's run
> manually. Bugs in Git that only occur on obscure platforms or setups
> that the core developers aren't using may thus go unnoticed until the
> bug makes it into a release.
BTW, below is the script I have devised to automatically run the tests
under valgrind and then bisect any offenders. (It keeps exposing odd
test failures and stealing my time tracking them down...)
It gives fairly good results, but since it's also rather kludgy I want
to test and improve it a bit more before shooting for contrib (if
anything).
Note that running this will take on the order of hours at least.
---- 8< ----
#!/bin/sh
MAILTO=tr@thomasrast.ch
branch="${1:-next}"
logfile="$(pwd)/bisection-log-$$"
export DIFF=diff # stupid bug
die () {
(echo "Error message: $*"; echo '-----'; cat "$logfile") |
mail -s "Testing $branch: die() called!" "$MAILTO"
echo "fatal: $*" >&2
exit 1
}
git fetch origin 2>&1 | tee "$logfile" || die "fetch failed"
# test if we've already done this
test "$(git rev-parse last_known_good_$branch)" = "$(git rev-parse origin/$branch)" && exit
git checkout -f origin/"$branch" 2>&1 | tee "$logfile" || die "checkout failed (can't happen)"
results="test-results.$(git describe)"
mkdir "$results"
make -j12 2>&1 | tee -a "$logfile" || die "initial compilation failed?"
make -k -j8 test 2>&1 | tee -a "$logfile"
if [ ! -d t/"test-results" ]; then
mail -s "Valgrind-tested $branch: all good!" "$MAILTO" < "$logfile"
git tag -f last_known_good_$branch origin/$branch
rm "$logfile"
exit
fi
cd t/
cp -a test-results "$results"
( cd $results && perl -i -ne 'print unless /^==.*execve/i' *.out )
failing_normally=$(cd "$results" && grep -L '^0$' *.exit)
failing_valgrind=$(cd "$results" && grep -lE '^==[0-9]+==' *.out)
cd ..
echo "failed (normal):" $failing_normally | tee -a "$logfile"
echo "failed (valgrind):" $failing_valgrind | tee -a "$logfile"
if [ -z "$failing_normally" -a -z "$failing_valgrind" ]; then
mail -s "Valgrind-tested $branch: all good!" "$MAILTO" < "$logfile"
git tag -f last_known_good_$branch origin/$branch
rm "$logfile"
exit
fi
mail -s "Valgrind-testing $branch: starting test bisection" "$MAILTO" < "$logfile"
for test_out in $failing_valgrind; do
test="${test_out%.out}"
echo "bisecting valgrind-failing test $test"
git bisect start > t/"$results"/$test.bisect 2>&1
git bisect good last_known_good_pu last_known_good_next 2>&1 | tee t/"$results"/$test.bisect
git bisect bad origin/$branch 2>&1 | tee -a t/"$results"/$test.bisect
git bisect run sh -c "test ! -f t/$test.sh || { make -j12 && cd t && ./$test.sh --valgrind --tee -i && ! grep -E '^==[0-9]+==' test-results/$test.out | grep -vi execve; }" 2>&1 | tee -a t/"$results"/$test.bisect
git bisect log 2>&1 | tee -a t/"$results"/$test.bisect
git bisect reset
mail -s "Bisection results for $test (valgrind)" "$MAILTO" < t/"$results"/$test.bisect
done
for test_out in $failing_normally; do
test="${test_out%.exit}"
case "$failing_valgrind" in
*$test.out*)
continue
;;
esac
echo "bisecting failing test $test"
git bisect start 2>&1 | tee t/"$results"/$test.bisect 2>&1
git bisect good last_known_good_pu last_known_good_pu 2>&1 | tee -a t/"$results"/$test.bisect 2>&1
git bisect bad origin/$branch 2>&1 | tee -a t/"$results"/$test.bisect 2>&1
git bisect run sh -c "test ! -f t/$test.sh || { make -j12 && cd t && ./$test.sh --tee -i; }" 2>&1 | tee -a t/"$results"/$test.bisect 2>&1
git bisect log | tee -a t/"$results"/$test.bisect
git bisect reset
mail -s "Bisection results for $test" "$MAILTO" < t/"$results"/$test.bisect
done
rm "$logfile"
---- >8 ----
--
Thomas Rast
trast@{inf,student}.ethz.ch
next prev parent reply other threads:[~2010-07-29 22:16 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-29 21:20 [PATCH/RFC] tests: WIP Infrastructure for Git smoke testing Ævar Arnfjörð Bjarmason
2010-07-29 22:11 ` Thomas Rast
2010-07-29 22:26 ` Ævar Arnfjörð Bjarmason
2010-08-08 13:42 ` Heiko Voigt
2010-08-08 14:54 ` Ævar Arnfjörð Bjarmason
2010-08-09 19:56 ` Heiko Voigt
2010-07-29 22:15 ` Thomas Rast [this message]
2010-07-30 12:34 ` Jeff King
2010-07-30 16:13 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201007300015.57045.trast@student.ethz.ch \
--to=trast@student.ethz.ch \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).