summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-07-09 10:57:46 +0000
committerGerrit Code Review <review@openstack.org>2015-07-09 10:57:46 +0000
commit30f10f3ba0fea818e37069e770bdc879eae4660e (patch)
tree9b8783de9b040686c49829c3c4b463e6f6f61559
parent0133ea3140b3d70de3cbc23740c47ac5c9da5881 (diff)
parent815166f6e9e2b2da69094eb46c428d87c4d8afdb (diff)
downloadglance_store-30f10f3ba0fea818e37069e770bdc879eae4660e.tar.gz
Merge "Port vmware driver to Python 3"
-rw-r--r--glance_store/_drivers/vmware_datastore.py15
-rw-r--r--glance_store/tests/unit/test_vmware_store.py75
2 files changed, 51 insertions, 39 deletions
diff --git a/glance_store/_drivers/vmware_datastore.py b/glance_store/_drivers/vmware_datastore.py
index b7e8756..c6ec393 100644
--- a/glance_store/_drivers/vmware_datastore.py
+++ b/glance_store/_drivers/vmware_datastore.py
@@ -155,18 +155,18 @@ class _ChunkReader(_Reader):
def __init__(self, data, blocksize=8192):
self.blocksize = blocksize
- self.current_chunk = ""
+ self.current_chunk = b""
self.closed = False
super(_ChunkReader, self).__init__(data)
def read(self, size=None):
- ret = ""
+ ret = b""
while size is None or size >= len(self.current_chunk):
ret += self.current_chunk
if size is not None:
size -= len(self.current_chunk)
if self.closed:
- self.current_chunk = ""
+ self.current_chunk = b""
break
self._get_chunk()
else:
@@ -181,9 +181,14 @@ class _ChunkReader(_Reader):
self._size += chunk_len
self.checksum.update(chunk)
if chunk:
- self.current_chunk = '%x\r\n%s\r\n' % (chunk_len, chunk)
+ if six.PY3:
+ size_header = ('%x\r\n' % chunk_len).encode('ascii')
+ self.current_chunk = b''.join((size_header, chunk,
+ b'\r\n'))
+ else:
+ self.current_chunk = b'%x\r\n%s\r\n' % (chunk_len, chunk)
else:
- self.current_chunk = '0\r\n\r\n'
+ self.current_chunk = b'0\r\n\r\n'
self.closed = True
diff --git a/glance_store/tests/unit/test_vmware_store.py b/glance_store/tests/unit/test_vmware_store.py
index dcd93ad..5c23203 100644
--- a/glance_store/tests/unit/test_vmware_store.py
+++ b/glance_store/tests/unit/test_vmware_store.py
@@ -158,7 +158,7 @@ class TestStore(base.StoreBaseTest,
fake_select_datastore.return_value = self.store.datastores[0][0]
expected_image_id = str(uuid.uuid4())
expected_size = FIVE_KB
- expected_contents = "*" * expected_size
+ expected_contents = b"*" * expected_size
hash_code = hashlib.md5(expected_contents)
expected_checksum = hash_code.hexdigest()
fake_size.__get__ = mock.Mock(return_value=expected_size)
@@ -170,7 +170,7 @@ class TestStore(base.StoreBaseTest,
expected_image_id,
VMWARE_DS['vmware_datacenter_path'],
VMWARE_DS['vmware_datastore_name'])
- image = six.StringIO(expected_contents)
+ image = six.BytesIO(expected_contents)
with self._mock_http_connection() as HttpConn:
HttpConn.return_value = FakeHTTPConnection()
location, size, checksum, _ = self.store.add(expected_image_id,
@@ -193,7 +193,7 @@ class TestStore(base.StoreBaseTest,
fake_select_datastore.return_value = self.store.datastores[0][0]
expected_image_id = str(uuid.uuid4())
expected_size = FIVE_KB
- expected_contents = "*" * expected_size
+ expected_contents = b"*" * expected_size
hash_code = hashlib.md5(expected_contents)
expected_checksum = hash_code.hexdigest()
fake_size.__get__ = mock.Mock(return_value=expected_size)
@@ -205,7 +205,7 @@ class TestStore(base.StoreBaseTest,
expected_image_id,
VMWARE_DS['vmware_datacenter_path'],
VMWARE_DS['vmware_datastore_name'])
- image = six.StringIO(expected_contents)
+ image = six.BytesIO(expected_contents)
with self._mock_http_connection() as HttpConn:
HttpConn.return_value = FakeHTTPConnection()
location, size, checksum, _ = self.store.add(expected_image_id,
@@ -269,8 +269,8 @@ class TestStore(base.StoreBaseTest,
self.assertRaises(exceptions.NotFound, self.store.get_size, loc)
def test_reader_full(self):
- content = 'XXX'
- image = six.StringIO(content)
+ content = b'XXX'
+ image = six.BytesIO(content)
expected_checksum = hashlib.md5(content).hexdigest()
reader = vm_store._Reader(image)
ret = reader.read()
@@ -279,12 +279,12 @@ class TestStore(base.StoreBaseTest,
self.assertEqual(len(content), reader.size)
def test_reader_partial(self):
- content = 'XXX'
- image = six.StringIO(content)
- expected_checksum = hashlib.md5('X').hexdigest()
+ content = b'XXX'
+ image = six.BytesIO(content)
+ expected_checksum = hashlib.md5(b'X').hexdigest()
reader = vm_store._Reader(image)
ret = reader.read(1)
- self.assertEqual('X', ret)
+ self.assertEqual(b'X', ret)
self.assertEqual(expected_checksum, reader.checksum.hexdigest())
self.assertEqual(1, reader.size)
@@ -293,54 +293,61 @@ class TestStore(base.StoreBaseTest,
Test that the image file reader returns the expected chunk of data
when the block size is larger than the image.
"""
- content = 'XXX'
- image = six.StringIO(content)
+ content = b'XXX'
+ image = six.BytesIO(content)
expected_checksum = hashlib.md5(content).hexdigest()
reader = vm_store._ChunkReader(image)
ret = reader.read()
- expected_chunk = '%x\r\n%s\r\n' % (len(content), content)
- last_chunk = '0\r\n\r\n'
- self.assertEqual('%s%s' % (expected_chunk, last_chunk), ret)
- self.assertEqual(image.len, reader.size)
+ if six.PY3:
+ expected_chunk = ('%x\r\n%s\r\n'
+ % (len(content), content.decode('ascii')))
+ expected_chunk = expected_chunk.encode('ascii')
+ else:
+ expected_chunk = b'%x\r\n%s\r\n' % (len(content), content)
+ last_chunk = b'0\r\n\r\n'
+ self.assertEqual(expected_chunk + last_chunk, ret)
+ self.assertEqual(len(content), reader.size)
self.assertEqual(expected_checksum, reader.checksum.hexdigest())
self.assertTrue(reader.closed)
ret = reader.read()
- self.assertEqual(image.len, reader.size)
+ self.assertEqual(len(content), reader.size)
self.assertEqual(expected_checksum, reader.checksum.hexdigest())
self.assertTrue(reader.closed)
- self.assertEqual('', ret)
+ self.assertEqual(b'', ret)
def test_chunkreader_image_larger_blocksize(self):
"""
Test that the image file reader returns the expected chunks when
the block size specified is smaller than the image.
"""
- content = 'XXX'
- image = six.StringIO(content)
+ content = b'XXX'
+ image = six.BytesIO(content)
expected_checksum = hashlib.md5(content).hexdigest()
- last_chunk = '0\r\n\r\n'
+ last_chunk = b'0\r\n\r\n'
reader = vm_store._ChunkReader(image, blocksize=1)
ret = reader.read()
- expected_chunk = '1\r\nX\r\n'
- self.assertEqual('%s%s%s%s' % (expected_chunk, expected_chunk,
- expected_chunk, last_chunk), ret)
+ expected_chunk = b'1\r\nX\r\n'
+ expected = (expected_chunk + expected_chunk + expected_chunk
+ + last_chunk)
+ self.assertEqual(expected,
+ ret)
self.assertEqual(expected_checksum, reader.checksum.hexdigest())
- self.assertEqual(image.len, reader.size)
+ self.assertEqual(len(content), reader.size)
self.assertTrue(reader.closed)
def test_chunkreader_size(self):
"""Test that the image reader takes into account the specified size."""
- content = 'XXX'
- image = six.StringIO(content)
+ content = b'XXX'
+ image = six.BytesIO(content)
expected_checksum = hashlib.md5(content).hexdigest()
reader = vm_store._ChunkReader(image, blocksize=1)
ret = reader.read(size=3)
- self.assertEqual('1\r\n', ret)
+ self.assertEqual(b'1\r\n', ret)
ret = reader.read(size=1)
- self.assertEqual('X', ret)
+ self.assertEqual(b'X', ret)
ret = reader.read()
self.assertEqual(expected_checksum, reader.checksum.hexdigest())
- self.assertEqual(image.len, reader.size)
+ self.assertEqual(len(content), reader.size)
self.assertTrue(reader.closed)
def test_sanity_check_api_retry_count(self):
@@ -431,8 +438,8 @@ class TestStore(base.StoreBaseTest,
def test_unexpected_status(self, mock_api_session, mock_select_datastore):
expected_image_id = str(uuid.uuid4())
expected_size = FIVE_KB
- expected_contents = "*" * expected_size
- image = six.StringIO(expected_contents)
+ expected_contents = b"*" * expected_size
+ image = six.BytesIO(expected_contents)
self.session = mock.Mock()
with self._mock_http_connection() as HttpConn:
HttpConn.return_value = FakeHTTPConnection(status=401)
@@ -472,8 +479,8 @@ class TestStore(base.StoreBaseTest,
mock_select_datastore.return_value = self.store.datastores[0][0]
expected_image_id = str(uuid.uuid4())
expected_size = FIVE_KB
- expected_contents = "*" * expected_size
- image = six.StringIO(expected_contents)
+ expected_contents = b"*" * expected_size
+ image = six.BytesIO(expected_contents)
self.session = mock.Mock()
with self._mock_http_connection() as HttpConn:
HttpConn.request.side_effect = IOError