From 18cd4c209bfa948527040f985416337fb8896ca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Langa?= Date: Thu, 15 Jul 2021 14:13:23 +0200 Subject: [PATCH 1/7] [DO-NOT-MERGE] Debug Azure Pipelines Accept: (see GH-27115) --- Lib/test/test_httpservers.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index aeea020d2416d2..10f01c07ab0ae4 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -845,11 +845,14 @@ def test_accept(self): ((('Accept', 'text/html'), ('ACCEPT', 'text/plain')), 'text/html,text/plain'), ) + count = 0 for headers, expected in tests: + count += 1 headers = OrderedDict(headers) with self.subTest(headers): res = self.request('/cgi-bin/file6.py', 'GET', headers=headers) self.assertEqual(http.HTTPStatus.OK, res.status) + print(count, res.length, res.status, res.headers) expected = f"'HTTP_ACCEPT': {expected!r}" self.assertIn(expected.encode('ascii'), res.read()) From 00e6c4e2e8a61fbba0a64d05fe5a7ecfcb06414e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Langa?= Date: Thu, 15 Jul 2021 15:14:06 +0200 Subject: [PATCH 2/7] Disable Windows-specific mimetypes --- Lib/mimetypes.py | 2 +- Lib/test/test_httpservers.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py index b3d70e43b36a89..e53fbc34cfb8dc 100644 --- a/Lib/mimetypes.py +++ b/Lib/mimetypes.py @@ -367,7 +367,7 @@ def init(files=None): if files is None or _db is None: db = MimeTypes() # Quick return if not supported - db.read_windows_registry() + # db.read_windows_registry() if files is None: files = knownfiles diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 10f01c07ab0ae4..224899adb1f780 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -852,7 +852,7 @@ def test_accept(self): with self.subTest(headers): res = self.request('/cgi-bin/file6.py', 'GET', headers=headers) self.assertEqual(http.HTTPStatus.OK, res.status) - print(count, res.length, res.status, res.headers) + print(count, self.HOST, self.PORT, res.length, res.status, res.headers) expected = f"'HTTP_ACCEPT': {expected!r}" self.assertIn(expected.encode('ascii'), res.read()) From fbbb3c3a9c270b7876f4732ecfd8caa7e13f7e9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Langa?= Date: Thu, 15 Jul 2021 15:34:44 +0200 Subject: [PATCH 3/7] Revert mimetypes change, test with content-type: text/html --- Lib/mimetypes.py | 2 +- Lib/test/test_httpservers.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py index e53fbc34cfb8dc..b3d70e43b36a89 100644 --- a/Lib/mimetypes.py +++ b/Lib/mimetypes.py @@ -367,7 +367,7 @@ def init(files=None): if files is None or _db is None: db = MimeTypes() # Quick return if not supported - # db.read_windows_registry() + db.read_windows_registry() if files is None: files = knownfiles diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 224899adb1f780..c4aa2154f889b4 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -593,9 +593,12 @@ def test_html_escape_filename(self): #!%s import os -print("Content-type: text/plain") +print("X-ambv: was here") +print("Content-type: text/html") print() +print("
")
 print(repr(os.environ))
+print("
") """ From 8cceb8bdbd5ccce3bc6806b1f637677a8492ebfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Langa?= Date: Thu, 15 Jul 2021 17:10:27 +0200 Subject: [PATCH 4/7] Try repr(os.environ) --- Lib/test/test_httpservers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index c4aa2154f889b4..17950c0de9e225 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -855,7 +855,7 @@ def test_accept(self): with self.subTest(headers): res = self.request('/cgi-bin/file6.py', 'GET', headers=headers) self.assertEqual(http.HTTPStatus.OK, res.status) - print(count, self.HOST, self.PORT, res.length, res.status, res.headers) + print(count, self.HOST, self.PORT, res.length, res.status, repr(res.headers), repr(os.environ)) expected = f"'HTTP_ACCEPT': {expected!r}" self.assertIn(expected.encode('ascii'), res.read()) From 0bf4ed08f84f2dc5cb6689334fbee68566637c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Langa?= Date: Thu, 15 Jul 2021 17:25:23 +0200 Subject: [PATCH 5/7] Use str() since os.environ is test.support.os_helper.EnvironmentVarGuard in tests. --- Lib/test/test_httpservers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 17950c0de9e225..5a70cb6dece4b2 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -855,7 +855,7 @@ def test_accept(self): with self.subTest(headers): res = self.request('/cgi-bin/file6.py', 'GET', headers=headers) self.assertEqual(http.HTTPStatus.OK, res.status) - print(count, self.HOST, self.PORT, res.length, res.status, repr(res.headers), repr(os.environ)) + print(count, self.HOST, self.PORT, res.length, res.status, repr(str(res.headers)), str(os.environ)) expected = f"'HTTP_ACCEPT': {expected!r}" self.assertIn(expected.encode('ascii'), res.read()) From 94020ec7cd7a7f6aa140bca72765ded7aad5e919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Langa?= Date: Thu, 15 Jul 2021 18:34:45 +0200 Subject: [PATCH 6/7] dict(os.environ) --- Lib/test/test_httpservers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 5a70cb6dece4b2..598ac47faaf537 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -855,7 +855,7 @@ def test_accept(self): with self.subTest(headers): res = self.request('/cgi-bin/file6.py', 'GET', headers=headers) self.assertEqual(http.HTTPStatus.OK, res.status) - print(count, self.HOST, self.PORT, res.length, res.status, repr(str(res.headers)), str(os.environ)) + print(count, self.HOST, self.PORT, res.length, res.status, repr(str(res.headers)), dict(os.environ)) expected = f"'HTTP_ACCEPT': {expected!r}" self.assertIn(expected.encode('ascii'), res.read()) From 197f9bdf0ef1968e1c3c326b0244182ef229a3af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Langa?= Date: Thu, 15 Jul 2021 20:43:51 +0200 Subject: [PATCH 7/7] Fix test for unaccounted for Unicode characters in environment --- Lib/test/test_httpservers.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 598ac47faaf537..69790ec7463145 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -597,7 +597,13 @@ def test_html_escape_filename(self): print("Content-type: text/html") print() print("
")
-print(repr(os.environ))
+for k, v in os.environ.items():
+    try:
+        k.encode('ascii')
+        v.encode('ascii')
+    except UnicodeEncodeError:
+        continue  # see: BPO-44647
+    print(f"{k}={v}")
 print("
") """ @@ -848,16 +854,13 @@ def test_accept(self): ((('Accept', 'text/html'), ('ACCEPT', 'text/plain')), 'text/html,text/plain'), ) - count = 0 for headers, expected in tests: - count += 1 headers = OrderedDict(headers) with self.subTest(headers): res = self.request('/cgi-bin/file6.py', 'GET', headers=headers) self.assertEqual(http.HTTPStatus.OK, res.status) - print(count, self.HOST, self.PORT, res.length, res.status, repr(str(res.headers)), dict(os.environ)) - expected = f"'HTTP_ACCEPT': {expected!r}" - self.assertIn(expected.encode('ascii'), res.read()) + expected = f"HTTP_ACCEPT={expected}".encode('ascii') + self.assertIn(expected, res.read()) class SocketlessRequestHandler(SimpleHTTPRequestHandler):