From d6da218c0655a3a59fc1ca6e26dab3b5d72f67e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Berland?= Date: Thu, 29 Feb 2024 15:31:43 +0100 Subject: [PATCH] Test all possible PBS job states (#7307) --- src/ert/scheduler/openpbs_driver.py | 22 +++++++++++++++++-- .../scheduler/test_openpbs_driver.py | 3 ++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/ert/scheduler/openpbs_driver.py b/src/ert/scheduler/openpbs_driver.py index 4c58d8a5844..d16fe775644 100644 --- a/src/ert/scheduler/openpbs_driver.py +++ b/src/ert/scheduler/openpbs_driver.py @@ -14,7 +14,20 @@ logger = logging.getLogger(__name__) _POLL_PERIOD = 2.0 # seconds -JobState = Literal["B", "E", "F", "H", "M", "Q", "R", "S", "T", "U", "W", "X"] +JobState = Literal[ + "B", # Begun + "E", # Exiting with or without errors + "F", # Finished (completed, failed or deleted) + "H", # Held, + "M", # Moved to another server + "Q", # Queued + "R", # Running + "S", # Suspended + "T", # Transiting + "U", # User suspended + "W", # Waiting + "X", # Expired (subjobs only) +] JOBSTATE_INITIAL: JobState = "Q" QSUB_INVALID_CREDENTIAL: int = 171 @@ -45,8 +58,13 @@ class RunningJob(BaseModel): job_state: Literal["R"] +class IgnoredJobstates(BaseModel): + job_state: Literal["B", "E", "M", "S", "T", "U", "W", "X"] + + AnyJob = Annotated[ - Union[FinishedJob, QueuedJob, RunningJob], Field(discriminator="job_state") + Union[FinishedJob, QueuedJob, RunningJob, IgnoredJobstates], + Field(discriminator="job_state"), ] diff --git a/tests/unit_tests/scheduler/test_openpbs_driver.py b/tests/unit_tests/scheduler/test_openpbs_driver.py index 9510dff9f12..2243a9e91da 100644 --- a/tests/unit_tests/scheduler/test_openpbs_driver.py +++ b/tests/unit_tests/scheduler/test_openpbs_driver.py @@ -18,12 +18,13 @@ QSUB_INVALID_CREDENTIAL, QSUB_PREMATURE_END_OF_MESSAGE, FinishedEvent, + JobState, StartedEvent, _Stat, ) -@given(st.lists(st.sampled_from(["H", "Q", "R", "F"]))) +@given(st.lists(st.sampled_from(JobState.__args__))) async def test_events_produced_from_jobstate_updates(jobstate_sequence: List[str]): # Determine what to expect from the sequence: started = False