Skip to content

Commit f43e687

Browse files
authored
Fixed a flaky auth integration test by retrying the GetUser() API call (#469)
Includes bonus fix to ensure bulk deleting users doesn't hit the quota.
1 parent 28c4d46 commit f43e687

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

integration/test_auth.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,18 @@ def test_last_refresh_timestamp(new_user_with_params: auth.UserRecord, api_key):
360360

361361
# login to cause the last_refresh_timestamp to be set
362362
_sign_in_with_password(new_user_with_params.email, 'secret', api_key)
363-
new_user_with_params = auth.get_user(new_user_with_params.uid)
363+
364+
# Attempt to retrieve the user 3 times (with a small delay between each
365+
# attempt). Occassionally, this call retrieves the user data without the
366+
# lastLoginTime/lastRefreshTime set; possibly because it's hitting a
367+
# different server than the login request uses.
368+
user_record = None
369+
for iteration in range(0, 3):
370+
user_record = auth.get_user(new_user_with_params.uid)
371+
if user_record.user_metadata.last_refresh_timestamp is not None:
372+
break
373+
374+
time.sleep(2 ** iteration)
364375

365376
# Ensure the last refresh time occurred at approximately 'now'. (With a
366377
# tolerance of up to 1 minute; we ideally want to ensure that any timezone
@@ -369,7 +380,7 @@ def test_last_refresh_timestamp(new_user_with_params: auth.UserRecord, api_key):
369380
millis_per_second = 1000
370381
millis_per_minute = millis_per_second * 60
371382

372-
last_refresh_timestamp = new_user_with_params.user_metadata.last_refresh_timestamp
383+
last_refresh_timestamp = user_record.user_metadata.last_refresh_timestamp
373384
assert last_refresh_timestamp == pytest.approx(
374385
time.time()*millis_per_second, 1*millis_per_minute)
375386

@@ -498,7 +509,7 @@ def test_delete_multiple_users(self):
498509
uid2 = auth.create_user(disabled=False).uid
499510
uid3 = auth.create_user(disabled=True).uid
500511

501-
delete_users_result = auth.delete_users([uid1, uid2, uid3])
512+
delete_users_result = self._slow_delete_users(auth, [uid1, uid2, uid3])
502513
assert delete_users_result.success_count == 3
503514
assert delete_users_result.failure_count == 0
504515
assert len(delete_users_result.errors) == 0
@@ -510,16 +521,22 @@ def test_delete_multiple_users(self):
510521
def test_is_idempotent(self):
511522
uid = auth.create_user().uid
512523

513-
delete_users_result = auth.delete_users([uid])
524+
delete_users_result = self._slow_delete_users(auth, [uid])
514525
assert delete_users_result.success_count == 1
515526
assert delete_users_result.failure_count == 0
516527

517528
# Delete the user again, ensuring that everything still counts as a
518529
# success.
519-
delete_users_result = auth.delete_users([uid])
530+
delete_users_result = self._slow_delete_users(auth, [uid])
520531
assert delete_users_result.success_count == 1
521532
assert delete_users_result.failure_count == 0
522533

534+
def _slow_delete_users(self, auth, uids):
535+
"""The batchDelete endpoint has a rate limit of 1 QPS. Use this test
536+
helper to ensure you don't exceed the quota."""
537+
time.sleep(1)
538+
return auth.delete_users(uids)
539+
523540

524541
def test_revoke_refresh_tokens(new_user):
525542
user = auth.get_user(new_user.uid)

0 commit comments

Comments
 (0)