[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