Source code for ewoksmx.tests.shell_utils.test_execute_slurm

import logging
import shutil
import subprocess
import tempfile

import pytest

from ewoksmx.shell_utils.execute_slurm import execute_bash_commands


[docs] def sbatch_available() -> bool: """Check if the sbatch command is available.""" return subprocess.call(["which", "sbatch"]) == 0
[docs] @pytest.fixture def slurm_parameters(): if not sbatch_available(): pytest.skip(reason="Slurm sbatch not available") parameters = { "time": "00:05:00", "ntasks": 1, "cpus-per-task": 1, "mem": "1GB", # "partition": "nice", } working_directory = tempfile.mkdtemp(prefix="slurm_test_", dir="/tmp_14_days") return {"working_directory": working_directory, "parameters": parameters}
[docs] def test_execute_bash_commands_success(caplog, capsys, slurm_parameters): commands = [ 'echo "Job $SLURM_JOBID start!"', 'echo "This is a test message for STDOUT"', '>&2 echo "This is a test message for STDERR"', "hostname", 'echo "Job finished!"', ] result = execute_bash_commands(commands, **slurm_parameters) result.print() with caplog.at_level(logging.DEBUG): result.log() result.raise_on_error() assert "This is a test message for STDOUT" in (result.read_log() or "") assert "This is a test message for STDERR" in (result.read_log() or "") assert " start!" in (result.read_log() or "") assert "Job finished!" in (result.read_log() or "") captured = capsys.readouterr() assert "This is a test message for STDOUT" in captured.out assert "This is a test message for STDERR" in captured.out assert any( "This is a test message for STDOUT" in record.message for record in caplog.records ) assert any( "This is a test message for STDERR" in record.message for record in caplog.records ) shutil.rmtree(slurm_parameters["working_directory"])
[docs] def test_execute_bash_commands_failure(slurm_parameters): commands = [ 'echo "Job $SLURM_JOBID start!"', 'echo "This is a test message for STDOUT"', '>&2 echo "This is a test message for STDERR"', "ls /cause_error", 'echo "Job finished!"', ] result = execute_bash_commands(commands, **slurm_parameters) with pytest.raises(RuntimeError): result.raise_on_error() shutil.rmtree(slurm_parameters["working_directory"])