diff options
| author | Brad Fitzpatrick <bradfitz@golang.org> | 2011-05-24 09:02:01 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2011-05-24 09:02:01 -0700 |
| commit | b32ad8bff5be1170e044d6a7a9e34f56e1990ce9 (patch) | |
| tree | 0e25943499d41df3b92e6a2db1d1af6eeba09902 /src/pkg/http | |
| parent | 3933cb2371d6a0ffbd5d6bb47435bde4006fb917 (diff) | |
| download | go-b32ad8bff5be1170e044d6a7a9e34f56e1990ce9.tar.xz | |
http: Client test for streaming responses (no code changes)
I had a report that this was broken. It seems fine.
I think the reporter was just never flushing their response
headers. If I omit the test server's initial Flush I get the
same behavior as reported. (a hang at Client.Get)
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/4552062
Diffstat (limited to 'src/pkg/http')
| -rw-r--r-- | src/pkg/http/client_test.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/pkg/http/client_test.go b/src/pkg/http/client_test.go index 0869015b38..ba14e4e4d3 100644 --- a/src/pkg/http/client_test.go +++ b/src/pkg/http/client_test.go @@ -10,6 +10,7 @@ import ( "fmt" . "http" "http/httptest" + "io" "io/ioutil" "os" "strconv" @@ -139,3 +140,41 @@ func TestRedirects(t *testing.T) { t.Errorf("with redirects forbidden, expected error %q, got %q", e, g) } } + +func TestStreamingGet(t *testing.T) { + say := make(chan string) + ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) { + w.(Flusher).Flush() + for str := range say { + w.Write([]byte(str)) + w.(Flusher).Flush() + } + })) + defer ts.Close() + + c := &Client{} + res, err := c.Get(ts.URL) + if err != nil { + t.Fatal(err) + } + var buf [10]byte + for _, str := range []string{"i", "am", "also", "known", "as", "comet"} { + say <- str + n, err := io.ReadFull(res.Body, buf[0:len(str)]) + if err != nil { + t.Fatalf("ReadFull on %q: %v", str, err) + } + if n != len(str) { + t.Fatalf("Receiving %q, only read %d bytes", str, n) + } + got := string(buf[0:n]) + if got != str { + t.Fatalf("Expected %q, got %q", str, got) + } + } + close(say) + _, err = io.ReadFull(res.Body, buf[0:1]) + if err != os.EOF { + t.Fatalf("at end expected EOF, got %v", err) + } +} |
