|
8 | 8 | from taskiq.abc.broker import AsyncBroker |
9 | 9 | from taskiq.abc.middleware import TaskiqMiddleware |
10 | 10 | from taskiq.brokers.inmemory_broker import InMemoryBroker |
| 11 | +from taskiq.exceptions import NoResultError, TaskiqResultTimeoutError |
11 | 12 | from taskiq.message import TaskiqMessage |
12 | 13 | from taskiq.receiver import Receiver |
13 | 14 | from taskiq.result import TaskiqResult |
@@ -284,3 +285,52 @@ async def task_sem() -> int: |
284 | 285 | assert sem_num == max_async_tasks |
285 | 286 | await listen_task |
286 | 287 | assert sem_num == max_async_tasks + 2 |
| 288 | + |
| 289 | + |
| 290 | +@pytest.mark.anyio |
| 291 | +async def test_no_result_error() -> None: |
| 292 | + broker = InMemoryBroker() |
| 293 | + executed = asyncio.Event() |
| 294 | + |
| 295 | + @broker.task |
| 296 | + async def task_no_result() -> int: |
| 297 | + executed.set() |
| 298 | + raise NoResultError() |
| 299 | + |
| 300 | + task = await task_no_result.kiq() |
| 301 | + with pytest.raises(TaskiqResultTimeoutError): |
| 302 | + await task.wait_result(timeout=1) |
| 303 | + |
| 304 | + assert executed.is_set() |
| 305 | + assert not broker._running_tasks |
| 306 | + |
| 307 | + |
| 308 | +@pytest.mark.anyio |
| 309 | +async def test_result() -> None: |
| 310 | + broker = InMemoryBroker() |
| 311 | + |
| 312 | + @broker.task |
| 313 | + async def task_no_result() -> str: |
| 314 | + return "some value" |
| 315 | + |
| 316 | + task = await task_no_result.kiq() |
| 317 | + resp = await task.wait_result(timeout=1) |
| 318 | + |
| 319 | + assert resp.return_value == "some value" |
| 320 | + assert not broker._running_tasks |
| 321 | + |
| 322 | + |
| 323 | +@pytest.mark.anyio |
| 324 | +async def test_error_result() -> None: |
| 325 | + broker = InMemoryBroker() |
| 326 | + |
| 327 | + @broker.task |
| 328 | + async def task_no_result() -> str: |
| 329 | + raise ValueError("some error") |
| 330 | + |
| 331 | + task = await task_no_result.kiq() |
| 332 | + resp = await task.wait_result(timeout=1) |
| 333 | + |
| 334 | + assert resp.return_value is None |
| 335 | + assert not broker._running_tasks |
| 336 | + assert isinstance(resp.error, ValueError) |
0 commit comments