@@ -809,9 +809,6 @@ func TestServer_Request_Post_Body_ContentLength_TooSmall(t *testing.T) {
809
809
EndHeaders : true ,
810
810
})
811
811
st .writeData (1 , true , []byte ("12345" ))
812
- // Return flow control bytes back, since the data handler closed
813
- // the stream.
814
- st .wantWindowUpdate (0 , 5 )
815
812
})
816
813
}
817
814
@@ -1247,6 +1244,41 @@ func TestServer_Handler_Sends_WindowUpdate(t *testing.T) {
1247
1244
1248
1245
st .greet ()
1249
1246
1247
+ st .writeHeaders (HeadersFrameParam {
1248
+ StreamID : 1 , // clients send odd numbers
1249
+ BlockFragment : st .encodeHeader (":method" , "POST" ),
1250
+ EndStream : false , // data coming
1251
+ EndHeaders : true ,
1252
+ })
1253
+ updateSize := 1 << 20 / 2 // the conn & stream size before a WindowUpdate
1254
+ st .writeData (1 , false , bytes .Repeat ([]byte ("a" ), updateSize - 10 ))
1255
+ st .writeData (1 , false , bytes .Repeat ([]byte ("b" ), 10 ))
1256
+ puppet .do (readBodyHandler (t , strings .Repeat ("a" , updateSize - 10 )))
1257
+ puppet .do (readBodyHandler (t , strings .Repeat ("b" , 10 )))
1258
+
1259
+ st .wantWindowUpdate (0 , uint32 (updateSize ))
1260
+ st .wantWindowUpdate (1 , uint32 (updateSize ))
1261
+
1262
+ st .writeData (1 , false , bytes .Repeat ([]byte ("a" ), updateSize - 10 ))
1263
+ st .writeData (1 , true , bytes .Repeat ([]byte ("c" ), 15 )) // END_STREAM here
1264
+ puppet .do (readBodyHandler (t , strings .Repeat ("a" , updateSize - 10 )))
1265
+ puppet .do (readBodyHandler (t , strings .Repeat ("c" , 15 )))
1266
+
1267
+ st .wantWindowUpdate (0 , uint32 (updateSize + 5 ))
1268
+ }
1269
+
1270
+ func TestServer_Handler_Sends_WindowUpdate_SmallStream (t * testing.T ) {
1271
+ puppet := newHandlerPuppet ()
1272
+ st := newServerTester (t , func (w http.ResponseWriter , r * http.Request ) {
1273
+ puppet .act (w , r )
1274
+ }, func (s * Server ) {
1275
+ s .MaxUploadBufferPerStream = 6
1276
+ })
1277
+ defer st .Close ()
1278
+ defer puppet .done ()
1279
+
1280
+ st .greet ()
1281
+
1250
1282
st .writeHeaders (HeadersFrameParam {
1251
1283
StreamID : 1 , // clients send odd numbers
1252
1284
BlockFragment : st .encodeHeader (":method" , "POST" ),
@@ -1255,18 +1287,14 @@ func TestServer_Handler_Sends_WindowUpdate(t *testing.T) {
1255
1287
})
1256
1288
st .writeData (1 , false , []byte ("abcdef" ))
1257
1289
puppet .do (readBodyHandler (t , "abc" ))
1258
- st . wantWindowUpdate ( 0 , 3 )
1259
- st . wantWindowUpdate ( 1 , 3 )
1290
+ puppet . do ( readBodyHandler ( t , "d" ) )
1291
+ puppet . do ( readBodyHandler ( t , "ef" ) )
1260
1292
1261
- puppet .do (readBodyHandler (t , "def" ))
1262
- st .wantWindowUpdate (0 , 3 )
1263
- st .wantWindowUpdate (1 , 3 )
1293
+ st .wantWindowUpdate (1 , 6 )
1264
1294
1265
1295
st .writeData (1 , true , []byte ("ghijkl" )) // END_STREAM here
1266
1296
puppet .do (readBodyHandler (t , "ghi" ))
1267
1297
puppet .do (readBodyHandler (t , "jkl" ))
1268
- st .wantWindowUpdate (0 , 3 )
1269
- st .wantWindowUpdate (0 , 3 ) // no more stream-level, since END_STREAM
1270
1298
}
1271
1299
1272
1300
// the version of the TestServer_Handler_Sends_WindowUpdate with padding.
@@ -1295,12 +1323,7 @@ func TestServer_Handler_Sends_WindowUpdate_Padding(t *testing.T) {
1295
1323
st .wantWindowUpdate (1 , 5 )
1296
1324
1297
1325
puppet .do (readBodyHandler (t , "abc" ))
1298
- st .wantWindowUpdate (0 , 3 )
1299
- st .wantWindowUpdate (1 , 3 )
1300
-
1301
1326
puppet .do (readBodyHandler (t , "def" ))
1302
- st .wantWindowUpdate (0 , 3 )
1303
- st .wantWindowUpdate (1 , 3 )
1304
1327
}
1305
1328
1306
1329
func TestServer_Send_GoAway_After_Bogus_WindowUpdate (t * testing.T ) {
@@ -2296,8 +2319,6 @@ func TestServer_Response_Automatic100Continue(t *testing.T) {
2296
2319
// gigantic and/or sensitive "foo" payload now.
2297
2320
st .writeData (1 , true , []byte (msg ))
2298
2321
2299
- st .wantWindowUpdate (0 , uint32 (len (msg )))
2300
-
2301
2322
hf = st .wantHeaders ()
2302
2323
if hf .StreamEnded () {
2303
2324
t .Fatal ("expected data to follow" )
@@ -2485,9 +2506,6 @@ func TestServer_NoCrash_HandlerClose_Then_ClientClose(t *testing.T) {
2485
2506
// it did before.
2486
2507
st .writeData (1 , true , []byte ("foo" ))
2487
2508
2488
- // Get our flow control bytes back, since the handler didn't get them.
2489
- st .wantWindowUpdate (0 , uint32 (len ("foo" )))
2490
-
2491
2509
// Sent after a peer sends data anyway (admittedly the
2492
2510
// previous RST_STREAM might've still been in-flight),
2493
2511
// but they'll get the more friendly 'cancel' code
@@ -3906,7 +3924,6 @@ func TestServer_Rejects_TooSmall(t *testing.T) {
3906
3924
EndHeaders : true ,
3907
3925
})
3908
3926
st .writeData (1 , true , []byte ("12345" ))
3909
- st .wantWindowUpdate (0 , 5 )
3910
3927
st .wantRSTStream (1 , ErrCodeProtocol )
3911
3928
})
3912
3929
}
@@ -4199,7 +4216,6 @@ func TestServerWindowUpdateOnBodyClose(t *testing.T) {
4199
4216
st .writeData (1 , false , []byte (content [5 :]))
4200
4217
blockCh <- true
4201
4218
4202
- increments := len (content )
4203
4219
for {
4204
4220
f , err := st .readFrame ()
4205
4221
if err == io .EOF {
@@ -4208,10 +4224,12 @@ func TestServerWindowUpdateOnBodyClose(t *testing.T) {
4208
4224
if err != nil {
4209
4225
t .Fatal (err )
4210
4226
}
4227
+ if rs , ok := f .(* RSTStreamFrame ); ok && rs .StreamID == 1 {
4228
+ break
4229
+ }
4211
4230
if wu , ok := f .(* WindowUpdateFrame ); ok && wu .StreamID == 0 {
4212
- increments -= int (wu .Increment )
4213
- if increments == 0 {
4214
- break
4231
+ if e , a := uint32 (3 ), wu .Increment ; e != a {
4232
+ t .Errorf ("Increment=%d, want %d" , a , e )
4215
4233
}
4216
4234
}
4217
4235
}
0 commit comments