@@ -1096,7 +1096,7 @@ def test_non_prepared_request_error(self):
10961096 def test_custom_content_type (self , httpbin ):
10971097 with open (__file__ , "rb" ) as f1 :
10981098 with open (__file__ , "rb" ) as f2 :
1099- data = {"stuff" : json .dumps ({"a" : 123 })}
1099+ data = {"stuff" : json .dumps ({"a" : 123 })}
11001100 files = {
11011101 "file1" : ("test_requests.py" , f1 ),
11021102 "file2" : ("test_requests" , f2 , "text/py-content-type" ),
@@ -1682,68 +1682,70 @@ def test_header_keys_are_native(self, httpbin):
16821682
16831683 def test_header_validation (self , httpbin ):
16841684 """Ensure prepare_headers regex isn't flagging valid header contents."""
1685- headers_ok = {
1685+ valid_headers = {
16861686 "foo" : "bar baz qux" ,
16871687 "bar" : b"fbbq" ,
16881688 "baz" : "" ,
16891689 "qux" : "1" ,
16901690 }
1691- r = requests .get (httpbin ("get" ), headers = headers_ok )
1692- assert r .request .headers ["foo" ] == headers_ok ["foo" ]
1691+ r = requests .get (httpbin ("get" ), headers = valid_headers )
1692+ for key in valid_headers .keys ():
1693+ valid_headers [key ] == r .request .headers [key ]
16931694
1694- def test_header_value_not_str (self , httpbin ):
1695+ @pytest .mark .parametrize (
1696+ "invalid_header, key" ,
1697+ (
1698+ ({"foo" : 3 }, "foo" ),
1699+ ({"bar" : {"foo" : "bar" }}, "bar" ),
1700+ ({"baz" : ["foo" , "bar" ]}, "baz" ),
1701+ ),
1702+ )
1703+ def test_header_value_not_str (self , httpbin , invalid_header , key ):
16951704 """Ensure the header value is of type string or bytes as
16961705 per discussion in GH issue #3386
16971706 """
1698- headers_int = {"foo" : 3 }
1699- headers_dict = {"bar" : {"foo" : "bar" }}
1700- headers_list = {"baz" : ["foo" , "bar" ]}
1701-
1702- # Test for int
1703- with pytest .raises (InvalidHeader ) as excinfo :
1704- requests .get (httpbin ("get" ), headers = headers_int )
1705- assert "foo" in str (excinfo .value )
1706- # Test for dict
17071707 with pytest .raises (InvalidHeader ) as excinfo :
1708- requests .get (httpbin ("get" ), headers = headers_dict )
1709- assert "bar" in str (excinfo .value )
1710- # Test for list
1711- with pytest .raises (InvalidHeader ) as excinfo :
1712- requests .get (httpbin ("get" ), headers = headers_list )
1713- assert "baz" in str (excinfo .value )
1708+ requests .get (httpbin ("get" ), headers = invalid_header )
1709+ assert key in str (excinfo .value )
17141710
1715- def test_header_no_return_chars (self , httpbin ):
1711+ @pytest .mark .parametrize (
1712+ "invalid_header" ,
1713+ (
1714+ {"foo" : "bar\r \n baz: qux" },
1715+ {"foo" : "bar\n \r baz: qux" },
1716+ {"foo" : "bar\n baz: qux" },
1717+ {"foo" : "bar\r baz: qux" },
1718+ {"fo\r o" : "bar" },
1719+ {"fo\r \n o" : "bar" },
1720+ {"fo\n \r o" : "bar" },
1721+ {"fo\n o" : "bar" },
1722+ ),
1723+ )
1724+ def test_header_no_return_chars (self , httpbin , invalid_header ):
17161725 """Ensure that a header containing return character sequences raise an
17171726 exception. Otherwise, multiple headers are created from single string.
17181727 """
1719- headers_ret = {"foo" : "bar\r \n baz: qux" }
1720- headers_lf = {"foo" : "bar\n baz: qux" }
1721- headers_cr = {"foo" : "bar\r baz: qux" }
1722-
1723- # Test for newline
1724- with pytest .raises (InvalidHeader ):
1725- requests .get (httpbin ("get" ), headers = headers_ret )
1726- # Test for line feed
1727- with pytest .raises (InvalidHeader ):
1728- requests .get (httpbin ("get" ), headers = headers_lf )
1729- # Test for carriage return
17301728 with pytest .raises (InvalidHeader ):
1731- requests .get (httpbin ("get" ), headers = headers_cr )
1729+ requests .get (httpbin ("get" ), headers = invalid_header )
17321730
1733- def test_header_no_leading_space (self , httpbin ):
1731+ @pytest .mark .parametrize (
1732+ "invalid_header" ,
1733+ (
1734+ {" foo" : "bar" },
1735+ {"\t foo" : "bar" },
1736+ {" foo" : "bar" },
1737+ {"foo" : " bar" },
1738+ {"foo" : " bar" },
1739+ {"foo" : "\t bar" },
1740+ {" " : "bar" },
1741+ ),
1742+ )
1743+ def test_header_no_leading_space (self , httpbin , invalid_header ):
17341744 """Ensure headers containing leading whitespace raise
17351745 InvalidHeader Error before sending.
17361746 """
1737- headers_space = {"foo" : " bar" }
1738- headers_tab = {"foo" : " bar" }
1739-
1740- # Test for whitespace
1741- with pytest .raises (InvalidHeader ):
1742- requests .get (httpbin ("get" ), headers = headers_space )
1743-
1744- # Test for tab
17451747 with pytest .raises (InvalidHeader ):
1746- requests .get (httpbin ("get" ), headers = headers_tab )
1748+ requests .get (httpbin ("get" ), headers = invalid_header )
17471749
17481750 @pytest .mark .parametrize ("files" , ("foo" , b"foo" , bytearray (b"foo" )))
17491751 def test_can_send_objects_with_files (self , httpbin , files ):
0 commit comments