Skip to content

Fixed a flaky auth integration test by retrying the GetUser() API call #469

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 16, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 22 additions & 5 deletions integration/test_auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,18 @@ def test_last_refresh_timestamp(new_user_with_params: auth.UserRecord, api_key):

# login to cause the last_refresh_timestamp to be set
_sign_in_with_password(new_user_with_params.email, 'secret', api_key)
new_user_with_params = auth.get_user(new_user_with_params.uid)

# Attempt to retrieve the user 3 times (with a small delay between each
# attempt). Occassionally, this call retrieves the user data without the
# lastLoginTime/lastRefreshTime set; possibly because it's hitting a
# different server than the login request uses.
user_record = None
for iteration in range(0, 3):
user_record = auth.get_user(new_user_with_params.uid)
if user_record.user_metadata.last_refresh_timestamp is not None:
break

time.sleep(2 ** iteration)

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

last_refresh_timestamp = new_user_with_params.user_metadata.last_refresh_timestamp
last_refresh_timestamp = user_record.user_metadata.last_refresh_timestamp
assert last_refresh_timestamp == pytest.approx(
time.time()*millis_per_second, 1*millis_per_minute)

Expand Down Expand Up @@ -498,7 +509,7 @@ def test_delete_multiple_users(self):
uid2 = auth.create_user(disabled=False).uid
uid3 = auth.create_user(disabled=True).uid

delete_users_result = auth.delete_users([uid1, uid2, uid3])
delete_users_result = self._slow_delete_users(auth, [uid1, uid2, uid3])
assert delete_users_result.success_count == 3
assert delete_users_result.failure_count == 0
assert len(delete_users_result.errors) == 0
Expand All @@ -510,16 +521,22 @@ def test_delete_multiple_users(self):
def test_is_idempotent(self):
uid = auth.create_user().uid

delete_users_result = auth.delete_users([uid])
delete_users_result = self._slow_delete_users(auth, [uid])
assert delete_users_result.success_count == 1
assert delete_users_result.failure_count == 0

# Delete the user again, ensuring that everything still counts as a
# success.
delete_users_result = auth.delete_users([uid])
delete_users_result = self._slow_delete_users(auth, [uid])
assert delete_users_result.success_count == 1
assert delete_users_result.failure_count == 0

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


def test_revoke_refresh_tokens(new_user):
user = auth.get_user(new_user.uid)
Expand Down