Skip to content

Commit 7625804

Browse files
authored
Fix rest_async and async tests (#556)
### Changes Broke rest_sync in #518 and an issue in the async tests meant it didn't get picked up. ### References fixes #555
2 parents 5dce1cc + 00fa6fa commit 7625804

File tree

5 files changed

+48
-41
lines changed

5 files changed

+48
-41
lines changed

.github/workflows/test.yml

+7
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,15 @@ jobs:
7272
poetry self add "poetry-dynamic-versioning[plugin]"
7373
7474
- name: Run tests
75+
if: ${{ matrix.python-version != '3.7' }}
7576
run: |
7677
poetry run pytest --cov=auth0 --cov-report=term-missing:skip-covered --cov-report=xml
78+
79+
- name: Run tests 3.7
80+
# Skip async tests in 3.7
81+
if: ${{ matrix.python-version == '3.7' }}
82+
run: |
83+
poetry run pytest auth0/test
7784
# bwrap ${{ env.BUBBLEWRAP_ARGUMENTS }} bash
7885

7986
# - name: Run lint

auth0/rest_async.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ async def _request(self, *args: Any, **kwargs: Any) -> Any:
8686
kwargs["timeout"] = self.timeout
8787
if self._session is not None:
8888
# Request with re-usable session
89-
return self._request_with_session(self.session, *args, **kwargs)
89+
return await self._request_with_session(self._session, *args, **kwargs)
9090
else:
9191
# Request without re-usable session
9292
async with aiohttp.ClientSession() as session:
93-
return self._request_with_session(session, *args, **kwargs)
93+
return await self._request_with_session(session, *args, **kwargs)
9494

9595
async def get(
9696
self,

auth0/test_async/test_async_auth0.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ def callback(url, **kwargs):
2222
return callback, mock
2323

2424

25-
class TestAuth0(unittest.TestCase):
25+
class TestAuth0(unittest.IsolatedAsyncioTestCase):
2626
@pytest.mark.asyncio
2727
@aioresponses()
2828
async def test_get(self, mocked):
2929
callback, mock = get_callback()
3030

31-
await mocked.get(clients, callback=callback)
31+
mocked.get(clients, callback=callback)
3232

3333
auth0 = Auth0(domain="example.com", token="jwt")
3434

@@ -48,8 +48,8 @@ async def test_shared_session(self, mocked):
4848
callback, mock = get_callback()
4949
callback2, mock2 = get_callback()
5050

51-
await mocked.get(clients, callback=callback)
52-
await mocked.put(factors, callback=callback2)
51+
mocked.get(clients, callback=callback)
52+
mocked.put(factors, callback=callback2)
5353

5454
async with Auth0(domain="example.com", token="jwt") as auth0:
5555
self.assertEqual(await auth0.clients.all_async(), payload)

auth0/test_async/test_async_token_verifier.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ def get_pem_bytes(rsa_public_key):
5555
)
5656

5757

58-
class TestAsyncAsymmetricSignatureVerifier(unittest.TestCase):
58+
class TestAsyncAsymmetricSignatureVerifier(unittest.IsolatedAsyncioTestCase):
5959
@pytest.mark.asyncio
6060
@aioresponses()
6161
async def test_async_asymmetric_verifier_fetches_key(self, mocked):
6262
callback, mock = get_callback(200, JWKS_RESPONSE_SINGLE_KEY)
63-
await mocked.get(JWKS_URI, callback=callback)
63+
mocked.get(JWKS_URI, callback=callback)
6464

6565
verifier = AsyncAsymmetricSignatureVerifier(JWKS_URI)
6666

@@ -69,7 +69,7 @@ async def test_async_asymmetric_verifier_fetches_key(self, mocked):
6969
self.assertEqual(get_pem_bytes(key), RSA_PUB_KEY_1_PEM)
7070

7171

72-
class TestAsyncJwksFetcher(unittest.TestCase):
72+
class TestAsyncJwksFetcher(unittest.IsolatedAsyncioTestCase):
7373
@pytest.mark.asyncio
7474
@aioresponses()
7575
@unittest.mock.patch(
@@ -81,8 +81,8 @@ async def test_async_get_jwks_json_twice_on_cache_expired(
8181
fetcher = AsyncJwksFetcher(JWKS_URI, cache_ttl=100)
8282

8383
callback, mock = get_callback(200, JWKS_RESPONSE_SINGLE_KEY)
84-
await mocked.get(JWKS_URI, callback=callback)
85-
await mocked.get(JWKS_URI, callback=callback)
84+
mocked.get(JWKS_URI, callback=callback)
85+
mocked.get(JWKS_URI, callback=callback)
8686

8787
key_1 = await fetcher.get_key("test-key-1")
8888
expected_key_1_pem = get_pem_bytes(key_1)
@@ -119,8 +119,8 @@ async def test_async_get_jwks_json_once_on_cache_hit(self, mocked):
119119
fetcher = AsyncJwksFetcher(JWKS_URI, cache_ttl=1)
120120

121121
callback, mock = get_callback(200, JWKS_RESPONSE_MULTIPLE_KEYS)
122-
await mocked.get(JWKS_URI, callback=callback)
123-
await mocked.get(JWKS_URI, callback=callback)
122+
mocked.get(JWKS_URI, callback=callback)
123+
mocked.get(JWKS_URI, callback=callback)
124124

125125
key_1 = await fetcher.get_key("test-key-1")
126126
key_2 = await fetcher.get_key("test-key-2")
@@ -144,7 +144,7 @@ async def test_async_fetches_jwks_json_forced_on_cache_miss(self, mocked):
144144
fetcher = AsyncJwksFetcher(JWKS_URI, cache_ttl=1)
145145

146146
callback, mock = get_callback(200, {"keys": [RSA_PUB_KEY_1_JWK]})
147-
await mocked.get(JWKS_URI, callback=callback)
147+
mocked.get(JWKS_URI, callback=callback)
148148

149149
# Triggers the first call
150150
key_1 = await fetcher.get_key("test-key-1")
@@ -161,7 +161,7 @@ async def test_async_fetches_jwks_json_forced_on_cache_miss(self, mocked):
161161
self.assertEqual(mock.call_count, 1)
162162

163163
callback, mock = get_callback(200, JWKS_RESPONSE_MULTIPLE_KEYS)
164-
await mocked.get(JWKS_URI, callback=callback)
164+
mocked.get(JWKS_URI, callback=callback)
165165

166166
# Triggers the second call
167167
key_2 = await fetcher.get_key("test-key-2")
@@ -183,7 +183,7 @@ async def test_async_fetches_jwks_json_once_on_cache_miss(self, mocked):
183183
fetcher = AsyncJwksFetcher(JWKS_URI, cache_ttl=1)
184184

185185
callback, mock = get_callback(200, JWKS_RESPONSE_SINGLE_KEY)
186-
await mocked.get(JWKS_URI, callback=callback)
186+
mocked.get(JWKS_URI, callback=callback)
187187

188188
with self.assertRaises(Exception) as err:
189189
await fetcher.get_key("missing-key")
@@ -206,8 +206,8 @@ async def test_async_fails_to_fetch_jwks_json_after_retrying_twice(self, mocked)
206206
fetcher = AsyncJwksFetcher(JWKS_URI, cache_ttl=1)
207207

208208
callback, mock = get_callback(500, {})
209-
await mocked.get(JWKS_URI, callback=callback)
210-
await mocked.get(JWKS_URI, callback=callback)
209+
mocked.get(JWKS_URI, callback=callback)
210+
mocked.get(JWKS_URI, callback=callback)
211211

212212
with self.assertRaises(Exception) as err:
213213
await fetcher.get_key("id1")
@@ -225,12 +225,12 @@ async def test_async_fails_to_fetch_jwks_json_after_retrying_twice(self, mocked)
225225
self.assertEqual(mock.call_count, 2)
226226

227227

228-
class TestAsyncTokenVerifier(unittest.TestCase):
228+
class TestAsyncTokenVerifier(unittest.IsolatedAsyncioTestCase):
229229
@pytest.mark.asyncio
230230
@aioresponses()
231231
async def test_RS256_token_signature_passes(self, mocked):
232232
callback, mock = get_callback(200, {"keys": [PUBLIC_KEY]})
233-
await mocked.get(JWKS_URI, callback=callback)
233+
mocked.get(JWKS_URI, callback=callback)
234234

235235
issuer = "https://tokens-test.auth0.com/"
236236
audience = "tokens-test-123"
@@ -261,7 +261,7 @@ async def test_RS256_token_signature_fails(self, mocked):
261261
callback, mock = get_callback(
262262
200, {"keys": [RSA_PUB_KEY_1_JWK]}
263263
) # different pub key
264-
await mocked.get(JWKS_URI, callback=callback)
264+
mocked.get(JWKS_URI, callback=callback)
265265

266266
issuer = "https://tokens-test.auth0.com/"
267267
audience = "tokens-test-123"

auth0/test_async/test_asyncify.py

+20-20
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ def callback(url, **kwargs):
5454
return callback, mock
5555

5656

57-
class TestAsyncify(unittest.TestCase):
57+
class TestAsyncify(unittest.IsolatedAsyncioTestCase):
5858
@pytest.mark.asyncio
5959
@aioresponses()
6060
async def test_get(self, mocked):
6161
callback, mock = get_callback()
62-
await mocked.get(clients, callback=callback)
62+
mocked.get(clients, callback=callback)
6363
c = asyncify(Clients)(domain="example.com", token="jwt")
6464
self.assertEqual(await c.all_async(), payload)
6565
mock.assert_called_with(
@@ -74,7 +74,7 @@ async def test_get(self, mocked):
7474
@aioresponses()
7575
async def test_post(self, mocked):
7676
callback, mock = get_callback()
77-
await mocked.post(clients, callback=callback)
77+
mocked.post(clients, callback=callback)
7878
c = asyncify(Clients)(domain="example.com", token="jwt")
7979
data = {"client": 1}
8080
self.assertEqual(await c.create_async(data), payload)
@@ -90,7 +90,7 @@ async def test_post(self, mocked):
9090
@aioresponses()
9191
async def test_post_auth(self, mocked):
9292
callback, mock = get_callback()
93-
await mocked.post(token, callback=callback)
93+
mocked.post(token, callback=callback)
9494
c = asyncify(GetToken)("example.com", "cid", client_secret="clsec")
9595
self.assertEqual(
9696
await c.login_async(username="usrnm", password="pswd"), payload
@@ -116,7 +116,7 @@ async def test_post_auth(self, mocked):
116116
@aioresponses()
117117
async def test_user_info(self, mocked):
118118
callback, mock = get_callback()
119-
await mocked.get(user_info, callback=callback)
119+
mocked.get(user_info, callback=callback)
120120
c = asyncify(Users)(domain="example.com")
121121
self.assertEqual(
122122
await c.userinfo_async(access_token="access-token-example"), payload
@@ -133,7 +133,7 @@ async def test_user_info(self, mocked):
133133
@aioresponses()
134134
async def test_file_post(self, mocked):
135135
callback, mock = get_callback()
136-
await mocked.post(users_imports, callback=callback)
136+
mocked.post(users_imports, callback=callback)
137137
j = asyncify(Jobs)(domain="example.com", token="jwt")
138138
users = TemporaryFile()
139139
self.assertEqual(await j.import_users_async("connection-1", users), payload)
@@ -158,7 +158,7 @@ async def test_file_post(self, mocked):
158158
@aioresponses()
159159
async def test_patch(self, mocked):
160160
callback, mock = get_callback()
161-
await mocked.patch(clients, callback=callback)
161+
mocked.patch(clients, callback=callback)
162162
c = asyncify(Clients)(domain="example.com", token="jwt")
163163
data = {"client": 1}
164164
self.assertEqual(await c.update_async("client-1", data), payload)
@@ -174,7 +174,7 @@ async def test_patch(self, mocked):
174174
@aioresponses()
175175
async def test_put(self, mocked):
176176
callback, mock = get_callback()
177-
await mocked.put(factors, callback=callback)
177+
mocked.put(factors, callback=callback)
178178
g = asyncify(Guardian)(domain="example.com", token="jwt")
179179
data = {"factor": 1}
180180
self.assertEqual(await g.update_factor_async("factor-1", data), payload)
@@ -190,7 +190,7 @@ async def test_put(self, mocked):
190190
@aioresponses()
191191
async def test_delete(self, mocked):
192192
callback, mock = get_callback()
193-
await mocked.delete(clients, callback=callback)
193+
mocked.delete(clients, callback=callback)
194194
c = asyncify(Clients)(domain="example.com", token="jwt")
195195
self.assertEqual(await c.delete_async("client-1"), payload)
196196
mock.assert_called_with(
@@ -206,7 +206,7 @@ async def test_delete(self, mocked):
206206
@aioresponses()
207207
async def test_shared_session(self, mocked):
208208
callback, mock = get_callback()
209-
await mocked.get(clients, callback=callback)
209+
mocked.get(clients, callback=callback)
210210
async with asyncify(Clients)(domain="example.com", token="jwt") as c:
211211
self.assertEqual(await c.all_async(), payload)
212212
mock.assert_called_with(
@@ -221,10 +221,10 @@ async def test_shared_session(self, mocked):
221221
@aioresponses()
222222
async def test_rate_limit(self, mocked):
223223
callback, mock = get_callback(status=429)
224-
await mocked.get(clients, callback=callback)
225-
await mocked.get(clients, callback=callback)
226-
await mocked.get(clients, callback=callback)
227-
await mocked.get(clients, payload=payload)
224+
mocked.get(clients, callback=callback)
225+
mocked.get(clients, callback=callback)
226+
mocked.get(clients, callback=callback)
227+
mocked.get(clients, payload=payload)
228228
c = asyncify(Clients)(domain="example.com", token="jwt")
229229
rest_client = c._async_client.client
230230
rest_client._skip_sleep = True
@@ -237,21 +237,21 @@ async def test_rate_limit(self, mocked):
237237
@aioresponses()
238238
async def test_rate_limit_post(self, mocked):
239239
callback, mock = get_callback(status=429)
240-
await mocked.post(clients, callback=callback)
241-
await mocked.post(clients, callback=callback)
242-
await mocked.post(clients, callback=callback)
243-
await mocked.post(clients, payload=payload)
240+
mocked.post(clients, callback=callback)
241+
mocked.post(clients, callback=callback)
242+
mocked.post(clients, callback=callback)
243+
mocked.post(clients, payload=payload)
244244
c = asyncify(Clients)(domain="example.com", token="jwt")
245245
rest_client = c._async_client.client
246246
rest_client._skip_sleep = True
247-
self.assertEqual(await c.all_async(), payload)
247+
self.assertEqual(await c.create_async({}), payload)
248248
self.assertEqual(3, mock.call_count)
249249

250250
@pytest.mark.asyncio
251251
@aioresponses()
252252
async def test_timeout(self, mocked):
253253
callback, mock = get_callback()
254-
await mocked.get(clients, callback=callback)
254+
mocked.get(clients, callback=callback)
255255
c = asyncify(Clients)(domain="example.com", token="jwt", timeout=(8.8, 9.9))
256256
self.assertEqual(await c.all_async(), payload)
257257
mock.assert_called_with(

0 commit comments

Comments
 (0)