]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: replace z_last_test hack with testing.Main
authorBrad Fitzpatrick <bradfitz@golang.org>
Mon, 22 Sep 2014 13:13:09 +0000 (09:13 -0400)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 22 Sep 2014 13:13:09 +0000 (09:13 -0400)
LGTM=adg
R=rsc, adg
CC=golang-codereviews
https://golang.org/cl/144240043

src/net/http/main_test.go [moved from src/net/http/z_last_test.go with 81% similarity]

similarity index 81%
rename from src/net/http/z_last_test.go
rename to src/net/http/main_test.go
index 5a0cc1198497eade1070d962b756c76a301a7537..9f1dfc3727214327c8ee762eb1c0ece77aa7223a 100644 (file)
@@ -5,7 +5,9 @@
 package http_test
 
 import (
+       "fmt"
        "net/http"
+       "os"
        "runtime"
        "sort"
        "strings"
@@ -13,6 +15,14 @@ import (
        "time"
 )
 
+func TestMain(m *testing.M) {
+       v := m.Run()
+       if v == 0 && goroutineLeaked() {
+               os.Exit(1)
+       }
+       os.Exit(v)
+}
+
 func interestingGoroutines() (gs []string) {
        buf := make([]byte, 2<<20)
        buf = buf[:runtime.Stack(buf, true)]
@@ -30,6 +40,7 @@ func interestingGoroutines() (gs []string) {
                        // These only show up with GOTRACEBACK=2; Issue 5005 (comment 28)
                        strings.Contains(stack, "runtime.goexit") ||
                        strings.Contains(stack, "created by runtime.gc") ||
+                       strings.Contains(stack, "net/http_test.interestingGoroutines") ||
                        strings.Contains(stack, "runtime.MHeap_Scavenger") {
                        continue
                }
@@ -40,10 +51,10 @@ func interestingGoroutines() (gs []string) {
 }
 
 // Verify the other tests didn't leave any goroutines running.
-// This is in a file named z_last_test.go so it sorts at the end.
-func TestGoroutinesRunning(t *testing.T) {
+func goroutineLeaked() bool {
        if testing.Short() {
-               t.Skip("not counting goroutines for leakage in -short mode")
+               // not counting goroutines for leakage in -short mode
+               return false
        }
        gs := interestingGoroutines()
 
@@ -54,13 +65,14 @@ func TestGoroutinesRunning(t *testing.T) {
                n++
        }
 
-       t.Logf("num goroutines = %d", n)
-       if n > 0 {
-               t.Error("Too many goroutines.")
-               for stack, count := range stackCount {
-                       t.Logf("%d instances of:\n%s", count, stack)
-               }
+       if n == 0 {
+               return false
+       }
+       fmt.Fprintf(os.Stderr, "Too many goroutines running after net/http test(s).\n")
+       for stack, count := range stackCount {
+               fmt.Fprintf(os.Stderr, "%d instances of:\n%s", count, stack)
        }
+       return true
 }
 
 func afterTest(t *testing.T) {