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 suite for testing mariadb-container in OpenSHift4 #246

Merged
merged 6 commits into from
Jul 1, 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
41 changes: 41 additions & 0 deletions .github/workflows/openshift-pytests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
on:
issue_comment:
types:
- created
jobs:
check-imagestreams:
runs-on: ubuntu-latest
permissions:
contents: read
statuses: write
if: |
github.event.issue.pull_request
&& (contains(github.event.comment.body, '[test-openshift-pytest]') || contains(github.event.comment.body, '[test-all]'))
&& contains(fromJson('["OWNER", "MEMBER"]'), github.event.comment.author_association)
steps:
- uses: sclorg/ci-scripts/ocp-stream-generator@master
with:
ref: "refs/pull/${{ github.event.issue.number }}/head"

openshift-pytests:
name: "${{ matrix.test_case }} PyTests: ${{ matrix.version }} - ${{ matrix.os_test }}"
runs-on: ubuntu-latest
needs: check-imagestreams
concurrency:
group: ocp-pytest-${{ github.event.issue.number }}-${{ matrix.version }}-${{ matrix.os_test }}
cancel-in-progress: true
strategy:
fail-fast: false
matrix:
version: [ "10.3", "10.5", "10.11" ]
os_test: [ "rhel8", "rhel9"]
test_case: [ "openshift-pytest" ]

steps:
- uses: sclorg/tfaga-wrapper@main
with:
os_test: ${{ matrix.os_test }}
version: ${{ matrix.version }}
test_case: ${{ matrix.test_case }}
public_api_key: ${{ secrets.TF_PUBLIC_API_KEY }}
private_api_key: ${{ secrets.TF_INTERNAL_API_KEY }}
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_mariadb_*.py
50 changes: 50 additions & 0 deletions test/test_mariadb_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 TestMariaDBImagestreamTemplate:

def setup_method(self):
self.oc_api = OpenShiftAPI(pod_name_prefix="mariadb", version=VERSION)

def teardown_method(self):
self.oc_api.delete_project()

@pytest.mark.parametrize(
"template",
[
"mariadb-ephemeral-template.json",
"mariadb-persistent-template.json"
]
)
def test_mariadb_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/mariadb-{os_name}.json",
template_file=f"examples/{template}",
app_name=self.oc_api.pod_name_prefix,
openshift_args=[
f"MARIADB_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_mariadb_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 TestMariaDBImagestreamTemplate:

def setup_method(self):
self.oc_api = OpenShiftAPI(pod_name_prefix="mariadb", version=VERSION)

def teardown_method(self):
self.oc_api.delete_project()

@pytest.mark.parametrize(
"template",
[
"mariadb-ephemeral-template.json",
"mariadb-persistent-template.json"
]
)
def test_mariadb_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/mariadb-{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_mariadb_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)
62 changes: 62 additions & 0 deletions test/test_mariadb_template.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
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 TestMariaDBDeployTemplate:

def setup_method(self):
self.oc_api = OpenShiftAPI(pod_name_prefix="mariadb-testing", version=VERSION)
self.oc_api.import_is("imagestreams/mariadb-rhel.json", "", skip_check=True)

def teardown_method(self):
self.oc_api.delete_project()

@pytest.mark.parametrize(
"template",
[
"mariadb-ephemeral-template.json",
"mariadb-persistent-template.json"
]
)
def test_python_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="mariadb",
openshift_args=[
f"MARIADB_VERSION={VERSION}{TAG}",
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}/mariadb-{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"
)