Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add files for external testing #122

Merged
merged 1 commit into from
Aug 26, 2024
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
26 changes: 26 additions & 0 deletions tests/interop/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Running tests

## Prerequisites

* Openshift clusters with multicluster-devsecops pattern installed
* prod and devel clusters are managed via rhacm
* kubeconfig files for Openshift clusters
* oc client installed at ~/oc_client/oc

## Steps

* create python3 venv, clone multicluster-devsecops repository
* export KUBECONFIG=\<path to hub kubeconfig file>
* export KUBECONFIG_PROD=\<path to prod kubeconfig file>
* export KUBECONFIG_DEVEL=\<path to devel kubeconfig file>
* export INFRA_PROVIDER=\<infra platform description>
* (optional) export WORKSPACE=\<dir to save test results to> (defaults to /tmp)
* cd multicluster-devsecops/tests/interop
* pip install -r requirements.txt
* ./run_tests.sh

## Results

* results .xml files will be placed at $WORKSPACE
* test logs will be placed at $WORKSPACE/.results/test_execution_logs/
* CI badge file will be placed at $WORKSPACE
84 changes: 84 additions & 0 deletions tests/interop/create_ci_badge.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import json
import os
import subprocess
from datetime import datetime

from junitparser import JUnitXml

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

ci_badge = {
"schemaVersion": 1,
"label": "Community test",
"message": "",
"color": "red",
"openshiftVersion": "",
"infraProvider": os.environ.get("INFRA_PROVIDER"),
"patternName": os.environ.get("PATTERN_NAME"),
"patternRepo": "",
"patternBranch": "",
"date": datetime.today().strftime("%Y-%m-%d"),
"testSource": "Community",
"debugInfo": None,
}


def get_openshift_version():
try:
version_ret = subprocess.run([oc, "version", "-o", "json"], capture_output=True)
version_out = version_ret.stdout.decode("utf-8")
openshift_version = json.loads(version_out)["openshiftVersion"]
major_minor = ".".join(openshift_version.split(".")[:-1])
return openshift_version, major_minor
except KeyError as e:
print("KeyError:" + str(e))
return None


if __name__ == "__main__":
versions = get_openshift_version()
ci_badge["openshiftVersion"] = versions[0]

pattern_repo = subprocess.run(
["git", "config", "--get", "remote.origin.url"], capture_output=True, text=True
)
pattern_branch = subprocess.run(
["git", "branch", "--show-current"], capture_output=True, text=True
)

ci_badge["patternRepo"] = pattern_repo.stdout.strip()
ci_badge["patternBranch"] = pattern_branch.stdout.strip()

# Check each xml file for failures
results_dir = os.environ.get("WORKSPACE")
failures = 0

for file in os.listdir(results_dir):
if file.startswith("test_") and file.endswith(".xml"):
with open(os.path.join(results_dir, file), "r") as result_file: # type: ignore
xml = JUnitXml.fromfile(result_file) # type: ignore
for suite in xml:
for case in suite:
if case.result:
failures += 1

# Determine badge color from results
if failures == 0:
ci_badge["color"] = "green"

# For now we assume `message` is the same as patternBranch
ci_badge["message"] = ci_badge["patternBranch"]

ci_badge_json_basename = (
os.environ.get("PATTERN_SHORTNAME") # type: ignore
+ "-"
+ os.environ.get("INFRA_PROVIDER")
+ "-"
+ versions[1]
+ "-stable-badge.json"
)
ci_badge_json_filename = os.path.join(results_dir, ci_badge_json_basename) # type: ignore
print(f"Creating CI badge file at: {ci_badge_json_filename}")

with open(ci_badge_json_filename, "w") as ci_badge_file:
json.dump(ci_badge, ci_badge_file)
6 changes: 6 additions & 0 deletions tests/interop/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
pytest
kubernetes
openshift
openshift-python-wrapper
junitparser
git+https://github.com/validatedpatterns/vp-qe-test-common.git@development#egg=vp-qe-test-common
43 changes: 43 additions & 0 deletions tests/interop/run_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/usr/bin/bash

export EXTERNAL_TEST="true"
export PATTERN_NAME="MulticlusterDevSecOps"
export PATTERN_SHORTNAME="devsecops"

if [ -z "${KUBECONFIG}" ]; then
echo "No kubeconfig file set for hub cluster"
exit 1
fi

if [ -z "${KUBECONFIG_PROD}" ]; then
echo "No kubeconfig file set for prod cluster"
exit 1
fi

if [ -z "${KUBECONFIG_DEVEL}" ]; then
echo "No kubeconfig file set for devel cluster"
exit 1
fi

if [ -z "${INFRA_PROVIDER}" ]; then
echo "INFRA_PROVIDER is not defined"
exit 1
fi

if [ -z "${WORKSPACE}" ]; then
export WORKSPACE=/tmp
fi

pytest -lv --disable-warnings test_subscription_status_hub.py --kubeconfig $KUBECONFIG --junit-xml $WORKSPACE/test_subscription_status_hub.xml

pytest -lv --disable-warnings test_subscription_status_devel.py --kubeconfig $KUBECONFIG_DEVEL --junit-xml $WORKSPACE/test_subscription_status_devel.xml

pytest -lv --disable-warnings test_subscription_status_prod.py --kubeconfig $KUBECONFIG_PROD --junit-xml $WORKSPACE/test_subscription_status_prod.xml

pytest -lv --disable-warnings test_validate_hub_site_components.py --kubeconfig $KUBECONFIG --junit-xml $WORKSPACE/test_validate_hub_site_components.xml

pytest -lv --disable-warnings test_validate_devel_site_components.py --kubeconfig $KUBECONFIG_DEVEL --junit-xml $WORKSPACE/test_validate_devel_site_components.xml

pytest -lv --disable-warnings test_validate_prod_site_components.py --kubeconfig $KUBECONFIG_PROD --junit-xml $WORKSPACE/test_validate_prod_site_components.xml

python3 create_ci_badge.py