@@ -135,3 +135,31 @@ def test_determine_finished_jobs():
135135 assert job_manager .determine_finished_jobs (known_jobs , current_jobs_all_jobs ) == []
136136 assert job_manager .determine_finished_jobs (known_jobs , current_jobs_one_job ) == ['1' , '2' ]
137137 assert job_manager .determine_finished_jobs (known_jobs , {}) == ['0' , '1' , '2' ]
138+
139+
140+ def test_parse_scontrol_show_job_output ():
141+ # Dummy output (shortened) from Slurm 25.11.3 for "scontrol show job <jobid>"
142+ scontrol_output = 'JobId=123 JobName=bot_test_job UserId=eessibot(12345) MCS_label=N/A EligibleTime=Unknown' \
143+ ' AllocNode:Sid=my.node.name:123456 SubmitLine=/opt/slurm/25.11.3/bin/sbatch --hold' \
144+ ' --time=10-0:0:0 --nodes=1 --exclusive --cpus-per-task=1 --job-name=bot_test_job ' \
145+ '/home/eessibot/job.slurm WorkDir=/jobs/2026.01/pr_123/event_123-456-789/run_000/riscv64/' \
146+ 'generic/dev.eessi.io-riscv StdErr= StdIn=/dev/null StdOut=/jobs/2026.01/pr_123/' \
147+ 'event_123-456-789/run_000/riscv64/generic/dev.eessi.io-riscv/slurm-123.out TresPerTask=cpu=1'
148+ job_manager = EESSIBotSoftwareLayerJobManager ()
149+ job_info = job_manager .parse_scontrol_show_job_output (scontrol_output )
150+ job_info_expected = {
151+ 'JobId' : '123' ,
152+ 'JobName' : 'bot_test_job' ,
153+ 'UserId' : 'eessibot(12345)' ,
154+ 'MCS_label' : 'N/A' ,
155+ 'EligibleTime' : 'Unknown' ,
156+ 'AllocNode:Sid' : 'my.node.name:123456' ,
157+ 'SubmitLine' : '/opt/slurm/25.11.3/bin/sbatch --hold --time=10-0:0:0 --nodes=1 --exclusive --cpus-per-task=1 '
158+ '--job-name=bot_test_job /home/eessibot/job.slurm' ,
159+ 'WorkDir' : '/jobs/2026.01/pr_123/event_123-456-789/run_000/riscv64/generic/dev.eessi.io-riscv' ,
160+ 'StdErr' : '' ,
161+ 'StdIn' : '/dev/null' ,
162+ 'StdOut' : '/jobs/2026.01/pr_123/event_123-456-789/run_000/riscv64/generic/dev.eessi.io-riscv/slurm-123.out' ,
163+ 'TresPerTask' : 'cpu=1' ,
164+ }
165+ assert job_info == job_info_expected
0 commit comments