@@ -1453,3 +1453,48 @@ async fn client_drop_connection_without_close_notify() {
1453
1453
1454
1454
join ( client, h2) . await ;
1455
1455
}
1456
+
1457
+ #[ tokio:: test]
1458
+ async fn init_window_size_smaller_than_default_should_use_default_before_ack ( ) {
1459
+ h2_support:: trace_init!( ) ;
1460
+
1461
+ let ( io, mut client) = mock:: new ( ) ;
1462
+ let client = async move {
1463
+ // Client can send in some data before ACK;
1464
+ // Server needs to make sure the Recv stream has default window size
1465
+ // as per https://datatracker.ietf.org/doc/html/rfc9113#name-initial-flow-control-window
1466
+ client. write_preface ( ) . await ;
1467
+ client
1468
+ . send ( frame:: Settings :: default ( ) . into ( ) )
1469
+ . await
1470
+ . unwrap ( ) ;
1471
+ client. next ( ) . await . expect ( "unexpected EOF" ) . unwrap ( ) ;
1472
+ client
1473
+ . send_frame ( frames:: headers ( 1 ) . request ( "GET" , "https://example.com/" ) )
1474
+ . await ;
1475
+ client. send_frame ( frames:: data ( 1 , & b"hello" [ ..] ) ) . await ;
1476
+ client. send ( frame:: Settings :: ack ( ) . into ( ) ) . await . unwrap ( ) ;
1477
+ client. next ( ) . await ;
1478
+ client
1479
+ . recv_frame ( frames:: headers ( 1 ) . response ( 200 ) . eos ( ) )
1480
+ . await ;
1481
+ } ;
1482
+
1483
+ let mut builder = server:: Builder :: new ( ) ;
1484
+ builder. max_concurrent_streams ( 1 ) ;
1485
+ builder. initial_window_size ( 1 ) ;
1486
+ let h2 = async move {
1487
+ let mut srv = builder. handshake :: < _ , Bytes > ( io) . await . expect ( "handshake" ) ;
1488
+ let ( req, mut stream) = srv. next ( ) . await . unwrap ( ) . unwrap ( ) ;
1489
+
1490
+ assert_eq ! ( req. method( ) , & http:: Method :: GET ) ;
1491
+
1492
+ let rsp = http:: Response :: builder ( ) . status ( 200 ) . body ( ( ) ) . unwrap ( ) ;
1493
+ stream. send_response ( rsp, true ) . unwrap ( ) ;
1494
+
1495
+ // Drive the state forward
1496
+ let _ = poll_fn ( |cx| srv. poll_closed ( cx) ) . await . unwrap ( ) ;
1497
+ } ;
1498
+
1499
+ join ( client, h2) . await ;
1500
+ }
0 commit comments