http2: write Transport bodies
Some polish and testing remains, but this should be the bulk of the
Transport work that was remaining.
There's one notable (but easy) TODO about sending WINDOW_UPDATE frames
every few hundred MB or so, but this is a checkpoint.
Updates golang/go#6891
Change-Id: Iced9850804bf2c069c75118895ee7c3750ba31b5
Reviewed-on: https://go-review.googlesource.com/16310
Reviewed-by: Blake Mizerany <blake.mizerany@gmail.com>
diff --git a/http2/transport_test.go b/http2/transport_test.go
index 7b62aa9..7bed140 100644
--- a/http2/transport_test.go
+++ b/http2/transport_test.go
@@ -165,3 +165,42 @@
t.Fatal("timeout")
}
}
+
+func TestTransportBody(t *testing.T) {
+ gotc := make(chan interface{}, 1)
+ st := newServerTester(t,
+ func(w http.ResponseWriter, r *http.Request) {
+ slurp, err := ioutil.ReadAll(r.Body)
+ if err != nil {
+ gotc <- err
+ } else {
+ gotc <- string(slurp)
+
+ }
+ },
+ optOnlyServer,
+ )
+ defer st.Close()
+
+ tr := &Transport{
+ InsecureTLSDial: true,
+ }
+ defer tr.CloseIdleConnections()
+ const body = "Some message"
+ req, err := http.NewRequest("POST", st.ts.URL, strings.NewReader(body))
+ if err != nil {
+ t.Fatal(err)
+ }
+ c := &http.Client{Transport: tr}
+ res, err := c.Do(req)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer res.Body.Close()
+ got := <-gotc
+ if err, ok := got.(error); ok {
+ t.Fatal(err)
+ } else if got.(string) != body {
+ t.Errorf("Read body = %q; want %q", got, body)
+ }
+}