#! /usr/bin/env python
import argparse
import os
import subprocess as sp
def setup_parser():
""" Setup the cli arguments """
parser = argparse.ArgumentParser(prog="pagure-test")
parser.add_argument(
"test_case", nargs="?", default="", help="Run the given test case"
)
parser.add_argument(
"--fedora",
action="store_true",
help="Run the tests in fedora environment (DEFAULT)",
)
parser.add_argument(
"--centos",
action="store_true",
help="Run the tests in centos environment",
)
parser.add_argument(
"--pip",
action="store_true",
help="Run the tests in a venv on a Fedora host",
)
parser.add_argument(
"--skip-build",
dest="skip_build",
action="store_false",
help="Skip building the container image",
)
parser.add_argument(
"--shell",
dest="shell",
action="store_true",
help="Gives you a shell into the container instead "
"of running the tests",
)
return parser
if __name__ == "__main__":
parser = setup_parser()
args = parser.parse_args()
if args.centos is True:
container_names = ["pagure-c7-rpms-py2"]
container_files = ["centos7-rpms-py2"]
elif args.fedora is True:
container_names = ["pagure-f29-rpms-py3"]
container_files = ["f29-rpms-py3"]
elif args.pip is True:
container_names = ["pagure-fedora-pip-py3"]
container_files = ["fedora-pip-py3"]
else:
container_names = [
"pagure-f29-rpms-py3",
"pagure-c7-rpms-py2",
"pagure-fedora-pip-py3",
]
container_files = [
"f29-rpms-py3",
"centos7-rpms-py2",
"fedora-pip-py3",
]
failed = []
for idx, container_name in enumerate(container_names):
if args.skip_build is not False:
print("------ Building Container Image -----")
output_code = sp.call(
[
"podman",
"build",
"--build-arg",
"branch={}".format(os.environ.get("BRANCH") or "master"),
"--build-arg",
"repo={}".format(
os.environ.get("REPO")
or "https://pagure.io/pagure.git"
),
"--rm",
"-t",
container_name,
"-f",
"dev/containers/%s" % container_files[idx],
"dev/containers",
]
)
if output_code:
print("Failed building: %s", container_name)
break
result_path = "{}/results_{}".format(os.getcwd(), container_files[idx])
if not os.path.exists(result_path):
os.mkdir(result_path)
if args.shell:
print("--------- Shelling in the container --------------")
command = [
"podman",
"run",
"-it",
"--rm",
"--name",
container_name,
"-v",
"{}/results_{}:/pagure/results:z".format(
os.getcwd(), container_files[idx]
),
"-e",
"BRANCH={}".format(os.environ.get("BRANCH") or "master"),
"-e",
"REPO={}".format(
os.environ.get("REPO") or "https://pagure.io/pagure.git"
),
"--entrypoint=/bin/bash",
container_name,
]
sp.call(command)
else:
print("--------- Running Test --------------")
command = [
"podman",
"run",
"-it",
"--rm",
"--name",
container_name,
"-v",
"{}/results_{}:/pagure/results:z".format(
os.getcwd(), container_files[idx]
),
"-e",
"BRANCH={}".format(os.environ.get("BRANCH") or "master"),
"-e",
"REPO={}".format(
os.environ.get("REPO") or "https://pagure.io/pagure.git"
),
"-e",
"TESTCASE={}".format(args.test_case or ""),
container_name,
]
output_code = sp.call(command)
if output_code:
failed.append(container_name)
if not args.shell:
print("\nSummary:")
if not failed:
print(" ALL TESTS PASSED")
else:
print(" %s TESTS FAILED:" % len(failed))
for fail in failed:
print(" - %s" % fail)