[Users] Failing test cases
Ian Hinder
ian.hinder at aei.mpg.de
Sat Dec 3 14:39:19 CST 2011
On 2 Dec 2011, at 10:51, Barry Wardell wrote:
> On Fri, Dec 2, 2011 at 9:14 AM, Ian Hinder <ian.hinder at aei.mpg.de> wrote:
> I have performed a bisection search of the history of the ET between those two dates, and have identified the following commits to McLachlan as the culprit for the first failure of RotatingSymmetry180/KerrSchild-rotating-180.par:
>
> This sounds like a very convenient way of tracking down regressions. Would you mind giving a little more detail about how you automated it in case someone else wants to do the same in the future?
Sure. I first used
git bisect start <bad-commit> <good-commit>
which puts git into "bisection mode". I then used
git bisect run findfail.sh checkpointML.par 1
This checks out a commit to test and runs the findfail.sh script, using its exit code to figure out if the test passed, failed, or could not be run (e.g. if there was a build failure). It then checks out another commit and repeats until it has found the which first caused the test to fail, and reports that commit.
findfail.sh is outlined below. It builds the currently checked-out source tree and then runs a single test, making sure that the exit code is appropriate for "git-bisect run". This isn't the exact script I used, so it might not work directly, but the idea is there.
There were about 20 commits in the range, and the bisection search took about 5 iterations. The ET build takes about 10 minutes on a Datura node, so overall it took about an hour to find the regression.
#!/bin/bash
test=$1
procs=$2
# Check out all the submodules to the commits specified in the super-repo
git submodule update -N
# Find the hash of the current commit
commit=$(git rev-parse HEAD)
# Construct a configuration name based on this hash
config=findfail_$commit
# Build this configuration unless it has been already built
if [ ! -r exe/cactus_$config ]; then
if ! simfactory/bin/sim build $config --thornlist manifest/einsteintoolkit.th; then
echo "Build failure - skipping this commit"
# Mark this run as "skipped"; i.e. untestable. 125 is a special exit code used by git bisect run for this
exit 125
fi
else
echo "Using existing executable for $config"
fi
# Make up a unique ID for this simulation
id=$(uuidgen)
simname=findfail_$id
# Run the test
simfactory/bin/sim create-run --config $config $simname --testsuite --select-tests $test --procs $procs
summary=~/simulations/$simname/output-0000/TEST/$config/summary.log
if [ ! -r $summary ]; then
echo "Summary log does not exist - aborting bisection"
exit 200
fi
if grep "Number of tests passed *-> *1" $summary; then
echo "Good"
exit 0
elif
grep "Number of tests passed *-> *0" $summary; then
echo "Bad"
exit 1
else
echo "Test did not run correctly - aborting bisection"
exit 200
fi
--
Ian Hinder
http://numrel.aei.mpg.de/people/hinder
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.einsteintoolkit.org/pipermail/users/attachments/20111203/ce15544f/attachment.html
More information about the Users
mailing list