Skip to content
Snippets Groups Projects
Commit 77e75f61 authored by Mattia Mancini's avatar Mattia Mancini
Browse files

test for slurm_control list jobs command

parent 6aa152a1
No related branches found
No related tags found
No related merge requests found
from setuptools import setup from setuptools import setup
import unittest
def test_suite():
test_loader = unittest.TestLoader()
test_suite = test_loader.discover('tests', pattern='test_*.py')
return test_suite
setup( setup(
name="slurm-executor-plugin", name="slurm-executor-plugin",
...@@ -7,6 +15,7 @@ setup( ...@@ -7,6 +15,7 @@ setup(
url='https://git.astron.nl/eosc/slurmexecutorplugin/', url='https://git.astron.nl/eosc/slurmexecutorplugin/',
package_dir = {'': 'lib'}, package_dir = {'': 'lib'},
packages = ['slurm_cli', 'slurm_executor'], packages = ['slurm_cli', 'slurm_executor'],
test_suite = 'setup.test_suite',
entry_points = { entry_points = {
'airflow.plugins': [ 'airflow.plugins': [
'slurm = slurm_executor.slurm:SlurmExecutorPlugin' 'slurm = slurm_executor.slurm:SlurmExecutorPlugin'
......
import slurm_cli.slurm_control as slurm_control
from slurm_cli.jobs import SlurmJobStatus
import unittest
from unittest.mock import patch, MagicMock
from subprocess import CompletedProcess
import logging
def get_mocked_call_output(status_code, stdout_string, stderr_string):
mocked_run_return_value = MagicMock(CompletedProcess)
mocked_run_return_value.stdout = stdout_string
mocked_run_return_value.stderr = stderr_string
mocked_run_return_value.returncode = status_code
return mocked_run_return_value
class TestSlurmControl(unittest.TestCase):
@patch('slurm_cli.slurm_control.run_process')
def test_get_job_statuses_job_queue_empty(self, call_mock):
output_string = ''
call_mock.return_value = get_mocked_call_output(0, output_string, '')
jobs = slurm_control.get_jobs_status()
self.assertEqual(len(jobs), 0)
@patch('slurm_cli.slurm_control.run_process')
def test_get_job_statuses_job_queue_filled(self, call_mock):
output_string = '123;test_job;CD;COMPLETED;None\n124;test_job;F;FAILED;error 1\n'
expected_parsed_results = [
SlurmJobStatus(job_id='123', job_name='test_job', status_code='CD', status='COMPLETED', reason='None'),
SlurmJobStatus(job_id='124', job_name='test_job', status_code='F', status='FAILED', reason='error 1')
]
call_mock.return_value = get_mocked_call_output(0, output_string, '')
jobs = slurm_control.get_jobs_status()
self.assertEqual(len(jobs), 2)
for job_status in expected_parsed_results:
self.assertIn(job_status.job_id, jobs)
self.assertEqual(jobs[job_status.job_id], job_status)
@patch('slurm_cli.slurm_control.run_process')
def test_get_job_statuses_command_non_zero_exit_code(self, call_mock):
output_string = '123;test_job;CD;COMPLETED;None\n124;test_job;F;FAILED;error 1\n'
call_mock.return_value = get_mocked_call_output(1, output_string, 'stuff')
with self.assertRaises(slurm_control.SlurmCallError):
_ = slurm_control.get_jobs_status()
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s-%(name)s-%(levelname)s %(message)s')
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment