diff options
author | Berker Peksag <berker.peksag@gmail.com> | 2015-07-22 16:25:37 (GMT) |
---|---|---|
committer | Berker Peksag <berker.peksag@gmail.com> | 2015-07-22 16:25:37 (GMT) |
commit | b5754321d041938ca30f74e4141e97655b588646 (patch) | |
tree | 8120f0d436d8db72e12d6e2d1ed3474b4db7d8b7 /Lib | |
parent | b7666a30933efbbb2e400e6916bba2311340fcd1 (diff) | |
download | cpython-b5754321d041938ca30f74e4141e97655b588646.zip cpython-b5754321d041938ca30f74e4141e97655b588646.tar.gz cpython-b5754321d041938ca30f74e4141e97655b588646.tar.bz2 |
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.
Diffstat (limited to 'Lib')
-rw-r--r-- | 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 index fcdfe51..518e38e 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -298,12 +298,28 @@ class SimpleHTTPServerTestCase(BaseTestCase): 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 @@ class SimpleHTTPServerTestCase(BaseTestCase): 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): |