From 57cbc9b6599be1e84c5bc209936080c4a04bb891 Mon Sep 17 00:00:00 2001 From: Tobias Urdin Date: Mon, 5 May 2025 17:20:31 +0200 Subject: [PATCH] rgw/qa: Move admin pagination tests Move the tests into qa directory and add it to the rgw/verify suite so that we can run it in teuthology. Signed-off-by: Tobias Urdin --- .../rgw/verify/tasks/admin-pagination.yaml | 5 ++ qa/workunits/rgw/run-admin-pagination.sh | 15 ++++++ .../rgw/test_rgw_admin_pagination.py | 52 ++++++++++++------- 3 files changed, 53 insertions(+), 19 deletions(-) create mode 100644 qa/suites/rgw/verify/tasks/admin-pagination.yaml create mode 100755 qa/workunits/rgw/run-admin-pagination.sh rename src/test/rgw/test_rgw_admin_bucket.py => qa/workunits/rgw/test_rgw_admin_pagination.py (89%) mode change 100644 => 100755 diff --git a/qa/suites/rgw/verify/tasks/admin-pagination.yaml b/qa/suites/rgw/verify/tasks/admin-pagination.yaml new file mode 100644 index 00000000000..fc992af7e6c --- /dev/null +++ b/qa/suites/rgw/verify/tasks/admin-pagination.yaml @@ -0,0 +1,5 @@ +tasks: +- workunit: + clients: + client.0: + - rgw/run-admin-pagination.sh diff --git a/qa/workunits/rgw/run-admin-pagination.sh b/qa/workunits/rgw/run-admin-pagination.sh new file mode 100755 index 00000000000..28e1c7206af --- /dev/null +++ b/qa/workunits/rgw/run-admin-pagination.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -ex + +mydir=`dirname $0` + +python3 -m venv $mydir +source $mydir/bin/activate +pip install pip --upgrade +pip install boto3 requests + +## run test +$mydir/bin/python3 $mydir/test_rgw_admin_pagination.py + +deactivate +echo OK. diff --git a/src/test/rgw/test_rgw_admin_bucket.py b/qa/workunits/rgw/test_rgw_admin_pagination.py old mode 100644 new mode 100755 similarity index 89% rename from src/test/rgw/test_rgw_admin_bucket.py rename to qa/workunits/rgw/test_rgw_admin_pagination.py index e5a3376fa8b..291981d9eee --- a/src/test/rgw/test_rgw_admin_bucket.py +++ b/qa/workunits/rgw/test_rgw_admin_pagination.py @@ -1,20 +1,13 @@ #!/usr/bin/env python3 -# + # Copyright (C) 2025 Binero # Author: Tobias Urdin -# -# Source the src/test/detect-build-env-vars.sh script to set the -# environment variables before running these tests. -# -# You need to install the requests and boto3 python3 modules to -# run this test suite. import boto3 from botocore.auth import HmacV1Auth from botocore.awsrequest import AWSRequest from botocore.compat import (parse_qsl, urlparse) import json -import os import requests import subprocess import unittest @@ -61,14 +54,7 @@ class AWSAuth(requests.auth.AuthBase): class TestRGWAdminHelper: def __init__(self) -> None: - self.ceph_bin_dir = os.environ.get('CEPH_BIN', None) - if self.ceph_bin_dir is None: - raise RuntimeError( - "Could not find CEPH_BIN env var, you need to " - "source the detect-build-env-vars.sh script") - - self.radosgw_admin = os.path.join( - self.ceph_bin_dir, 'radosgw-admin') + self.radosgw_admin = 'radosgw-admin' def _run_radosgw_admin( self, args: ty.List[str]) -> subprocess.CompletedProcess: @@ -139,8 +125,36 @@ class TestRGWAdminHelper: aws_access_key_id=user['keys'][0]['access_key'], aws_secret_access_key=user['keys'][0]['secret_key']) + def get_boto3_client(self, session: boto3.session.Session): + """Get a boto3 s3 client from a session.""" + def _try_client(portnum: str, ssl: bool, proto: str): + endpoint = proto + '://localhost:' + portnum + client = session.client( + 's3', use_ssl=ssl, endpoint_url=endpoint, verify=False) + list(client.list_buckets(MaxBuckets=1)) + return endpoint, client + + try: + return _try_client('80', False, 'http') + except Exception: + try: + return _try_client('8000', False, 'http') + except Exception: + return _try_client('443', True, 'https') + class TestRGWAdminBucket(unittest.TestCase): + helper: ty.ClassVar[TestRGWAdminHelper] + admin_user: ty.ClassVar[ty.Dict] + admin_session: ty.ClassVar[boto3.session.Session] + session: ty.ClassVar[requests.Session] + test_user: ty.ClassVar[ty.Dict] + test_session: ty.ClassVar[boto3.session.Session] + endpoint: ty.ClassVar[str] + test_client: ty.ClassVar[ty.Any] + params: ty.ClassVar[ty.Dict] + expected_buckets: ty.ClassVar[ty.List[str]] + @classmethod def setUpClass(cls) -> None: cls.helper = TestRGWAdminHelper() @@ -152,8 +166,8 @@ class TestRGWAdminBucket(unittest.TestCase): cls.admin_session = cls.helper.get_boto3_session( cls.admin_user) - cls.endpoint = 'http://localhost:8000' cls.session = requests.Session() + cls.session.verify = False cls.session.auth = AWSAuth(cls.admin_session) test_user_uid = 'adminbucket_user' @@ -163,8 +177,8 @@ class TestRGWAdminBucket(unittest.TestCase): cls.test_session = cls.helper.get_boto3_session( cls.test_user) - cls.test_client = cls.test_session.client( - 's3', endpoint_url=cls.endpoint) + cls.endpoint, cls.test_client = cls.helper.get_boto3_client( + cls.test_session) cls._populate_buckets() -- 2.39.5