fix s3 tests to use proper response classes
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/d5ff8eb3 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/d5ff8eb3 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/d5ff8eb3 Branch: refs/heads/trunk Commit: d5ff8eb348da8dace81c35d5af7908905d077eb6 Parents: 67f55ee Author: Anthony Shaw <anthonys...@apache.org> Authored: Tue Apr 11 14:07:51 2017 +1000 Committer: Anthony Shaw <anthonys...@apache.org> Committed: Tue Apr 11 14:07:51 2017 +1000 ---------------------------------------------------------------------- libcloud/http.py | 3 +++ libcloud/test/__init__.py | 19 +++++++++---------- libcloud/test/storage/test_s3.py | 30 ++++++++++++------------------ 3 files changed, 24 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/d5ff8eb3/libcloud/http.py ---------------------------------------------------------------------- diff --git a/libcloud/http.py b/libcloud/http.py index e78d92c..4e47589 100644 --- a/libcloud/http.py +++ b/libcloud/http.py @@ -201,6 +201,9 @@ class LibcloudConnection(LibcloudBaseConnection): def request(self, method, url, body=None, headers=None, raw=False, stream=False): url = urlparse.urljoin(self.host, url) + # all headers should be strings + if 'Content-Length' in headers and isinstance(headers['Content-Length'], int): + headers['Content-Length'] = str(headers['Content-Length']) self.response = self.session.request( method=method.lower(), url=url, http://git-wip-us.apache.org/repos/asf/libcloud/blob/d5ff8eb3/libcloud/test/__init__.py ---------------------------------------------------------------------- diff --git a/libcloud/test/__init__.py b/libcloud/test/__init__.py index 2f97f7c..0c6e5fc 100644 --- a/libcloud/test/__init__.py +++ b/libcloud/test/__init__.py @@ -16,7 +16,8 @@ import sys import random import requests - +from libcloud.common.base import Response +from libcloud.http import HttpLibResponseProxy from libcloud.http import LibcloudConnection from libcloud.utils.py3 import PY2 @@ -196,15 +197,7 @@ class MockHttp(LibcloudConnection): return meth_name -class MockHttpTestCase(MockHttp, unittest.TestCase): - # Same as the MockHttp class, but you can also use assertions in the - # classes which inherit from this one. - def __init__(self, *args, **kwargs): - unittest.TestCase.__init__(self) - - if kwargs.get('host', None) and kwargs.get('port', None): - MockHttp.__init__(self, *args, **kwargs) - +class MockHttpTestCase(unittest.TestCase): def runTest(self): pass @@ -244,6 +237,12 @@ class MockConnection(object): StorageMockHttp = MockHttp +def make_response(status=200, headers={}, connection=None): + response = requests.Response() + response.status_code = status + response.headers = headers + return Response(response, connection) + if __name__ == "__main__": import doctest doctest.testmod() http://git-wip-us.apache.org/repos/asf/libcloud/blob/d5ff8eb3/libcloud/test/storage/test_s3.py ---------------------------------------------------------------------- diff --git a/libcloud/test/storage/test_s3.py b/libcloud/test/storage/test_s3.py index 44ee4a6..429f5bb 100644 --- a/libcloud/test/storage/test_s3.py +++ b/libcloud/test/storage/test_s3.py @@ -50,7 +50,7 @@ from libcloud.utils.py3 import b from libcloud.test import MockHttp # pylint: disable-msg=E0611 from libcloud.test import MockHttpTestCase # pylint: disable-msg=E0611 -from libcloud.test import unittest +from libcloud.test import unittest, make_response from libcloud.test.file_fixtures import StorageFileFixtures # pylint: disable-msg=E0611 from libcloud.test.secrets import STORAGE_S3_PARAMS @@ -80,7 +80,7 @@ class S3MockHttp(MockHttp): httplib.responses[httplib.OK]) def _list_containers_TOKEN(self, method, url, body, headers): - self.assertEqual(headers['x-amz-security-token'], 'asdf') + assert headers['x-amz-security-token'] == 'asdf' body = self.fixtures.load('list_containers_empty.xml') return (httplib.OK, body, @@ -134,7 +134,7 @@ class S3MockHttp(MockHttp): headers = {'content-type': 'application/zip', 'etag': '"e31208wqsdoj329jd"', 'x-amz-meta-rabbits': 'monkeys', - 'content-length': 12345, + 'content-length': '12345', 'last-modified': 'Thu, 13 Sep 2012 07:13:22 GMT' } @@ -544,7 +544,7 @@ class S3Tests(unittest.TestCase): self.assertEqual(obj.name, 'test') self.assertEqual(obj.container.name, 'test2') - self.assertEqual(obj.size, 12345) + self.assertEqual(obj.size, '12345' ) self.assertEqual(obj.hash, 'e31208wqsdoj329jd') self.assertEqual(obj.extra['last_modified'], 'Thu, 13 Sep 2012 07:13:22 GMT') @@ -636,7 +636,7 @@ class S3Tests(unittest.TestCase): self.assertTrue(result) def test_download_object_invalid_file_size(self): - self.mock_raw_response_klass.type = 'INVALID_SIZE' + self.mock_response_klass.type = 'INVALID_SIZE' container = Container(name='foo_bar_container', extra={}, driver=self.driver) obj = Object(name='foo_bar_object', size=1000, hash=None, extra={}, @@ -650,7 +650,7 @@ class S3Tests(unittest.TestCase): self.assertFalse(result) def test_download_object_invalid_file_already_exists(self): - self.mock_raw_response_klass.type = 'INVALID_SIZE' + self.mock_response_klass.type = 'INVALID_SIZE' container = Container(name='foo_bar_container', extra={}, driver=self.driver) obj = Object(name='foo_bar_object', size=1000, hash=None, extra={}, @@ -713,11 +713,11 @@ class S3Tests(unittest.TestCase): def upload_file(self, object_name=None, content_type=None, request_path=None, request_method=None, headers=None, file_path=None, stream=None): - return {'response': MockResponse(200), + return {'response': make_response(200), 'bytes_transferred': 1000, 'data_hash': 'hash343hhash89h932439jsaa89'} - self.mock_raw_response_klass.type = 'INVALID_HASH1' + self.mock_response_klass.type = 'INVALID_HASH1' old_func = self.driver_type._upload_object self.driver_type._upload_object = upload_file @@ -743,11 +743,11 @@ class S3Tests(unittest.TestCase): def upload_file(self, object_name=None, content_type=None, request_path=None, request_method=None, headers=None, file_path=None, stream=None): - return {'response': MockResponse(200, headers={'etag': 'woopwoopwoop'}), + return {'response': make_response(200, headers={'etag': 'woopwoopwoop'}), 'bytes_transferred': 1000, 'data_hash': '0cc175b9c0f1b6a831c399e269772661'} - self.mock_raw_response_klass.type = 'INVALID_HASH2' + self.mock_response_klass.type = 'INVALID_HASH2' old_func = self.driver_type._upload_object self.driver_type._upload_object = upload_file @@ -772,7 +772,7 @@ class S3Tests(unittest.TestCase): def upload_file(self, object_name=None, content_type=None, request_path=None, request_method=None, headers=None, file_path=None, stream=None): - return {'response': MockResponse(200, + return {'response': make_response(200, headers={'etag': '0cc175b9c0f1b6a831c399e269772661'}), 'bytes_transferred': 1000, 'data_hash': '0cc175b9c0f1b6a831c399e269772661'} @@ -798,7 +798,7 @@ class S3Tests(unittest.TestCase): def upload_file(self, object_name=None, content_type=None, request_path=None, request_method=None, headers=None, file_path=None, stream=None): - return {'response': MockResponse(200, headers={'etag': '0cc175b9c0f1b6a831c399e269772661'}), + return {'response': make_response(200, headers={'etag': '0cc175b9c0f1b6a831c399e269772661'}), 'bytes_transferred': 1000, 'data_hash': '0cc175b9c0f1b6a831c399e269772661'} @@ -823,10 +823,8 @@ class S3Tests(unittest.TestCase): def test_upload_empty_object_via_stream(self): if self.driver.supports_s3_multipart_upload: - self.mock_raw_response_klass.type = 'MULTIPART' self.mock_response_klass.type = 'MULTIPART' else: - self.mock_raw_response_klass.type = None self.mock_response_klass.type = None container = Container(name='foo_bar_container', extra={}, @@ -844,10 +842,8 @@ class S3Tests(unittest.TestCase): def test_upload_small_object_via_stream(self): if self.driver.supports_s3_multipart_upload: - self.mock_raw_response_klass.type = 'MULTIPART' self.mock_response_klass.type = 'MULTIPART' else: - self.mock_raw_response_klass.type = None self.mock_response_klass.type = None container = Container(name='foo_bar_container', extra={}, @@ -865,10 +861,8 @@ class S3Tests(unittest.TestCase): def test_upload_big_object_via_stream(self): if self.driver.supports_s3_multipart_upload: - self.mock_raw_response_klass.type = 'MULTIPART' self.mock_response_klass.type = 'MULTIPART' else: - self.mock_raw_response_klass.type = None self.mock_response_klass.type = None container = Container(name='foo_bar_container', extra={},