Skip to content

Commit 6eb9bcc

Browse files
committed
Refactor test
1 parent 3c5683d commit 6eb9bcc

File tree

1 file changed

+43
-36
lines changed

1 file changed

+43
-36
lines changed

tests/worker/test_workflow.py

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5187,9 +5187,9 @@ def __init__(self):
51875187
self.handler_finished = False
51885188

51895189
@workflow.run
5190-
async def run(self, wait_for_handlers: bool) -> bool:
5190+
async def run(self, wait_all_handlers_finished: bool) -> bool:
51915191
await workflow.wait_condition(lambda: self.started_handler)
5192-
if wait_for_handlers:
5192+
if wait_all_handlers_finished:
51935193
self.handler_may_return = True
51945194
await workflow.wait_condition(workflow.all_handlers_finished)
51955195
return self.handler_finished
@@ -5228,14 +5228,18 @@ async def my_signal_WARN_AND_ABANDON(self):
52285228
await self._do_update_or_signal()
52295229

52305230

5231-
async def test_unfinished_update_handlers(client: Client):
5231+
async def test_unfinished_update_handler(client: Client):
52325232
async with new_worker(client, UnfinishedHandlersWorkflow) as worker:
5233-
await _UnfinishedHandlersTest(client, worker, "update").run_test()
5233+
test = _UnfinishedHandlersTest(client, worker, "update")
5234+
await test.test_wait_all_handlers_finished_and_unfinished_handlers_warning()
5235+
await test.test_unfinished_handlers_cause_exceptions_in_test_suite()
52345236

52355237

5236-
async def test_unfinished_signal_handlers(client: Client):
5238+
async def test_unfinished_signal_handler(client: Client):
52375239
async with new_worker(client, UnfinishedHandlersWorkflow) as worker:
5238-
await _UnfinishedHandlersTest(client, worker, "signal").run_test()
5240+
test = _UnfinishedHandlersTest(client, worker, "signal")
5241+
await test.test_wait_all_handlers_finished_and_unfinished_handlers_warning()
5242+
await test.test_unfinished_handlers_cause_exceptions_in_test_suite()
52395243

52405244

52415245
@dataclass
@@ -5244,41 +5248,44 @@ class _UnfinishedHandlersTest:
52445248
worker: Worker
52455249
handler_type: Literal["update", "signal"]
52465250

5247-
async def run_test(self):
5248-
# If we don't capture warnings then -- since the unfinished handler warning is converted to
5249-
# an exception in the test suite -- we see WFT failures when we don't wait for handlers.
5250-
handle: asyncio.Future[WorkflowHandle] = asyncio.Future()
5251-
asyncio.create_task(
5252-
self.get_workflow_result(wait_for_handlers=False, handle_future=handle)
5253-
)
5254-
await assert_eq_eventually(
5255-
True, partial(self.workflow_task_failed, workflow_id=(await handle).id)
5256-
)
5257-
5251+
async def test_wait_all_handlers_finished_and_unfinished_handlers_warning(self):
52585252
# The unfinished handler warning is issued by default,
5259-
handler_finished, warning = await self.get_workflow_result_and_warning(
5260-
wait_for_handlers=False,
5253+
handler_finished, warning = await self._get_workflow_result_and_warning(
5254+
wait_all_handlers_finished=False,
52615255
)
52625256
assert not handler_finished and warning
52635257
# and when the workflow sets the unfinished_policy to WARN_AND_ABANDON,
5264-
handler_finished, warning = await self.get_workflow_result_and_warning(
5265-
wait_for_handlers=False,
5258+
handler_finished, warning = await self._get_workflow_result_and_warning(
5259+
wait_all_handlers_finished=False,
52665260
unfinished_policy=workflow.HandlerUnfinishedPolicy.WARN_AND_ABANDON,
52675261
)
52685262
assert not handler_finished and warning
52695263
# but not when the workflow waits for handlers to complete,
5270-
handler_finished, warning = await self.get_workflow_result_and_warning(
5271-
wait_for_handlers=True,
5264+
handler_finished, warning = await self._get_workflow_result_and_warning(
5265+
wait_all_handlers_finished=True,
52725266
)
52735267
assert handler_finished and not warning
52745268
# nor when the silence-warnings policy is set on the handler.
5275-
handler_finished, warning = await self.get_workflow_result_and_warning(
5276-
wait_for_handlers=False,
5269+
handler_finished, warning = await self._get_workflow_result_and_warning(
5270+
wait_all_handlers_finished=False,
52775271
unfinished_policy=workflow.HandlerUnfinishedPolicy.ABANDON,
52785272
)
52795273
assert not handler_finished and not warning
52805274

5281-
async def workflow_task_failed(self, workflow_id: str) -> bool:
5275+
async def test_unfinished_handlers_cause_exceptions_in_test_suite(self):
5276+
# If we don't capture warnings then -- since the unfinished handler warning is converted to
5277+
# an exception in the test suite -- we see WFT failures when we don't wait for handlers.
5278+
handle: asyncio.Future[WorkflowHandle] = asyncio.Future()
5279+
asyncio.create_task(
5280+
self._get_workflow_result(
5281+
wait_all_handlers_finished=False, handle_future=handle
5282+
)
5283+
)
5284+
await assert_eq_eventually(
5285+
True, partial(self._workflow_task_failed, workflow_id=(await handle).id)
5286+
)
5287+
5288+
async def _workflow_task_failed(self, workflow_id: str) -> bool:
52825289
resp = await self.client.workflow_service.get_workflow_execution_history(
52835290
GetWorkflowExecutionHistoryRequest(
52845291
namespace=self.client.namespace,
@@ -5293,30 +5300,30 @@ async def workflow_task_failed(self, workflow_id: str) -> bool:
52935300
return True
52945301
return False
52955302

5296-
async def get_workflow_result_and_warning(
5303+
async def _get_workflow_result_and_warning(
52975304
self,
5298-
wait_for_handlers: bool,
5305+
wait_all_handlers_finished: bool,
52995306
unfinished_policy: Optional[workflow.HandlerUnfinishedPolicy] = None,
53005307
) -> Tuple[bool, bool]:
53015308
with pytest.WarningsRecorder() as warnings:
5302-
wf_result = await self.get_workflow_result(
5303-
wait_for_handlers, unfinished_policy
5309+
wf_result = await self._get_workflow_result(
5310+
wait_all_handlers_finished, unfinished_policy
53045311
)
53055312
unfinished_handler_warning_emitted = any(
5306-
issubclass(w.category, self.unfinished_handler_warning_cls)
5313+
issubclass(w.category, self._unfinished_handler_warning_cls)
53075314
for w in warnings
53085315
)
53095316
return wf_result, unfinished_handler_warning_emitted
53105317

5311-
async def get_workflow_result(
5318+
async def _get_workflow_result(
53125319
self,
5313-
wait_for_handlers: bool,
5320+
wait_all_handlers_finished: bool,
53145321
unfinished_policy: Optional[workflow.HandlerUnfinishedPolicy] = None,
53155322
handle_future: Optional[asyncio.Future[WorkflowHandle]] = None,
53165323
) -> bool:
53175324
handle = await self.client.start_workflow(
53185325
UnfinishedHandlersWorkflow.run,
5319-
arg=wait_for_handlers,
5326+
arg=wait_all_handlers_finished,
53205327
id=f"wf-{uuid.uuid4()}",
53215328
task_queue=self.worker.task_queue,
53225329
)
@@ -5328,7 +5335,7 @@ async def get_workflow_result(
53285335
if self.handler_type == "signal":
53295336
await asyncio.gather(handle.signal(handler_name))
53305337
else:
5331-
if not wait_for_handlers:
5338+
if not wait_all_handlers_finished:
53325339
with pytest.raises(RPCError) as err:
53335340
await asyncio.gather(
53345341
handle.execute_update(handler_name, id="my-update")
@@ -5345,7 +5352,7 @@ async def get_workflow_result(
53455352
return await handle.result()
53465353

53475354
@property
5348-
def unfinished_handler_warning_cls(self) -> Type:
5355+
def _unfinished_handler_warning_cls(self) -> Type:
53495356
return {
53505357
"update": workflow.UnfinishedUpdateHandlersWarning,
53515358
"signal": workflow.UnfinishedSignalHandlersWarning,

0 commit comments

Comments
 (0)