]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/race: improve TestNoRaceIOHttp test
authorDmitry Vyukov <dvyukov@google.com>
Fri, 26 Feb 2016 12:02:42 +0000 (13:02 +0100)
committerDmitry Vyukov <dvyukov@google.com>
Wed, 27 Apr 2016 08:08:18 +0000 (08:08 +0000)
TestNoRaceIOHttp does all kinds of bad things:
1. Binds to a fixed port, so concurrent tests fail.
2. Registers HTTP handler multiple times, so repeated tests fail.
3. Relies on sleep to wait for listen.

Fix all of that.

Change-Id: I1210b7797ef5e92465b37dc407246d92a2a24fe8
Reviewed-on: https://go-review.googlesource.com/19953
Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/runtime/race/testdata/io_test.go

index 1b3ee3822b437de44cd2ace554a5dfa1d30a4fc6..30a121bee461ea239a0b1c02aa4f34d926566b96 100644 (file)
@@ -7,9 +7,11 @@ package race_test
 import (
        "fmt"
        "io/ioutil"
+       "net"
        "net/http"
        "os"
        "path/filepath"
+       "sync"
        "testing"
        "time"
 )
@@ -41,29 +43,34 @@ func TestNoRaceIOFile(t *testing.T) {
        _ = x
 }
 
+var (
+       regHandler  sync.Once
+       handlerData int
+)
+
 func TestNoRaceIOHttp(t *testing.T) {
-       x := 0
-       go func() {
+       regHandler.Do(func() {
                http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
-                       x = 41
+                       handlerData++
                        fmt.Fprintf(w, "test")
-                       x = 42
+                       handlerData++
                })
-               err := http.ListenAndServe("127.0.0.1:23651", nil)
-               if err != nil {
-                       t.Fatalf("http.ListenAndServe: %v", err)
-               }
-       }()
-       time.Sleep(1e7)
-       x = 1
-       _, err := http.Get("http://127.0.0.1:23651")
+       })
+       ln, err := net.Listen("tcp", "127.0.0.1:0")
+       if err != nil {
+               t.Fatalf("net.Listen: %v", err)
+       }
+       defer ln.Close()
+       go http.Serve(ln, nil)
+       handlerData++
+       _, err = http.Get("http://" + ln.Addr().String())
        if err != nil {
                t.Fatalf("http.Get: %v", err)
        }
-       x = 2
-       _, err = http.Get("http://127.0.0.1:23651")
+       handlerData++
+       _, err = http.Get("http://" + ln.Addr().String())
        if err != nil {
                t.Fatalf("http.Get: %v", err)
        }
-       x = 3
+       handlerData++
 }