@@ -497,6 +497,24 @@ def test_conn_keep_alive_1_1(parser) -> None:
497497 assert not msg .should_close
498498
499499
500+ def test_conn_close_comma_list (parser ) -> None :
501+ text = b"GET /test HTTP/1.1\r \n connection: close, keep-alive\r \n \r \n "
502+ messages , upgrade , tail = parser .feed_data (text )
503+ msg = messages [0 ][0 ]
504+ assert msg .should_close
505+
506+
507+ def test_conn_close_multiple_headers (parser ) -> None :
508+ text = (
509+ b"GET /test HTTP/1.1\r \n "
510+ b"connection: keep-alive\r \n "
511+ b"connection: close\r \n \r \n "
512+ )
513+ messages , upgrade , tail = parser .feed_data (text )
514+ msg = messages [0 ][0 ]
515+ assert msg .should_close
516+
517+
500518def test_conn_other_1_0 (parser ) -> None :
501519 text = b"GET /test HTTP/1.0\r \n connection: test\r \n \r \n "
502520 messages , upgrade , tail = parser .feed_data (text )
@@ -586,6 +604,33 @@ def test_conn_upgrade(parser: Any) -> None:
586604 assert upgrade
587605
588606
607+ def test_conn_upgrade_comma_list (parser ) -> None :
608+ text = (
609+ b"GET /test HTTP/1.1\r \n "
610+ b"connection: keep-alive, upgrade\r \n "
611+ b"upgrade: websocket\r \n \r \n "
612+ )
613+ messages , upgrade , tail = parser .feed_data (text )
614+ msg = messages [0 ][0 ]
615+ assert not msg .should_close
616+ assert msg .upgrade
617+ assert upgrade
618+
619+
620+ def test_conn_upgrade_multiple_headers (parser ) -> None :
621+ text = (
622+ b"GET /test HTTP/1.1\r \n "
623+ b"connection: keep-alive\r \n "
624+ b"connection: upgrade\r \n "
625+ b"upgrade: websocket\r \n \r \n "
626+ )
627+ messages , upgrade , tail = parser .feed_data (text )
628+ msg = messages [0 ][0 ]
629+ assert not msg .should_close
630+ assert msg .upgrade
631+ assert upgrade
632+
633+
589634def test_bad_upgrade (parser ) -> None :
590635 """Test not upgraded if missing Upgrade header."""
591636 text = b"GET /test HTTP/1.1\r \n connection: upgrade\r \n \r \n "
@@ -956,6 +1001,14 @@ def test_http_request_message_after_close(parser: HttpRequestParser) -> None:
9561001 parser .feed_data (text )
9571002
9581003
1004+ def test_http_request_message_after_close_comma_list (parser : HttpRequestParser ) -> None :
1005+ text = b"GET / HTTP/1.1\r \n Connection: close, keep-alive\r \n \r \n Invalid\r \n \r \n "
1006+ with pytest .raises (
1007+ http_exceptions .BadHttpMessage , match = "Data after `Connection: close`"
1008+ ):
1009+ parser .feed_data (text )
1010+
1011+
9591012def test_http_request_upgrade (parser : HttpRequestParser ) -> None :
9601013 text = (
9611014 b"GET /test HTTP/1.1\r \n "
0 commit comments