X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/a93b0bd7195895129411789f0db00a62d8c7336f..2c149e2e0a4d00831f111aedaaf47320100c3a00:/sdk/python/tests/test_api.py diff --git a/sdk/python/tests/test_api.py b/sdk/python/tests/test_api.py index f03f3f9aba..6d1e9798cf 100644 --- a/sdk/python/tests/test_api.py +++ b/sdk/python/tests/test_api.py @@ -6,13 +6,16 @@ import httplib2 import json import mimetypes import os -import run_test_server +import socket import string import unittest + +import mock +import run_test_server + from apiclient import errors as apiclient_errors from apiclient import http as apiclient_http from arvados.api import OrderedJsonModel - from arvados_testutil import fake_httplib2_response if not mimetypes.inited: @@ -103,6 +106,21 @@ class ArvadosApiTest(run_test_server.TestCaseWithServers): result = api.humans().get(uuid='test').execute() self.assertEqual(string.hexdigits, ''.join(result.keys())) + def test_socket_errors_retried(self): + api = arvados.api('v1') + self.assertTrue(hasattr(api._http, 'orig_http_request'), + "test doesn't know how to intercept HTTP requests") + api._http.orig_http_request = mock.MagicMock() + mock_response = {'user': 'person'} + api._http.orig_http_request.side_effect = [ + socket.error("mock error"), + (fake_httplib2_response(200), json.dumps(mock_response)) + ] + actual_response = api.users().current().execute() + self.assertEqual(mock_response, actual_response) + self.assertGreater(api._http.orig_http_request.call_count, 1, + "client got the right response without retrying") + if __name__ == '__main__': unittest.main()