#!/usr/bin/env python3
############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import argparse
import importlib.util
import os
import pathlib
import sys

parser = argparse.ArgumentParser(description="Performs an ATF test run")
group = parser.add_mutually_exclusive_group()
group.add_argument(
    "--auto-config",
    action="store_true",
    help="the slurm configuration will be altered as needed by the test",
)
group.add_argument(
    "--local-config",
    action="store_false",
    dest="auto_config",
    help="the slurm configuration will not be altered. This is the default",
)
group.add_argument(
    "--pdb",
    action="store_true",
    dest="pdb",
    help="Use pdb to debug failures",
)
parser.add_argument(
    "--no-color", action="store_true", help="the logs won't include color"
)
parser.add_argument(
    "--allow-slurmdbd-modify",
    action="store_true",
    help="allow running in local-config even if require_accounting(modify=True)",
)
parser.add_argument("PYTEST_OPTION ...", nargs="?", help="additional pytest options")
parser.add_argument("TEST_FILE_OR_DIR ...", nargs="?", help="test files or directories")
args, unknown = parser.parse_known_args()

# Verify that pytest is installed
if importlib.util.find_spec("pytest") is None:
    sys.exit("pytest must be installed in order to run the python testsuite")

atf_base_dir = str(pathlib.Path(__file__).resolve().parent)

# Change directory to the base of the ATF repo
os.chdir(atf_base_dir)

command = "pytest"
# --disable-warnings is very useful for tests using pydantic,
# logging.warning in tests are still shown
# -rN disables the pytest short summary, as we defined our own pytest_terminal_summary
args = [
    command,
    "-s",
    "-rN",
    "-v",
    "-p",
    "no:cacheprovider",
    "--disable-warnings",
    "--show-capture=no",
]

if "pdb" in args:
    args.append("--pdb")

# To avoid logs being truncated
os.environ["PYTHONUNBUFFERED"] = "1"

args.extend(sys.argv[1:])
os.execvp(command, args)
