From c98b194b0c2b8771d6c531df0beaf620ab9181c0 Mon Sep 17 00:00:00 2001 From: symonk Date: Tue, 19 Apr 2022 22:45:34 +0100 Subject: [PATCH 1/3] pass the underlying `timeout` to urls pool manager --- py/selenium/webdriver/remote/remote_connection.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/selenium/webdriver/remote/remote_connection.py b/py/selenium/webdriver/remote/remote_connection.py index 40dc4af449a3b..4120211eb3be9 100644 --- a/py/selenium/webdriver/remote/remote_connection.py +++ b/py/selenium/webdriver/remote/remote_connection.py @@ -143,7 +143,7 @@ def _seperate_http_proxy_auth(self): def _get_connection_manager(self): pool_manager_init_args = { - 'timeout': self._timeout + 'timeout': self.get_timeout } if self._ca_certs: pool_manager_init_args['cert_reqs'] = 'CERT_REQUIRED' From 409362cf87f89f59ada7657b1b618ace571d372e Mon Sep 17 00:00:00 2001 From: symonk Date: Tue, 19 Apr 2022 22:53:53 +0100 Subject: [PATCH 2/3] invoke the `get_timeout()` class method for `urllib` timeouts --- py/selenium/webdriver/remote/remote_connection.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/selenium/webdriver/remote/remote_connection.py b/py/selenium/webdriver/remote/remote_connection.py index 4120211eb3be9..6df923d48db23 100644 --- a/py/selenium/webdriver/remote/remote_connection.py +++ b/py/selenium/webdriver/remote/remote_connection.py @@ -143,7 +143,7 @@ def _seperate_http_proxy_auth(self): def _get_connection_manager(self): pool_manager_init_args = { - 'timeout': self.get_timeout + 'timeout': self.get_timeout() } if self._ca_certs: pool_manager_init_args['cert_reqs'] = 'CERT_REQUIRED' From f4b82daa380315d06009f847fee664ba6994a04b Mon Sep 17 00:00:00 2001 From: symonk Date: Wed, 20 Apr 2022 00:05:21 +0100 Subject: [PATCH 3/3] fix class state leaking across tests for url lib timeouts; add unit test for default --- .../webdriver/remote/remote_connection_tests.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/py/test/unit/selenium/webdriver/remote/remote_connection_tests.py b/py/test/unit/selenium/webdriver/remote/remote_connection_tests.py index 0a1eea8041ae9..8bfdfab38231c 100644 --- a/py/test/unit/selenium/webdriver/remote/remote_connection_tests.py +++ b/py/test/unit/selenium/webdriver/remote/remote_connection_tests.py @@ -15,13 +15,10 @@ # specific language governing permissions and limitations # under the License. - -import urllib3 -import pytest - - from urllib import parse +import pytest +import urllib3 from selenium import __version__ from selenium.webdriver.remote.remote_connection import ( @@ -96,15 +93,21 @@ def test_get_connection_manager_without_proxy(mock_proxy_settings_missing): assert type(conn) == urllib3.PoolManager -def test_get_connection_manager_for_certs_and_timeout(): +def test_get_connection_manager_for_certs_and_timeout(monkeypatch): + monkeypatch.setattr(RemoteConnection, "get_timeout", lambda _: 10) # Class state; leaks into subsequent tests. remote_connection = RemoteConnection('http://remote', keep_alive=False) - remote_connection.set_timeout(10) conn = remote_connection._get_connection_manager() assert conn.connection_pool_kw['timeout'] == 10 assert conn.connection_pool_kw['cert_reqs'] == 'CERT_REQUIRED' assert 'certifi/cacert.pem' in conn.connection_pool_kw['ca_certs'] +def test_default_socket_timeout_is_correct(): + remote_connection = RemoteConnection("http://remote", keep_alive=True) + conn = remote_connection._get_connection_manager() + assert conn.connection_pool_kw['timeout'] is None + + def test_get_connection_manager_with_proxy(mock_proxy_settings): remote_connection = RemoteConnection('http://remote', keep_alive=False) conn = remote_connection._get_connection_manager()