]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
qa/rgw: add non-account (alt) users to multisite tests
authorSeena Fallah <seenafallah@gmail.com>
Fri, 14 Feb 2025 22:42:10 +0000 (23:42 +0100)
committerSeena Fallah <seenafallah@gmail.com>
Fri, 7 Mar 2025 17:02:02 +0000 (18:02 +0100)
Create a user and alt user without account to test PutBucketReplication
scenarios as account is not supported to call that API yet.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>
qa/tasks/rgw_multisite_tests.py
src/test/rgw/rgw_multi/conn.py
src/test/rgw/rgw_multi/tests.py
src/test/rgw/test_multi.py

index e0a38deadd216ac9c6ba8f202b4bf4d57ee68610..850f8989726b78f95fa1078e797d3e9c8a80f241 100644 (file)
@@ -78,8 +78,19 @@ class RGWMultisiteTests(Task):
         user.create(master_zone, ['--display-name', 'TestUser',
                                   '--gen-access-key', '--gen-secret'])
 
+        # create non-account user
+        log.info('creating non-account user..')
+        non_account_user = multisite.User('rgw-multisite-test-non-account-user')
+        non_account_user.create(master_zone, ['--display-name', 'NonAccountUser',
+                                              '--gen-access-key', '--gen-secret'])
+        # create non-account alt user
+        log.info('creating non-account alt user..')
+        non_account_alt_user = multisite.User('rgw-multisite-test-non-account-alt-user')
+        non_account_alt_user.create(master_zone, ['--display-name', 'NonAccountAltUser',
+                                                  '--gen-access-key', '--gen-secret'])
+
         config = self.config.get('config', {})
-        tests.init_multi(realm, user, tests.Config(**config))
+        tests.init_multi(realm, user, non_account_user, non_account_alt_user, tests.Config(**config))
         tests.realm_meta_checkpoint(realm)
 
     def begin(self):
index 3edb75111258f0d8b76930be9110f08e67ae81e2..2805579e062fec8dbcf4150c29d3b30906fbca2a 100644 (file)
@@ -5,15 +5,16 @@ import boto3
 
 def get_gateway_connection(gateway, credentials):
     """ connect to the given gateway """
+    # Always create a new connection to the gateway to ensure each set of credentials gets its own connection
+    conn = boto.connect_s3(aws_access_key_id = credentials.access_key,
+                           aws_secret_access_key = credentials.secret,
+                           host = gateway.host,
+                           port = gateway.port,
+                           is_secure = False,
+                           calling_format = boto.s3.connection.OrdinaryCallingFormat())
     if gateway.connection is None:
-        gateway.connection = boto.connect_s3(
-                aws_access_key_id = credentials.access_key,
-                aws_secret_access_key = credentials.secret,
-                host = gateway.host,
-                port = gateway.port,
-                is_secure = False,
-                calling_format = boto.s3.connection.OrdinaryCallingFormat())
-    return gateway.connection
+        gateway.connection = conn
+    return conn
 
 def get_gateway_secure_connection(gateway, credentials):
     """ secure connect to the given gateway """
@@ -47,13 +48,15 @@ def get_gateway_iam_connection(gateway, credentials, region):
 
 def get_gateway_s3_client(gateway, credentials, region):
   """ connect to boto3 s3 client api of the given gateway """
+  # Always create a new connection to the gateway to ensure each set of credentials gets its own connection
+  s3_client = boto3.client('s3',
+                           endpoint_url='http://' + gateway.host + ':' + str(gateway.port),
+                           aws_access_key_id=credentials.access_key,
+                           aws_secret_access_key=credentials.secret,
+                           region_name=region)
   if gateway.s3_client is None:
-      gateway.s3_client = boto3.client('s3',
-                                        endpoint_url='http://' + gateway.host + ':' + str(gateway.port),
-                                        aws_access_key_id=credentials.access_key,
-                                        aws_secret_access_key=credentials.secret,
-                                        region_name=region)
-  return gateway.s3_client
+      gateway.s3_client = s3_client
+  return s3_client
 
 
 def get_gateway_sns_client(gateway, credentials, region):
index 433cd034fe0b5a7b090151ca79df9233e61924c2..baf8f7939343e664888a889748cd2088d9efb9c1 100644 (file)
@@ -42,12 +42,18 @@ class Config:
 # implementations of these interfaces by calling init_multi()
 realm = None
 user = None
+non_account_user = None
+non_account_alt_user = None
 config = None
-def init_multi(_realm, _user, _config=None):
+def init_multi(_realm, _user, _non_account_user, _non_account_alt_user, _config=None):
     global realm
     realm = _realm
     global user
     user = _user
+    global non_account_user
+    non_account_user = _non_account_user
+    global non_account_alt_user
+    non_account_alt_user = _non_account_alt_user
     global config
     config = _config or Config()
     realm_meta_checkpoint(realm)
@@ -468,17 +474,31 @@ class ZonegroupConns:
     def __init__(self, zonegroup):
         self.zonegroup = zonegroup
         self.zones = []
+        self.non_account_zones = []
+        self.non_account_alt_zones = []
         self.ro_zones = []
+        self.non_account_ro_zones = []
+        self.non_account_alt_ro_zones = []
         self.rw_zones = []
+        self.non_account_rw_zones = []
+        self.non_account_alt_rw_zones = []
         self.master_zone = None
 
         for z in zonegroup.zones:
             zone_conn = z.get_conn(user.credentials)
+            non_account_zone_conn = z.get_conn(non_account_user.credentials)
+            non_account_alt_zone_conn = z.get_conn(non_account_alt_user.credentials)
             self.zones.append(zone_conn)
+            self.non_account_zones.append(non_account_zone_conn)
+            self.non_account_alt_zones.append(non_account_alt_zone_conn)
             if z.is_read_only():
                 self.ro_zones.append(zone_conn)
+                self.non_account_ro_zones.append(non_account_zone_conn)
+                self.non_account_alt_ro_zones.append(non_account_alt_zone_conn)
             else:
                 self.rw_zones.append(zone_conn)
+                self.non_account_rw_zones.append(non_account_zone_conn)
+                self.non_account_alt_rw_zones.append(non_account_alt_zone_conn)
 
             if z == zonegroup.master_zone:
                 self.master_zone = zone_conn
index 1ccd43b5eaa27d38be687a1e1ddb1082508353bd..91576c4b64437dcad3e9fa2e0fb26a7a5b6a1bf1 100644 (file)
@@ -248,6 +248,12 @@ def init(parse_args):
     user_creds = gen_credentials()
     user = multisite.User('tester', tenant=args.tenant, account='RGW11111111111111111')
 
+    non_account_user_creds = gen_credentials()
+    non_account_user = multisite.User('nonaccounttester', tenant=args.tenant)
+
+    non_account_alt_user_creds = gen_credentials()
+    non_account_alt_user = multisite.User('nonaccountalttester', tenant=args.tenant)
+
     realm = multisite.Realm('r')
     if bootstrap:
         # create the realm on c1
@@ -388,13 +394,24 @@ def init(parse_args):
                     arg = ['--display-name', 'TestUser']
                     arg += user_creds.credential_args()
                     user.create(zone, arg)
+                    # create non-account test user
+                    arg = ['--display-name', 'NonAccountTestUser']
+                    arg += non_account_user_creds.credential_args()
+                    non_account_user.create(zone, arg)
+                    # create non-account alt test user
+                    arg = ['--display-name', 'NonAccountAltTestUser']
+                    arg += non_account_alt_user_creds.credential_args()
+                    non_account_alt_user.create(zone, arg)
                 else:
                     # read users and update keys
                     admin_user.info(zone)
                     admin_creds = admin_user.credentials[0]
-                    arg = []
-                    user.info(zone, arg)
+                    user.info(zone)
                     user_creds = user.credentials[0]
+                    non_account_user.info(zone)
+                    non_account_user_creds = non_account_user.credentials[0]
+                    non_account_alt_user.info(zone)
+                    non_account_alt_user_creds = non_account_alt_user.credentials[0]
 
     if not bootstrap:
         period.get(c1)
@@ -403,7 +420,7 @@ def init(parse_args):
                     checkpoint_delay=args.checkpoint_delay,
                     reconfigure_delay=args.reconfigure_delay,
                     tenant=args.tenant)
-    init_multi(realm, user, config)
+    init_multi(realm, user, non_account_user, non_account_alt_user, config)
 
 def setup_module():
     init(False)