1
1
from synapse .api .ratelimiting import LimitExceededError , Ratelimiter
2
+ from synapse .appservice import ApplicationService
3
+ from synapse .types import create_requester
2
4
3
5
from tests import unittest
4
6
@@ -18,6 +20,77 @@ def test_allowed_via_can_do_action(self):
18
20
self .assertTrue (allowed )
19
21
self .assertEquals (20.0 , time_allowed )
20
22
23
+ def test_allowed_user_via_can_requester_do_action (self ):
24
+ user_requester = create_requester ("@user:example.com" )
25
+ limiter = Ratelimiter (clock = None , rate_hz = 0.1 , burst_count = 1 )
26
+ allowed , time_allowed = limiter .can_requester_do_action (
27
+ user_requester , _time_now_s = 0
28
+ )
29
+ self .assertTrue (allowed )
30
+ self .assertEquals (10.0 , time_allowed )
31
+
32
+ allowed , time_allowed = limiter .can_requester_do_action (
33
+ user_requester , _time_now_s = 5
34
+ )
35
+ self .assertFalse (allowed )
36
+ self .assertEquals (10.0 , time_allowed )
37
+
38
+ allowed , time_allowed = limiter .can_requester_do_action (
39
+ user_requester , _time_now_s = 10
40
+ )
41
+ self .assertTrue (allowed )
42
+ self .assertEquals (20.0 , time_allowed )
43
+
44
+ def test_allowed_appservice_ratelimited_via_can_requester_do_action (self ):
45
+ appservice = ApplicationService (
46
+ None , "example.com" , id = "foo" , rate_limited = True ,
47
+ )
48
+ as_requester = create_requester ("@user:example.com" , app_service = appservice )
49
+
50
+ limiter = Ratelimiter (clock = None , rate_hz = 0.1 , burst_count = 1 )
51
+ allowed , time_allowed = limiter .can_requester_do_action (
52
+ as_requester , _time_now_s = 0
53
+ )
54
+ self .assertTrue (allowed )
55
+ self .assertEquals (10.0 , time_allowed )
56
+
57
+ allowed , time_allowed = limiter .can_requester_do_action (
58
+ as_requester , _time_now_s = 5
59
+ )
60
+ self .assertFalse (allowed )
61
+ self .assertEquals (10.0 , time_allowed )
62
+
63
+ allowed , time_allowed = limiter .can_requester_do_action (
64
+ as_requester , _time_now_s = 10
65
+ )
66
+ self .assertTrue (allowed )
67
+ self .assertEquals (20.0 , time_allowed )
68
+
69
+ def test_allowed_appservice_via_can_requester_do_action (self ):
70
+ appservice = ApplicationService (
71
+ None , "example.com" , id = "foo" , rate_limited = False ,
72
+ )
73
+ as_requester = create_requester ("@user:example.com" , app_service = appservice )
74
+
75
+ limiter = Ratelimiter (clock = None , rate_hz = 0.1 , burst_count = 1 )
76
+ allowed , time_allowed = limiter .can_requester_do_action (
77
+ as_requester , _time_now_s = 0
78
+ )
79
+ self .assertTrue (allowed )
80
+ self .assertEquals (- 1 , time_allowed )
81
+
82
+ allowed , time_allowed = limiter .can_requester_do_action (
83
+ as_requester , _time_now_s = 5
84
+ )
85
+ self .assertTrue (allowed )
86
+ self .assertEquals (- 1 , time_allowed )
87
+
88
+ allowed , time_allowed = limiter .can_requester_do_action (
89
+ as_requester , _time_now_s = 10
90
+ )
91
+ self .assertTrue (allowed )
92
+ self .assertEquals (- 1 , time_allowed )
93
+
21
94
def test_allowed_via_ratelimit (self ):
22
95
limiter = Ratelimiter (clock = None , rate_hz = 0.1 , burst_count = 1 )
23
96
0 commit comments