diff --git a/tests/interop/test_subscription_status_hub.py b/tests/interop/test_subscription_status_hub.py index 0cc1587b..3318b3ed 100644 --- a/tests/interop/test_subscription_status_hub.py +++ b/tests/interop/test_subscription_status_hub.py @@ -1,8 +1,4 @@ -import difflib import logging -import os -import re -import subprocess import pytest from validatedpatterns_tests.interop import subscription @@ -23,108 +19,11 @@ def test_subscription_status_hub(openshift_dyn_client): "ansible-automation-platform-operator": ["ansible-automation-platform"], } - operator_versions = [] - missing_subs = [] - unhealthy_subs = [] - missing_installplans = [] - upgrades_pending = [] - - ( - operator_versions, - missing_subs, - unhealthy_subs, - missing_installplans, - upgrades_pending, - ) = subscription.subscription_status(openshift_dyn_client, expected_subs) - - if missing_subs: - logger.error(f"FAIL: The following subscriptions are missing: {missing_subs}") - if unhealthy_subs: - logger.error( - "FAIL: The following subscriptions are unhealthy:" f" {unhealthy_subs}" - ) - if missing_installplans: - logger.error( - "FAIL: The install plan for the following subscriptions is" - f" missing: {missing_installplans}" - ) - if upgrades_pending: - logger.error( - "FAIL: The following subscriptions are in UpgradePending state:" - f" {upgrades_pending}" - ) - - cluster_version = subscription.openshift_version(openshift_dyn_client) - logger.info(f"Openshift version:\n{cluster_version.instance.status.history}") - - if os.getenv("EXTERNAL_TEST") != "true": - shortversion = re.sub("(.[0-9]+$)", "", os.getenv("OPENSHIFT_VER")) - currentfile = os.getcwd() + "/operators_hub_current" - sourceFile = open(currentfile, "w") - for line in operator_versions: - logger.info(line) - print(line, file=sourceFile) - sourceFile.close() - - logger.info("Clone operator-versions repo") - try: - operator_versions_repo = ( - "git@gitlab.cee.redhat.com:mpqe/mps/vp/operator-versions.git" - ) - clone = subprocess.run( - ["git", "clone", operator_versions_repo], capture_output=True, text=True - ) - logger.info(clone.stdout) - logger.info(clone.stderr) - except Exception: - pass - - previouspath = os.getcwd() + f"/operator-versions/aegitops_hub_{shortversion}" - previousfile = f"aegitops_hub_{shortversion}" - - logger.info("Ensure previous file exists") - checkpath = os.path.exists(previouspath) - logger.info(checkpath) - - if checkpath is True: - logger.info("Diff current operator list with previous file") - diff = opdiff(open(previouspath).readlines(), open(currentfile).readlines()) - diffstring = "".join(diff) - logger.info(diffstring) - - logger.info("Write diff to file") - sourceFile = open("operator_diffs_hub.log", "w") - print(diffstring, file=sourceFile) - sourceFile.close() - else: - logger.info("Skipping operator diff - previous file not found") - - if missing_subs or unhealthy_subs or missing_installplans or upgrades_pending: - err_msg = "Subscription status check failed" + err_msg = subscription.subscription_status( + openshift_dyn_client, expected_subs, diff=True + ) + if err_msg: logger.error(f"FAIL: {err_msg}") assert False, err_msg else: - # Only push the new operarator list if the test passed - # and we are not testing a pre-release operator nor - # running externally - if os.getenv("EXTERNAL_TEST") != "true": - if checkpath is True and not os.environ["INDEX_IMAGE"]: - os.remove(previouspath) - os.rename(currentfile, previouspath) - - cwd = os.getcwd() + "/operator-versions" - logger.info(f"CWD: {cwd}") - - logger.info("Push new operator list") - subprocess.run(["git", "add", previousfile], cwd=cwd) - subprocess.run( - ["git", "commit", "-m", "Update operator versions list"], - cwd=cwd, - ) - subprocess.run(["git", "push"], cwd=cwd) - logger.info("PASS: Subscription status check passed") - - -def opdiff(*args): - return filter(lambda x: not x.startswith(" "), difflib.ndiff(*args)) diff --git a/tests/interop/test_validate_hub_site_components.py b/tests/interop/test_validate_hub_site_components.py index 9f9ad28f..b12164ed 100644 --- a/tests/interop/test_validate_hub_site_components.py +++ b/tests/interop/test_validate_hub_site_components.py @@ -11,17 +11,6 @@ oc = os.environ["HOME"] + "/oc_client/oc" -""" -Validate following manuela components pods and endpoints -on hub site (central server): - - -1) argocd -2) openshift-operators -3) pods -4) applications health (Applications deployed through argocd) -""" - @pytest.mark.test_validate_hub_site_components def test_validate_hub_site_components(openshift_dyn_client): @@ -40,19 +29,8 @@ def test_validate_hub_site_components(openshift_dyn_client): @pytest.mark.validate_hub_site_reachable def test_validate_hub_site_reachable(kube_config, openshift_dyn_client): logger.info("Check if hub site API end point is reachable") - namespace = "openshift-gitops" - sub_string = "argocd-dex-server-token" - try: - hub_api_url = application.get_site_api_url(kube_config) - hub_api_response = application.get_site_api_response( - openshift_dyn_client, hub_api_url, namespace, sub_string - ) - except AssertionError as e: - logger.error(f"FAIL: {e}") - assert False, e - - if hub_api_response.status_code != 200: - err_msg = "Hub site is not reachable. Please check the deployment." + err_msg = components.validate_site_reachable(kube_config, openshift_dyn_client) + if err_msg: logger.error(f"FAIL: {err_msg}") assert False, err_msg else: @@ -62,11 +40,6 @@ def test_validate_hub_site_reachable(kube_config, openshift_dyn_client): @pytest.mark.check_pod_status_hub def test_check_pod_status(openshift_dyn_client): logger.info("Checking pod status") - - err_msg = [] - failed_pods = [] - missing_pods = [] - missing_projects = [] projects = [ "openshift-operators", "ansible-automation-platform", @@ -75,27 +48,7 @@ def test_check_pod_status(openshift_dyn_client): "edge-gitops-vms", "vault", ] - - missing_projects = components.check_project_absense(openshift_dyn_client, projects) - missing_pods = [] - failed_pods = [] - - for project in projects: - logger.info(f"Checking pods in namespace '{project}'") - missing_pods += components.check_pod_absence(openshift_dyn_client, project) - failed_pods += components.check_pod_status(openshift_dyn_client, projects) - - if missing_projects: - err_msg.append(f"The following namespaces are missing: {missing_projects}") - - if missing_pods: - err_msg.append( - f"The following namespaces have no pods deployed: {missing_pods}" - ) - - if failed_pods: - err_msg.append(f"The following pods are failed: {failed_pods}") - + err_msg = components.check_pod_status(openshift_dyn_client, projects) if err_msg: logger.error(f"FAIL: {err_msg}") assert False, err_msg @@ -105,30 +58,9 @@ def test_check_pod_status(openshift_dyn_client): @pytest.mark.validate_argocd_reachable_hub_site def test_validate_argocd_reachable_hub_site(openshift_dyn_client): - namespace = "openshift-gitops" - name = "openshift-gitops-server" - sub_string = "argocd-dex-server-token" logger.info("Check if argocd route/url on hub site is reachable") - try: - argocd_route_url = application.get_argocd_route_url( - openshift_dyn_client, namespace, name - ) - argocd_route_response = application.get_site_api_response( - openshift_dyn_client, argocd_route_url, namespace, sub_string - ) - except StopIteration: - err_msg = "Argocd url/route is missing in open-cluster-management namespace" - logger.error(f"FAIL: {err_msg}") - assert False, err_msg - except AssertionError: - err_msg = "Bearer token is missing for argocd-dex-server" - logger.error(f"FAIL: {err_msg}") - assert False, err_msg - - logger.info(f"Argocd route response : {argocd_route_response}") - - if argocd_route_response.status_code != 200: - err_msg = "Argocd is not reachable. Please check the deployment" + err_msg = components.validate_argocd_reachable(openshift_dyn_client) + if err_msg: logger.error(f"FAIL: {err_msg}") assert False, err_msg else: @@ -137,13 +69,11 @@ def test_validate_argocd_reachable_hub_site(openshift_dyn_client): @pytest.mark.validate_argocd_applications_health_hub_site def test_validate_argocd_applications_health_hub_site(openshift_dyn_client): - unhealthy_apps = [] logger.info("Get all applications deployed by argocd on hub site") projects = ["openshift-gitops", "ansible-edge-gitops-hub"] - for project in projects: - unhealthy_apps += application.get_argocd_application_status( - openshift_dyn_client, project - ) + unhealthy_apps = application.get_argocd_application_status( + openshift_dyn_client, projects + ) if unhealthy_apps: err_msg = "Some or all applications deployed on hub site are unhealthy" logger.error(f"FAIL: {err_msg}:\n{unhealthy_apps}")