X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/682dd5b6cc23a455766a7651e3e841257660b31c..5d00ecb0932f86e4d2aced3d9258b96522ef38bd:/sdk/python/tests/arvados_testutil.py diff --git a/sdk/python/tests/arvados_testutil.py b/sdk/python/tests/arvados_testutil.py index d138e5964a..dae3dd3b7b 100644 --- a/sdk/python/tests/arvados_testutil.py +++ b/sdk/python/tests/arvados_testutil.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import arvados +import contextlib import errno import hashlib import httplib @@ -11,6 +12,7 @@ import os import pycurl import Queue import shutil +import sys import tempfile import unittest @@ -43,6 +45,23 @@ def mock_responses(body, *codes, **headers): return mock.patch('httplib2.Http.request', side_effect=queue_with(( (fake_httplib2_response(code, **headers), body) for code in codes))) +def mock_api_responses(api_client, body, codes, headers={}): + return mock.patch.object(api_client._http, 'request', side_effect=queue_with(( + (fake_httplib2_response(code, **headers), body) for code in codes))) + +def str_keep_locator(s): + return '{}+{}'.format(hashlib.md5(s).hexdigest(), len(s)) + +@contextlib.contextmanager +def redirected_streams(stdout=None, stderr=None): + orig_stdout, sys.stdout = sys.stdout, stdout or sys.stdout + orig_stderr, sys.stderr = sys.stderr, stderr or sys.stderr + try: + yield + finally: + sys.stdout = orig_stdout + sys.stderr = orig_stderr + class FakeCurl: @classmethod @@ -79,7 +98,8 @@ class FakeCurl: self._headerfunction("HTTP/1.1 {} Status".format(self._resp_code)) for k, v in self._resp_headers.iteritems(): self._headerfunction(k + ': ' + str(v)) - self._writer(self._resp_body) + if type(self._resp_body) is not bool: + self._writer(self._resp_body) def close(self): pass @@ -122,8 +142,7 @@ class MockStreamReader(object): def __init__(self, name='.', *data): self._name = name self._data = ''.join(data) - self._data_locators = ['{}+{}'.format(hashlib.md5(d).hexdigest(), - len(d)) for d in data] + self._data_locators = [str_keep_locator(d) for d in data] self.num_retries = 0 def name(self): @@ -141,7 +160,8 @@ class ApiClientMock(object): service_host=None, service_port=None, service_ssl_flag=False, - additional_services=[]): + additional_services=[], + read_only=False): if api_mock is None: api_mock = self.api_client_mock() body = { @@ -153,6 +173,7 @@ class ApiClientMock(object): 'service_port': service_port or 65535-i, 'service_ssl_flag': service_ssl_flag, 'service_type': service_type, + 'read_only': read_only, } for i in range(0, count)] + additional_services } self._mock_api_call(api_mock.keep_services().accessible, status, body)