commit: c83238e04752d5b09d12089264b5c9ea6ca861fa Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Wed Dec 23 02:03:36 2020 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Wed Dec 23 02:03:36 2020 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c83238e0
dev-python/urllib3: add test_proxy_rejection test hang patch Package-Manager: Portage-3.0.9, Repoman-3.0.2 Signed-off-by: Sam James <sam <AT> gentoo.org> ...1.26.2-fix-test_proxy_rejection-test-hang.patch | 87 ++++++++++++++++++++++ dev-python/urllib3/urllib3-1.26.2-r1.ebuild | 4 + dev-python/urllib3/urllib3-1.26.2.ebuild | 4 + 3 files changed, 95 insertions(+) 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 new file mode 100644 index 00000000000..2af65e84f01 --- /dev/null +++ b/dev-python/urllib3/files/urllib3-1.26.2-fix-test_proxy_rejection-test-hang.patch @@ -0,0 +1,87 @@ +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.pra...@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): diff --git a/dev-python/urllib3/urllib3-1.26.2-r1.ebuild b/dev-python/urllib3/urllib3-1.26.2-r1.ebuild index 73147412195..434b386f83d 100644 --- a/dev-python/urllib3/urllib3-1.26.2-r1.ebuild +++ b/dev-python/urllib3/urllib3-1.26.2-r1.ebuild @@ -41,6 +41,10 @@ BDEPEND=" ) " +PATCHES=( + "${FILESDIR}/${P}-fix-test_proxy_rejection-test-hang.patch" +) + python_prepare_all() { # https://github.com/urllib3/urllib3/issues/1756 sed -e 's:10.255.255.1:240.0.0.0:' \ diff --git a/dev-python/urllib3/urllib3-1.26.2.ebuild b/dev-python/urllib3/urllib3-1.26.2.ebuild index 88cad5ac516..607f7c5c9d8 100644 --- a/dev-python/urllib3/urllib3-1.26.2.ebuild +++ b/dev-python/urllib3/urllib3-1.26.2.ebuild @@ -41,6 +41,10 @@ BDEPEND=" ) " +PATCHES=( + "${FILESDIR}/${P}-fix-test_proxy_rejection-test-hang.patch" +) + python_prepare_all() { # https://github.com/urllib3/urllib3/issues/1756 sed -e 's:10.255.255.1:240.0.0.0:' \