Skip to content

Commit e692a06

Browse files
authored
Fix IndepQueueManager test (#5832)
Fix test
1 parent 88b2798 commit e692a06

File tree

2 files changed

+24
-28
lines changed

2 files changed

+24
-28
lines changed

cylc/flow/task_queues/independent.py

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818

1919
from collections import deque
2020
from contextlib import suppress
21-
from typing import List, Set, Dict, Counter, Any
21+
from typing import TYPE_CHECKING, List, Set, Dict, Counter, Any
2222

23-
from cylc.flow.task_proxy import TaskProxy
2423
from cylc.flow.task_queues import TaskQueueManagerBase
2524

25+
if TYPE_CHECKING:
26+
from cylc.flow.task_proxy import TaskProxy
27+
2628

2729
class LimitedTaskQueue:
2830
"""One task queue with group members and active limit."""
@@ -33,16 +35,16 @@ def __init__(self, limit: int, members: Set[str]) -> None:
3335
self.members = members # member task names
3436
self.deque: deque = deque()
3537

36-
def push_task(self, itask: TaskProxy) -> None:
38+
def push_task(self, itask: 'TaskProxy') -> None:
3739
"""Queue task if in my membership list."""
3840
if itask.tdef.name in self.members:
3941
self.deque.appendleft(itask)
4042

41-
def release(self, active: Counter[str]) -> List[TaskProxy]:
43+
def release(self, active: Counter[str]) -> List['TaskProxy']:
4244
"""Release tasks if below the active limit."""
4345
# The "active" argument counts active tasks by name.
44-
released: List[TaskProxy] = []
45-
held: List[TaskProxy] = []
46+
released: List['TaskProxy'] = []
47+
held: List['TaskProxy'] = []
4648
n_active: int = 0
4749
for mem in self.members:
4850
n_active += active[mem]
@@ -62,7 +64,7 @@ def release(self, active: Counter[str]) -> List[TaskProxy]:
6264
self.deque.appendleft(itask)
6365
return released
6466

65-
def remove(self, itask: TaskProxy) -> bool:
67+
def remove(self, itask: 'TaskProxy') -> bool:
6668
"""Remove a single task from queue, return True if removed."""
6769
try:
6870
self.deque.remove(itask)
@@ -111,30 +113,30 @@ def __init__(self,
111113
config["limit"], config["members"]
112114
)
113115

114-
self.force_released: Set[TaskProxy] = set()
116+
self.force_released: Set['TaskProxy'] = set()
115117

116-
def push_task(self, itask: TaskProxy) -> None:
118+
def push_task(self, itask: 'TaskProxy') -> None:
117119
"""Push a task to the appropriate queue."""
118120
for queue in self.queues.values():
119121
queue.push_task(itask)
120122

121-
def release_tasks(self, active: Counter[str]) -> List[TaskProxy]:
123+
def release_tasks(self, active: Counter[str]) -> List['TaskProxy']:
122124
"""Release tasks up to the queue limits."""
123-
released: List[TaskProxy] = []
125+
released: List['TaskProxy'] = []
124126
for queue in self.queues.values():
125127
released += queue.release(active)
126128
if self.force_released:
127-
released += list(self.force_released)
129+
released.extend(self.force_released)
128130
self.force_released = set()
129131
return released
130132

131-
def remove_task(self, itask: TaskProxy) -> None:
133+
def remove_task(self, itask: 'TaskProxy') -> None:
132134
"""Remove a task from whichever queue it belongs to."""
133135
for queue in self.queues.values():
134136
if queue.remove(itask):
135137
break
136138

137-
def force_release_task(self, itask: TaskProxy) -> None:
139+
def force_release_task(self, itask: 'TaskProxy') -> None:
138140
"""Remove a task from whichever queue it belongs to.
139141
140142
To be returned when release_tasks() is next called.

tests/unit/test_indep_task_queues.py

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121

2222
import pytest
2323

24+
from cylc.flow.task_proxy import TaskProxy
2425
from cylc.flow.task_queues.independent import IndepQueueManager
25-
from cylc.flow.task_state import TASK_STATUS_PREPARING
2626

2727

2828
MEMBERS = {"a", "b", "c", "d", "e", "f"}
@@ -61,9 +61,7 @@
6161

6262

6363
@pytest.mark.parametrize(
64-
"active,"
65-
"expected_released,"
66-
"expected_foo_groups",
64+
"active, expected_released, expected_foo_groups",
6765
[
6866
(
6967
Counter(["b1", "b2", "s1", "o1"]),
@@ -73,28 +71,24 @@
7371
]
7472
)
7573
def test_queue_and_release(
76-
active,
77-
expected_released,
78-
expected_foo_groups):
74+
active,
75+
expected_released,
76+
expected_foo_groups
77+
):
7978
"""Test task queue and release."""
8079
# configure the queue
8180
queue_mgr = IndepQueueManager(QCONFIG, ALL_TASK_NAMES, DESCENDANTS)
8281

8382
# add newly ready tasks to the queue
8483
for name in READY_TASK_NAMES:
85-
itask = Mock()
84+
itask = Mock(spec=TaskProxy)
8685
itask.tdef.name = name
8786
itask.state.is_held = False
8887
queue_mgr.push_task(itask)
8988

9089
# release tasks, given current active task counter
9190
released = queue_mgr.release_tasks(active)
92-
assert sorted([r.tdef.name for r in released]) == sorted(expected_released)
93-
94-
# check released tasks change state to "preparing", and not is_queued
95-
for r in released:
96-
assert r.state.reset.called_with(TASK_STATUS_PREPARING)
97-
assert r.state.reset.called_with(is_queued=False)
91+
assert sorted(r.tdef.name for r in released) == sorted(expected_released)
9892

9993
# check that adopted orphans end up in the default queue
10094
orphans = ["orphan1", "orphan2"]

0 commit comments

Comments
 (0)