mirror of https://github.com/python/cpython
Issue #26609: Fix HTTP server tests to request an absolute URL path
This commit is contained in:
parent
d0d5154251
commit
fc475a9fa6
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue