summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Petrov <andrey.petrov@shazow.net>2015-09-03 18:25:11 -0700
committerAndrey Petrov <andrey.petrov@shazow.net>2015-09-03 18:25:11 -0700
commit5c8b6b914e0e3f3a746d3676361534001c4c7f26 (patch)
tree63a058ed778541a12560758c96597fd4239dd0ff
parent571ef485accdc32725d339f23ffaa0da2e97fb01 (diff)
downloadurllib3-5c8b6b914e0e3f3a746d3676361534001c4c7f26.tar.gz
tests: socketlevel: Unify handler making helper
-rw-r--r--dummyserver/testcase.py24
-rw-r--r--test/with_dummyserver/test_socketlevel.py35
2 files changed, 30 insertions, 29 deletions
diff --git a/dummyserver/testcase.py b/dummyserver/testcase.py
index de6aedd4..a81e54e1 100644
--- a/dummyserver/testcase.py
+++ b/dummyserver/testcase.py
@@ -14,6 +14,11 @@ from dummyserver.handlers import TestingApp
from dummyserver.proxy import ProxyHandler
+def consume_socket(sock, chunks=65536):
+ while not sock.recv(chunks).endswith(b'\r\n\r\n'):
+ pass
+
+
class SocketDummyServerTestCase(unittest.TestCase):
"""
A simple socket-based server is created for this class that is good for
@@ -35,6 +40,25 @@ class SocketDummyServerTestCase(unittest.TestCase):
cls.port = cls.server_thread.port
@classmethod
+ def start_response_handler(cls, response, num=1):
+ def socket_handler(listener):
+ for _ in range(num):
+ sock = listener.accept()[0]
+ consume_socket(sock)
+
+ sock.send(response)
+ sock.close()
+ cls._start_server(socket_handler)
+
+ @classmethod
+ def start_basic_handler(cls, num=1):
+ cls.start_response_handler(
+ b'HTTP/1.1 200 OK\r\n'
+ b'Content-Length: 0\r\n'
+ b'\r\n'
+ , num=num)
+
+ @classmethod
def tearDownClass(cls):
if hasattr(cls, 'server_thread'):
cls.server_thread.join(0.1)
diff --git a/test/with_dummyserver/test_socketlevel.py b/test/with_dummyserver/test_socketlevel.py
index 5af00e0b..7011b464 100644
--- a/test/with_dummyserver/test_socketlevel.py
+++ b/test/with_dummyserver/test_socketlevel.py
@@ -629,42 +629,23 @@ class TestSSL(SocketDummyServerTestCase):
self.assertRaises(SSLError, request)
-def consume_socket(sock, chunks=65536):
- while not sock.recv(chunks).endswith(b'\r\n\r\n'):
- pass
-
-
-def create_response_handler(response, num=1):
- def socket_handler(listener):
- for _ in range(num):
- sock = listener.accept()[0]
- consume_socket(sock)
-
- sock.send(response)
- sock.close()
-
- return socket_handler
-
-
class TestErrorWrapping(SocketDummyServerTestCase):
def test_bad_statusline(self):
- handler = create_response_handler(
+ self.start_response_handler(
b'HTTP/1.1 Omg What Is This?\r\n'
b'Content-Length: 0\r\n'
b'\r\n'
)
- self._start_server(handler)
pool = HTTPConnectionPool(self.host, self.port, retries=False)
self.assertRaises(ProtocolError, pool.request, 'GET', '/')
def test_unknown_protocol(self):
- handler = create_response_handler(
+ self.start_response_handler(
b'HTTP/1000 200 OK\r\n'
b'Content-Length: 0\r\n'
b'\r\n'
)
- self._start_server(handler)
pool = HTTPConnectionPool(self.host, self.port, retries=False)
self.assertRaises(ProtocolError, pool.request, 'GET', '/')
@@ -672,13 +653,12 @@ class TestHeaders(SocketDummyServerTestCase):
@onlyPy3
def test_httplib_headers_case_insensitive(self):
- handler = create_response_handler(
+ self.start_response_handler(
b'HTTP/1.1 200 OK\r\n'
b'Content-Length: 0\r\n'
b'Content-type: text/plain\r\n'
b'\r\n'
)
- self._start_server(handler)
pool = HTTPConnectionPool(self.host, self.port, retries=False)
HEADERS = {'Content-Length': '0', 'Content-type': 'text/plain'}
r = pool.request('GET', '/')
@@ -727,14 +707,13 @@ class TestBrokenHeaders(SocketDummyServerTestCase):
super(TestBrokenHeaders, self).setUp()
def _test_broken_header_parsing(self, headers):
- handler = create_response_handler((
+ self.start_response_handler((
b'HTTP/1.1 200 OK\r\n'
b'Content-Length: 0\r\n'
b'Content-type: text/plain\r\n'
) + b'\r\n'.join(headers) + b'\r\n'
)
- self._start_server(handler)
pool = HTTPConnectionPool(self.host, self.port, retries=False)
with LogRecorder() as logs:
@@ -767,13 +746,12 @@ class TestBrokenHeaders(SocketDummyServerTestCase):
class TestHEAD(SocketDummyServerTestCase):
def test_chunked_head_response_does_not_hang(self):
- handler = create_response_handler(
+ self.start_response_handler(
b'HTTP/1.1 200 OK\r\n'
b'Transfer-Encoding: chunked\r\n'
b'Content-type: text/plain\r\n'
b'\r\n'
)
- self._start_server(handler)
pool = HTTPConnectionPool(self.host, self.port, retries=False)
r = pool.request('HEAD', '/', timeout=1, preload_content=False)
@@ -781,13 +759,12 @@ class TestHEAD(SocketDummyServerTestCase):
self.assertEqual([], list(r.stream()))
def test_empty_head_response_does_not_hang(self):
- handler = create_response_handler(
+ self.start_response_handler(
b'HTTP/1.1 200 OK\r\n'
b'Content-Length: 256\r\n'
b'Content-type: text/plain\r\n'
b'\r\n'
)
- self._start_server(handler)
pool = HTTPConnectionPool(self.host, self.port, retries=False)
r = pool.request('HEAD', '/', timeout=1, preload_content=False)