Port image/glance.py to Python 3

* Fix usage of six.reraise(): new_exc is the exception value, not the
  exception type
* Replace __builtin__ with six.moves.builtins.
* test_extracting_v2_boot_properties(): set config.glance_num_retries to
  fix the test on Python 3 (comparison between mock and int now raises
  a TypeError on Python 3).
* TestGlanceSerializer: use dictionaries with only one key to have a
  reliable output even if the hash is randomized (hash randomization is
  now enabled by default in Python 3).
* tox.ini: add cinder.tests.unit.image.test_glance to Python 3.4.

Blueprint cinder-python3
Change-Id: I33cd02e1b0666d7b5999b2fdaf469dc59fff1866
This commit is contained in:
Victor Stinner 2015-06-30 16:06:28 +02:00
parent 85b0917570
commit c67d8b2d2d
3 changed files with 14 additions and 17 deletions
cinder
image
tests/unit/image
tox.ini

@ -482,14 +482,14 @@ def _reraise_translated_image_exception(image_id):
"""Transform the exception for the image but keep its traceback intact."""
_exc_type, exc_value, exc_trace = sys.exc_info()
new_exc = _translate_image_exception(image_id, exc_value)
six.reraise(new_exc, None, exc_trace)
six.reraise(type(new_exc), new_exc, exc_trace)
def _reraise_translated_exception():
"""Transform the exception but keep its traceback intact."""
_exc_type, exc_value, exc_trace = sys.exc_info()
new_exc = _translate_plain_exception(exc_value)
six.reraise(new_exc, None, exc_trace)
six.reraise(type(new_exc), new_exc, exc_trace)
def _translate_image_exception(image_id, exc_value):

@ -45,15 +45,11 @@ class TestGlanceSerializer(test.TestCase):
'properties': {
'prop1': 'propvalue1',
'mappings': [
{'virtual': 'aaa',
'device': 'bbb'},
{'virtual': 'xxx',
'device': 'yyy'}],
{'device': 'bbb'},
{'device': 'yyy'}],
'block_device_mapping': [
{'virtual_device': 'fake',
'device_name': '/dev/fake'},
{'virtual_device': 'ephemeral0',
'device_name': '/dev/fake0'}]}}
{'device_name': '/dev/fake'},
{'device_name': '/dev/fake0'}]}}
converted_expected = {
'name': 'image1',
@ -62,12 +58,11 @@ class TestGlanceSerializer(test.TestCase):
'properties': {
'prop1': 'propvalue1',
'mappings':
'[{"device": "bbb", "virtual": "aaa"}, '
'{"device": "yyy", "virtual": "xxx"}]',
'[{"device": "bbb"}, '
'{"device": "yyy"}]',
'block_device_mapping':
'[{"virtual_device": "fake", "device_name": "/dev/fake"}, '
'{"virtual_device": "ephemeral0", '
'"device_name": "/dev/fake0"}]'}}
'[{"device_name": "/dev/fake"}, '
'{"device_name": "/dev/fake0"}]'}}
converted = glance._convert_to_string(metadata)
self.assertEqual(converted, converted_expected)
self.assertEqual(glance._convert_from_string(converted), metadata)
@ -518,7 +513,7 @@ class TestGlanceImageService(test.TestCase):
self.assertRaises(exception.ImageNotFound, service.download,
self.context, image_id, writer)
@mock.patch('__builtin__.open')
@mock.patch('six.moves.builtins.open')
@mock.patch('shutil.copyfileobj')
def test_download_from_direct_file(self, mock_copyfileobj, mock_open):
fixture = self._make_fixture(name='test image',
@ -530,7 +525,7 @@ class TestGlanceImageService(test.TestCase):
self.service.download(self.context, image_id, writer)
mock_copyfileobj.assert_called_once_with(mock.ANY, writer)
@mock.patch('__builtin__.open')
@mock.patch('six.moves.builtins.open')
@mock.patch('shutil.copyfileobj')
def test_download_from_direct_file_non_file(self,
mock_copyfileobj, mock_open):
@ -613,6 +608,7 @@ class TestGlanceImageService(test.TestCase):
def test_extracting_v2_boot_properties(self, config):
config.glance_api_version = 2
config.glance_num_retries = 0
attributes = ['size', 'disk_format', 'owner', 'container_format',
'checksum', 'id', 'name', 'created_at', 'updated_at',

@ -29,6 +29,7 @@ downloadcache = ~/cache/pip
[testenv:py34]
commands =
python -m testtools.run \
cinder.tests.unit.image.test_glance \
cinder.tests.unit.targets.test_base_iscsi_driver \
cinder.tests.unit.targets.test_cxt_driver \
cinder.tests.unit.targets.test_iser_driver \