From d6e96915803fd132580f5afe4b04855680ad927c Mon Sep 17 00:00:00 2001 From: Petr Hracek Date: Mon, 1 Jul 2024 10:32:49 +0200 Subject: [PATCH] Add test written in PyTest for testing (#370) * Add test written in PyTest for testing mysql-container in OpenShift 4 environment Similar pull request is here: https://github.com/sclorg/mariadb-container/pull/246 Signed-off-by: Petr "Stone" Hracek --- test/run-openshift-pytest | 13 ++++++ test/test_mysql_imagestream.py | 50 ++++++++++++++++++++++ test/test_mysql_imagestream_template.py | 46 +++++++++++++++++++++ test/test_mysql_latest_imagestreams.py | 25 +++++++++++ test/test_mysql_template.py | 55 +++++++++++++++++++++++++ 5 files changed, 189 insertions(+) create mode 100755 test/run-openshift-pytest create mode 100644 test/test_mysql_imagestream.py create mode 100644 test/test_mysql_imagestream_template.py create mode 100644 test/test_mysql_latest_imagestreams.py create mode 100644 test/test_mysql_template.py diff --git a/test/run-openshift-pytest b/test/run-openshift-pytest new file mode 100755 index 0000000..0414661 --- /dev/null +++ b/test/run-openshift-pytest @@ -0,0 +1,13 @@ +#!/bin/bash +# +# IMAGE_NAME specifies a name of the candidate image used for testing. +# The image has to be available before this script is executed. +# VERSION specifies the major version of the MariaDB in format of X.Y +# OS specifies RHEL version (e.g. OS=rhel7) +# + +THISDIR=$(dirname ${BASH_SOURCE[0]}) + +git show -s + +cd "${THISDIR}" && python3 -m pytest -s -rxfapP --showlocals -vv test_mysql_*.py diff --git a/test/test_mysql_imagestream.py b/test/test_mysql_imagestream.py new file mode 100644 index 0000000..b77b740 --- /dev/null +++ b/test/test_mysql_imagestream.py @@ -0,0 +1,50 @@ +import os +import sys + +import pytest + +from container_ci_suite.openshift import OpenShiftAPI +from container_ci_suite.utils import check_variables + +if not check_variables(): + print("At least one variable from IMAGE_NAME, OS, SINGLE_VERSION is missing.") + sys.exit(1) + + +VERSION = os.getenv("SINGLE_VERSION") +IMAGE_NAME = os.getenv("IMAGE_NAME") +OS = os.getenv("TARGET") +TAGS = { + "rhel8": "-el8", + "rhel9": "-el9" +} +TAG = TAGS.get(OS, None) + + +class TestMySQLImagestreamTemplate: + + def setup_method(self): + self.oc_api = OpenShiftAPI(pod_name_prefix="mysql", version=VERSION) + + def teardown_method(self): + self.oc_api.delete_project() + + @pytest.mark.parametrize( + "template", + [ + "mysql-ephemeral-template.json", + "mysql-persistent-template.json" + ] + ) + def test_imagestream_template(self, template): + os_name = ''.join(i for i in OS if not i.isdigit()) + print(os.getcwd()) + assert self.oc_api.deploy_image_stream_template( + imagestream_file=f"imagestreams/mysql-{os_name}.json", + template_file=f"examples/{template}", + app_name=self.oc_api.pod_name_prefix, + openshift_args=[ + f"MYSQL_VERSION={VERSION}{TAG}" + ] + ) + assert self.oc_api.is_pod_running(pod_name_prefix=self.oc_api.pod_name_prefix) diff --git a/test/test_mysql_imagestream_template.py b/test/test_mysql_imagestream_template.py new file mode 100644 index 0000000..c95d408 --- /dev/null +++ b/test/test_mysql_imagestream_template.py @@ -0,0 +1,46 @@ +import os +import sys + +import pytest + +from container_ci_suite.openshift import OpenShiftAPI +from container_ci_suite.utils import check_variables + +if not check_variables(): + print("At least one variable from IMAGE_NAME, OS, SINGLE_VERSION is missing.") + sys.exit(1) + + +VERSION = os.getenv("SINGLE_VERSION") +IMAGE_NAME = os.getenv("IMAGE_NAME") +OS = os.getenv("TARGET") +TAGS = { + "rhel8": "-el8", + "rhel9": "-el9" +} +TAG = TAGS.get(OS, None) + + +class TestMySQLImagestreamTemplate: + + def setup_method(self): + self.oc_api = OpenShiftAPI(pod_name_prefix="mysql", version=VERSION) + + def teardown_method(self): + self.oc_api.delete_project() + + @pytest.mark.parametrize( + "template", + [ + "mysql-ephemeral-template.json", + "mysql-persistent-template.json" + ] + ) + def test_imagestream_template(self, template): + os_name = ''.join(i for i in OS if not i.isdigit()) + assert self.oc_api.deploy_image_stream_template( + imagestream_file=f"imagestreams/mysql-{os_name}.json", + template_file=f"examples/{template}", + app_name=self.oc_api.pod_name_prefix + ) + assert self.oc_api.is_pod_running(pod_name_prefix=self.oc_api.pod_name_prefix) diff --git a/test/test_mysql_latest_imagestreams.py b/test/test_mysql_latest_imagestreams.py new file mode 100644 index 0000000..919c73c --- /dev/null +++ b/test/test_mysql_latest_imagestreams.py @@ -0,0 +1,25 @@ +import os +import sys +import pytest + +from pathlib import Path + +from container_ci_suite.imagestreams import ImageStreamChecker +from container_ci_suite.utils import check_variables + +TEST_DIR = Path(os.path.abspath(os.path.dirname(__file__))) + +if not check_variables(): + print("At least one variable from IMAGE_NAME, OS, SINGLE_VERSION is missing.") + sys.exit(1) + + +class TestLatestImagestreams: + + def setup_method(self): + self.isc = ImageStreamChecker(working_dir=TEST_DIR.parent) + + def test_latest_imagestream(self): + self.latest_version = self.isc.get_latest_version() + assert self.latest_version != "" + self.isc.check_imagestreams(self.latest_version) diff --git a/test/test_mysql_template.py b/test/test_mysql_template.py new file mode 100644 index 0000000..7a13ac9 --- /dev/null +++ b/test/test_mysql_template.py @@ -0,0 +1,55 @@ +import os +import sys + +import pytest + +from container_ci_suite.openshift import OpenShiftAPI +from container_ci_suite.utils import check_variables + +if not check_variables(): + print("At least one variable from IMAGE_NAME, OS, SINGLE_VERSION is missing.") + sys.exit(1) + + +VERSION = os.getenv("SINGLE_VERSION") +IMAGE_NAME = os.getenv("IMAGE_NAME") +OS = os.getenv("TARGET") + + +class TestMySQLDeployTemplate: + + def setup_method(self): + self.oc_api = OpenShiftAPI(pod_name_prefix="mysql-testing", version=VERSION) + + def teardown_method(self): + self.oc_api.delete_project() + + @pytest.mark.parametrize( + "template", + [ + "mysql-ephemeral-template.json", + "mysql-persistent-template.json" + ] + ) + def test_template_inside_cluster(self, template): + short_version = VERSION.replace(".", "") + assert self.oc_api.deploy_template_with_image( + image_name=IMAGE_NAME, + template=template, + name_in_template="mysql", + openshift_args=[ + f"MYSQL_VERSION={VERSION}", + f"DATABASE_SERVICE_NAME={self.oc_api.pod_name_prefix}", + f"MYSQL_USER=testu", + f"MYSQL_PASSWORD=testp", + f"MYSQL_DATABASE=testdb" + ] + ) + + assert self.oc_api.is_pod_running(pod_name_prefix=self.oc_api.pod_name_prefix) + assert self.oc_api.check_command_internal( + image_name=f"registry.redhat.io/{OS}/mysql-{short_version}", + service_name=self.oc_api.pod_name_prefix, + cmd="echo 'SELECT 42 as testval\\g' | mysql --connect-timeout=15 -h testdb -utestu -ptestp", + expected_output="42" + )