Merge "Fix MD5 headers regression"

This commit is contained in:
Jenkins 2015-06-18 21:19:51 +00:00 committed by Gerrit Code Review
commit 21bc0f3e1e
3 changed files with 17 additions and 8 deletions

View File

@ -2022,6 +2022,7 @@ class OpenStackCloud(object):
(md5, sha256) = self._get_file_hashes(filename)
headers[OBJECT_MD5_KEY] = md5
headers[OBJECT_SHA256_KEY] = sha256
header_list = sorted([':'.join([k, v]) for (k, v) in headers.items()])
# On some clouds this is not necessary. On others it is. I'm confused.
self.create_container(container)
@ -2034,7 +2035,7 @@ class OpenStackCloud(object):
object_name=name)
for r in self.manager.submitTask(_tasks.ObjectCreate(
container=container, objects=[upload],
options=dict(headers=headers,
options=dict(header=header_list,
segment_size=segment_size))):
if not r['success']:
raise OpenStackCloudException(

View File

@ -54,6 +54,8 @@ class TestObject(base.TestCase):
name = 'test-%d' % size
self.cloud.create_object(container, name, sparse_file.name,
segment_size=segment_size)
self.assertFalse(self.cloud.is_object_stale(container, name,
sparse_file.name))
self.assertIsNotNone(
self.cloud.get_object_metadata(container, name))
self.cloud.delete_object(container, name)

View File

@ -301,13 +301,15 @@ class TestMemoryCache(base.TestCase):
fake_image_dict = meta.obj_to_dict(fake_image)
self.assertEqual([fake_image_dict], self.cloud.list_images())
@mock.patch.object(shade.OpenStackCloud, '_get_file_hashes')
@mock.patch.object(shade.OpenStackCloud, 'glance_client')
@mock.patch.object(shade.OpenStackCloud, 'swift_client')
@mock.patch.object(shade.OpenStackCloud, 'swift_service')
def test_create_image_task(self,
swift_service_mock,
swift_mock,
glance_mock):
glance_mock,
get_file_hashes):
self.cloud.api_versions['image'] = '2'
self.cloud.image_api_use_tasks = True
@ -325,6 +327,10 @@ class TestMemoryCache(base.TestCase):
glance_mock.images.list.return_value = []
self.assertEqual([], self.cloud.list_images())
fake_md5 = "fake-md5"
fake_sha256 = "fake-sha256"
get_file_hashes.return_value = (fake_md5, fake_sha256)
# V2's warlock objects just work like dicts
class FakeImage(dict):
status = 'CREATED'
@ -335,8 +341,8 @@ class TestMemoryCache(base.TestCase):
fake_image.update({
'id': '99',
'name': '99 name',
shade.IMAGE_MD5_KEY: '',
shade.IMAGE_SHA256_KEY: '',
shade.IMAGE_MD5_KEY: fake_md5,
shade.IMAGE_SHA256_KEY: fake_sha256,
})
glance_mock.images.list.return_value = [fake_image]
@ -352,8 +358,8 @@ class TestMemoryCache(base.TestCase):
glance_mock.tasks.get.return_value = fake_task
self._call_create_image(name='99 name',
container='image_upload_v2_test_container')
args = {'headers': {'x-object-meta-x-shade-md5': mock.ANY,
'x-object-meta-x-shade-sha256': mock.ANY},
args = {'header': ['x-object-meta-x-shade-md5:fake-md5',
'x-object-meta-x-shade-sha256:fake-sha256'],
'segment_size': 1000}
swift_service_mock.upload.assert_called_with(
container='image_upload_v2_test_container',
@ -362,8 +368,8 @@ class TestMemoryCache(base.TestCase):
glance_mock.tasks.create.assert_called_with(type='import', input={
'import_from': 'image_upload_v2_test_container/99 name',
'image_properties': {'name': '99 name'}})
args = {'owner_specified.shade.md5': mock.ANY,
'owner_specified.shade.sha256': mock.ANY,
args = {'owner_specified.shade.md5': fake_md5,
'owner_specified.shade.sha256': fake_sha256,
'image_id': '99'}
glance_mock.images.update.assert_called_with(**args)
fake_image_dict = meta.obj_to_dict(fake_image)