diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2016-02-26 13:02:42 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2016-04-27 08:08:18 +0000 |
| commit | 6dfba5c7ce867583cbcea9da09dceacd2633bacc (patch) | |
| tree | 92fe2b1e5bbb380349ed2263e826475d25f5a317 /src/runtime/race/testdata | |
| parent | 102cf2ae0321775eef2d36d7c4258b740fe92458 (diff) | |
| download | go-6dfba5c7ce867583cbcea9da09dceacd2633bacc.tar.xz | |
runtime/race: improve TestNoRaceIOHttp test
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>
Diffstat (limited to 'src/runtime/race/testdata')
| -rw-r--r-- | src/runtime/race/testdata/io_test.go | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/src/runtime/race/testdata/io_test.go b/src/runtime/race/testdata/io_test.go index 1b3ee3822b..30a121bee4 100644 --- a/src/runtime/race/testdata/io_test.go +++ b/src/runtime/race/testdata/io_test.go @@ -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++ } |
