1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-09 01:03:24 +00:00

Fix header matcher for boto3 (fixes #474) (#488)

This commit is contained in:
Simone Orsi
2019-11-03 11:00:33 +01:00
committed by Josh Peak
parent d843d2a6c1
commit 8e78666b8a
3 changed files with 20 additions and 1 deletions

View File

@@ -7,6 +7,7 @@ Changelog
- Fix exception when body is empty (@keithprickett) - Fix exception when body is empty (@keithprickett)
- Add `pytest-recording` to the documentation as an alternative Pytest plugin (@Stranger6667) - Add `pytest-recording` to the documentation as an alternative Pytest plugin (@Stranger6667)
- Fix yarl and python3.5 version issue (@neozenith) - Fix yarl and python3.5 version issue (@neozenith)
- Fix header matcher for boto3 - fixes #474 (@simahawk)
- 2.1.0 - Add a `rewind` method to reset a cassette (thanks @khamidou) - 2.1.0 - Add a `rewind` method to reset a cassette (thanks @khamidou)
New error message with more details on why the cassette failed to play a request (thanks @arthurHamon2, @neozenith) New error message with more details on why the cassette failed to play a request (thanks @arthurHamon2, @neozenith)
Handle connect tunnel URI (thanks @jeking3) Handle connect tunnel URI (thanks @jeking3)

View File

@@ -54,6 +54,16 @@ req2_body = (
b"<member><name>a</name><value><string>1</string></value></member>" b"<member><name>a</name><value><string>1</string></value></member>"
b"</struct></value></data></array></value></param></params></methodCall>" b"</struct></value></data></array></value></param></params></methodCall>"
) )
boto3_bytes_headers = {
"X-Amz-Content-SHA256": b"UNSIGNED-PAYLOAD",
"Cache-Control": b"max-age=31536000, public",
"X-Amz-Date": b"20191102T143910Z",
"User-Agent": b"Boto3/1.9.102 Python/3.5.3 Linux/4.15.0-54-generic Botocore/1.12.253 Resource",
"Content-MD5": b"GQqjEXsRqrPyxfTl99nkAg==",
"Content-Type": b"text/plain",
"Expect": b"100-continue",
"Content-Length": "21",
}
@pytest.mark.parametrize( @pytest.mark.parametrize(
@@ -110,6 +120,11 @@ req2_body = (
"POST", "http://host.com/", '{"b": 2, "a": 1}', {"content-type": "application/json"} "POST", "http://host.com/", '{"b": 2, "a": 1}', {"content-type": "application/json"}
), ),
), ),
(
# special case for boto3 bytes headers
request.Request("POST", "http://aws.custom.com/", b"123", boto3_bytes_headers),
request.Request("POST", "http://aws.custom.com/", b"123", boto3_bytes_headers),
),
], ],
) )
def test_body_matcher_does_match(r1, r2): def test_body_matcher_does_match(r1, r2):

View File

@@ -53,7 +53,10 @@ def headers(r1, r2):
def _header_checker(value, header="Content-Type"): def _header_checker(value, header="Content-Type"):
def checker(headers): def checker(headers):
return value in headers.get(header, "").lower() _header = headers.get(header, "")
if isinstance(_header, bytes):
_header = _header.decode("utf-8")
return value in _header.lower()
return checker return checker