From 4bce572db2a654c9f17bb798b8469df11d3147e3 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 31 Mar 2011 22:36:10 +0000 Subject: re PR go/48242 (gotest needs timeout mechanism) PR go/48242 libgo: Add timeout for tests. From-SVN: r171803 --- libgo/go/testing/testing.go | 24 ++++++++++++++++++++++++ libgo/testsuite/gotest | 12 +++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) (limited to 'libgo') diff --git a/libgo/go/testing/testing.go b/libgo/go/testing/testing.go index d189390..6d303cc 100644 --- a/libgo/go/testing/testing.go +++ b/libgo/go/testing/testing.go @@ -61,6 +61,7 @@ var ( 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") 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. @@ -158,7 +159,9 @@ func Main(matchString func(pat, str string) (bool, os.Error), tests []InternalTe flag.Parse() before() + startAlarm() RunTests(matchString, tests) + stopAlarm() RunBenchmarks(matchString, benchmarks) after() } @@ -241,3 +244,24 @@ func after() { 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") +} diff --git a/libgo/testsuite/gotest b/libgo/testsuite/gotest index bcd7251..517c0e9 100755 --- a/libgo/testsuite/gotest +++ b/libgo/testsuite/gotest @@ -32,6 +32,7 @@ loop=true keep=false prefix= dejagnu=no +timeout=60 while $loop; do case "x$1" in x--srcdir) @@ -83,6 +84,15 @@ while $loop; do dejagnu=`echo $1 | sed -e 's/^--dejagnu=//'` shift ;; + x--timeout) + timeout=$2 + shift + shift + ;; + x--timeout=*) + timeout=`echo $1 | sed -e 's/^--timeout=//'` + shift + ;; x-*) loop=false ;; @@ -357,7 +367,7 @@ case "x$dejagnu" in xno) ${GC} -g -c _testmain.go ${GL} *.o ${GOLIBS} - ./a.out -test.short "$@" + ./a.out -test.short -test.timeout=$timeout "$@" ;; xyes) rm -rf ../testsuite/*.o -- cgit v1.1