|
4 | 4 |
|
5 | 5 | import pytest
|
6 | 6 | from taskiq import TaskiqResult
|
| 7 | +from taskiq.depends.progress_tracker import TaskProgress, TaskState |
7 | 8 |
|
8 | 9 | from taskiq_redis import (
|
9 | 10 | RedisAsyncClusterResultBackend,
|
@@ -438,3 +439,80 @@ async def test_keep_results_after_reading_sentinel(
|
438 | 439 | res2 = await result_backend.get_result(task_id=task_id)
|
439 | 440 | assert res1 == res2
|
440 | 441 | await result_backend.shutdown()
|
| 442 | + |
| 443 | + |
| 444 | +@pytest.mark.anyio |
| 445 | +async def test_set_progress(redis_url: str) -> None: |
| 446 | + """ |
| 447 | + Test that set_progress/get_progress works. |
| 448 | +
|
| 449 | + :param redis_url: redis URL. |
| 450 | + """ |
| 451 | + result_backend = RedisAsyncResultBackend( # type: ignore |
| 452 | + redis_url=redis_url, |
| 453 | + ) |
| 454 | + task_id = uuid.uuid4().hex |
| 455 | + |
| 456 | + test_progress_1 = TaskProgress( |
| 457 | + state=TaskState.STARTED, |
| 458 | + meta={"message": "quarter way", "pct": 25}, |
| 459 | + ) |
| 460 | + test_progress_2 = TaskProgress( |
| 461 | + state=TaskState.STARTED, |
| 462 | + meta={"message": "half way", "pct": 50}, |
| 463 | + ) |
| 464 | + |
| 465 | + # Progress starts as None |
| 466 | + assert await result_backend.get_progress(task_id=task_id) is None |
| 467 | + |
| 468 | + # Setting the first time persists |
| 469 | + await result_backend.set_progress(task_id=task_id, progress=test_progress_1) |
| 470 | + |
| 471 | + fetched_result = await result_backend.get_progress(task_id=task_id) |
| 472 | + assert fetched_result == test_progress_1 |
| 473 | + |
| 474 | + # Setting the second time replaces the first |
| 475 | + await result_backend.set_progress(task_id=task_id, progress=test_progress_2) |
| 476 | + |
| 477 | + fetched_result = await result_backend.get_progress(task_id=task_id) |
| 478 | + assert fetched_result == test_progress_2 |
| 479 | + |
| 480 | + await result_backend.shutdown() |
| 481 | + |
| 482 | +@pytest.mark.anyio |
| 483 | +async def test_set_progress_cluster(redis_cluster_url: str) -> None: |
| 484 | + """ |
| 485 | + Test that set_progress/get_progress works in cluster mode. |
| 486 | +
|
| 487 | + :param redis_url: redis URL. |
| 488 | + """ |
| 489 | + result_backend = RedisAsyncClusterResultBackend( # type: ignore |
| 490 | + redis_url=redis_cluster_url, |
| 491 | + ) |
| 492 | + task_id = uuid.uuid4().hex |
| 493 | + |
| 494 | + test_progress_1 = TaskProgress( |
| 495 | + state=TaskState.STARTED, |
| 496 | + meta={"message": "quarter way", "pct": 25}, |
| 497 | + ) |
| 498 | + test_progress_2 = TaskProgress( |
| 499 | + state=TaskState.STARTED, |
| 500 | + meta={"message": "half way", "pct": 50}, |
| 501 | + ) |
| 502 | + |
| 503 | + # Progress starts as None |
| 504 | + assert await result_backend.get_progress(task_id=task_id) is None |
| 505 | + |
| 506 | + # Setting the first time persists |
| 507 | + await result_backend.set_progress(task_id=task_id, progress=test_progress_1) |
| 508 | + |
| 509 | + fetched_result = await result_backend.get_progress(task_id=task_id) |
| 510 | + assert fetched_result == test_progress_1 |
| 511 | + |
| 512 | + # Setting the second time replaces the first |
| 513 | + await result_backend.set_progress(task_id=task_id, progress=test_progress_2) |
| 514 | + |
| 515 | + fetched_result = await result_backend.get_progress(task_id=task_id) |
| 516 | + assert fetched_result == test_progress_2 |
| 517 | + |
| 518 | + await result_backend.shutdown() |
0 commit comments