http2: another Transport body-writing bug fix, and more tests
Change-Id: I700832c477a38ab11da39a382186bdc7d3d3186e
Reviewed-on: https://go-review.googlesource.com/16445
Reviewed-by: Blake Mizerany <blake.mizerany@gmail.com>
diff --git a/http2/transport_test.go b/http2/transport_test.go
index 790a061..6b23563 100644
--- a/http2/transport_test.go
+++ b/http2/transport_test.go
@@ -7,8 +7,10 @@
import (
"crypto/tls"
"flag"
+ "fmt"
"io"
"io/ioutil"
+ "math/rand"
"net"
"net/http"
"net/url"
@@ -206,6 +208,15 @@
}
}
+func randString(n int) string {
+ rnd := rand.New(rand.NewSource(int64(n)))
+ b := make([]byte, n)
+ for i := range b {
+ b[i] = byte(rnd.Intn(256))
+ }
+ return string(b)
+}
+
var bodyTests = []struct {
body string
noContentLen bool
@@ -216,6 +227,15 @@
{body: "", noContentLen: true},
{body: strings.Repeat("a", 1<<20), noContentLen: true},
{body: strings.Repeat("a", 1<<20)},
+ {body: randString(16<<10 - 1)},
+ {body: randString(16 << 10)},
+ {body: randString(16<<10 + 1)},
+ {body: randString(512<<10 - 1)},
+ {body: randString(512 << 10)},
+ {body: randString(512<<10 + 1)},
+ {body: randString(1<<20 - 1)},
+ {body: randString(1 << 20)},
+ {body: randString(1<<20 + 2)},
}
func TestTransportBody(t *testing.T) {
@@ -227,7 +247,6 @@
gotc <- err
} else {
gotc <- string(slurp)
-
}
},
optOnlyServer,
@@ -256,11 +275,20 @@
if err, ok := got.(error); ok {
t.Fatalf("#%d: %v", i, err)
} else if got.(string) != tt.body {
- t.Errorf("#%d: Read body = %q; want %q", i, got, tt.body)
+ got := got.(string)
+ t.Errorf("#%d: Read body mismatch.\n got: %q (len %d)\nwant: %q (len %d)", i, shortString(got), len(got), shortString(tt.body), len(tt.body))
}
}
}
+func shortString(v string) string {
+ const maxLen = 100
+ if len(v) <= maxLen {
+ return v
+ }
+ return fmt.Sprintf("%v[...%d bytes omitted...]%v", v[:maxLen/2], len(v)-maxLen, v[len(v)-maxLen/2:])
+}
+
func TestTransportDialTLS(t *testing.T) {
var mu sync.Mutex // guards following
var gotReq, didDial bool