mirror of
https://github.com/golang/go
synced 2024-11-13 17:00:22 -07:00
http: cancel test timers; don't t.Fatalf in other goroutines
R=rsc CC=golang-dev https://golang.org/cl/5228041
This commit is contained in:
parent
cab53c899c
commit
e63fcd613f
@ -356,18 +356,17 @@ func TestIdentityResponse(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("error writing: %v", err)
|
t.Fatalf("error writing: %v", err)
|
||||||
}
|
}
|
||||||
// The next ReadAll will hang for a failing test, so use a Timer instead
|
|
||||||
// to fail more traditionally
|
// The ReadAll will hang for a failing test, so use a Timer to
|
||||||
timer := time.AfterFunc(2e9, func() {
|
// fail explicitly.
|
||||||
t.Fatalf("Timeout expired in ReadAll.")
|
goTimeout(t, 2e9, func() {
|
||||||
|
got, _ := ioutil.ReadAll(conn)
|
||||||
|
expectedSuffix := "\r\n\r\ntoo short"
|
||||||
|
if !strings.HasSuffix(string(got), expectedSuffix) {
|
||||||
|
t.Errorf("Expected output to end with %q; got response body %q",
|
||||||
|
expectedSuffix, string(got))
|
||||||
|
}
|
||||||
})
|
})
|
||||||
defer timer.Stop()
|
|
||||||
got, _ := ioutil.ReadAll(conn)
|
|
||||||
expectedSuffix := "\r\n\r\ntoo short"
|
|
||||||
if !strings.HasSuffix(string(got), expectedSuffix) {
|
|
||||||
t.Fatalf("Expected output to end with %q; got response body %q",
|
|
||||||
expectedSuffix, string(got))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func testTcpConnectionCloses(t *testing.T, req string, h Handler) {
|
func testTcpConnectionCloses(t *testing.T, req string, h Handler) {
|
||||||
@ -549,14 +548,13 @@ func TestTLSHandshakeTimeout(t *testing.T) {
|
|||||||
t.Fatalf("Dial: %v", err)
|
t.Fatalf("Dial: %v", err)
|
||||||
}
|
}
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
timer := time.AfterFunc(10e9, func() { t.Fatalf("Timeout") })
|
goTimeout(t, 10e9, func() {
|
||||||
defer timer.Stop()
|
var buf [1]byte
|
||||||
|
n, err := conn.Read(buf[:])
|
||||||
var buf [1]byte
|
if err == nil || n != 0 {
|
||||||
n, err := conn.Read(buf[:])
|
t.Errorf("Read = %d, %v; want an error and no bytes", n, err)
|
||||||
if err == nil || n != 0 {
|
}
|
||||||
t.Errorf("Read = %d, %v; want an error and no bytes", n, err)
|
})
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTLSServer(t *testing.T) {
|
func TestTLSServer(t *testing.T) {
|
||||||
@ -580,25 +578,29 @@ func TestTLSServer(t *testing.T) {
|
|||||||
t.Fatalf("Dial: %v", err)
|
t.Fatalf("Dial: %v", err)
|
||||||
}
|
}
|
||||||
defer idleConn.Close()
|
defer idleConn.Close()
|
||||||
time.AfterFunc(10e9, func() { t.Fatalf("Timeout") })
|
goTimeout(t, 10e9, func() {
|
||||||
|
if !strings.HasPrefix(ts.URL, "https://") {
|
||||||
if !strings.HasPrefix(ts.URL, "https://") {
|
t.Errorf("expected test TLS server to start with https://, got %q", ts.URL)
|
||||||
t.Fatalf("expected test TLS server to start with https://, got %q", ts.URL)
|
return
|
||||||
}
|
}
|
||||||
res, err := Get(ts.URL)
|
res, err := Get(ts.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Error(err)
|
||||||
}
|
return
|
||||||
if res == nil {
|
}
|
||||||
t.Fatalf("got nil Response")
|
if res == nil {
|
||||||
}
|
t.Errorf("got nil Response")
|
||||||
defer res.Body.Close()
|
return
|
||||||
if res.Header.Get("X-TLS-Set") != "true" {
|
}
|
||||||
t.Errorf("expected X-TLS-Set response header")
|
defer res.Body.Close()
|
||||||
}
|
if res.Header.Get("X-TLS-Set") != "true" {
|
||||||
if res.Header.Get("X-TLS-HandshakeComplete") != "true" {
|
t.Errorf("expected X-TLS-Set response header")
|
||||||
t.Errorf("expected X-TLS-HandshakeComplete header")
|
return
|
||||||
}
|
}
|
||||||
|
if res.Header.Get("X-TLS-HandshakeComplete") != "true" {
|
||||||
|
t.Errorf("expected X-TLS-HandshakeComplete header")
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
type serverExpectTest struct {
|
type serverExpectTest struct {
|
||||||
@ -1019,6 +1021,21 @@ func TestClientWriteShutdown(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// goTimeout runs f, failing t if f takes more than ns to complete.
|
||||||
|
func goTimeout(t *testing.T, ns int64, f func()) {
|
||||||
|
ch := make(chan bool, 2)
|
||||||
|
timer := time.AfterFunc(ns, func() {
|
||||||
|
t.Errorf("Timeout expired after %d ns", ns)
|
||||||
|
ch <- true
|
||||||
|
})
|
||||||
|
defer timer.Stop()
|
||||||
|
go func() {
|
||||||
|
defer func() { ch <- true }()
|
||||||
|
f()
|
||||||
|
}()
|
||||||
|
<-ch
|
||||||
|
}
|
||||||
|
|
||||||
type errorListener struct {
|
type errorListener struct {
|
||||||
errs []os.Error
|
errs []os.Error
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user