]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: pubsub initial regression test
authorYuval Lifshitz <yuvalif@yahoo.com>
Thu, 31 Jan 2019 17:31:38 +0000 (19:31 +0200)
committerYuval Lifshitz <yuvalif@yahoo.com>
Wed, 6 Feb 2019 10:55:16 +0000 (12:55 +0200)
Signed-off-by: Yuval Lifshitz <yuvalif@yahoo.com>
src/test/rgw/rgw_multi/tests_ps.py [new file with mode: 0644]
src/test/rgw/rgw_multi/zone_pubsub.py [new file with mode: 0644]
src/test/rgw/test_multi.py

diff --git a/src/test/rgw/rgw_multi/tests_ps.py b/src/test/rgw/rgw_multi/tests_ps.py
new file mode 100644 (file)
index 0000000..1aab420
--- /dev/null
@@ -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 (file)
index 0000000..8efefa4
--- /dev/null
@@ -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)
+
index d6a7225818535c2673b8503c1c264fb1ddd91e7c..4e0fbe3f4a454e32acf15da1338f07b669a860ff 100644 (file)
@@ -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)
+