1
1
import asyncio
2
- import time
3
2
4
3
import pytest
5
4
@@ -16,18 +15,18 @@ async def test_wait_result() -> None:
16
15
runs = 0
17
16
18
17
@broker .task (retry_on_error = True )
19
- def run_task () -> str :
18
+ async def run_task () -> str :
20
19
nonlocal runs
21
20
22
21
if runs == 0 :
23
22
runs += 1
24
23
raise Exception ("Retry" )
25
24
26
- time .sleep (0.2 )
27
25
return "hello world!"
28
26
29
27
task = await run_task .kiq ()
30
28
resp = await task .wait_result (0.1 , timeout = 1 )
29
+ assert runs == 1
31
30
32
31
assert resp .return_value == "hello world!"
33
32
@@ -39,24 +38,28 @@ async def test_wait_result_error() -> None:
39
38
SimpleRetryMiddleware (no_result_on_retry = False ),
40
39
)
41
40
runs = 0
41
+ lock = asyncio .Lock ()
42
42
43
43
@broker .task (retry_on_error = True )
44
- def run_task () -> str :
45
- nonlocal runs
44
+ async def run_task () -> str :
45
+ nonlocal runs , lock
46
+
47
+ await lock .acquire ()
46
48
47
49
if runs == 0 :
48
50
runs += 1
49
51
raise ValueError ("Retry" )
50
52
51
- time .sleep (0.2 )
52
53
return "hello world!"
53
54
54
55
task = await run_task .kiq ()
55
56
resp = await task .wait_result (0.1 , timeout = 1 )
56
- with pytest .raises (ValueError ):
57
- resp .raise_for_error ()
57
+ assert resp .is_err
58
+ assert runs == 1
59
+
60
+ broker .result_backend .results .pop (task .task_id ) # type: ignore
61
+ lock .release ()
58
62
59
- await asyncio .sleep (0.2 )
60
63
resp = await task .wait_result (timeout = 1 )
61
64
assert resp .return_value == "hello world!"
62
65
@@ -67,32 +70,34 @@ async def test_wait_result_no_result() -> None:
67
70
broker = InMemoryBroker ().with_middlewares (
68
71
SimpleRetryMiddleware (no_result_on_retry = False ),
69
72
)
70
- done = False
73
+ done = asyncio . Event ()
71
74
runs = 0
75
+ lock = asyncio .Lock ()
72
76
73
77
@broker .task (retry_on_error = True )
74
- def run_task () -> str :
75
- nonlocal runs , done
78
+ async def run_task () -> str :
79
+ nonlocal runs , done , lock
80
+
81
+ await lock .acquire ()
76
82
77
83
if runs == 0 :
78
84
runs += 1
79
85
raise ValueError ("Retry" )
80
86
81
- time .sleep (0.2 )
82
- done = True
87
+ done .set ()
83
88
raise NoResultError
84
89
85
90
task = await run_task .kiq ()
86
91
resp = await task .wait_result (0.1 , timeout = 1 )
87
92
with pytest .raises (ValueError ):
88
93
resp .raise_for_error ()
89
94
90
- await asyncio .sleep (0.2 )
91
- resp = await task .wait_result (timeout = 1 )
92
- with pytest .raises (ValueError ):
93
- resp .raise_for_error ()
95
+ broker .result_backend .results .pop (task .task_id ) # type: ignore
96
+ lock .release ()
94
97
95
- assert done
98
+ assert await asyncio .wait_for (done .wait (), timeout = 1 )
99
+ with pytest .raises (KeyError ):
100
+ await broker .result_backend .get_result (task .task_id )
96
101
97
102
98
103
@pytest .mark .anyio
0 commit comments