From 79d61bbb58cb34f9da678e37b4373fc84bd393f5 Mon Sep 17 00:00:00 2001 From: Nizamudeen A Date: Mon, 28 Oct 2024 11:15:25 +0530 Subject: qa/dashboard: fix tasks.mgr.dashboard.test_health.HealthTest as per: https://tracker.ceph.com/issues/47612#note-14 Fixes: https://tracker.ceph.com/issues/47612 Signed-off-by: Nizamudeen A --- qa/tasks/mgr/dashboard/helper.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'qa') diff --git a/qa/tasks/mgr/dashboard/helper.py b/qa/tasks/mgr/dashboard/helper.py index e6a7c35a23d..10ce9218fd5 100644 --- a/qa/tasks/mgr/dashboard/helper.py +++ b/qa/tasks/mgr/dashboard/helper.py @@ -220,13 +220,11 @@ class DashboardTestCase(MgrTestCase): # To avoid any issues with e.g. unlink bugs, we destroy and recreate # the filesystem rather than just doing a rm -rf of files - cls.mds_cluster.mds_stop() - cls.mds_cluster.mds_fail() cls.mds_cluster.delete_all_filesystems() + cls.mds_cluster.mds_restart() # to reset any run-time configs, etc. cls.fs = None # is now invalid! cls.fs = cls.mds_cluster.newfs(create=True) - cls.fs.mds_restart() # In case some test messed with auth caps, reset them # pylint: disable=not-an-iterable -- cgit v1.2.3 From a2a4a3415c0e5ceef2cb01d3bcdf5eb1fff23803 Mon Sep 17 00:00:00 2001 From: Nizamudeen A Date: Wed, 30 Oct 2024 19:31:10 +0530 Subject: qa/dashboard: fix test_list_enabled_module failure Check the ports availability and go for a new port if the current one is not available Fixes: https://tracker.ceph.com/issues/62972 Signed-off-by: Nizamudeen A --- qa/tasks/mgr/dashboard/helper.py | 2 +- qa/tasks/mgr/dashboard/test_mgr_module.py | 4 +++- qa/tasks/mgr/mgr_test_case.py | 19 ++++++++++++++++--- src/pybind/mgr/dashboard/run-backend-api-tests.sh | 2 +- 4 files changed, 21 insertions(+), 6 deletions(-) (limited to 'qa') diff --git a/qa/tasks/mgr/dashboard/helper.py b/qa/tasks/mgr/dashboard/helper.py index 10ce9218fd5..55355048a36 100644 --- a/qa/tasks/mgr/dashboard/helper.py +++ b/qa/tasks/mgr/dashboard/helper.py @@ -221,7 +221,7 @@ class DashboardTestCase(MgrTestCase): # To avoid any issues with e.g. unlink bugs, we destroy and recreate # the filesystem rather than just doing a rm -rf of files cls.mds_cluster.delete_all_filesystems() - cls.mds_cluster.mds_restart() # to reset any run-time configs, etc. + cls.mds_cluster.mds_restart() # to reset any run-time configs, etc. cls.fs = None # is now invalid! cls.fs = cls.mds_cluster.newfs(create=True) diff --git a/qa/tasks/mgr/dashboard/test_mgr_module.py b/qa/tasks/mgr/dashboard/test_mgr_module.py index d6a368905b6..1dbdef23d34 100644 --- a/qa/tasks/mgr/dashboard/test_mgr_module.py +++ b/qa/tasks/mgr/dashboard/test_mgr_module.py @@ -4,6 +4,7 @@ from __future__ import absolute_import import logging import requests +from urllib3.exceptions import MaxRetryError from .helper import (DashboardTestCase, JLeaf, JList, JObj, module_options_object_schema, module_options_schema, @@ -24,10 +25,11 @@ class MgrModuleTestCase(DashboardTestCase): def _check_connection(): try: # Try reaching an API endpoint successfully. + logger.info('Trying to reach the REST API endpoint') self._get('/api/mgr/module') if self._resp.status_code == 200: return True - except requests.ConnectionError: + except (MaxRetryError, requests.ConnectionError): pass return False diff --git a/qa/tasks/mgr/mgr_test_case.py b/qa/tasks/mgr/mgr_test_case.py index 74b1e9d850c..141ac5bc5c0 100644 --- a/qa/tasks/mgr/mgr_test_case.py +++ b/qa/tasks/mgr/mgr_test_case.py @@ -1,5 +1,6 @@ import json import logging +import socket from unittest import SkipTest @@ -229,15 +230,22 @@ class MgrTestCase(CephTestCase): """ # Start handing out ports well above Ceph's range. assign_port = min_port + ip_addr = cls.mgr_cluster.get_mgr_map()['active_addr'].split(':')[0] for mgr_id in cls.mgr_cluster.mgr_ids: cls.mgr_cluster.mgr_stop(mgr_id) cls.mgr_cluster.mgr_fail(mgr_id) + for mgr_id in cls.mgr_cluster.mgr_ids: - log.debug("Using port {0} for {1} on mgr.{2}".format( - assign_port, module_name, mgr_id - )) + # Find a port that isn't in use + while True: + if not cls.is_port_in_use(ip_addr, assign_port): + break + log.debug(f"Port {assign_port} in use, trying next") + assign_port += 1 + + log.debug(f"Using port {assign_port} for {module_name} on mgr.{mgr_id}") cls.mgr_cluster.set_module_localized_conf(module_name, mgr_id, config_name, str(assign_port), @@ -255,3 +263,8 @@ class MgrTestCase(CephTestCase): mgr_map['active_name'], mgr_map['active_gid'])) return done cls.wait_until_true(is_available, timeout=30) + + @classmethod + def is_port_in_use(cls, ip_addr: str, port: int) -> bool: + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + return s.connect_ex((ip_addr, port)) == 0 diff --git a/src/pybind/mgr/dashboard/run-backend-api-tests.sh b/src/pybind/mgr/dashboard/run-backend-api-tests.sh index e7d441f44bb..981b331df19 100755 --- a/src/pybind/mgr/dashboard/run-backend-api-tests.sh +++ b/src/pybind/mgr/dashboard/run-backend-api-tests.sh @@ -134,7 +134,7 @@ run_teuthology_tests() { export CEPH_OUT_CLIENT_DIR=${LOCAL_BUILD_DIR}/out/client find . -iname "*${COVERAGE_FILE}*" -type f -delete - python ../qa/tasks/vstart_runner.py --ignore-missing-binaries --no-verbose $OPTIONS $(echo $TEST_CASES) || + python ../qa/tasks/vstart_runner.py --ignore-missing-binaries --no-verbose --debug $OPTIONS $(echo $TEST_CASES) || on_tests_error deactivate -- cgit v1.2.3