@@ -528,25 +528,84 @@ async fn recv_connection_header() {
528528 } ;
529529
530530 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+ }
545594 } ;
546595
547596 let srv = async move {
548597 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+ }
550609 } ;
551610
552611 join ( client, srv) . await ;
0 commit comments