X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0b8673b62cd9717fcf7e3bbb608ae07018093d6f..093ec98e4a065acfc537ea22c08c337c115fe273:/sdk/python/tests/test_api.py diff --git a/sdk/python/tests/test_api.py b/sdk/python/tests/test_api.py index aa4c49899c..c249f46d3c 100644 --- a/sdk/python/tests/test_api.py +++ b/sdk/python/tests/test_api.py @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 + from __future__ import absolute_import from builtins import str from builtins import range @@ -78,6 +82,19 @@ class ArvadosApiTest(run_test_server.TestCaseWithServers): for msg in ["Bad UUID format", "Bad output format"]: self.assertIn(msg, err_s) + @mock.patch('time.sleep') + def test_exceptions_include_request_id(self, sleep): + api = arvados.api('v1') + api.request_id='fake-request-id' + api._http.orig_http_request = mock.MagicMock() + api._http.orig_http_request.side_effect = socket.error('mock error') + caught = None + try: + api.users().current().execute() + except Exception as e: + caught = e + self.assertRegex(str(caught), r'fake-request-id') + def test_exceptions_without_errors_have_basic_info(self): mock_responses = { 'arvados.humans.delete': ( @@ -97,6 +114,16 @@ class ArvadosApiTest(run_test_server.TestCaseWithServers): text = "X" * maxsize arvados.api('v1').collections().create(body={"manifest_text": text}).execute() + def test_default_request_timeout(self): + api = arvados.api('v1') + self.assertEqual(api._http.timeout, 300, + "Default timeout value should be 300") + + def test_custom_request_timeout(self): + api = arvados.api('v1', timeout=1234) + self.assertEqual(api._http.timeout, 1234, + "Requested timeout value was 1234") + def test_ordered_json_model(self): mock_responses = { 'arvados.humans.get': ( @@ -138,6 +165,33 @@ class RetryREST(unittest.TestCase): self.assertEqual(sleep.call_args_list, [mock.call(RETRY_DELAY_INITIAL)]) + @mock.patch('time.sleep') + def test_same_automatic_request_id_on_retry(self, sleep): + self.api._http.orig_http_request.side_effect = ( + socket.error('mock error'), + self.request_success, + ) + self.api.users().current().execute() + calls = self.api._http.orig_http_request.call_args_list + self.assertEqual(len(calls), 2) + self.assertEqual( + calls[0][1]['headers']['X-Request-Id'], + calls[1][1]['headers']['X-Request-Id']) + self.assertRegex(calls[0][1]['headers']['X-Request-Id'], r'^req-[a-z0-9]{20}$') + + @mock.patch('time.sleep') + def test_provided_request_id_on_retry(self, sleep): + self.api.request_id='fake-request-id' + self.api._http.orig_http_request.side_effect = ( + socket.error('mock error'), + self.request_success, + ) + self.api.users().current().execute() + calls = self.api._http.orig_http_request.call_args_list + self.assertEqual(len(calls), 2) + for call in calls: + self.assertEqual(call[1]['headers']['X-Request-Id'], 'fake-request-id') + @mock.patch('time.sleep') def test_socket_error_retry_delay(self, sleep): self.api._http.orig_http_request.side_effect = socket.error('mock')