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