@@ -528,25 +528,84 @@ async fn recv_connection_header() {
528
528
} ;
529
529
530
530
let client = async move {
531
- let settings = client. assert_server_handshake ( ) . await ;
532
- assert_default_settings ! ( settings) ;
533
- client. send_frame ( req ( 1 , "connection" , "foo" ) ) . await ;
534
- client. send_frame ( req ( 3 , "keep-alive" , "5" ) ) . await ;
535
- client. send_frame ( req ( 5 , "proxy-connection" , "bar" ) ) . await ;
536
- client
537
- . send_frame ( req ( 7 , "transfer-encoding" , "chunked" ) )
538
- . await ;
539
- client. send_frame ( req ( 9 , "upgrade" , "HTTP/2" ) ) . await ;
540
- client. recv_frame ( frames:: reset ( 1 ) . protocol_error ( ) ) . await ;
541
- client. recv_frame ( frames:: reset ( 3 ) . protocol_error ( ) ) . await ;
542
- client. recv_frame ( frames:: reset ( 5 ) . protocol_error ( ) ) . await ;
543
- client. recv_frame ( frames:: reset ( 7 ) . protocol_error ( ) ) . await ;
544
- client. recv_frame ( frames:: reset ( 9 ) . protocol_error ( ) ) . await ;
531
+ if cfg ! ( feature = "ignore_connection_header" ) {
532
+ let settings = client. assert_server_handshake ( ) . await ;
533
+ assert_default_settings ! ( settings) ;
534
+ client
535
+ . send_frame (
536
+ frames:: headers ( 1 )
537
+ . request ( "GET" , "https://example.com/" )
538
+ . field ( "connection" , "foo" )
539
+ . eos ( ) ,
540
+ )
541
+ . await ;
542
+ client
543
+ . send_frame (
544
+ frames:: headers ( 3 )
545
+ . request ( "GET" , "https://example.com/" )
546
+ . field ( "keep-alive" , "5" )
547
+ . eos ( ) ,
548
+ )
549
+ . await ;
550
+ client
551
+ . send_frame (
552
+ frames:: headers ( 5 )
553
+ . request ( "GET" , "https://example.com/" )
554
+ . field ( "proxy-connection" , "bar" )
555
+ . eos ( ) ,
556
+ )
557
+ . await ;
558
+ client
559
+ . send_frame (
560
+ frames:: headers ( 7 )
561
+ . request ( "GET" , "https://example.com/" )
562
+ . field ( "upgrade" , "HTTP/2" )
563
+ . eos ( ) ,
564
+ )
565
+ . await ;
566
+ client
567
+ . recv_frame ( frames:: headers ( 1 ) . response ( 200 ) . eos ( ) )
568
+ . await ;
569
+ client
570
+ . recv_frame ( frames:: headers ( 3 ) . response ( 200 ) . eos ( ) )
571
+ . await ;
572
+ client
573
+ . recv_frame ( frames:: headers ( 5 ) . response ( 200 ) . eos ( ) )
574
+ . await ;
575
+ client
576
+ . recv_frame ( frames:: headers ( 7 ) . response ( 200 ) . eos ( ) )
577
+ . await ;
578
+ } else {
579
+ let settings = client. assert_server_handshake ( ) . await ;
580
+ assert_default_settings ! ( settings) ;
581
+ client. send_frame ( req ( 1 , "connection" , "foo" ) ) . await ;
582
+ client. send_frame ( req ( 3 , "keep-alive" , "5" ) ) . await ;
583
+ client. send_frame ( req ( 5 , "proxy-connection" , "bar" ) ) . await ;
584
+ client
585
+ . send_frame ( req ( 7 , "transfer-encoding" , "chunked" ) )
586
+ . await ;
587
+ client. send_frame ( req ( 9 , "upgrade" , "HTTP/2" ) ) . await ;
588
+ client. recv_frame ( frames:: reset ( 1 ) . protocol_error ( ) ) . await ;
589
+ client. recv_frame ( frames:: reset ( 3 ) . protocol_error ( ) ) . await ;
590
+ client. recv_frame ( frames:: reset ( 5 ) . protocol_error ( ) ) . await ;
591
+ client. recv_frame ( frames:: reset ( 7 ) . protocol_error ( ) ) . await ;
592
+ client. recv_frame ( frames:: reset ( 9 ) . protocol_error ( ) ) . await ;
593
+ }
545
594
} ;
546
595
547
596
let srv = async move {
548
597
let mut srv = server:: handshake ( io) . await . expect ( "handshake" ) ;
549
- assert ! ( srv. next( ) . await . is_none( ) ) ;
598
+ if cfg ! ( feature = "ignore_connection_header" ) {
599
+ while let Some ( stream) = srv. next ( ) . await {
600
+ let ( req, mut stream) = stream. unwrap ( ) ;
601
+ // the headers are ignored
602
+ assert_eq ! ( req. headers( ) . len( ) , 0 ) ;
603
+ let rsp = http:: Response :: builder ( ) . status ( 200 ) . body ( ( ) ) . unwrap ( ) ;
604
+ stream. send_response ( rsp, true ) . unwrap ( ) ;
605
+ }
606
+ } else {
607
+ assert ! ( srv. next( ) . await . is_none( ) ) ;
608
+ }
550
609
} ;
551
610
552
611
join ( client, srv) . await ;
0 commit comments