test: integration tests adapt to the host

Change the integration test so that it adapts to the host, i.e. it
will take the name, version and architecture for the tags and urls
for the repos from the host it is running on. This should make it
more future proof since we now have a central place where this is
configured: the ci configuration, i.e. `.gitlab-ci.yml`.
This commit is contained in:
Christian Kellner 2022-01-31 03:50:19 +00:00
parent 141f5561d2
commit b80fd4d7f6
2 changed files with 73 additions and 54 deletions

View file

@ -4,22 +4,30 @@
import functools
import platform
import unittest
import string
import subprocess
F33_REPO = "http://download.fedoraproject.org/pub/fedora/linux/releases/33/Everything/$arch/os"
REPOS = {
"fedora": [
"http://download.fedoraproject.org/pub/fedora/linux/releases/$release/Everything/$arch/os"
],
"rhel": [
"http://download.devel.redhat.com/released/RHEL-8/$release/BaseOS/x86_64/os/",
"http://download.devel.redhat.com/released/RHEL-8/$release/AppStream/x86_64/os/",
]
}
RHEL_REPOS = [
"http://download.devel.redhat.com/released/RHEL-8/8.2.0/BaseOS/x86_64/os/",
"http://download.devel.redhat.com/released/RHEL-8/8.2.0/AppStream/x86_64/os/",
]
def koji_command(*args, _input=None, _globals=None, **kwargs):
args = list(args) + [f'--{k}={v}' for k, v in kwargs.items()]
if _globals:
args = [f'--{k}={v}' for k, v in _globals.items()] + args
return subprocess.run(["koji"] + args,
cmd = ["koji"] + args
print(cmd)
return subprocess.run(cmd,
encoding="utf-8",
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
@ -41,16 +49,6 @@ def parse_os_release():
return info
def is_fedora():
info = parse_os_release()
return info["ID"].lower() == "fedora"
def is_rhel():
info = parse_os_release()
return info["ID"].lower() == "rhel"
class TestIntegration(unittest.TestCase):
def setUp(self):
@ -77,35 +75,37 @@ class TestIntegration(unittest.TestCase):
"\n error: " + res.stdout)
self.fail(msg)
@unittest.skipUnless(is_fedora(), "no cross builds")
def test_compose_fedora(self):
"""Successful Fedora compose"""
# Simple test of a successful compose of F33
# Needs the f33-candidate tag be setup properly
res = self.koji("Fedora-Cloud",
"33",
"fedora-33",
"f33-candidate",
"x86_64",
"--wait",
repo=F33_REPO)
self.check_res(res)
@unittest.skipUnless(is_rhel(), "no cross builds")
def test_compose_rhel(self):
"""Successful RHEL compose"""
def test_compose(self):
"""Successful compose"""
# Simple test of a successful compose of RHEL
repos = []
for repo in RHEL_REPOS:
repos += ["--repo", repo]
info = parse_os_release()
res = self.koji("RHEL-Cloud",
"8",
"rhel-8",
"f33-candidate",
"x86_64",
name = info["ID"] # 'fedora' or 'rhel'
version = info["VERSION_ID"] # <major> or <major>.<minor>
major = version.split(".")[0]
distro = f"{name}-{major}"
tag = f"{name}{major}-candidate" # fedora<major> or rhel<major>
arch = platform.machine()
release = version
if name.lower() == "rhel":
release += ".0"
repos = []
for repo in REPOS[name]:
tpl = string.Template(repo)
url = tpl.safe_substitute({"release": release})
repos += ["--repo", url]
package = f"{name.lower()}-guest"
res = self.koji(package,
major,
distro,
tag,
arch,
"--wait",
*repos)
self.check_res(res)
@ -113,9 +113,17 @@ class TestIntegration(unittest.TestCase):
def test_unknown_tag_check(self):
"""Unknown Tag check"""
# Check building an unknown tag fails
res = self.koji("Fedora-Cloud",
"33",
"fedora-33",
info = parse_os_release()
name = info["ID"] # 'fedora' or 'rhel'
version = info["VERSION_ID"] # <major> or <major>.<minor>
major = version.split(".")[0]
distro = f"{name}-{major}"
res = self.koji("fedora-guest",
major,
distro,
"UNKNOWNTAG",
"x86_64")
platform.machine())
self.check_fail(res)

View file

@ -1,18 +1,29 @@
#!/usr/bin/sh
set -ux
. /etc/os-release
KOJI_SERVER=${KOJI_SERVER:-http://localhost:8080/kojihub}
KOJI="koji --server=${KOJI_SERVER} --user=kojiadmin --password=kojipass --authtype=password"
$KOJI add-tag f33
$KOJI add-tag --parent f33 f33-candidate
$KOJI add-tag --parent f33 --arches=x86_64 f33-build
$KOJI add-target f33-candidate f33-build f33-candidate
ARCHES=$(uname -m)
VERSION_MAJOR="${VERSION_ID%.*}"
$KOJI add-pkg --owner kojiadmin f33-candidate Fedora-Cloud
$KOJI add-pkg --owner kojiadmin f33-candidate RHEL-Cloud
TAG_NAME="${ID}${VERSION_MAJOR}" # fedora35 or rhel8
TAG_BUILD="${TAG_NAME}-build"
TAG_CANDIDATE="${TAG_NAME}-candidate"
$KOJI add-pkg --owner kojiadmin f33-candidate Fedora-IoT
echo "Tag configuration: ${TAG_NAME}, ${TAG_BUILD}, ${TAG_CANDIDATE}, ${ARCHES}"
$KOJI regen-repo f33-build
$KOJI add-tag "${TAG_NAME}"
$KOJI add-tag --parent "${TAG_NAME}" "${TAG_CANDIDATE}"
$KOJI add-tag --parent "${TAG_NAME}" --arches="${ARCHES}" "${TAG_BUILD}"
$KOJI add-target "${TAG_CANDIDATE}" "${TAG_BUILD}" "${TAG_CANDIDATE}"
$KOJI add-pkg --owner kojiadmin "${TAG_CANDIDATE}" fedora-guest
$KOJI add-pkg --owner kojiadmin "${TAG_CANDIDATE}" rhel-guest
$KOJI add-pkg --owner kojiadmin "${TAG_CANDIDATE}" fedora-iot
$KOJI regen-repo "${TAG_BUILD}"