Index: tools/telemetry/third_party/gsutil/third_party/protorpc/protorpc/transport_test.py |
diff --git a/tools/telemetry/third_party/gsutil/third_party/protorpc/protorpc/transport_test.py b/tools/telemetry/third_party/gsutil/third_party/protorpc/protorpc/transport_test.py |
deleted file mode 100644 |
index 8fa39c3d464c5f6700bfc79285955ddee77d7492..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/gsutil/third_party/protorpc/protorpc/transport_test.py |
+++ /dev/null |
@@ -1,493 +0,0 @@ |
-#!/usr/bin/env python |
-# |
-# Copyright 2010 Google Inc. |
-# |
-# Licensed under the Apache License, Version 2.0 (the "License"); |
-# you may not use this file except in compliance with the License. |
-# You may obtain a copy of the License at |
-# |
-# http://www.apache.org/licenses/LICENSE-2.0 |
-# |
-# Unless required by applicable law or agreed to in writing, software |
-# distributed under the License is distributed on an "AS IS" BASIS, |
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-# See the License for the specific language governing permissions and |
-# limitations under the License. |
-# |
- |
-import errno |
-import six.moves.http_client |
-import os |
-import socket |
-import unittest |
- |
-from protorpc import messages |
-from protorpc import protobuf |
-from protorpc import protojson |
-from protorpc import remote |
-from protorpc import test_util |
-from protorpc import transport |
-from protorpc import webapp_test_util |
-from protorpc.wsgi import util as wsgi_util |
- |
-import mox |
- |
-package = 'transport_test' |
- |
- |
-class ModuleInterfaceTest(test_util.ModuleInterfaceTest, |
- test_util.TestCase): |
- |
- MODULE = transport |
- |
- |
-class Message(messages.Message): |
- |
- value = messages.StringField(1) |
- |
- |
-class Service(remote.Service): |
- |
- @remote.method(Message, Message) |
- def method(self, request): |
- pass |
- |
- |
-# Remove when RPC is no longer subclasses. |
-class TestRpc(transport.Rpc): |
- |
- waited = False |
- |
- def _wait_impl(self): |
- self.waited = True |
- |
- |
-class RpcTest(test_util.TestCase): |
- |
- def setUp(self): |
- self.request = Message(value=u'request') |
- self.response = Message(value=u'response') |
- self.status = remote.RpcStatus(state=remote.RpcState.APPLICATION_ERROR, |
- error_message='an error', |
- error_name='blam') |
- |
- self.rpc = TestRpc(self.request) |
- |
- def testConstructor(self): |
- self.assertEquals(self.request, self.rpc.request) |
- self.assertEquals(remote.RpcState.RUNNING, self.rpc.state) |
- self.assertEquals(None, self.rpc.error_message) |
- self.assertEquals(None, self.rpc.error_name) |
- |
- def response(self): |
- self.assertFalse(self.rpc.waited) |
- self.assertEquals(None, self.rpc.response) |
- self.assertTrue(self.rpc.waited) |
- |
- def testSetResponse(self): |
- self.rpc.set_response(self.response) |
- |
- self.assertEquals(self.request, self.rpc.request) |
- self.assertEquals(remote.RpcState.OK, self.rpc.state) |
- self.assertEquals(self.response, self.rpc.response) |
- self.assertEquals(None, self.rpc.error_message) |
- self.assertEquals(None, self.rpc.error_name) |
- |
- def testSetResponseAlreadySet(self): |
- self.rpc.set_response(self.response) |
- |
- self.assertRaisesWithRegexpMatch( |
- transport.RpcStateError, |
- 'RPC must be in RUNNING state to change to OK', |
- self.rpc.set_response, |
- self.response) |
- |
- def testSetResponseAlreadyError(self): |
- self.rpc.set_status(self.status) |
- |
- self.assertRaisesWithRegexpMatch( |
- transport.RpcStateError, |
- 'RPC must be in RUNNING state to change to OK', |
- self.rpc.set_response, |
- self.response) |
- |
- def testSetStatus(self): |
- self.rpc.set_status(self.status) |
- |
- self.assertEquals(self.request, self.rpc.request) |
- self.assertEquals(remote.RpcState.APPLICATION_ERROR, self.rpc.state) |
- self.assertEquals('an error', self.rpc.error_message) |
- self.assertEquals('blam', self.rpc.error_name) |
- self.assertRaisesWithRegexpMatch(remote.ApplicationError, |
- 'an error', |
- getattr, self.rpc, 'response') |
- |
- def testSetStatusAlreadySet(self): |
- self.rpc.set_response(self.response) |
- |
- self.assertRaisesWithRegexpMatch( |
- transport.RpcStateError, |
- 'RPC must be in RUNNING state to change to OK', |
- self.rpc.set_response, |
- self.response) |
- |
- def testSetNonMessage(self): |
- self.assertRaisesWithRegexpMatch( |
- TypeError, |
- 'Expected Message type, received 10', |
- self.rpc.set_response, |
- 10) |
- |
- def testSetStatusAlreadyError(self): |
- self.rpc.set_status(self.status) |
- |
- self.assertRaisesWithRegexpMatch( |
- transport.RpcStateError, |
- 'RPC must be in RUNNING state to change to OK', |
- self.rpc.set_response, |
- self.response) |
- |
- def testSetUninitializedStatus(self): |
- self.assertRaises(messages.ValidationError, |
- self.rpc.set_status, |
- remote.RpcStatus()) |
- |
- |
-class TransportTest(test_util.TestCase): |
- |
- def setUp(self): |
- remote.Protocols.set_default(remote.Protocols.new_default()) |
- |
- def do_test(self, protocol, trans): |
- request = Message() |
- request.value = u'request' |
- |
- response = Message() |
- response.value = u'response' |
- |
- encoded_request = protocol.encode_message(request) |
- encoded_response = protocol.encode_message(response) |
- |
- self.assertEquals(protocol, trans.protocol) |
- |
- received_rpc = [None] |
- def transport_rpc(remote, rpc_request): |
- self.assertEquals(remote, Service.method.remote) |
- self.assertEquals(request, rpc_request) |
- rpc = TestRpc(request) |
- rpc.set_response(response) |
- return rpc |
- trans._start_rpc = transport_rpc |
- |
- rpc = trans.send_rpc(Service.method.remote, request) |
- self.assertEquals(response, rpc.response) |
- |
- def testDefaultProtocol(self): |
- trans = transport.Transport() |
- self.do_test(protobuf, trans) |
- self.assertEquals(protobuf, trans.protocol_config.protocol) |
- self.assertEquals('default', trans.protocol_config.name) |
- |
- def testAlternateProtocol(self): |
- trans = transport.Transport(protocol=protojson) |
- self.do_test(protojson, trans) |
- self.assertEquals(protojson, trans.protocol_config.protocol) |
- self.assertEquals('default', trans.protocol_config.name) |
- |
- def testProtocolConfig(self): |
- protocol_config = remote.ProtocolConfig( |
- protojson, 'protoconfig', 'image/png') |
- trans = transport.Transport(protocol=protocol_config) |
- self.do_test(protojson, trans) |
- self.assertTrue(trans.protocol_config is protocol_config) |
- |
- def testProtocolByName(self): |
- remote.Protocols.get_default().add_protocol( |
- protojson, 'png', 'image/png', ()) |
- trans = transport.Transport(protocol='png') |
- self.do_test(protojson, trans) |
- |
- |
-@remote.method(Message, Message) |
-def my_method(self, request): |
- self.fail('self.my_method should not be directly invoked.') |
- |
- |
-class FakeConnectionClass(object): |
- |
- def __init__(self, mox): |
- self.request = mox.CreateMockAnything() |
- self.response = mox.CreateMockAnything() |
- |
- |
-class HttpTransportTest(webapp_test_util.WebServerTestBase): |
- |
- def setUp(self): |
- # Do not need much parent construction functionality. |
- |
- self.schema = 'http' |
- self.server = None |
- |
- self.request = Message(value=u'The request value') |
- self.encoded_request = protojson.encode_message(self.request) |
- |
- self.response = Message(value=u'The response value') |
- self.encoded_response = protojson.encode_message(self.response) |
- |
- def testCallSucceeds(self): |
- self.ResetServer(wsgi_util.static_page(self.encoded_response, |
- content_type='application/json')) |
- |
- rpc = self.connection.send_rpc(my_method.remote, self.request) |
- self.assertEquals(self.response, rpc.response) |
- |
- def testHttps(self): |
- self.schema = 'https' |
- self.ResetServer(wsgi_util.static_page(self.encoded_response, |
- content_type='application/json')) |
- |
- # Create a fake https connection function that really just calls http. |
- self.used_https = False |
- def https_connection(*args, **kwargs): |
- self.used_https = True |
- return six.moves.http_client.HTTPConnection(*args, **kwargs) |
- |
- original_https_connection = six.moves.http_client.HTTPSConnection |
- six.moves.http_client.HTTPSConnection = https_connection |
- try: |
- rpc = self.connection.send_rpc(my_method.remote, self.request) |
- finally: |
- six.moves.http_client.HTTPSConnection = original_https_connection |
- self.assertEquals(self.response, rpc.response) |
- self.assertTrue(self.used_https) |
- |
- def testHttpSocketError(self): |
- self.ResetServer(wsgi_util.static_page(self.encoded_response, |
- content_type='application/json')) |
- |
- bad_transport = transport.HttpTransport('http://localhost:-1/blar') |
- try: |
- bad_transport.send_rpc(my_method.remote, self.request) |
- except remote.NetworkError as err: |
- self.assertTrue(str(err).startswith('Socket error: error (')) |
- self.assertEquals(errno.ECONNREFUSED, err.cause.errno) |
- else: |
- self.fail('Expected error') |
- |
- def testHttpRequestError(self): |
- self.ResetServer(wsgi_util.static_page(self.encoded_response, |
- content_type='application/json')) |
- |
- def request_error(*args, **kwargs): |
- raise TypeError('Generic Error') |
- original_request = six.moves.http_client.HTTPConnection.request |
- six.moves.http_client.HTTPConnection.request = request_error |
- try: |
- try: |
- self.connection.send_rpc(my_method.remote, self.request) |
- except remote.NetworkError as err: |
- self.assertEquals('Error communicating with HTTP server', str(err)) |
- self.assertEquals(TypeError, type(err.cause)) |
- self.assertEquals('Generic Error', str(err.cause)) |
- else: |
- self.fail('Expected error') |
- finally: |
- six.moves.http_client.HTTPConnection.request = original_request |
- |
- def testHandleGenericServiceError(self): |
- self.ResetServer(wsgi_util.error(six.moves.http_client.INTERNAL_SERVER_ERROR, |
- 'arbitrary error', |
- content_type='text/plain')) |
- |
- rpc = self.connection.send_rpc(my_method.remote, self.request) |
- try: |
- rpc.response |
- except remote.ServerError as err: |
- self.assertEquals('HTTP Error 500: arbitrary error', str(err).strip()) |
- else: |
- self.fail('Expected ServerError') |
- |
- def testHandleGenericServiceErrorNoMessage(self): |
- self.ResetServer(wsgi_util.error(six.moves.http_client.NOT_IMPLEMENTED, |
- ' ', |
- content_type='text/plain')) |
- |
- rpc = self.connection.send_rpc(my_method.remote, self.request) |
- try: |
- rpc.response |
- except remote.ServerError as err: |
- self.assertEquals('HTTP Error 501: Not Implemented', str(err).strip()) |
- else: |
- self.fail('Expected ServerError') |
- |
- def testHandleStatusContent(self): |
- self.ResetServer(wsgi_util.static_page('{"state": "REQUEST_ERROR",' |
- ' "error_message": "a request error"' |
- '}', |
- status=six.moves.http_client.BAD_REQUEST, |
- content_type='application/json')) |
- |
- rpc = self.connection.send_rpc(my_method.remote, self.request) |
- try: |
- rpc.response |
- except remote.RequestError as err: |
- self.assertEquals('a request error', str(err)) |
- else: |
- self.fail('Expected RequestError') |
- |
- def testHandleApplicationError(self): |
- self.ResetServer(wsgi_util.static_page('{"state": "APPLICATION_ERROR",' |
- ' "error_message": "an app error",' |
- ' "error_name": "MY_ERROR_NAME"}', |
- status=six.moves.http_client.BAD_REQUEST, |
- content_type='application/json')) |
- |
- rpc = self.connection.send_rpc(my_method.remote, self.request) |
- try: |
- rpc.response |
- except remote.ApplicationError as err: |
- self.assertEquals('an app error', str(err)) |
- self.assertEquals('MY_ERROR_NAME', err.error_name) |
- else: |
- self.fail('Expected RequestError') |
- |
- def testHandleUnparsableErrorContent(self): |
- self.ResetServer(wsgi_util.static_page('oops', |
- status=six.moves.http_client.BAD_REQUEST, |
- content_type='application/json')) |
- |
- rpc = self.connection.send_rpc(my_method.remote, self.request) |
- try: |
- rpc.response |
- except remote.ServerError as err: |
- self.assertEquals('HTTP Error 400: oops', str(err)) |
- else: |
- self.fail('Expected ServerError') |
- |
- def testHandleEmptyBadRpcStatus(self): |
- self.ResetServer(wsgi_util.static_page('{"error_message": "x"}', |
- status=six.moves.http_client.BAD_REQUEST, |
- content_type='application/json')) |
- |
- rpc = self.connection.send_rpc(my_method.remote, self.request) |
- try: |
- rpc.response |
- except remote.ServerError as err: |
- self.assertEquals('HTTP Error 400: {"error_message": "x"}', str(err)) |
- else: |
- self.fail('Expected ServerError') |
- |
- def testUseProtocolConfigContentType(self): |
- expected_content_type = 'image/png' |
- def expect_content_type(environ, start_response): |
- self.assertEquals(expected_content_type, environ['CONTENT_TYPE']) |
- app = wsgi_util.static_page('', content_type=environ['CONTENT_TYPE']) |
- return app(environ, start_response) |
- |
- self.ResetServer(expect_content_type) |
- |
- protocol_config = remote.ProtocolConfig(protojson, 'json', 'image/png') |
- self.connection = self.CreateTransport(self.service_url, protocol_config) |
- |
- rpc = self.connection.send_rpc(my_method.remote, self.request) |
- self.assertEquals(Message(), rpc.response) |
- |
- |
-class SimpleRequest(messages.Message): |
- |
- content = messages.StringField(1) |
- |
- |
-class SimpleResponse(messages.Message): |
- |
- content = messages.StringField(1) |
- factory_value = messages.StringField(2) |
- remote_host = messages.StringField(3) |
- remote_address = messages.StringField(4) |
- server_host = messages.StringField(5) |
- server_port = messages.IntegerField(6) |
- |
- |
-class LocalService(remote.Service): |
- |
- def __init__(self, factory_value='default'): |
- self.factory_value = factory_value |
- |
- @remote.method(SimpleRequest, SimpleResponse) |
- def call_method(self, request): |
- return SimpleResponse(content=request.content, |
- factory_value=self.factory_value, |
- remote_host=self.request_state.remote_host, |
- remote_address=self.request_state.remote_address, |
- server_host=self.request_state.server_host, |
- server_port=self.request_state.server_port) |
- |
- @remote.method() |
- def raise_totally_unexpected(self, request): |
- raise TypeError('Kablam') |
- |
- @remote.method() |
- def raise_unexpected(self, request): |
- raise remote.RequestError('Huh?') |
- |
- @remote.method() |
- def raise_application_error(self, request): |
- raise remote.ApplicationError('App error', 10) |
- |
- |
-class LocalTransportTest(test_util.TestCase): |
- |
- def CreateService(self, factory_value='default'): |
- return |
- |
- def testBasicCallWithClass(self): |
- stub = LocalService.Stub(transport.LocalTransport(LocalService)) |
- response = stub.call_method(content='Hello') |
- self.assertEquals(SimpleResponse(content='Hello', |
- factory_value='default', |
- remote_host=os.uname()[1], |
- remote_address='127.0.0.1', |
- server_host=os.uname()[1], |
- server_port=-1), |
- response) |
- |
- def testBasicCallWithFactory(self): |
- stub = LocalService.Stub( |
- transport.LocalTransport(LocalService.new_factory('assigned'))) |
- response = stub.call_method(content='Hello') |
- self.assertEquals(SimpleResponse(content='Hello', |
- factory_value='assigned', |
- remote_host=os.uname()[1], |
- remote_address='127.0.0.1', |
- server_host=os.uname()[1], |
- server_port=-1), |
- response) |
- |
- def testTotallyUnexpectedError(self): |
- stub = LocalService.Stub(transport.LocalTransport(LocalService)) |
- self.assertRaisesWithRegexpMatch( |
- remote.ServerError, |
- 'Unexpected error TypeError: Kablam', |
- stub.raise_totally_unexpected) |
- |
- def testUnexpectedError(self): |
- stub = LocalService.Stub(transport.LocalTransport(LocalService)) |
- self.assertRaisesWithRegexpMatch( |
- remote.ServerError, |
- 'Unexpected error RequestError: Huh?', |
- stub.raise_unexpected) |
- |
- def testApplicationError(self): |
- stub = LocalService.Stub(transport.LocalTransport(LocalService)) |
- self.assertRaisesWithRegexpMatch( |
- remote.ApplicationError, |
- 'App error', |
- stub.raise_application_error) |
- |
- |
-def main(): |
- unittest.main() |
- |
- |
-if __name__ == '__main__': |
- main() |