From: Yuval Lifshitz Date: Thu, 31 Jan 2019 17:31:38 +0000 (+0200) Subject: rgw: pubsub initial regression test X-Git-Tag: v14.1.0~41^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8ebafe0b0ebfac01da762bd0b96722a79d934abe;p=ceph.git rgw: pubsub initial regression test Signed-off-by: Yuval Lifshitz --- diff --git a/src/test/rgw/rgw_multi/tests_ps.py b/src/test/rgw/rgw_multi/tests_ps.py new file mode 100644 index 000000000000..1aab4200040b --- /dev/null +++ b/src/test/rgw/rgw_multi/tests_ps.py @@ -0,0 +1,44 @@ +import logging + +import boto +import boto.s3.connection + +from rgw_multi.multisite import * +from rgw_multi.tests import * +from rgw_multi.zone_pubsub import * + +log = logging.getLogger(__name__) + +# check if at least one pubsub zone exist +def check_ps_configured(): + realm = get_realm() + zonegroup = realm.master_zonegroup() + + es_zones = zonegroup.zones_by_type.get("pubsub") + if not es_zones: + raise SkipTest("Requires at least one PS zone") + +# check if a specific zone is pubsub zone +def is_ps_zone(zone_conn): + if not zone_conn: + return False + return zone_conn.zone.tier_type() == "pubsub" + +# initialize the environment +def init_env(): + check_ps_configured() + + realm = get_realm() + zonegroup = realm.master_zonegroup() + zonegroup_conns = ZonegroupConns(zonegroup) + + zonegroup_meta_checkpoint(zonegroup) + + for conn in zonegroup_conns.zones: + if is_ps_zone(conn): + zone_meta_checkpoint(conn.zone) + +# test basic sync +def test_ps_sync(): + init_env() + diff --git a/src/test/rgw/rgw_multi/zone_pubsub.py b/src/test/rgw/rgw_multi/zone_pubsub.py new file mode 100644 index 000000000000..8efefa4b70df --- /dev/null +++ b/src/test/rgw/rgw_multi/zone_pubsub.py @@ -0,0 +1,44 @@ +import json +import requests.compat +import logging + +import boto +import boto.s3.connection + +import dateutil.parser + +from .multisite import * +from .tools import * + +log = logging.getLogger(__name__) + +class PSZone(Zone): + def __init__(self, name, zonegroup = None, cluster = None, data = None, zone_id = None, gateways = None): + super(PSZone, self).__init__(name, zonegroup, cluster, data, zone_id, gateways) + + def is_read_only(self): + return True + + def tier_type(self): + return "pubsub" + + def create(self, cluster, args = None, check_retcode = True): + """ create the object with the given arguments """ + + if args is None: + args = '' + + args += [ '--tier-type', self.tier_type() ] + + return self.json_command(cluster, 'create', args, check_retcode=check_retcode) + + def has_buckets(self): + return False + + class Conn(ZoneConn): + def __init__(self, zone, credentials): + super(PSZone.Conn, self).__init__(zone, credentials) + + def get_conn(self, credentials): + return self.Conn(self, credentials) + diff --git a/src/test/rgw/test_multi.py b/src/test/rgw/test_multi.py index d6a722581853..4e0fbe3f4a45 100644 --- a/src/test/rgw/test_multi.py +++ b/src/test/rgw/test_multi.py @@ -18,10 +18,12 @@ from rgw_multi.zone_es import ESZone as ESZone from rgw_multi.zone_es import ESZoneConfig as ESZoneConfig from rgw_multi.zone_cloud import CloudZone as CloudZone from rgw_multi.zone_cloud import CloudZoneConfig as CloudZoneConfig +from rgw_multi.zone_pubsub import PSZone as PSZone # make tests from rgw_multi.tests available to nose from rgw_multi.tests import * from rgw_multi.tests_es import * +from rgw_multi.tests_ps import * mstart_path = os.getenv('MSTART_PATH') if mstart_path is None: @@ -158,6 +160,7 @@ def init(parse_args): cfg = configparser.RawConfigParser({ 'num_zonegroups': 1, 'num_zones': 3, + 'num_ps_zones': 0, 'num_es_zones': 0, 'num_cloud_zones': 0, 'gateways_per_zone': 2, @@ -198,6 +201,7 @@ def init(parse_args): parser.add_argument('--checkpoint-retries', type=int, default=cfg.getint(section, 'checkpoint_retries')) parser.add_argument('--checkpoint-delay', type=int, default=cfg.getint(section, 'checkpoint_delay')) parser.add_argument('--reconfigure-delay', type=int, default=cfg.getint(section, 'reconfigure_delay')) + parser.add_argument('--num-ps-zones', type=int, default=cfg.getint(section, 'num_ps_zones')) es_cfg = [] cloud_cfg = [] @@ -243,7 +247,7 @@ def init(parse_args): num_es_zones = len(es_cfg) num_cloud_zones = len(cloud_cfg) - num_zones = args.num_zones + num_es_zones + num_cloud_zones + num_zones = args.num_zones + num_es_zones + num_cloud_zones + args.num_ps_zones for zg in range(0, args.num_zonegroups): zonegroup = multisite.ZoneGroup(zonegroup_name(zg), period) @@ -282,7 +286,8 @@ def init(parse_args): zonegroup.get(cluster) es_zone = (z >= args.num_zones and z < args.num_zones + num_es_zones) - cloud_zone = (z >= args.num_zones + num_es_zones) + cloud_zone = (z >= args.num_zones + num_es_zones and z < args.num_zones + num_es_zones + num_cloud_zones) + ps_zone = (z >= args.num_zones + num_es_zones + num_cloud_zones) # create the zone in its zonegroup zone = multisite.Zone(zone_name(zg, z), zonegroup, cluster) @@ -294,6 +299,9 @@ def init(parse_args): ccfg = cloud_cfg[zone_index] zone = CloudZone(zone_name(zg, z), ccfg.endpoint, ccfg.credentials, ccfg.source_bucket, ccfg.target_path, zonegroup, cluster) + elif ps_zone: + zone_index = z - args.num_zones - num_es_zones - num_cloud_zones + zone = PSZone(zone_name(zg, z), zonegroup, cluster) else: zone = RadosZone(zone_name(zg, z), zonegroup, cluster) @@ -362,3 +370,4 @@ def setup_module(): if __name__ == "__main__": init(True) +