re PR go/48242 (gotest needs timeout mechanism)

PR go/48242
libgo: Add timeout for tests.

From-SVN: r171803
This commit is contained in:
Ian Lance Taylor 2011-03-31 22:36:10 +00:00
parent c9103dde96
commit 4bce572db2
2 changed files with 35 additions and 1 deletions

View File

@ -61,6 +61,7 @@ var (
memProfile = flag.String("test.memprofile", "", "write a memory profile to the named file after execution") memProfile = flag.String("test.memprofile", "", "write a memory profile to the named file after execution")
memProfileRate = flag.Int("test.memprofilerate", 0, "if >=0, sets runtime.MemProfileRate") memProfileRate = flag.Int("test.memprofilerate", 0, "if >=0, sets runtime.MemProfileRate")
cpuProfile = flag.String("test.cpuprofile", "", "write a cpu profile to the named file during execution") cpuProfile = flag.String("test.cpuprofile", "", "write a cpu profile to the named file during execution")
timeout = flag.Int64("test.timeout", 0, "if > 0, sets time limit for tests in seconds")
) )
// Short reports whether the -test.short flag is set. // Short reports whether the -test.short flag is set.
@ -158,7 +159,9 @@ func Main(matchString func(pat, str string) (bool, os.Error), tests []InternalTe
flag.Parse() flag.Parse()
before() before()
startAlarm()
RunTests(matchString, tests) RunTests(matchString, tests)
stopAlarm()
RunBenchmarks(matchString, benchmarks) RunBenchmarks(matchString, benchmarks)
after() after()
} }
@ -241,3 +244,24 @@ func after() {
f.Close() f.Close()
} }
} }
var timer *time.Timer
// startAlarm starts an alarm if requested.
func startAlarm() {
if *timeout > 0 {
timer = time.AfterFunc(*timeout*1e9, alarm)
}
}
// stopAlarm turns off the alarm.
func stopAlarm() {
if *timeout > 0 {
timer.Stop()
}
}
// alarm is called if the timeout expires.
func alarm() {
panic("test timed out")
}

View File

@ -32,6 +32,7 @@ loop=true
keep=false keep=false
prefix= prefix=
dejagnu=no dejagnu=no
timeout=60
while $loop; do while $loop; do
case "x$1" in case "x$1" in
x--srcdir) x--srcdir)
@ -83,6 +84,15 @@ while $loop; do
dejagnu=`echo $1 | sed -e 's/^--dejagnu=//'` dejagnu=`echo $1 | sed -e 's/^--dejagnu=//'`
shift shift
;; ;;
x--timeout)
timeout=$2
shift
shift
;;
x--timeout=*)
timeout=`echo $1 | sed -e 's/^--timeout=//'`
shift
;;
x-*) x-*)
loop=false loop=false
;; ;;
@ -357,7 +367,7 @@ case "x$dejagnu" in
xno) xno)
${GC} -g -c _testmain.go ${GC} -g -c _testmain.go
${GL} *.o ${GOLIBS} ${GL} *.o ${GOLIBS}
./a.out -test.short "$@" ./a.out -test.short -test.timeout=$timeout "$@"
;; ;;
xyes) xyes)
rm -rf ../testsuite/*.o rm -rf ../testsuite/*.o