I filed a PR in the upstream Python repo to make this simpler, however, this will take a while if it ever gets merged. This is a workaround until that gets merged and released.
@lholecek and @vmaljulin could you please review?
rebased onto 5353fe88f70565d24e25b12908235a4922ca1e95
Can you mock the transport constructors instead to see it was called with correct timeout?
rebased onto d20f0a74a30f01ce4f98b421c6549af72f7889bc
@lholecek I addressed your comment. Here is the diff:
--- a/greenwave/tests/test_xmlrpc_server_proxy.py +++ b/greenwave/tests/test_xmlrpc_server_proxy.py @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0+ +import mock import pytest from greenwave import xmlrpc_server_proxy @@ -13,10 +14,24 @@ from greenwave import xmlrpc_server_proxy ('https://localhost:5000/api', xmlrpc_server_proxy.SafeTransport, (3, 12), 12), ), ) -def test_get_server_proxy_app_context(url, expected_transport, timeout, expected_timeout, app): +@mock.patch('greenwave.xmlrpc_server_proxy.Transport') +@mock.patch('greenwave.xmlrpc_server_proxy.SafeTransport') +def test_get_server_proxy_app_context( + mock_safe_transport, + mock_transport, + url, + expected_transport, + timeout, + expected_timeout, + app, +): with app.app_context(): app.config['REQUESTS_TIMEOUT'] = timeout - proxy = xmlrpc_server_proxy.get_server_proxy(url) - transport = proxy._ServerProxy__transport - assert isinstance(transport, expected_transport) - assert transport._timeout == expected_timeout + xmlrpc_server_proxy.get_server_proxy(url) + + if expected_transport == xmlrpc_server_proxy.Transport: + mock_transport.__init__.assert_called_once_with(url, expected_timeout) + mock_safe_transport.__init__.assert_not_called() + elif expected_transport == xmlrpc_server_proxy.SafeTransport: + mock_safe_transport.__init__.assert_called_once_with(url, expected_timeout) + mock_transport.__init__.assert_not_called() diff --git a/greenwave/xmlrpc_server_proxy.py b/greenwave/xmlrpc_server_proxy.py index 8edf17e..543e4cc 100644 --- a/greenwave/xmlrpc_server_proxy.py +++ b/greenwave/xmlrpc_server_proxy.py @@ -40,7 +40,7 @@ def get_server_proxy(uri, timeout=None): class Transport(xmlrpc.client.Transport): - def __init__(self, *args, timeout=None, **kwargs): + def __init__(self, *args, timeout=None, **kwargs): # pragma: no cover super().__init__(*args, **kwargs) self._timeout = timeout @@ -51,7 +51,7 @@ class Transport(xmlrpc.client.Transport): class SafeTransport(xmlrpc.client.SafeTransport): - def __init__(self, *args, timeout=None, **kwargs): + def __init__(self, *args, timeout=None, **kwargs): # pragma: no cover super().__init__(*args, **kwargs) self._timeout = timeout
+1
Pull-Request has been merged by lholecek
I filed a PR in the upstream Python repo to make this simpler, however, this will take a while if it ever gets merged. This is a workaround until that gets merged and released.