def test_http_500(self): net.json_request_async.return_value = future_exception( net.Error('internal', 500, 'Internal server error') ) with self.assertRaises(net.Error): self._create_task()
def fetch_json_async(hostname, path, payload=None, headers=None, **kwargs): """Sends JSON request to Gerrit, parses prefixed JSON response. See 'fetch' for the list of arguments. Returns: Deserialized response body on success. None on 404 response. Raises: net.Error on communication errors. """ headers = (headers or {}).copy() headers['Accept'] = 'application/json' if payload is not None: headers['Content-Type'] = 'application/json; charset=utf-8' content = yield fetch_async( hostname=hostname, path=path, payload=utils.encode_to_json(payload) if payload is not None else None, headers=headers, **kwargs) if content is None: raise ndb.Return(None) if not content.startswith(RESPONSE_PREFIX): msg = ('Unexpected response format. Expected prefix %s. Received: %s' % (RESPONSE_PREFIX, content)) raise net.Error(msg, status_code=200, response=content) raise ndb.Return(json.loads(content[len(RESPONSE_PREFIX):]))
def test_http_400(self): net.json_request_async.return_value = future_exception( net.Error('HTTP 401', 400, 'invalid request')) swarming._create_swarming_task(1) build = self.build.key.get() self.assertEqual(build.status, common_pb2.INFRA_FAILURE) self.assertEqual( build.proto.summary_markdown, r'Swarming task creation API responded with HTTP 400: `invalid request`' )
def test_response_transport_error_internal(self, request_async): request_async.side_effect = net.Error( msg='boom', status_code=500, response='boom', headers={ # No X-Prpc-Grpc-Code header. }, ) with self.assertRaises(prpc_client.RpcError) as cm: self.make_test_client().Take(empty_pb2.Empty()) self.assertEqual(cm.exception.status_code, codes.StatusCode.INTERNAL)
def test_not_allowed_account(self): now = datetime.datetime(2010, 1, 2, 3, 4, 5) self.mock_now(now) self.mock_json_request( expected_url='https://tokens.example.com/prpc/' 'tokenserver.minter.TokenMinter/MintOAuthTokenGrant', expected_payload=None, response=net.Error('bad', 403, 'Token server error message')) with self.assertRaises(auth.AuthorizationError) as err: service_accounts.get_oauth_token_grant( '*****@*****.**', datetime.timedelta(seconds=3600)) self.assertEqual('Token server error message', str(err.exception))
def test_finalize_invocation_async_failed_precondition(self): with mock.patch('server.resultdb._call_resultdb_recorder_api_async' ) as mock_call: mock_call.side_effect = net.Error( msg='error', status_code=400, response='error', headers={'X-Prpc-Grpc-Code': '9'}) resultdb.finalize_invocation_async('task001', 'secret').get_result() mock_call.assert_called_once_with( 'FinalizeInvocation', { 'name': 'invocations/task-test-swarming.appspot.com-task001', }, headers={'update-token': 'secret'}, scopes=None)
def test_publish_fatal_error(self): self.mock_requests([ { 'url': 'https://pubsub.googleapis.com/v1/projects/a/topics/def:publish', 'method': 'POST', 'payload': { 'messages': [ { 'attributes': {'a': 1, 'b': 2}, 'data': 'bXNn', }, ], }, 'response': net.Error('fatal error', 403, ''), } ]) with self.assertRaises(pubsub.Error): pubsub.publish('projects/a/topics/def', 'msg', {'a': 1, 'b': 2})
def json_request(url, *args, **kwargs): raise net.Error('', 400, '')
def create_instance_group_manager(*args, **kwargs): raise net.Error('', 400, '')
def test_yield_instances_in_zones(self): self.mock_requests([ ( { 'deadline': 120, 'params': { 'maxResults': 250, }, 'url': 'https://www.googleapis.com/compute/v1/projects/123' '/zones/z1/instances', }, { 'items': [instance('a')], 'nextPageToken': 'page-token', }, ), ( { 'deadline': 120, 'params': { 'maxResults': 250, 'pageToken': 'page-token', }, 'url': 'https://www.googleapis.com/compute/v1/projects/123' '/zones/z1/instances', }, { 'items': [instance('b')], }, ), ( { 'deadline': 120, 'params': { 'maxResults': 250, }, 'url': 'https://www.googleapis.com/compute/v1/projects/123' '/zones/z2/instances', }, { 'items': [instance('c')], }, ), ( { 'deadline': 120, 'params': { 'maxResults': 250, }, 'url': 'https://www.googleapis.com/compute/v1/projects/123' '/zones/z3/instances', }, # Missing zone is ignored. net.Error('Bad request', 400, json.dumps({ 'error': { 'errors': [{ 'domain': 'global', 'reason': 'invalid', 'message': 'Invalid value for field \'zone\': \'z3\'. Unknown zone.', }], 'code': 400, 'message': 'Invalid value for field \'zone\': \'z3\'. Unknown zone.', }, })), ), ]) result = gce.Project('123').yield_instances_in_zones(['z1', 'z2', 'z3']) self.assertEqual( [instance('a'), instance('b'), instance('c')], list(result))
def create_instance_template(*args, **kwargs): raise net.Error('', 409, '')
def mock_raise(_): raise net.Error('test', 404, None)
def json_request(*args, **kwargs): raise net.Error('403', 403, '403')