@@ -1096,7 +1096,7 @@ def test_non_prepared_request_error(self):
1096
1096
def test_custom_content_type (self , httpbin ):
1097
1097
with open (__file__ , "rb" ) as f1 :
1098
1098
with open (__file__ , "rb" ) as f2 :
1099
- data = {"stuff" : json .dumps ({"a" : 123 })}
1099
+ data = {"stuff" : json .dumps ({"a" : 123 })}
1100
1100
files = {
1101
1101
"file1" : ("test_requests.py" , f1 ),
1102
1102
"file2" : ("test_requests" , f2 , "text/py-content-type" ),
@@ -1682,68 +1682,70 @@ def test_header_keys_are_native(self, httpbin):
1682
1682
1683
1683
def test_header_validation (self , httpbin ):
1684
1684
"""Ensure prepare_headers regex isn't flagging valid header contents."""
1685
- headers_ok = {
1685
+ valid_headers = {
1686
1686
"foo" : "bar baz qux" ,
1687
1687
"bar" : b"fbbq" ,
1688
1688
"baz" : "" ,
1689
1689
"qux" : "1" ,
1690
1690
}
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 ]
1693
1694
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 ):
1695
1704
"""Ensure the header value is of type string or bytes as
1696
1705
per discussion in GH issue #3386
1697
1706
"""
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
1707
1707
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 )
1714
1710
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 ):
1716
1725
"""Ensure that a header containing return character sequences raise an
1717
1726
exception. Otherwise, multiple headers are created from single string.
1718
1727
"""
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
1730
1728
with pytest .raises (InvalidHeader ):
1731
- requests .get (httpbin ("get" ), headers = headers_cr )
1729
+ requests .get (httpbin ("get" ), headers = invalid_header )
1732
1730
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 ):
1734
1744
"""Ensure headers containing leading whitespace raise
1735
1745
InvalidHeader Error before sending.
1736
1746
"""
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
1745
1747
with pytest .raises (InvalidHeader ):
1746
- requests .get (httpbin ("get" ), headers = headers_tab )
1748
+ requests .get (httpbin ("get" ), headers = invalid_header )
1747
1749
1748
1750
@pytest .mark .parametrize ("files" , ("foo" , b"foo" , bytearray (b"foo" )))
1749
1751
def test_can_send_objects_with_files (self , httpbin , files ):
0 commit comments