OSDN Git Service

PR go/48242
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 Mar 2011 22:36:10 +0000 (22:36 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 31 Mar 2011 22:36:10 +0000 (22:36 +0000)
libgo: Add timeout for tests.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@171803 138bc75d-0d04-0410-961f-82ee72b054a4

libgo/go/testing/testing.go
libgo/testsuite/gotest

index d189390..6d303cc 100644 (file)
@@ -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")
+}
index bcd7251..517c0e9 100755 (executable)
@@ -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