Skip to content

Commit

Permalink
Merge pull request #126 from validatedpatterns/refactor_pytest
Browse files Browse the repository at this point in the history
Refactor pytest
  • Loading branch information
mlabonte-rh authored Nov 6, 2024
2 parents d0eacb7 + f35b182 commit ce2de25
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 421 deletions.
35 changes: 4 additions & 31 deletions tests/interop/test_subscription_status_devel.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,37 +18,10 @@ def test_subscription_status_devel(openshift_dyn_client):
"rhacs-operator": ["openshift-operators"],
}

(
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(
f"FAIL: The following subscriptions are unhealthy: {unhealthy_subs}"
)
if missing_installplans:
logger.error(
f"FAIL: The install plan for the following subscriptions is missing: {missing_installplans}"
)
if upgrades_pending:
logger.error(
f"FAIL: The following subscriptions are in UpgradePending state: {upgrades_pending}"
)

cluster_version = subscription.openshift_version(openshift_dyn_client)
logger.info(f"Openshift version:\n{cluster_version.instance.status.history}")

for line in operator_versions:
logger.info(line)

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=False
)
if err_msg:
logger.error(f"FAIL: {err_msg}")
assert False, err_msg
else:
Expand Down
101 changes: 4 additions & 97 deletions tests/interop/test_subscription_status_hub.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
import difflib
import logging
import os
import re
import subprocess

import pytest
from validatedpatterns_tests.interop import subscription
Expand All @@ -24,100 +20,11 @@ def test_subscription_status_hub(openshift_dyn_client):
"rhacs-operator": ["openshift-operators"],
}

(
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(
f"FAIL: The following subscriptions are unhealthy: {unhealthy_subs}"
)
if missing_installplans:
logger.error(
f"FAIL: The install plan for the following subscriptions is missing: {missing_installplans}"
)
if upgrades_pending:
logger.error(
f"FAIL: The following subscriptions are in UpgradePending state: {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/devsecops_hub_{shortversion}"
previousfile = f"devsecops_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))
35 changes: 4 additions & 31 deletions tests/interop/test_subscription_status_prod.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,37 +17,10 @@ def test_subscription_status_prod(openshift_dyn_client):
"rhacs-operator": ["openshift-operators"],
}

(
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(
f"FAIL: The following subscriptions are unhealthy: {unhealthy_subs}"
)
if missing_installplans:
logger.error(
f"FAIL: The install plan for the following subscriptions is missing: {missing_installplans}"
)
if upgrades_pending:
logger.error(
f"FAIL: The following subscriptions are in UpgradePending state: {upgrades_pending}"
)

cluster_version = subscription.openshift_version(openshift_dyn_client)
logger.info(f"Openshift version:\n{cluster_version.instance.status.history}")

for line in operator_versions:
logger.info(line)

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=False
)
if err_msg:
logger.error(f"FAIL: {err_msg}")
assert False, err_msg
else:
Expand Down
81 changes: 8 additions & 73 deletions tests/interop/test_validate_devel_site_components.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,6 @@

oc = os.environ["HOME"] + "/oc_client/oc"

"""
Validate following multicluster-devsecops components pods and
endpoints on edge site (line server):
1) argocd
2) ACM agents
3) applications health (Applications deployed through argocd)
"""


@pytest.mark.test_validate_devel_site_components
def test_validate_devel_site_components():
Expand All @@ -30,19 +21,8 @@ def test_validate_devel_site_components():
@pytest.mark.validate_devel_site_reachable
def test_validate_devel_site_reachable(kube_config, openshift_dyn_client):
logger.info("Check if devel site API end point is reachable")
namespace = "openshift-gitops"
sub_string = "argocd-dex-server-token"
try:
devel_api_url = application.get_site_api_url(kube_config)
devel_api_response = application.get_site_api_response(
openshift_dyn_client, devel_api_url, namespace, sub_string
)
except AssertionError as e:
logger.error(f"FAIL: {e}")
assert False, e

if devel_api_response.status_code != 200:
err_msg = "Devel 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:
Expand All @@ -52,36 +32,14 @@ def test_validate_devel_site_reachable(kube_config, openshift_dyn_client):
@pytest.mark.check_pod_status_devel
def test_check_pod_status(openshift_dyn_client):
logger.info("Checking pod status")

err_msg = []
projects = [
"openshift-operators",
"openshift-gitops",
"multicluster-devsecops-development",
"open-cluster-management-agent",
"open-cluster-management-agent-addon",
]

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
Expand All @@ -91,30 +49,9 @@ def test_check_pod_status(openshift_dyn_client):

@pytest.mark.validate_argocd_reachable_devel_site
def test_validate_argocd_reachable_devel_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 devel 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:
Expand All @@ -123,13 +60,11 @@ def test_validate_argocd_reachable_devel_site(openshift_dyn_client):

@pytest.mark.validate_argocd_applications_health_devel_site
def test_validate_argocd_applications_health_devel_site(openshift_dyn_client):
unhealthy_apps = []
logger.info("Get all applications deployed by argocd on devel site")
projects = ["openshift-gitops"]
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 devel site are unhealthy"
logger.error(f"FAIL: {err_msg}:\n{unhealthy_apps}")
Expand Down
Loading

0 comments on commit ce2de25

Please sign in to comment.