Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 4 additions & 105 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 @@ -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 = (
"[email protected]: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))
86 changes: 8 additions & 78 deletions tests/interop/test_validate_hub_site_components.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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:
Expand All @@ -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",
Expand All @@ -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
Expand All @@ -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:
Expand All @@ -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}")
Expand Down
Loading