Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 8a33d21

Browse files
authored
Convert some test cases to use HomeserverTestCase. (#9377)
This has the side-effect of being able to remove use of `inlineCallbacks` in the test-cases for cleaner tracebacks.
1 parent 6dade80 commit 8a33d21

File tree

6 files changed

+302
-516
lines changed

6 files changed

+302
-516
lines changed

changelog.d/9377.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Convert tests to use `HomeserverTestCase`.

tests/handlers/test_auth.py

Lines changed: 54 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,21 @@
1616

1717
import pymacaroons
1818

19-
from twisted.internet import defer
20-
21-
import synapse
22-
import synapse.api.errors
23-
from synapse.api.errors import ResourceLimitError
19+
from synapse.api.errors import AuthError, ResourceLimitError
2420

2521
from tests import unittest
2622
from tests.test_utils import make_awaitable
27-
from tests.utils import setup_test_homeserver
2823

2924

30-
class AuthTestCase(unittest.TestCase):
31-
@defer.inlineCallbacks
32-
def setUp(self):
33-
self.hs = yield setup_test_homeserver(self.addCleanup)
34-
self.auth_handler = self.hs.get_auth_handler()
35-
self.macaroon_generator = self.hs.get_macaroon_generator()
25+
class AuthTestCase(unittest.HomeserverTestCase):
26+
def prepare(self, reactor, clock, hs):
27+
self.auth_handler = hs.get_auth_handler()
28+
self.macaroon_generator = hs.get_macaroon_generator()
3629

3730
# MAU tests
3831
# AuthBlocking reads from the hs' config on initialization. We need to
3932
# modify its config instead of the hs'
40-
self.auth_blocking = self.hs.get_auth()._auth_blocking
33+
self.auth_blocking = hs.get_auth()._auth_blocking
4134
self.auth_blocking._max_mau_value = 50
4235

4336
self.small_number_of_users = 1
@@ -52,8 +45,6 @@ def test_token_is_a_macaroon(self):
5245
self.fail("some_user was not in %s" % macaroon.inspect())
5346

5447
def test_macaroon_caveats(self):
55-
self.hs.get_clock().now = 5000
56-
5748
token = self.macaroon_generator.generate_access_token("a_user")
5849
macaroon = pymacaroons.Macaroon.deserialize(token)
5950

@@ -76,29 +67,25 @@ def verify_nonce(caveat):
7667
v.satisfy_general(verify_nonce)
7768
v.verify(macaroon, self.hs.config.macaroon_secret_key)
7869

79-
@defer.inlineCallbacks
8070
def test_short_term_login_token_gives_user_id(self):
81-
self.hs.get_clock().now = 1000
82-
8371
token = self.macaroon_generator.generate_short_term_login_token("a_user", 5000)
84-
user_id = yield defer.ensureDeferred(
72+
user_id = self.get_success(
8573
self.auth_handler.validate_short_term_login_token_and_get_user_id(token)
8674
)
8775
self.assertEqual("a_user", user_id)
8876

8977
# when we advance the clock, the token should be rejected
90-
self.hs.get_clock().now = 6000
91-
with self.assertRaises(synapse.api.errors.AuthError):
92-
yield defer.ensureDeferred(
93-
self.auth_handler.validate_short_term_login_token_and_get_user_id(token)
94-
)
78+
self.reactor.advance(6)
79+
self.get_failure(
80+
self.auth_handler.validate_short_term_login_token_and_get_user_id(token),
81+
AuthError,
82+
)
9583

96-
@defer.inlineCallbacks
9784
def test_short_term_login_token_cannot_replace_user_id(self):
9885
token = self.macaroon_generator.generate_short_term_login_token("a_user", 5000)
9986
macaroon = pymacaroons.Macaroon.deserialize(token)
10087

101-
user_id = yield defer.ensureDeferred(
88+
user_id = self.get_success(
10289
self.auth_handler.validate_short_term_login_token_and_get_user_id(
10390
macaroon.serialize()
10491
)
@@ -109,110 +96,98 @@ def test_short_term_login_token_cannot_replace_user_id(self):
10996
# user_id.
11097
macaroon.add_first_party_caveat("user_id = b_user")
11198

112-
with self.assertRaises(synapse.api.errors.AuthError):
113-
yield defer.ensureDeferred(
114-
self.auth_handler.validate_short_term_login_token_and_get_user_id(
115-
macaroon.serialize()
116-
)
117-
)
99+
self.get_failure(
100+
self.auth_handler.validate_short_term_login_token_and_get_user_id(
101+
macaroon.serialize()
102+
),
103+
AuthError,
104+
)
118105

119-
@defer.inlineCallbacks
120106
def test_mau_limits_disabled(self):
121107
self.auth_blocking._limit_usage_by_mau = False
122108
# Ensure does not throw exception
123-
yield defer.ensureDeferred(
109+
self.get_success(
124110
self.auth_handler.get_access_token_for_user_id(
125111
"user_a", device_id=None, valid_until_ms=None
126112
)
127113
)
128114

129-
yield defer.ensureDeferred(
115+
self.get_success(
130116
self.auth_handler.validate_short_term_login_token_and_get_user_id(
131117
self._get_macaroon().serialize()
132118
)
133119
)
134120

135-
@defer.inlineCallbacks
136121
def test_mau_limits_exceeded_large(self):
137122
self.auth_blocking._limit_usage_by_mau = True
138123
self.hs.get_datastore().get_monthly_active_count = Mock(
139124
return_value=make_awaitable(self.large_number_of_users)
140125
)
141126

142-
with self.assertRaises(ResourceLimitError):
143-
yield defer.ensureDeferred(
144-
self.auth_handler.get_access_token_for_user_id(
145-
"user_a", device_id=None, valid_until_ms=None
146-
)
147-
)
127+
self.get_failure(
128+
self.auth_handler.get_access_token_for_user_id(
129+
"user_a", device_id=None, valid_until_ms=None
130+
),
131+
ResourceLimitError,
132+
)
148133

149134
self.hs.get_datastore().get_monthly_active_count = Mock(
150135
return_value=make_awaitable(self.large_number_of_users)
151136
)
152-
with self.assertRaises(ResourceLimitError):
153-
yield defer.ensureDeferred(
154-
self.auth_handler.validate_short_term_login_token_and_get_user_id(
155-
self._get_macaroon().serialize()
156-
)
157-
)
137+
self.get_failure(
138+
self.auth_handler.validate_short_term_login_token_and_get_user_id(
139+
self._get_macaroon().serialize()
140+
),
141+
ResourceLimitError,
142+
)
158143

159-
@defer.inlineCallbacks
160144
def test_mau_limits_parity(self):
145+
# Ensure we're not at the unix epoch.
146+
self.reactor.advance(1)
161147
self.auth_blocking._limit_usage_by_mau = True
162148

163-
# If not in monthly active cohort
149+
# Set the server to be at the edge of too many users.
164150
self.hs.get_datastore().get_monthly_active_count = Mock(
165151
return_value=make_awaitable(self.auth_blocking._max_mau_value)
166152
)
167-
with self.assertRaises(ResourceLimitError):
168-
yield defer.ensureDeferred(
169-
self.auth_handler.get_access_token_for_user_id(
170-
"user_a", device_id=None, valid_until_ms=None
171-
)
172-
)
173153

174-
self.hs.get_datastore().get_monthly_active_count = Mock(
175-
return_value=make_awaitable(self.auth_blocking._max_mau_value)
154+
# If not in monthly active cohort
155+
self.get_failure(
156+
self.auth_handler.get_access_token_for_user_id(
157+
"user_a", device_id=None, valid_until_ms=None
158+
),
159+
ResourceLimitError,
176160
)
177-
with self.assertRaises(ResourceLimitError):
178-
yield defer.ensureDeferred(
179-
self.auth_handler.validate_short_term_login_token_and_get_user_id(
180-
self._get_macaroon().serialize()
181-
)
182-
)
161+
self.get_failure(
162+
self.auth_handler.validate_short_term_login_token_and_get_user_id(
163+
self._get_macaroon().serialize()
164+
),
165+
ResourceLimitError,
166+
)
167+
183168
# If in monthly active cohort
184169
self.hs.get_datastore().user_last_seen_monthly_active = Mock(
185-
return_value=make_awaitable(self.hs.get_clock().time_msec())
170+
return_value=make_awaitable(self.clock.time_msec())
186171
)
187-
self.hs.get_datastore().get_monthly_active_count = Mock(
188-
return_value=make_awaitable(self.auth_blocking._max_mau_value)
189-
)
190-
yield defer.ensureDeferred(
172+
self.get_success(
191173
self.auth_handler.get_access_token_for_user_id(
192174
"user_a", device_id=None, valid_until_ms=None
193175
)
194176
)
195-
self.hs.get_datastore().user_last_seen_monthly_active = Mock(
196-
return_value=make_awaitable(self.hs.get_clock().time_msec())
197-
)
198-
self.hs.get_datastore().get_monthly_active_count = Mock(
199-
return_value=make_awaitable(self.auth_blocking._max_mau_value)
200-
)
201-
yield defer.ensureDeferred(
177+
self.get_success(
202178
self.auth_handler.validate_short_term_login_token_and_get_user_id(
203179
self._get_macaroon().serialize()
204180
)
205181
)
206182

207-
@defer.inlineCallbacks
208183
def test_mau_limits_not_exceeded(self):
209184
self.auth_blocking._limit_usage_by_mau = True
210185

211186
self.hs.get_datastore().get_monthly_active_count = Mock(
212187
return_value=make_awaitable(self.small_number_of_users)
213188
)
214189
# Ensure does not raise exception
215-
yield defer.ensureDeferred(
190+
self.get_success(
216191
self.auth_handler.get_access_token_for_user_id(
217192
"user_a", device_id=None, valid_until_ms=None
218193
)
@@ -221,7 +196,7 @@ def test_mau_limits_not_exceeded(self):
221196
self.hs.get_datastore().get_monthly_active_count = Mock(
222197
return_value=make_awaitable(self.small_number_of_users)
223198
)
224-
yield defer.ensureDeferred(
199+
self.get_success(
225200
self.auth_handler.validate_short_term_login_token_and_get_user_id(
226201
self._get_macaroon().serialize()
227202
)

0 commit comments

Comments
 (0)