This patch to libgo adds a timeout for the libgo tests. The default is 60 seconds. It can be changed by an argument to gotest, which would normally be used as, e.g., make GOTESTFLAGS="--timeout=120" check-target-libgo
Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline. This is PR go/48242. Ian
diff -r 86dce29de0ad libgo/go/testing/testing.go --- a/libgo/go/testing/testing.go Thu Mar 31 15:18:20 2011 -0700 +++ b/libgo/go/testing/testing.go Thu Mar 31 15:33:09 2011 -0700 @@ -61,6 +61,7 @@ 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 @@ flag.Parse() before() + startAlarm() RunTests(matchString, tests) + stopAlarm() RunBenchmarks(matchString, benchmarks) after() } @@ -241,3 +244,24 @@ 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 -r 86dce29de0ad libgo/testsuite/gotest --- a/libgo/testsuite/gotest Thu Mar 31 15:18:20 2011 -0700 +++ b/libgo/testsuite/gotest Thu Mar 31 15:33:09 2011 -0700 @@ -32,6 +32,7 @@ keep=false prefix= dejagnu=no +timeout=60 while $loop; do case "x$1" in x--srcdir) @@ -83,6 +84,15 @@ 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 @@ 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