Issue #26609: Fix HTTP server tests to request an absolute URL path

This commit is contained in:
Martin Panter 2016-04-09 04:56:10 +00:00
parent d0d5154251
commit fc475a9fa6
1 changed files with 29 additions and 12 deletions

View File

@ -284,6 +284,7 @@ class SimpleHTTPServerTestCase(BaseTestCase):
self.data = b'We are the knights who say Ni!' self.data = b'We are the knights who say Ni!'
self.tempdir = tempfile.mkdtemp(dir=basetempdir) self.tempdir = tempfile.mkdtemp(dir=basetempdir)
self.tempdir_name = os.path.basename(self.tempdir) 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: with open(os.path.join(self.tempdir, 'test'), 'wb') as temp:
temp.write(self.data) temp.write(self.data)
@ -330,7 +331,7 @@ class SimpleHTTPServerTestCase(BaseTestCase):
filename = os.fsdecode(support.TESTFN_UNDECODABLE) + '.txt' filename = os.fsdecode(support.TESTFN_UNDECODABLE) + '.txt'
with open(os.path.join(self.tempdir, filename), 'wb') as f: with open(os.path.join(self.tempdir, filename), 'wb') as f:
f.write(support.TESTFN_UNDECODABLE) f.write(support.TESTFN_UNDECODABLE)
response = self.request(self.tempdir_name + '/') response = self.request(self.base_url + '/')
if sys.platform == 'darwin': if sys.platform == 'darwin':
# On Mac OS the HFS+ filesystem replaces bytes that aren't valid # On Mac OS the HFS+ filesystem replaces bytes that aren't valid
# UTF-8 into a percent-encoded value. # UTF-8 into a percent-encoded value.
@ -344,27 +345,27 @@ class SimpleHTTPServerTestCase(BaseTestCase):
.encode(enc, 'surrogateescape'), body) .encode(enc, 'surrogateescape'), body)
self.assertIn(('>%s<' % html.escape(filename)) self.assertIn(('>%s<' % html.escape(filename))
.encode(enc, 'surrogateescape'), body) .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, self.check_status_and_reason(response, HTTPStatus.OK,
data=support.TESTFN_UNDECODABLE) data=support.TESTFN_UNDECODABLE)
def test_get(self): def test_get(self):
#constructs the path relative to the root directory of the HTTPServer #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) self.check_status_and_reason(response, HTTPStatus.OK, data=self.data)
# check for trailing "/" which should return 404. See Issue17324 # 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) 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) 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) 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) 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.check_status_and_reason(response, HTTPStatus.MOVED_PERMANENTLY)
self.assertEqual(response.getheader("Location"), self.assertEqual(response.getheader("Location"),
self.tempdir_name + "/?hi=1") self.base_url + "/?hi=1")
response = self.request('/ThisDoesNotExist') response = self.request('/ThisDoesNotExist')
self.check_status_and_reason(response, HTTPStatus.NOT_FOUND) self.check_status_and_reason(response, HTTPStatus.NOT_FOUND)
response = self.request('/' + 'ThisDoesNotExist' + '/') response = self.request('/' + 'ThisDoesNotExist' + '/')
@ -373,7 +374,7 @@ class SimpleHTTPServerTestCase(BaseTestCase):
data = b"Dummy index file\r\n" data = b"Dummy index file\r\n"
with open(os.path.join(self.tempdir_name, 'index.html'), 'wb') as f: with open(os.path.join(self.tempdir_name, 'index.html'), 'wb') as f:
f.write(data) f.write(data)
response = self.request('/' + self.tempdir_name + '/') response = self.request(self.base_url + '/')
self.check_status_and_reason(response, HTTPStatus.OK, data) self.check_status_and_reason(response, HTTPStatus.OK, data)
# chmod() doesn't work as expected on Windows, and filesystem # 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: if os.name == 'posix' and os.geteuid() != 0:
os.chmod(self.tempdir, 0) os.chmod(self.tempdir, 0)
try: try:
response = self.request(self.tempdir_name + '/') response = self.request(self.base_url + '/')
self.check_status_and_reason(response, HTTPStatus.NOT_FOUND) self.check_status_and_reason(response, HTTPStatus.NOT_FOUND)
finally: finally:
os.chmod(self.tempdir, 0o755) os.chmod(self.tempdir, 0o755)
def test_head(self): def test_head(self):
response = self.request( response = self.request(
self.tempdir_name + '/test', method='HEAD') self.base_url + '/test', method='HEAD')
self.check_status_and_reason(response, HTTPStatus.OK) self.check_status_and_reason(response, HTTPStatus.OK)
self.assertEqual(response.getheader('content-length'), self.assertEqual(response.getheader('content-length'),
str(len(self.data))) str(len(self.data)))
@ -404,6 +405,22 @@ class SimpleHTTPServerTestCase(BaseTestCase):
response = self.request('/', method='GETs') response = self.request('/', method='GETs')
self.check_status_and_reason(response, HTTPStatus.NOT_IMPLEMENTED) 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 = """\ cgi_file1 = """\
#!%s #!%s