@@ -741,12 +741,13 @@ func (fw flushWriter) Write(p []byte) (n int, err error) {
741741}
742742
743743type 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
752753func 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.
40024002func 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
40594040func TestTransportRequestsLowServerLimit (t * testing.T ) {
0 commit comments