[Python-checkins] cpython (merge 3.5 -> default): Issue #23440: Improve http.server.SimpleHTTPRequestHandler tests
berker.peksag
python-checkins at python.org
Wed Jul 22 18:25:41 CEST 2015
https://hg.python.org/cpython/rev/7999671dc991
changeset: 97000:7999671dc991
parent: 96998:ef5c5a2bbd48
parent: 96999:267ea1731a91
user: Berker Peksag <berker.peksag at gmail.com>
date: Wed Jul 22 19:26:09 2015 +0300
summary:
Issue #23440: Improve http.server.SimpleHTTPRequestHandler tests
* Tests that index.html is served, rather than an automatic directory listing
* Tests that there is no extra data sent after the response
Patch by Martin Panter.
files:
Lib/test/test_httpservers.py | 36 +++++++++++++++++++----
1 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py
--- a/Lib/test/test_httpservers.py
+++ b/Lib/test/test_httpservers.py
@@ -298,12 +298,28 @@
BaseTestCase.tearDown(self)
def check_status_and_reason(self, response, status, data=None):
+ def close_conn():
+ """Don't close reader yet so we can check if there was leftover
+ buffered input"""
+ nonlocal reader
+ reader = response.fp
+ response.fp = None
+ reader = None
+ response._close_conn = close_conn
+
body = response.read()
self.assertTrue(response)
self.assertEqual(response.status, status)
self.assertIsNotNone(response.reason)
if data:
self.assertEqual(data, body)
+ # Ensure the server has not set up a persistent connection, and has
+ # not sent any extra data
+ self.assertEqual(response.version, 10)
+ self.assertEqual(response.msg.get("Connection", "close"), "close")
+ self.assertEqual(reader.read(30), b'', 'Connection should be closed')
+
+ reader.close()
return body
@support.requires_mac_ver(10, 5)
@@ -353,15 +369,21 @@
self.check_status_and_reason(response, HTTPStatus.NOT_FOUND)
response = self.request('/' + 'ThisDoesNotExist' + '/')
self.check_status_and_reason(response, HTTPStatus.NOT_FOUND)
- with open(os.path.join(self.tempdir_name, 'index.html'), 'w') as f:
- response = self.request('/' + self.tempdir_name + '/')
- self.check_status_and_reason(response, HTTPStatus.OK)
- # chmod() doesn't work as expected on Windows, and filesystem
- # permissions are ignored by root on Unix.
- if os.name == 'posix' and os.geteuid() != 0:
- os.chmod(self.tempdir, 0)
+
+ data = b"Dummy index file\r\n"
+ with open(os.path.join(self.tempdir_name, 'index.html'), 'wb') as f:
+ f.write(data)
+ response = self.request('/' + self.tempdir_name + '/')
+ self.check_status_and_reason(response, HTTPStatus.OK, data)
+
+ # chmod() doesn't work as expected on Windows, and filesystem
+ # permissions are ignored by root on Unix.
+ if os.name == 'posix' and os.geteuid() != 0:
+ os.chmod(self.tempdir, 0)
+ try:
response = self.request(self.tempdir_name + '/')
self.check_status_and_reason(response, HTTPStatus.NOT_FOUND)
+ finally:
os.chmod(self.tempdir, 0o755)
def test_head(self):
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list