1
1
from asyncio import sleep
2
- from datetime import timedelta
2
+ from datetime import datetime , timedelta
3
3
from typing import NamedTuple
4
4
5
5
from pytest import mark
6
6
7
- from sharded_queue import (DeferredHandler , Handler , Queue , RecurrentHandler ,
8
- Route , Tube , Worker )
7
+ from sharded_queue import (DeferredHandler , DeferredRequest , Handler , Queue ,
8
+ RecurrentHandler , RecurrentRequest , Route , Tube ,
9
+ Worker )
9
10
from sharded_queue .drivers import RuntimeLock , RuntimeStorage
10
11
from sharded_queue .protocols import Lock , Storage
11
12
@@ -41,7 +42,7 @@ async def stats() -> tuple[int, int, int]:
41
42
)
42
43
43
44
await queue .register (
44
- ValidateAccess , CompanyRequest (1 ), recurrent = timedelta (milliseconds = 10 )
45
+ ValidateAccess , CompanyRequest (1 ), recurrent = timedelta (seconds = 1 )
45
46
)
46
47
assert await stats () == (0 , 1 , 0 ), 'recurrent pipe contains request'
47
48
@@ -58,7 +59,7 @@ async def stats() -> tuple[int, int, int]:
58
59
await Worker (lock , queue ).loop (1 , handler = RecurrentHandler )
59
60
assert await stats () == (1 , 1 , 0 ), 'no deffered duplicates'
60
61
61
- await sleep (0.01 )
62
+ await sleep (1 )
62
63
63
64
await lock .release (recurrent_pipe )
64
65
await Worker (lock , queue ).loop (1 , handler = RecurrentHandler )
@@ -71,7 +72,20 @@ async def stats() -> tuple[int, int, int]:
71
72
await worker .loop (1 , handler = RecurrentHandler )
72
73
assert await stats () == (1 , 1 , 1 ), 'deferred added'
73
74
74
- await sleep (0.01 )
75
+ await sleep (1 )
75
76
76
77
await worker .loop (1 , handler = DeferredHandler )
77
78
assert await stats () == (0 , 1 , 1 ), 'no validation duplicate'
79
+
80
+ [recurrent ] = await queue .storage .range (recurrent_pipe , 1 )
81
+ request = queue .serializer .deserialize (RecurrentRequest , recurrent )
82
+ assert request .interval == 1
83
+ await queue .register (
84
+ ValidateAccess , CompanyRequest (1 ), recurrent = timedelta (seconds = 2 )
85
+ )
86
+
87
+ assert await queue .storage .length (recurrent_pipe ) == 1
88
+
89
+ [recurrent ] = await queue .storage .range (recurrent_pipe , 1 )
90
+ request = queue .serializer .deserialize (RecurrentRequest , recurrent )
91
+ assert request .interval == 2
0 commit comments