|
31 | 31 | from firebase_admin import auth
|
32 | 32 | from firebase_admin import credentials
|
33 | 33 | from firebase_admin import exceptions
|
| 34 | +from firebase_admin import _http_client |
34 | 35 | from firebase_admin import _token_gen
|
35 | 36 | from tests import testutils
|
36 | 37 |
|
@@ -702,3 +703,52 @@ def test_certificate_caching(self, user_mgt_app, httpserver):
|
702 | 703 | assert len(httpserver.requests) == request_count
|
703 | 704 | verifier.verify_id_token(TEST_ID_TOKEN)
|
704 | 705 | assert len(httpserver.requests) == request_count
|
| 706 | + |
| 707 | + |
| 708 | +class TestCertificateFetchTimeout: |
| 709 | + |
| 710 | + timeout_configs = [ |
| 711 | + ({'httpTimeout': 4}, 4), |
| 712 | + ({'httpTimeout': None}, None), |
| 713 | + ({}, _http_client.DEFAULT_TIMEOUT_SECONDS), |
| 714 | + ] |
| 715 | + |
| 716 | + @pytest.mark.parametrize('options, timeout', timeout_configs) |
| 717 | + def test_init_request(self, options, timeout): |
| 718 | + app = firebase_admin.initialize_app(MOCK_CREDENTIAL, options=options) |
| 719 | + |
| 720 | + client = auth._get_client(app) |
| 721 | + request = client._token_verifier.request |
| 722 | + |
| 723 | + assert isinstance(request, _token_gen.CertificateFetchRequest) |
| 724 | + assert request.timeout_seconds == timeout |
| 725 | + |
| 726 | + @pytest.mark.parametrize('options, timeout', timeout_configs) |
| 727 | + def test_verify_id_token_timeout(self, options, timeout): |
| 728 | + app = firebase_admin.initialize_app(MOCK_CREDENTIAL, options=options) |
| 729 | + recorder = self._instrument_session(app) |
| 730 | + |
| 731 | + auth.verify_id_token(TEST_ID_TOKEN) |
| 732 | + |
| 733 | + assert len(recorder) == 1 |
| 734 | + assert recorder[0]._extra_kwargs['timeout'] == timeout |
| 735 | + |
| 736 | + @pytest.mark.parametrize('options, timeout', timeout_configs) |
| 737 | + def test_verify_session_cookie_timeout(self, options, timeout): |
| 738 | + app = firebase_admin.initialize_app(MOCK_CREDENTIAL, options=options) |
| 739 | + recorder = self._instrument_session(app) |
| 740 | + |
| 741 | + auth.verify_session_cookie(TEST_SESSION_COOKIE) |
| 742 | + |
| 743 | + assert len(recorder) == 1 |
| 744 | + assert recorder[0]._extra_kwargs['timeout'] == timeout |
| 745 | + |
| 746 | + def _instrument_session(self, app): |
| 747 | + client = auth._get_client(app) |
| 748 | + request = client._token_verifier.request |
| 749 | + recorder = [] |
| 750 | + request.session.mount('https://', testutils.MockAdapter(MOCK_PUBLIC_CERTS, 200, recorder)) |
| 751 | + return recorder |
| 752 | + |
| 753 | + def teardown(self): |
| 754 | + testutils.cleanup_apps() |
0 commit comments