Back to home page

EIC code displayed by LXR

 
 

    


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]]