Warning, file /AID2E-framework/tests/test_schedulers/test_check_panda_jobs.py was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 """Tests for the read-only PanDA/iDDS workflow inspection helper."""
0002
0003 from __future__ import annotations
0004
0005 import importlib.util
0006 from pathlib import Path
0007
0008 SCRIPT_PATH = (
0009 Path(__file__).parents[2]
0010 / "examples"
0011 / "schedulers"
0012 / "panda-idds"
0013 / "check_panda_jobs.py"
0014 )
0015 SPEC = importlib.util.spec_from_file_location("check_panda_jobs", SCRIPT_PATH)
0016 assert SPEC is not None and SPEC.loader is not None
0017 check_panda_jobs = importlib.util.module_from_spec(SPEC)
0018 SPEC.loader.exec_module(check_panda_jobs)
0019
0020
0021 def test_task_id_means_idds_workflow_and_jedi_task_id_is_explicit():
0022 parser = check_panda_jobs.build_parser()
0023
0024 workflow_args = parser.parse_args(["--task-id", "3672"])
0025 jedi_args = parser.parse_args(["--jedi-task-id", "40788"])
0026
0027 assert workflow_args.request_id == 3672
0028 assert workflow_args.task_ids == []
0029 assert jedi_args.request_id is None
0030 assert jedi_args.task_ids == [40788]
0031
0032
0033 def test_workflow_report_groups_jobs_under_their_transforms(monkeypatch):
0034 transforms = [
0035 {
0036 "transform_id": 32497,
0037 "internal_id": "parent",
0038 "workload_id": 40788,
0039 "status": "Finished",
0040 },
0041 {
0042 "transform_id": 32500,
0043 "internal_id": "child",
0044 "parent_internal_id": "parent",
0045 "workload_id": 40790,
0046 "status": "Finished",
0047 },
0048 ]
0049 tasks = {
0050 40788: {"jediTaskID": 40788, "status": "done", "panda_ids": [4879043]},
0051 40790: {"jediTaskID": 40790, "status": "done", "panda_ids": [4879047]},
0052 }
0053 jobs = [
0054 {"PandaID": 4879043, "jediTaskID": 40788, "jobStatus": "finished"},
0055 {"PandaID": 4879047, "jediTaskID": 40790, "jobStatus": "finished"},
0056 ]
0057
0058 monkeypatch.setattr(
0059 check_panda_jobs,
0060 "query_transforms",
0061 lambda request_id, transform_id, verbose=False: transforms,
0062 )
0063 monkeypatch.setattr(
0064 check_panda_jobs,
0065 "query_workflow",
0066 lambda request_id, verbose=False: {
0067 "request_id": request_id,
0068 "task_id": request_id,
0069 "status": "Finished",
0070 },
0071 )
0072 monkeypatch.setattr(
0073 check_panda_jobs,
0074 "query_task",
0075 lambda task_id, verbose=False: tasks[task_id],
0076 )
0077 monkeypatch.setattr(
0078 check_panda_jobs,
0079 "query_jobs",
0080 lambda job_ids, verbose=False: [
0081 job for job in jobs if job["PandaID"] in job_ids
0082 ],
0083 )
0084
0085 report = check_panda_jobs.inspect_identifiers(
0086 request_id=3672,
0087 transform_id=None,
0088 task_ids=[],
0089 job_ids=[],
0090 max_jobs=100,
0091 verbose=False,
0092 )
0093
0094 workflow = report["workflow"]
0095 assert workflow["summary"] == {
0096 "transforms": 2,
0097 "jedi_tasks": 2,
0098 "panda_jobs": 2,
0099 "job_statuses": {"finished": 2},
0100 }
0101 assert workflow["transforms"][0]["jedi_task"] == tasks[40788]
0102 assert workflow["transforms"][0]["jobs"] == [jobs[0]]
0103 assert workflow["transforms"][1]["parent_internal_id"] == "parent"
0104 assert workflow["transforms"][1]["jobs"] == [jobs[1]]