Skip to content

Commit ecf7fda

Browse files
neildgopherbot
authored andcommitted
http2: deflake TestTransportMaxFrameReadSize
Rewrite this test to examine the SETTINGS frame sent by the Transport directly, rather than poking around in the Server internals to find the sent value. Fixes golang/go#56806 Change-Id: I47859352a14b7120ef88fce5bd000716b9abdad7 Reviewed-on: https://go-review.googlesource.com/c/net/+/451775 Reviewed-by: Bryan Mills <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Run-TryBot: Damien Neil <[email protected]> Auto-Submit: Damien Neil <[email protected]>
1 parent 0833b63 commit ecf7fda

File tree

1 file changed

+43
-62
lines changed

1 file changed

+43
-62
lines changed

http2/transport_test.go

Lines changed: 43 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -741,12 +741,13 @@ func (fw flushWriter) Write(p []byte) (n int, err error) {
741741
}
742742

743743
type clientTester struct {
744-
t *testing.T
745-
tr *Transport
746-
sc, cc net.Conn // server and client conn
747-
fr *Framer // server's framer
748-
client func() error
749-
server func() error
744+
t *testing.T
745+
tr *Transport
746+
sc, cc net.Conn // server and client conn
747+
fr *Framer // server's framer
748+
settings *SettingsFrame
749+
client func() error
750+
server func() error
750751
}
751752

752753
func newClientTester(t *testing.T) *clientTester {
@@ -809,9 +810,9 @@ func (ct *clientTester) greet(settings ...Setting) {
809810
if err != nil {
810811
ct.t.Fatalf("Reading client settings frame: %v", err)
811812
}
812-
if sf, ok := f.(*SettingsFrame); !ok {
813+
var ok bool
814+
if ct.settings, ok = f.(*SettingsFrame); !ok {
813815
ct.t.Fatalf("Wanted client settings frame; got %v", f)
814-
_ = sf // stash it away?
815816
}
816817
if err := ct.fr.WriteSettings(settings...); err != nil {
817818
ct.t.Fatal(err)
@@ -3998,62 +3999,42 @@ func TestTransportResponseDataBeforeHeaders(t *testing.T) {
39983999
ct.run()
39994000
}
40004001

4001-
// Test that the server received values are in range.
40024002
func TestTransportMaxFrameReadSize(t *testing.T) {
4003-
st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
4004-
}, func(s *Server) {
4005-
s.MaxConcurrentStreams = 1
4006-
})
4007-
defer st.Close()
4008-
tr := &Transport{
4009-
TLSClientConfig: tlsConfigInsecure,
4010-
MaxReadFrameSize: 64000,
4011-
}
4012-
defer tr.CloseIdleConnections()
4013-
4014-
req, err := http.NewRequest("GET", st.ts.URL, nil)
4015-
if err != nil {
4016-
t.Fatal(err)
4017-
}
4018-
res, err := tr.RoundTrip(req)
4019-
if err != nil {
4020-
t.Fatal(err)
4021-
}
4022-
if got, want := res.StatusCode, 200; got != want {
4023-
t.Errorf("StatusCode = %v; want %v", got, want)
4024-
}
4025-
if res != nil && res.Body != nil {
4026-
res.Body.Close()
4027-
}
4028-
// Test that maxFrameReadSize() matches the requested size.
4029-
if got, want := tr.maxFrameReadSize(), uint32(64000); got != want {
4030-
t.Errorf("maxFrameReadSize = %v; want %v", got, want)
4031-
}
4032-
// Test that server receives the requested size.
4033-
if got, want := st.sc.maxFrameSize, int32(64000); got != want {
4034-
t.Errorf("maxFrameReadSize = %v; want %v", got, want)
4035-
}
4036-
4037-
// test for minimum frame read size
4038-
tr = &Transport{
4039-
TLSClientConfig: tlsConfigInsecure,
4040-
MaxReadFrameSize: 1024,
4041-
}
4042-
4043-
if got, want := tr.maxFrameReadSize(), uint32(minMaxFrameSize); got != want {
4044-
t.Errorf("maxFrameReadSize = %v; want %v", got, want)
4045-
}
4046-
4047-
// test for maximum frame size
4048-
tr = &Transport{
4049-
TLSClientConfig: tlsConfigInsecure,
4050-
MaxReadFrameSize: 1024 * 1024 * 16,
4051-
}
4052-
4053-
if got, want := tr.maxFrameReadSize(), uint32(maxFrameSize); got != want {
4054-
t.Errorf("maxFrameReadSize = %v; want %v", got, want)
4003+
for _, test := range []struct {
4004+
maxReadFrameSize uint32
4005+
want uint32
4006+
}{{
4007+
maxReadFrameSize: 64000,
4008+
want: 64000,
4009+
}, {
4010+
maxReadFrameSize: 1024,
4011+
want: minMaxFrameSize,
4012+
}} {
4013+
ct := newClientTester(t)
4014+
ct.tr.MaxReadFrameSize = test.maxReadFrameSize
4015+
ct.client = func() error {
4016+
req, _ := http.NewRequest("GET", "https://dummy.tld/", http.NoBody)
4017+
ct.tr.RoundTrip(req)
4018+
return nil
4019+
}
4020+
ct.server = func() error {
4021+
defer ct.cc.(*net.TCPConn).Close()
4022+
ct.greet()
4023+
var got uint32
4024+
ct.settings.ForeachSetting(func(s Setting) error {
4025+
switch s.ID {
4026+
case SettingMaxFrameSize:
4027+
got = s.Val
4028+
}
4029+
return nil
4030+
})
4031+
if got != test.want {
4032+
t.Errorf("Transport.MaxReadFrameSize = %v; server got %v, want %v", test.maxReadFrameSize, got, test.want)
4033+
}
4034+
return nil
4035+
}
4036+
ct.run()
40554037
}
4056-
40574038
}
40584039

40594040
func TestTransportRequestsLowServerLimit(t *testing.T) {

0 commit comments

Comments
 (0)