1
0
mirror of https://github.com/golang/go synced 2024-11-21 21:44:40 -07:00

http: make tests quiet, fixing a test race

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/4754044
This commit is contained in:
Brad Fitzpatrick 2011-07-17 15:46:10 -07:00
parent 6075206904
commit 8b33c7b5be

View File

@ -110,7 +110,6 @@ func TestConsumingBodyOnNextConn(t *testing.T) {
listener := &oneConnListener{conn} listener := &oneConnListener{conn}
handler := func(res ResponseWriter, req *Request) { handler := func(res ResponseWriter, req *Request) {
reqNum++ reqNum++
t.Logf("Got request #%d: %v", reqNum, req)
ch <- req ch <- req
} }
@ -119,7 +118,6 @@ func TestConsumingBodyOnNextConn(t *testing.T) {
}() }()
var req *Request var req *Request
t.Log("Waiting for first request.")
req = <-ch req = <-ch
if req == nil { if req == nil {
t.Fatal("Got nil first request.") t.Fatal("Got nil first request.")
@ -129,7 +127,6 @@ func TestConsumingBodyOnNextConn(t *testing.T) {
req.Method, "POST") req.Method, "POST")
} }
t.Log("Waiting for second request.")
req = <-ch req = <-ch
if req == nil { if req == nil {
t.Fatal("Got nil first request.") t.Fatal("Got nil first request.")
@ -139,7 +136,6 @@ func TestConsumingBodyOnNextConn(t *testing.T) {
req.Method, "POST") req.Method, "POST")
} }
t.Log("Waiting for EOF.")
if serveerr := <-servech; serveerr != os.EOF { if serveerr := <-servech; serveerr != os.EOF {
t.Errorf("Serve returned %q; expected EOF", serveerr) t.Errorf("Serve returned %q; expected EOF", serveerr)
} }
@ -788,7 +784,24 @@ func TestZeroLengthPostAndResponse(t *testing.T) {
} }
func TestHandlerPanic(t *testing.T) { func TestHandlerPanic(t *testing.T) {
log.SetOutput(ioutil.Discard) // is noisy otherwise // Unlike the other tests that set the log output to ioutil.Discard
// to quiet the output, this test uses a pipe. The pipe serves three
// purposes:
//
// 1) The log.Print from the http server (generated by the caught
// panic) will go to the pipe instead of stderr, making the
// output quiet.
//
// 2) We read from the pipe to verify that the handler
// actually caught the panic and logged something.
//
// 3) The blocking Read call prevents this TestHandlerPanic
// function from exiting before the HTTP server handler
// finishes crashing. If this text function exited too
// early (and its defer log.SetOutput(os.Stderr) ran),
// then the crash output could spill into the next test.
pr, pw := io.Pipe()
log.SetOutput(pw)
defer log.SetOutput(os.Stderr) defer log.SetOutput(os.Stderr)
ts := httptest.NewServer(HandlerFunc(func(ResponseWriter, *Request) { ts := httptest.NewServer(HandlerFunc(func(ResponseWriter, *Request) {
@ -799,6 +812,25 @@ func TestHandlerPanic(t *testing.T) {
if err == nil { if err == nil {
t.Logf("expected an error") t.Logf("expected an error")
} }
// Do a blocking read on the log output pipe so its logging
// doesn't bleed into the next test. But wait only 5 seconds
// for it.
done := make(chan bool)
go func() {
buf := make([]byte, 1024)
_, err := pr.Read(buf)
if err != nil {
t.Fatal(err)
}
done <- true
}()
select {
case <-done:
return
case <-time.After(5e9):
t.Error("expected server handler to log an error")
}
} }
func TestNoDate(t *testing.T) { func TestNoDate(t *testing.T) {