aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/race/testdata
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2016-02-26 13:02:42 +0100
committerDmitry Vyukov <dvyukov@google.com>2016-04-27 08:08:18 +0000
commit6dfba5c7ce867583cbcea9da09dceacd2633bacc (patch)
tree92fe2b1e5bbb380349ed2263e826475d25f5a317 /src/runtime/race/testdata
parent102cf2ae0321775eef2d36d7c4258b740fe92458 (diff)
downloadgo-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.go37
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++
}