From 305f6dd6e94498afa53554075009cb490803e255 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Tue, 22 May 2018 12:52:11 -0400 Subject: [PATCH] test/rgw: check_bucket_eq() supports delete markers Signed-off-by: Casey Bodley --- src/test/rgw/rgw_multi/zone_rados.py | 33 +++++++++++++++++++++------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/test/rgw/rgw_multi/zone_rados.py b/src/test/rgw/rgw_multi/zone_rados.py index 04b9c232753..99cc84edb7c 100644 --- a/src/test/rgw/rgw_multi/zone_rados.py +++ b/src/test/rgw/rgw_multi/zone_rados.py @@ -1,4 +1,5 @@ import logging +from boto.s3.deletemarker import DeleteMarker try: from itertools import izip_longest as zip_longest @@ -16,6 +17,13 @@ def check_object_eq(k1, k2, check_extra = True): assert k2 log.debug('comparing key name=%s', k1.name) eq(k1.name, k2.name) + eq(k1.version_id, k2.version_id) + eq(k1.is_latest, k2.is_latest) + eq(k1.last_modified, k2.last_modified) + if isinstance(k1, DeleteMarker): + assert isinstance(k2, DeleteMarker) + return + eq(k1.get_contents_as_string(), k2.get_contents_as_string()) eq(k1.metadata, k2.metadata) eq(k1.cache_control, k2.cache_control) @@ -24,16 +32,13 @@ def check_object_eq(k1, k2, check_extra = True): eq(k1.content_disposition, k2.content_disposition) eq(k1.content_language, k2.content_language) eq(k1.etag, k2.etag) - eq(k1.last_modified, k2.last_modified) if check_extra: eq(k1.owner.id, k2.owner.id) eq(k1.owner.display_name, k2.owner.display_name) eq(k1.storage_class, k2.storage_class) eq(k1.size, k2.size) - eq(k1.version_id, k2.version_id) eq(k1.encrypted, k2.encrypted) - class RadosZone(Zone): def __init__(self, name, zonegroup = None, cluster = None, data = None, zone_id = None, gateways = None): super(RadosZone, self).__init__(name, zonegroup, cluster, data, zone_id, gateways) @@ -77,11 +82,23 @@ class RadosZone(Zone): check_object_eq(k1, k2) - # now get the keys through a HEAD operation, verify that the available data is the same - k1_head = b1.get_key(k1.name) - k2_head = b2.get_key(k2.name) - - check_object_eq(k1_head, k2_head, False) + if isinstance(k1, DeleteMarker): + # verify that HEAD sees a delete marker + assert b1.get_key(k1.name) is None + assert b2.get_key(k2.name) is None + else: + # now get the keys through a HEAD operation, verify that the available data is the same + k1_head = b1.get_key(k1.name, version_id=k1.version_id) + k2_head = b2.get_key(k2.name, version_id=k2.version_id) + check_object_eq(k1_head, k2_head, False) + + if k1.version_id: + # compare the olh to make sure they agree about the current version + k1_olh = b1.get_key(k1.name) + k2_olh = b2.get_key(k2.name) + # if there's a delete marker, HEAD will return None + if k1_olh or k2_olh: + check_object_eq(k1_olh, k2_olh, False) log.info('success, bucket identical: bucket=%s zones={%s, %s}', bucket_name, self.name, zone_conn.name) -- 2.39.5