]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/rgw/rgw_multi/zone_rados.py
2 from boto
.s3
.deletemarker
import DeleteMarker
4 from itertools
import zip_longest
# type: ignore
6 from nose
.tools
import eq_
as eq
8 from .multisite
import *
10 log
= logging
.getLogger(__name__
)
12 def check_object_eq(k1
, k2
, check_extra
= True):
15 log
.debug('comparing key name=%s', k1
.name
)
17 eq(k1
.version_id
, k2
.version_id
)
18 eq(k1
.is_latest
, k2
.is_latest
)
19 eq(k1
.last_modified
, k2
.last_modified
)
20 if isinstance(k1
, DeleteMarker
):
21 assert isinstance(k2
, DeleteMarker
)
24 eq(k1
.get_contents_as_string(), k2
.get_contents_as_string())
25 eq(k1
.metadata
, k2
.metadata
)
26 eq(k1
.cache_control
, k2
.cache_control
)
27 eq(k1
.content_type
, k2
.content_type
)
28 eq(k1
.content_encoding
, k2
.content_encoding
)
29 eq(k1
.content_disposition
, k2
.content_disposition
)
30 eq(k1
.content_language
, k2
.content_language
)
33 eq(k1
.owner
.id, k2
.owner
.id)
34 eq(k1
.owner
.display_name
, k2
.owner
.display_name
)
35 eq(k1
.storage_class
, k2
.storage_class
)
37 eq(k1
.encrypted
, k2
.encrypted
)
39 class RadosZone(Zone
):
40 def __init__(self
, name
, zonegroup
= None, cluster
= None, data
= None, zone_id
= None, gateways
= None):
41 super(RadosZone
, self
).__init
__(name
, zonegroup
, cluster
, data
, zone_id
, gateways
)
48 def __init__(self
, zone
, credentials
):
49 super(RadosZone
.Conn
, self
).__init
__(zone
, credentials
)
51 def get_bucket(self
, name
):
52 return self
.conn
.get_bucket(name
)
54 def create_bucket(self
, name
):
55 return self
.conn
.create_bucket(name
)
57 def delete_bucket(self
, name
):
58 return self
.conn
.delete_bucket(name
)
60 def check_bucket_eq(self
, zone_conn
, bucket_name
):
61 log
.info('comparing bucket=%s zones={%s, %s}', bucket_name
, self
.name
, zone_conn
.name
)
62 b1
= self
.get_bucket(bucket_name
)
63 b2
= zone_conn
.get_bucket(bucket_name
)
65 b1_versions
= b1
.list_versions()
66 log
.debug('bucket1 objects:')
68 log
.debug('o=%s', o
.name
)
70 b2_versions
= b2
.list_versions()
71 log
.debug('bucket2 objects:')
73 log
.debug('o=%s', o
.name
)
75 for k1
, k2
in zip_longest(b1_versions
, b2_versions
):
77 log
.critical('key=%s is missing from zone=%s', k2
.name
, self
.name
)
80 log
.critical('key=%s is missing from zone=%s', k1
.name
, zone_conn
.name
)
83 check_object_eq(k1
, k2
)
85 if isinstance(k1
, DeleteMarker
):
86 # verify that HEAD sees a delete marker
87 assert b1
.get_key(k1
.name
) is None
88 assert b2
.get_key(k2
.name
) is None
90 # now get the keys through a HEAD operation, verify that the available data is the same
91 k1_head
= b1
.get_key(k1
.name
, version_id
=k1
.version_id
)
92 k2_head
= b2
.get_key(k2
.name
, version_id
=k2
.version_id
)
93 check_object_eq(k1_head
, k2_head
, False)
96 # compare the olh to make sure they agree about the current version
97 k1_olh
= b1
.get_key(k1
.name
)
98 k2_olh
= b2
.get_key(k2
.name
)
99 # if there's a delete marker, HEAD will return None
101 check_object_eq(k1_olh
, k2_olh
, False)
103 log
.info('success, bucket identical: bucket=%s zones={%s, %s}', bucket_name
, self
.name
, zone_conn
.name
)
107 def get_role(self
, role_name
):
108 return self
.iam_conn
.get_role(role_name
)
110 def check_role_eq(self
, zone_conn
, role_name
):
111 log
.info('comparing role=%s zones={%s, %s}', role_name
, self
.name
, zone_conn
.name
)
112 r1
= self
.get_role(role_name
)
113 r2
= zone_conn
.get_role(role_name
)
117 log
.debug('comparing role name=%s', r1
['get_role_response']['get_role_result']['role']['role_name'])
118 eq(r1
['get_role_response']['get_role_result']['role']['role_name'], r2
['get_role_response']['get_role_result']['role']['role_name'])
119 eq(r1
['get_role_response']['get_role_result']['role']['role_id'], r2
['get_role_response']['get_role_result']['role']['role_id'])
120 eq(r1
['get_role_response']['get_role_result']['role']['path'], r2
['get_role_response']['get_role_result']['role']['path'])
121 eq(r1
['get_role_response']['get_role_result']['role']['arn'], r2
['get_role_response']['get_role_result']['role']['arn'])
122 eq(r1
['get_role_response']['get_role_result']['role']['max_session_duration'], r2
['get_role_response']['get_role_result']['role']['max_session_duration'])
123 eq(r1
['get_role_response']['get_role_result']['role']['assume_role_policy_document'], r2
['get_role_response']['get_role_result']['role']['assume_role_policy_document'])
125 log
.info('success, role identical: role=%s zones={%s, %s}', role_name
, self
.name
, zone_conn
.name
)
129 def create_role(self
, path
, rolename
, policy_document
, tag_list
):
130 return self
.iam_conn
.create_role(rolename
, policy_document
, path
)
132 def get_conn(self
, credentials
):
133 return self
.Conn(self
, credentials
)