github.com/mdempsky/go@v0.0.0-20151201204031-5dd372bd1e70/src/net/http/httptest/server_test.go (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package httptest 6 7 import ( 8 "bufio" 9 "io/ioutil" 10 "net" 11 "net/http" 12 "testing" 13 ) 14 15 func TestServer(t *testing.T) { 16 ts := NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 17 w.Write([]byte("hello")) 18 })) 19 defer ts.Close() 20 res, err := http.Get(ts.URL) 21 if err != nil { 22 t.Fatal(err) 23 } 24 got, err := ioutil.ReadAll(res.Body) 25 if err != nil { 26 t.Fatal(err) 27 } 28 if string(got) != "hello" { 29 t.Errorf("got %q, want hello", string(got)) 30 } 31 } 32 33 // Issue 12781 34 func TestGetAfterClose(t *testing.T) { 35 ts := NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 36 w.Write([]byte("hello")) 37 })) 38 39 res, err := http.Get(ts.URL) 40 if err != nil { 41 t.Fatal(err) 42 } 43 got, err := ioutil.ReadAll(res.Body) 44 if err != nil { 45 t.Fatal(err) 46 } 47 if string(got) != "hello" { 48 t.Fatalf("got %q, want hello", string(got)) 49 } 50 51 ts.Close() 52 53 res, err = http.Get(ts.URL) 54 if err == nil { 55 body, _ := ioutil.ReadAll(res.Body) 56 t.Fatalf("Unexected response after close: %v, %v, %s", res.Status, res.Header, body) 57 } 58 } 59 60 func TestServerCloseBlocking(t *testing.T) { 61 ts := NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 62 w.Write([]byte("hello")) 63 })) 64 dial := func() net.Conn { 65 c, err := net.Dial("tcp", ts.Listener.Addr().String()) 66 if err != nil { 67 t.Fatal(err) 68 } 69 return c 70 } 71 72 // Keep one connection in StateNew (connected, but not sending anything) 73 cnew := dial() 74 defer cnew.Close() 75 76 // Keep one connection in StateIdle (idle after a request) 77 cidle := dial() 78 defer cidle.Close() 79 cidle.Write([]byte("HEAD / HTTP/1.1\r\nHost: foo\r\n\r\n")) 80 _, err := http.ReadResponse(bufio.NewReader(cidle), nil) 81 if err != nil { 82 t.Fatal(err) 83 } 84 85 ts.Close() // test we don't hang here forever. 86 }