From 7d68f0577a54b44ecc642e88983b4801e0bdac90 Mon Sep 17 00:00:00 2001 From: Maarten van Schaik Date: Fri, 14 Aug 2015 12:08:57 +0200 Subject: [PATCH 1/5] Capture effective URL in tornado --- tests/integration/test_tornado.py | 10 ++++++++++ vcr/stubs/tornado_stubs.py | 2 ++ 2 files changed, 12 insertions(+) diff --git a/tests/integration/test_tornado.py b/tests/integration/test_tornado.py index 6f88d67..57ada3f 100644 --- a/tests/integration/test_tornado.py +++ b/tests/integration/test_tornado.py @@ -81,6 +81,16 @@ def test_body(get_client, tmpdir, scheme): assert content == (yield get(get_client(), url)).body assert 1 == cass.play_count +@pytest.mark.gen_test +def test_effective_url(get_client, scheme, tmpdir): + '''Ensure that the effective_url is captured''' + url = scheme + '://httpbin.org/redirect-to?url=/html' + with vcr.use_cassette(str(tmpdir.join('url.yaml'))): + effective_url = (yield get(get_client(), url)).effective_url + + with vcr.use_cassette(str(tmpdir.join('url.yaml'))) as cass: + assert effective_url == (yield get(get_client(), url)).effective_url + assert 1 == cass.play_count @pytest.mark.gen_test def test_auth(get_client, tmpdir, scheme): diff --git a/vcr/stubs/tornado_stubs.py b/vcr/stubs/tornado_stubs.py index e5d93c5..3b771d6 100644 --- a/vcr/stubs/tornado_stubs.py +++ b/vcr/stubs/tornado_stubs.py @@ -62,6 +62,7 @@ def vcr_fetch_impl(cassette, real_fetch_impl): reason=vcr_response['status']['message'], headers=headers, buffer=BytesIO(vcr_response['body']['string']), + effective_url=vcr_response.get('url'), ) return callback(response) else: @@ -93,6 +94,7 @@ def vcr_fetch_impl(cassette, real_fetch_impl): }, 'headers': headers, 'body': {'string': response.body}, + 'url': response.effective_url, } cassette.append(vcr_request, vcr_response) return callback(response) From a82e8628c27abeb2713407becf5888a81f4e4f59 Mon Sep 17 00:00:00 2001 From: Maarten van Schaik Date: Fri, 14 Aug 2015 12:28:41 +0200 Subject: [PATCH 2/5] Requests actually stores redirected request --- tests/integration/test_requests.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/integration/test_requests.py b/tests/integration/test_requests.py index 79e74b8..674f6ed 100644 --- a/tests/integration/test_requests.py +++ b/tests/integration/test_requests.py @@ -44,6 +44,15 @@ def test_body(tmpdir, scheme): with vcr.use_cassette(str(tmpdir.join('body.yaml'))): assert content == requests.get(url).content +def test_effective_url(scheme, tmpdir): + '''Ensure that the effective_url is captured''' + url = scheme + '://httpbin.org/redirect-to?url=/html' + with vcr.use_cassette(str(tmpdir.join('url.yaml'))): + effective_url = requests.get(url).url + assert effective_url == scheme + '://httpbin.org/html' + + with vcr.use_cassette(str(tmpdir.join('url.yaml'))): + assert effective_url == requests.get(url).url def test_auth(tmpdir, scheme): '''Ensure that we can handle basic auth''' From 01f1f9fdc1fece6b15c164f4089f0c7c3178b8a0 Mon Sep 17 00:00:00 2001 From: Maarten van Schaik Date: Fri, 14 Aug 2015 12:29:50 +0200 Subject: [PATCH 3/5] Verify effective_url is ok --- tests/integration/test_tornado.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/test_tornado.py b/tests/integration/test_tornado.py index 57ada3f..fade78f 100644 --- a/tests/integration/test_tornado.py +++ b/tests/integration/test_tornado.py @@ -87,6 +87,7 @@ def test_effective_url(get_client, scheme, tmpdir): url = scheme + '://httpbin.org/redirect-to?url=/html' with vcr.use_cassette(str(tmpdir.join('url.yaml'))): effective_url = (yield get(get_client(), url)).effective_url + assert effective_url == scheme + '://httpbin.org/html' with vcr.use_cassette(str(tmpdir.join('url.yaml'))) as cass: assert effective_url == (yield get(get_client(), url)).effective_url From 04b5978adc48aac4e1517f80d26725aa6e82de08 Mon Sep 17 00:00:00 2001 From: Maarten van Schaik Date: Fri, 14 Aug 2015 12:37:34 +0200 Subject: [PATCH 4/5] Add effective url test for httplib2 --- tests/integration/test_httplib2.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/integration/test_httplib2.py b/tests/integration/test_httplib2.py index f3ab42c..f830a06 100644 --- a/tests/integration/test_httplib2.py +++ b/tests/integration/test_httplib2.py @@ -56,6 +56,17 @@ def test_response_headers(scheme, tmpdir): resp, _ = httplib2.Http().request(url) assert set(headers) == set(resp.items()) +def test_effective_url(scheme, tmpdir): + '''Ensure that the effective_url is captured''' + url = scheme + '://httpbin.org/redirect-to?url=/html' + with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: + resp, _ = httplib2.Http().request(url) + effective_url = resp['content-location'] + assert effective_url == scheme + '://httpbin.org/html' + + with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: + resp, _ = httplib2.Http().request(url) + assert effective_url == resp['content-location'] def test_multiple_requests(scheme, tmpdir): '''Ensure that we can cache multiple requests''' From ca3200d96ed1954dd0dd58c1cba1ddb9043e6f5a Mon Sep 17 00:00:00 2001 From: Maarten van Schaik Date: Fri, 14 Aug 2015 12:42:17 +0200 Subject: [PATCH 5/5] Add test for urllib2 --- tests/integration/test_urllib2.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/integration/test_urllib2.py b/tests/integration/test_urllib2.py index 484001c..6754303 100644 --- a/tests/integration/test_urllib2.py +++ b/tests/integration/test_urllib2.py @@ -49,6 +49,15 @@ def test_response_headers(scheme, tmpdir): open2 = urlopen(url).info().items() assert sorted(open1) == sorted(open2) +def test_effective_url(scheme, tmpdir): + '''Ensure that the effective_url is captured''' + url = scheme + '://httpbin.org/redirect-to?url=/html' + with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: + effective_url = urlopen(url).geturl() + assert effective_url == scheme + '://httpbin.org/html' + + with vcr.use_cassette(str(tmpdir.join('headers.yaml'))) as cass: + assert effective_url == urlopen(url).geturl() def test_multiple_requests(scheme, tmpdir): '''Ensure that we can cache multiple requests'''