11from synapse .api .ratelimiting import LimitExceededError , Ratelimiter
2+ from synapse .appservice import ApplicationService
3+ from synapse .types import create_requester
24
35from tests import unittest
46
@@ -18,6 +20,77 @@ def test_allowed_via_can_do_action(self):
1820 self .assertTrue (allowed )
1921 self .assertEquals (20.0 , time_allowed )
2022
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+
2194 def test_allowed_via_ratelimit (self ):
2295 limiter = Ratelimiter (clock = None , rate_hz = 0.1 , burst_count = 1 )
2396
0 commit comments