X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f3250432a47c835f4c594348b0d4904a247c3365..f69d2824c997c53caa11d30ba816768bad52e12b:/sdk/python/tests/arvados_testutil.py diff --git a/sdk/python/tests/arvados_testutil.py b/sdk/python/tests/arvados_testutil.py index 378e93f386..a10802ae81 100644 --- a/sdk/python/tests/arvados_testutil.py +++ b/sdk/python/tests/arvados_testutil.py @@ -53,17 +53,34 @@ def fake_requests_response(code, body, **headers): r.raw = io.BytesIO(body) return r -def mock_get_responses(body, *codes, **headers): - return mock.patch('requests.get', side_effect=queue_with(( - fake_requests_response(code, body, **headers) for code in codes))) +# The following methods patch requests.Session(), where return_value is a mock +# Session object. The put/get attributes are set on mock Session, and the +# desired put/get behavior is set on the put/get mocks. def mock_put_responses(body, *codes, **headers): - return mock.patch('requests.put', side_effect=queue_with(( - fake_requests_response(code, body, **headers) for code in codes))) + m = mock.MagicMock() + if isinstance(body, tuple): + codes = list(codes) + codes.insert(0, body) + m.return_value.put.side_effect = queue_with((fake_requests_response(code, b, **headers) for b, code in codes)) + else: + m.return_value.put.side_effect = queue_with((fake_requests_response(code, body, **headers) for code in codes)) + return mock.patch('requests.Session', m) + +def mock_get_responses(body, *codes, **headers): + m = mock.MagicMock() + m.return_value.get.side_effect = queue_with((fake_requests_response(code, body, **headers) for code in codes)) + return mock.patch('requests.Session', m) -def mock_requestslib_responses(method, body, *codes, **headers): - return mock.patch(method, side_effect=queue_with(( - fake_requests_response(code, body, **headers) for code in codes))) +def mock_get(side_effect): + m = mock.MagicMock() + m.return_value.get.side_effect = side_effect + return mock.patch('requests.Session', m) + +def mock_put(side_effect): + m = mock.MagicMock() + m.return_value.put.side_effect = side_effect + return mock.patch('requests.Session', m) class MockStreamReader(object): def __init__(self, name='.', *data): @@ -79,7 +96,6 @@ class MockStreamReader(object): def readfrom(self, start, size, num_retries=None): return self._data[start:start + size] - class ApiClientMock(object): def api_client_mock(self): return mock.MagicMock(name='api_client_mock') @@ -88,7 +104,8 @@ class ApiClientMock(object): service_type='disk', service_host=None, service_port=None, - service_ssl_flag=False): + service_ssl_flag=False, + additional_services=[]): if api_mock is None: api_mock = self.api_client_mock() body = { @@ -100,7 +117,7 @@ class ApiClientMock(object): 'service_port': service_port or 65535-i, 'service_ssl_flag': service_ssl_flag, 'service_type': service_type, - } for i in range(0, count)] + } for i in range(0, count)] + additional_services } self._mock_api_call(api_mock.keep_services().accessible, status, body) return api_mock