From fc475a9fa6712b707867802df6072232562a3bd9 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Sat, 9 Apr 2016 04:56:10 +0000 Subject: Issue #26609: Fix HTTP server tests to request an absolute URL path --- Lib/test/test_httpservers.py | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index b71fa5e..f396ebd 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -284,6 +284,7 @@ class SimpleHTTPServerTestCase(BaseTestCase): self.data = b'We are the knights who say Ni!' self.tempdir = tempfile.mkdtemp(dir=basetempdir) self.tempdir_name = os.path.basename(self.tempdir) + self.base_url = '/' + self.tempdir_name with open(os.path.join(self.tempdir, 'test'), 'wb') as temp: temp.write(self.data) @@ -330,7 +331,7 @@ class SimpleHTTPServerTestCase(BaseTestCase): filename = os.fsdecode(support.TESTFN_UNDECODABLE) + '.txt' with open(os.path.join(self.tempdir, filename), 'wb') as f: f.write(support.TESTFN_UNDECODABLE) - response = self.request(self.tempdir_name + '/') + response = self.request(self.base_url + '/') if sys.platform == 'darwin': # On Mac OS the HFS+ filesystem replaces bytes that aren't valid # UTF-8 into a percent-encoded value. @@ -344,27 +345,27 @@ class SimpleHTTPServerTestCase(BaseTestCase): .encode(enc, 'surrogateescape'), body) self.assertIn(('>%s<' % html.escape(filename)) .encode(enc, 'surrogateescape'), body) - response = self.request(self.tempdir_name + '/' + quotedname) + response = self.request(self.base_url + '/' + quotedname) self.check_status_and_reason(response, HTTPStatus.OK, data=support.TESTFN_UNDECODABLE) def test_get(self): #constructs the path relative to the root directory of the HTTPServer - response = self.request(self.tempdir_name + '/test') + response = self.request(self.base_url + '/test') self.check_status_and_reason(response, HTTPStatus.OK, data=self.data) # check for trailing "/" which should return 404. See Issue17324 - response = self.request(self.tempdir_name + '/test/') + response = self.request(self.base_url + '/test/') self.check_status_and_reason(response, HTTPStatus.NOT_FOUND) - response = self.request(self.tempdir_name + '/') + response = self.request(self.base_url + '/') self.check_status_and_reason(response, HTTPStatus.OK) - response = self.request(self.tempdir_name) + response = self.request(self.base_url) self.check_status_and_reason(response, HTTPStatus.MOVED_PERMANENTLY) - response = self.request(self.tempdir_name + '/?hi=2') + response = self.request(self.base_url + '/?hi=2') self.check_status_and_reason(response, HTTPStatus.OK) - response = self.request(self.tempdir_name + '?hi=1') + response = self.request(self.base_url + '?hi=1') self.check_status_and_reason(response, HTTPStatus.MOVED_PERMANENTLY) self.assertEqual(response.getheader("Location"), - self.tempdir_name + "/?hi=1") + self.base_url + "/?hi=1") response = self.request('/ThisDoesNotExist') self.check_status_and_reason(response, HTTPStatus.NOT_FOUND) response = self.request('/' + 'ThisDoesNotExist' + '/') @@ -373,7 +374,7 @@ class SimpleHTTPServerTestCase(BaseTestCase): 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 + '/') + response = self.request(self.base_url + '/') self.check_status_and_reason(response, HTTPStatus.OK, data) # chmod() doesn't work as expected on Windows, and filesystem @@ -381,14 +382,14 @@ class SimpleHTTPServerTestCase(BaseTestCase): if os.name == 'posix' and os.geteuid() != 0: os.chmod(self.tempdir, 0) try: - response = self.request(self.tempdir_name + '/') + response = self.request(self.base_url + '/') self.check_status_and_reason(response, HTTPStatus.NOT_FOUND) finally: os.chmod(self.tempdir, 0o755) def test_head(self): response = self.request( - self.tempdir_name + '/test', method='HEAD') + self.base_url + '/test', method='HEAD') self.check_status_and_reason(response, HTTPStatus.OK) self.assertEqual(response.getheader('content-length'), str(len(self.data))) @@ -404,6 +405,22 @@ class SimpleHTTPServerTestCase(BaseTestCase): response = self.request('/', method='GETs') self.check_status_and_reason(response, HTTPStatus.NOT_IMPLEMENTED) + def test_path_without_leading_slash(self): + response = self.request(self.tempdir_name + '/test') + self.check_status_and_reason(response, HTTPStatus.OK, data=self.data) + response = self.request(self.tempdir_name + '/test/') + self.check_status_and_reason(response, HTTPStatus.NOT_FOUND) + response = self.request(self.tempdir_name + '/') + self.check_status_and_reason(response, HTTPStatus.OK) + response = self.request(self.tempdir_name) + self.check_status_and_reason(response, HTTPStatus.MOVED_PERMANENTLY) + response = self.request(self.tempdir_name + '/?hi=2') + self.check_status_and_reason(response, HTTPStatus.OK) + response = self.request(self.tempdir_name + '?hi=1') + self.check_status_and_reason(response, HTTPStatus.MOVED_PERMANENTLY) + self.assertEqual(response.getheader("Location"), + self.tempdir_name + "/?hi=1") + cgi_file1 = """\ #!%s -- cgit v0.12