New submission from Michael Felt <[email protected]>:
Going back to issue17234 - there has been a test to check that a URL with a
trailing slash reports 404 status.
On AIX a trailing-slash is ignored - if the rest of the path is a valid
filename.
At a very low-level, in Modules/_io/fileio.c the code could be adjusted to
always look for a trailing slash, and if AIX considers the name to be a file
(S_ISREG(mode)) then this could be promoted to an error. just as it does for
"posix" opens directories with trailing slashes (and fileio.c deals with that
in a Python way).
A quick fix is to skip the test issue17324 introduced;
A medium fix would be to modify Lib/http/server.py to verify that a URL with
trailing slash is a directory, and otherwise raise an exception;
A deeper fix would be to add "a hack" specific to AIX, and raise (emulate) an
OSError when there is a trailing slash and the pathname is a file.
In short, the simple resolution - without impacting core in any way is:
diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py
index cc829a522b..31be9b4479 100644
--- a/Lib/test/test_httpservers.py
+++ b/Lib/test/test_httpservers.py
@@ -13,6 +13,7 @@ import sys
import re
import base64
import ntpath
+import platform
import shutil
import email.message
import email.utils
@@ -29,6 +30,7 @@ from io import BytesIO
import unittest
from test import support
+AIX = platform.system() == 'AIX'
class NoLogRequestHandler:
def log_message(self, *args):
@@ -417,9 +419,11 @@ class SimpleHTTPServerTestCase(BaseTestCase):
#constructs the path relative to the root directory of the HTTPServer
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.base_url + '/test/')
- self.check_status_and_reason(response, HTTPStatus.NOT_FOUND)
+ # AIX open() will open a filename with a trailing slash - as a file
+ if not AIX:
+ # check for trailing "/" which should return 404. See Issue17324
+ response = self.request(self.base_url + '/test/')
+ self.check_status_and_reason(response, HTTPStatus.NOT_FOUND)
response = self.request(self.base_url + '/')
self.check_status_and_reason(response, HTTPStatus.OK)
response = self.request(self.base_url)
@@ -519,8 +523,9 @@ class SimpleHTTPServerTestCase(BaseTestCase):
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)
+ if not AIX:
+ 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)
Comments!
----------
components: Tests
messages: 325519
nosy: Michael.Felt
priority: normal
severity: normal
status: open
title: Fix test_httpservers on AIX
type: behavior
versions: Python 3.8
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue34711>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com