Use the unittest module from the standard library. Also, ensure that separate runs of this test don't share a osbuild store and clean up after themselves. With contributions from Ondřej Budai and Tom Gundersen.
86 lines
2.8 KiB
Python
86 lines
2.8 KiB
Python
import argparse
|
|
import logging
|
|
import subprocess
|
|
import os
|
|
|
|
from test.integration_tests.test_case import IntegrationTestCase, IntegrationTestType
|
|
from test.integration_tests.config import *
|
|
|
|
logging.basicConfig(level=logging.getLevelName(os.environ.get("TESTS_LOGLEVEL", "INFO")))
|
|
|
|
|
|
def test_is_system_running(result):
|
|
assert result.strip() == "running"
|
|
|
|
|
|
def test_timezone(extract_dir):
|
|
link = os.readlink(f"{extract_dir}/etc/localtime")
|
|
assert "Europe/Prague" in link
|
|
|
|
|
|
def test_firewall(extract_dir):
|
|
with open(f"{extract_dir}/etc/firewalld/zones/public.xml") as f:
|
|
content = f.read()
|
|
assert 'service name="http"' in content
|
|
assert 'service name="ftp"' in content
|
|
assert 'service name="telnet"' not in content
|
|
assert 'port port="53" protocol="tcp"' in content
|
|
assert 'port port="88" protocol="udp"' in content
|
|
|
|
|
|
def test_locale(extract_dir):
|
|
with open(f"{extract_dir}/etc/locale.conf") as f:
|
|
content = f.read()
|
|
assert 'LANG=nn_NO.utf8' in content
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(description='Run integration tests')
|
|
parser.add_argument('--list', dest='list', action='store_true', help='list test cases')
|
|
parser.add_argument('--build-pipeline', dest='build_pipeline', metavar='PIPELINE',
|
|
type=os.path.abspath, help='the build pipeline to run tests in')
|
|
parser.add_argument('--case', dest='specific_case', metavar='TEST_CASE', help='run single test case')
|
|
args = parser.parse_args()
|
|
|
|
logging.info(f"Using {OBJECTS} for objects storage.")
|
|
logging.info(f"Using {OSBUILD} for building images.")
|
|
|
|
timezone = IntegrationTestCase(
|
|
name="timezone",
|
|
pipeline="timezone.json",
|
|
build_pipeline=args.build_pipeline,
|
|
output_image="timezone.tar",
|
|
test_cases=[test_timezone],
|
|
type=IntegrationTestType.EXTRACT
|
|
)
|
|
firewall = IntegrationTestCase(
|
|
name="firewall",
|
|
pipeline="firewall.json",
|
|
build_pipeline=args.build_pipeline,
|
|
output_image="firewall.tar",
|
|
test_cases=[test_firewall],
|
|
type=IntegrationTestType.EXTRACT
|
|
)
|
|
locale = IntegrationTestCase(
|
|
name="locale",
|
|
pipeline="locale.json",
|
|
build_pipeline=args.build_pipeline,
|
|
output_image="locale.tar",
|
|
test_cases=[test_locale],
|
|
type=IntegrationTestType.EXTRACT
|
|
)
|
|
|
|
cases = [timezone, firewall, locale]
|
|
|
|
if args.list:
|
|
print("Available test cases:")
|
|
for case in cases:
|
|
print(f" - {case.name}")
|
|
else:
|
|
if not args.specific_case:
|
|
for case in cases:
|
|
case.run()
|
|
else:
|
|
for case in cases:
|
|
if case.name == args.specific_case:
|
|
case.run()
|