diff options
Diffstat (limited to 'dev-python/urllib3/files/urllib3-1.26.2-fix-test_proxy_rejection-test-hang.patch')
-rw-r--r-- | dev-python/urllib3/files/urllib3-1.26.2-fix-test_proxy_rejection-test-hang.patch | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/dev-python/urllib3/files/urllib3-1.26.2-fix-test_proxy_rejection-test-hang.patch b/dev-python/urllib3/files/urllib3-1.26.2-fix-test_proxy_rejection-test-hang.patch deleted file mode 100644 index 2af65e84f016..000000000000 --- a/dev-python/urllib3/files/urllib3-1.26.2-fix-test_proxy_rejection-test-hang.patch +++ /dev/null @@ -1,87 +0,0 @@ -Fixes a hang on test_proxy_rejection. -https://github.com/urllib3/urllib3/commit/087d4de8487379033970898866625c00e0d51c85.patch - -From 087d4de8487379033970898866625c00e0d51c85 Mon Sep 17 00:00:00 2001 -From: Quentin Pradet <quentin.pradet@gmail.com> -Date: Tue, 3 Nov 2020 17:15:50 +0400 -Subject: [PATCH] Fix test_proxy_rejection even with two localhost entries - ---- - test/contrib/test_socks.py | 34 +++++++++++++++++++++++++++++++--- - 1 file changed, 31 insertions(+), 3 deletions(-) - -diff --git a/test/contrib/test_socks.py b/test/contrib/test_socks.py -index 1966513c1..ed716f188 100644 ---- a/test/contrib/test_socks.py -+++ b/test/contrib/test_socks.py -@@ -1,8 +1,12 @@ -+from __future__ import absolute_import -+ - import socket - import threading -+from socket import getaddrinfo as real_getaddrinfo - from test import SHORT_TIMEOUT - - import pytest -+import socks as py_socks - - from dummyserver.server import DEFAULT_CA, DEFAULT_CERTS - from dummyserver.testcase import IPV4SocketDummyServerTestCase -@@ -87,6 +91,26 @@ def _address_from_socket(sock): - raise RuntimeError("Unexpected addr type: %r" % addr_type) - - -+def _set_up_fake_getaddrinfo(monkeypatch): -+ # Work around https://github.com/urllib3/urllib3/pull/2034 -+ # Nothing prevents localhost to point to two different IPs. For example, in the -+ # Ubuntu set up by GitHub Actions, localhost points both to 127.0.0.1 and ::1. -+ # -+ # In case of failure, PySocks will try the same request on both IPs, but our -+ # handle_socks[45]_negotiation functions don't handle retries, which leads either to -+ # a deadlock or a timeout in case of a failure on the first address. -+ # -+ # However, some tests need to exercise failure. We don't want retries there, but -+ # can't affect PySocks retries via its API. Instead, we monkeypatch PySocks so that -+ # it only sees a single address, which effectively disables retries. -+ def fake_getaddrinfo(addr, port, family, socket_type): -+ gai_list = real_getaddrinfo(addr, port, family, socket_type) -+ gai_list = [gai for gai in gai_list if gai[0] == socket.AF_INET] -+ return gai_list[:1] -+ -+ monkeypatch.setattr(py_socks.socket, "getaddrinfo", fake_getaddrinfo) -+ -+ - def handle_socks5_negotiation(sock, negotiate, username=None, password=None): - """ - Handle the SOCKS5 handshake. -@@ -334,7 +358,8 @@ def request_handler(listener): - with pytest.raises(NewConnectionError): - pm.request("GET", "http://example.com", retries=False) - -- def test_proxy_rejection(self): -+ def test_proxy_rejection(self, monkeypatch): -+ _set_up_fake_getaddrinfo(monkeypatch) - evt = threading.Event() - - def request_handler(listener): -@@ -429,7 +454,9 @@ def request_handler(listener): - assert response.data == b"" - assert response.headers["Server"] == "SocksTestServer" - -- def test_socks_with_invalid_password(self): -+ def test_socks_with_invalid_password(self, monkeypatch): -+ _set_up_fake_getaddrinfo(monkeypatch) -+ - def request_handler(listener): - sock = listener.accept()[0] - -@@ -592,7 +619,8 @@ def request_handler(listener): - response = pm.request("GET", "http://example.com") - assert response.status == 200 - -- def test_proxy_rejection(self): -+ def test_proxy_rejection(self, monkeypatch): -+ _set_up_fake_getaddrinfo(monkeypatch) - evt = threading.Event() - - def request_handler(listener): |