mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-09 01:03:24 +00:00
Format with line length 110 to match flake8 make black part of linting check Update travis spec for updated black requirements Add diff output for black on failure update changelog
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Test using a proxy."""
|
|
|
|
# External imports
|
|
import multiprocessing
|
|
import pytest
|
|
|
|
from six.moves import socketserver, SimpleHTTPServer
|
|
from six.moves.urllib.request import urlopen
|
|
|
|
# Internal imports
|
|
import vcr
|
|
|
|
# Conditional imports
|
|
requests = pytest.importorskip("requests")
|
|
|
|
|
|
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
|
"""
|
|
Simple proxy server.
|
|
|
|
(Inspired by: http://effbot.org/librarybook/simplehttpserver.htm).
|
|
"""
|
|
|
|
def do_GET(self):
|
|
upstream_response = urlopen(self.path)
|
|
try:
|
|
status = upstream_response.status
|
|
headers = upstream_response.headers.items()
|
|
except AttributeError:
|
|
# In Python 2 the response is an addinfourl instance.
|
|
status = upstream_response.code
|
|
headers = upstream_response.info().items()
|
|
self.send_response(status, upstream_response.msg)
|
|
for header in headers:
|
|
self.send_header(*header)
|
|
self.end_headers()
|
|
self.copyfile(upstream_response, self.wfile)
|
|
|
|
|
|
@pytest.yield_fixture(scope="session")
|
|
def proxy_server():
|
|
httpd = socketserver.ThreadingTCPServer(("", 0), Proxy)
|
|
proxy_process = multiprocessing.Process(target=httpd.serve_forever)
|
|
proxy_process.start()
|
|
yield "http://{}:{}".format(*httpd.server_address)
|
|
proxy_process.terminate()
|
|
|
|
|
|
def test_use_proxy(tmpdir, httpbin, proxy_server):
|
|
"""Ensure that it works with a proxy."""
|
|
with vcr.use_cassette(str(tmpdir.join("proxy.yaml"))):
|
|
response = requests.get(httpbin.url, proxies={"http": proxy_server})
|
|
|
|
with vcr.use_cassette(str(tmpdir.join("proxy.yaml"))) as cassette:
|
|
cassette_response = requests.get(httpbin.url, proxies={"http": proxy_server})
|
|
|
|
assert cassette_response.headers == response.headers
|
|
assert cassette.play_count == 1
|