Index: third_party/gsutil/third_party/boto/tests/unit/__init__.py |
diff --git a/third_party/gsutil/third_party/boto/tests/unit/__init__.py b/third_party/gsutil/third_party/boto/tests/unit/__init__.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3332965701a380a6991a57d70f4174f5bfe2dc4d |
--- /dev/null |
+++ b/third_party/gsutil/third_party/boto/tests/unit/__init__.py |
@@ -0,0 +1,110 @@ |
+from boto.compat import http_client |
+from tests.compat import mock, unittest |
+ |
+ |
+class AWSMockServiceTestCase(unittest.TestCase): |
+ """Base class for mocking aws services.""" |
+ # This param is used by the unittest module to display a full |
+ # diff when assert*Equal methods produce an error message. |
+ maxDiff = None |
+ connection_class = None |
+ |
+ def setUp(self): |
+ self.https_connection = mock.Mock(spec=http_client.HTTPSConnection) |
+ self.https_connection.debuglevel = 0 |
+ self.https_connection_factory = ( |
+ mock.Mock(return_value=self.https_connection), ()) |
+ self.service_connection = self.create_service_connection( |
+ https_connection_factory=self.https_connection_factory, |
+ aws_access_key_id='aws_access_key_id', |
+ aws_secret_access_key='aws_secret_access_key') |
+ self.initialize_service_connection() |
+ |
+ def initialize_service_connection(self): |
+ self.actual_request = None |
+ self.original_mexe = self.service_connection._mexe |
+ self.service_connection._mexe = self._mexe_spy |
+ self.proxy = None |
+ self.use_proxy = False |
+ |
+ def create_service_connection(self, **kwargs): |
+ if self.connection_class is None: |
+ raise ValueError("The connection_class class attribute must be " |
+ "set to a non-None value.") |
+ return self.connection_class(**kwargs) |
+ |
+ def _mexe_spy(self, request, *args, **kwargs): |
+ self.actual_request = request |
+ return self.original_mexe(request, *args, **kwargs) |
+ |
+ def create_response(self, status_code, reason='', header=[], body=None): |
+ if body is None: |
+ body = self.default_body() |
+ response = mock.Mock(spec=http_client.HTTPResponse) |
+ response.status = status_code |
+ response.read.return_value = body |
+ response.reason = reason |
+ |
+ response.getheaders.return_value = header |
+ response.msg = dict(header) |
+ |
+ def overwrite_header(arg, default=None): |
+ header_dict = dict(header) |
+ if arg in header_dict: |
+ return header_dict[arg] |
+ else: |
+ return default |
+ response.getheader.side_effect = overwrite_header |
+ |
+ return response |
+ |
+ def assert_request_parameters(self, params, ignore_params_values=None): |
+ """Verify the actual parameters sent to the service API.""" |
+ request_params = self.actual_request.params.copy() |
+ if ignore_params_values is not None: |
+ for param in ignore_params_values: |
+ try: |
+ del request_params[param] |
+ except KeyError: |
+ pass |
+ self.assertDictEqual(request_params, params) |
+ |
+ def set_http_response(self, status_code, reason='', header=[], body=None): |
+ http_response = self.create_response(status_code, reason, header, body) |
+ self.https_connection.getresponse.return_value = http_response |
+ |
+ def default_body(self): |
+ return '' |
+ |
+ |
+class MockServiceWithConfigTestCase(AWSMockServiceTestCase): |
+ def setUp(self): |
+ super(MockServiceWithConfigTestCase, self).setUp() |
+ self.environ = {} |
+ self.config = {} |
+ self.config_patch = mock.patch('boto.provider.config.get', |
+ self.get_config) |
+ self.has_config_patch = mock.patch('boto.provider.config.has_option', |
+ self.has_config) |
+ self.environ_patch = mock.patch('os.environ', self.environ) |
+ self.config_patch.start() |
+ self.has_config_patch.start() |
+ self.environ_patch.start() |
+ |
+ def tearDown(self): |
+ self.config_patch.stop() |
+ self.has_config_patch.stop() |
+ self.environ_patch.stop() |
+ |
+ def has_config(self, section_name, key): |
+ try: |
+ self.config[section_name][key] |
+ return True |
+ except KeyError: |
+ return False |
+ |
+ def get_config(self, section_name, key, default=None): |
+ try: |
+ return self.config[section_name][key] |
+ except KeyError: |
+ return None |