diff --git a/tests/integration/test_filter.py b/tests/integration/test_filter.py index 5823b8b..237d0c9 100644 --- a/tests/integration/test_filter.py +++ b/tests/integration/test_filter.py @@ -142,3 +142,24 @@ def test_decompress_regular(tmpdir, httpbin): resp = urlopen(url).read() assert_cassette_has_one_response(cass) assert_is_json(resp) + + +def test_before_record_request_corruption(tmpdir, httpbin): + """Modifying request in before_record_request should not affect outgoing request""" + + def before_record(request): + request.headers.clear() + request.body = b"" + return request + + req = Request( + httpbin.url + "/post", + data=urlencode({"test": "exists"}).encode(), + headers={"X-Test": "exists"}, + ) + cass_file = str(tmpdir.join("modified_response.yaml")) + with vcr.use_cassette(cass_file, before_record_request=before_record): + resp = json.loads(urlopen(req).read()) + + assert resp["headers"]["X-Test"] == "exists" + assert resp["form"]["test"] == "exists" diff --git a/vcr/config.py b/vcr/config.py index a991c95..5ee9f32 100644 --- a/vcr/config.py +++ b/vcr/config.py @@ -219,7 +219,7 @@ class VCR: filter_functions.extend(before_record_request) def before_record_request(request): - request = copy.copy(request) + request = copy.deepcopy(request) for function in filter_functions: if request is None: break