############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import re

import pytest

import atf


# Setup
@pytest.fixture(scope="module", autouse=True)
def setup():
    atf.require_slurm_running()


@pytest.fixture(scope="module")
def srun_output():
    return atf.run_command_output("srun -N 1 -t 1 id", fatal=True)


# Verify that a job executes as the appropriate user and group
def test_uid(srun_output):
    """Verify that a job executes as the invoking user"""
    test_uid = atf.properties["test-user-uid"]
    job_uid = (
        int(match.group(1)) if (match := re.search(r"uid=(\d+)", srun_output)) else None
    )
    assert job_uid == test_uid


def test_gid(srun_output):
    """Verify that a job executes as the invoking group"""
    test_gid = atf.properties["test-user-gid"]
    job_gid = (
        int(match.group(1)) if (match := re.search(r"gid=(\d+)", srun_output)) else None
    )
    assert job_gid == test_gid
