Skip to content

Commit

Permalink
Add test written in PyTest for testing (#370)
Browse files Browse the repository at this point in the history
* Add test written in PyTest for testing
mysql-container in OpenShift 4 environment
Similar pull request is here:
sclorg/mariadb-container#246


Signed-off-by: Petr "Stone" Hracek <phracek@redhat.com>
  • Loading branch information
phracek authored Jul 1, 2024
1 parent 6915a20 commit d6e9691
Show file tree
Hide file tree
Showing 5 changed files with 189 additions and 0 deletions.
13 changes: 13 additions & 0 deletions test/run-openshift-pytest
Original file line number Diff line number Diff line change
@@ -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
50 changes: 50 additions & 0 deletions test/test_mysql_imagestream.py
Original file line number Diff line number Diff line change
@@ -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)
46 changes: 46 additions & 0 deletions test/test_mysql_imagestream_template.py
Original file line number Diff line number Diff line change
@@ -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)
25 changes: 25 additions & 0 deletions test/test_mysql_latest_imagestreams.py
Original file line number Diff line number Diff line change
@@ -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)
55 changes: 55 additions & 0 deletions test/test_mysql_template.py
Original file line number Diff line number Diff line change
@@ -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 <IP> testdb -utestu -ptestp",
expected_output="42"
)

0 comments on commit d6e9691

Please sign in to comment.