Index: third_party/gsutil/third_party/protorpc/protorpc/end2end_test.py |
diff --git a/third_party/gsutil/third_party/protorpc/protorpc/end2end_test.py b/third_party/gsutil/third_party/protorpc/protorpc/end2end_test.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..b53ec761fd14ef753a0184fce2220a108e7fa45e |
--- /dev/null |
+++ b/third_party/gsutil/third_party/protorpc/protorpc/end2end_test.py |
@@ -0,0 +1,148 @@ |
+#!/usr/bin/env python |
+# |
+# Copyright 2011 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. |
+# |
+ |
+"""End to end tests for ProtoRPC.""" |
+ |
+__author__ = 'rafek@google.com (Rafe Kaplan)' |
+ |
+ |
+import unittest |
+ |
+from protorpc import protojson |
+from protorpc import remote |
+from protorpc import test_util |
+from protorpc import util |
+from protorpc import webapp_test_util |
+ |
+package = 'test_package' |
+ |
+ |
+class EndToEndTest(webapp_test_util.EndToEndTestBase): |
+ |
+ def testSimpleRequest(self): |
+ self.assertEquals(test_util.OptionalMessage(string_value='+blar'), |
+ self.stub.optional_message(string_value='blar')) |
+ |
+ def testSimpleRequestComplexContentType(self): |
+ response = self.DoRawRequest( |
+ 'optional_message', |
+ content='{"string_value": "blar"}', |
+ content_type='application/json; charset=utf-8') |
+ headers = response.headers |
+ self.assertEquals(200, response.code) |
+ self.assertEquals('{"string_value": "+blar"}', response.read()) |
+ self.assertEquals('application/json', headers['content-type']) |
+ |
+ def testInitParameter(self): |
+ self.assertEquals(test_util.OptionalMessage(string_value='uninitialized'), |
+ self.stub.init_parameter()) |
+ self.assertEquals(test_util.OptionalMessage(string_value='initialized'), |
+ self.other_stub.init_parameter()) |
+ |
+ def testMissingContentType(self): |
+ code, content, headers = self.RawRequestError( |
+ 'optional_message', |
+ content='{"string_value": "blar"}', |
+ content_type='') |
+ self.assertEquals(400, code) |
+ self.assertEquals(util.pad_string('Bad Request'), content) |
+ self.assertEquals('text/plain; charset=utf-8', headers['content-type']) |
+ |
+ def testWrongPath(self): |
+ self.assertRaisesWithRegexpMatch(remote.ServerError, |
+ 'HTTP Error 404: Not Found', |
+ self.bad_path_stub.optional_message) |
+ |
+ def testUnsupportedContentType(self): |
+ code, content, headers = self.RawRequestError( |
+ 'optional_message', |
+ content='{"string_value": "blar"}', |
+ content_type='image/png') |
+ self.assertEquals(415, code) |
+ self.assertEquals(util.pad_string('Unsupported Media Type'), content) |
+ self.assertEquals(headers['content-type'], 'text/plain; charset=utf-8') |
+ |
+ def testUnsupportedHttpMethod(self): |
+ code, content, headers = self.RawRequestError('optional_message') |
+ self.assertEquals(405, code) |
+ self.assertEquals( |
+ util.pad_string('/my/service.optional_message is a ProtoRPC method.\n\n' |
+ 'Service protorpc.webapp_test_util.TestService\n\n' |
+ 'More about ProtoRPC: ' |
+ 'http://code.google.com/p/google-protorpc\n'), |
+ content) |
+ self.assertEquals(headers['content-type'], 'text/plain; charset=utf-8') |
+ |
+ def testMethodNotFound(self): |
+ self.assertRaisesWithRegexpMatch(remote.MethodNotFoundError, |
+ 'Unrecognized RPC method: does_not_exist', |
+ self.mismatched_stub.does_not_exist) |
+ |
+ def testBadMessageError(self): |
+ code, content, headers = self.RawRequestError('nested_message', |
+ content='{}') |
+ self.assertEquals(400, code) |
+ |
+ expected_content = protojson.encode_message(remote.RpcStatus( |
+ state=remote.RpcState.REQUEST_ERROR, |
+ error_message=('Error parsing ProtoRPC request ' |
+ '(Unable to parse request content: ' |
+ 'Message NestedMessage is missing ' |
+ 'required field a_value)'))) |
+ self.assertEquals(util.pad_string(expected_content), content) |
+ self.assertEquals(headers['content-type'], 'application/json') |
+ |
+ def testApplicationError(self): |
+ try: |
+ self.stub.raise_application_error() |
+ except remote.ApplicationError as err: |
+ self.assertEquals('This is an application error', err.message) |
+ self.assertEquals('ERROR_NAME', err.error_name) |
+ else: |
+ self.fail('Expected application error') |
+ |
+ def testRpcError(self): |
+ try: |
+ self.stub.raise_rpc_error() |
+ except remote.ServerError as err: |
+ self.assertEquals('Internal Server Error', err.message) |
+ else: |
+ self.fail('Expected server error') |
+ |
+ def testUnexpectedError(self): |
+ try: |
+ self.stub.raise_unexpected_error() |
+ except remote.ServerError as err: |
+ self.assertEquals('Internal Server Error', err.message) |
+ else: |
+ self.fail('Expected server error') |
+ |
+ def testBadResponse(self): |
+ try: |
+ self.stub.return_bad_message() |
+ except remote.ServerError as err: |
+ self.assertEquals('Internal Server Error', err.message) |
+ else: |
+ self.fail('Expected server error') |
+ |
+ |
+def main(): |
+ unittest.main() |
+ |
+ |
+if __name__ == '__main__': |
+ main() |