|
14 | 14 |
|
15 | 15 | """Tests for firebase_admin._http_client."""
|
16 | 16 | import pytest
|
17 |
| -from pytest_localserver import plugin |
| 17 | +from pytest_localserver import http |
18 | 18 | import requests
|
19 | 19 |
|
20 | 20 | from firebase_admin import _http_client
|
21 | 21 | from tests import testutils
|
22 | 22 |
|
23 | 23 |
|
24 |
| -# Fixture for mocking a HTTP server |
25 |
| -httpserver = plugin.httpserver |
26 |
| - |
27 | 24 | _TEST_URL = 'http://firebase.test.url/'
|
28 | 25 |
|
29 | 26 |
|
@@ -92,40 +89,53 @@ class TestHttpRetry:
|
92 | 89 |
|
93 | 90 | @classmethod
|
94 | 91 | def setup_class(cls):
|
95 |
| - # Turn off exponential backoff for faster execution |
| 92 | + # Turn off exponential backoff for faster execution. |
96 | 93 | _http_client.DEFAULT_RETRY_CONFIG.backoff_factor = 0
|
97 | 94 |
|
| 95 | + # Start a test server instance scoped to the class. |
| 96 | + server = http.ContentServer() |
| 97 | + server.start() |
| 98 | + cls.httpserver = server |
| 99 | + |
| 100 | + @classmethod |
| 101 | + def teardown_class(cls): |
| 102 | + cls.httpserver.stop() |
| 103 | + |
| 104 | + def setup_method(self): |
| 105 | + # Clean up any state in the server before starting a new test case. |
| 106 | + self.httpserver.requests = [] |
| 107 | + |
98 | 108 | @pytest.mark.parametrize('method', ALL_METHODS)
|
99 |
| - def test_retry_on_503(self, httpserver, method): |
100 |
| - httpserver.serve_content({}, 503) |
| 109 | + def test_retry_on_503(self, method): |
| 110 | + self.httpserver.serve_content({}, 503) |
101 | 111 | client = _http_client.JsonHttpClient(
|
102 |
| - credential=testutils.MockGoogleCredential(), base_url=httpserver.url) |
| 112 | + credential=testutils.MockGoogleCredential(), base_url=self.httpserver.url) |
103 | 113 | body = None
|
104 | 114 | if method in self.ENTITY_ENCLOSING_METHODS:
|
105 | 115 | body = {'key': 'value'}
|
106 | 116 | with pytest.raises(requests.exceptions.HTTPError) as excinfo:
|
107 | 117 | client.request(method, '/', json=body)
|
108 | 118 | assert excinfo.value.response.status_code == 503
|
109 |
| - assert len(httpserver.requests) == 5 |
| 119 | + assert len(self.httpserver.requests) == 5 |
110 | 120 |
|
111 | 121 | @pytest.mark.parametrize('method', ALL_METHODS)
|
112 |
| - def test_retry_on_500(self, httpserver, method): |
113 |
| - httpserver.serve_content({}, 500) |
| 122 | + def test_retry_on_500(self, method): |
| 123 | + self.httpserver.serve_content({}, 500) |
114 | 124 | client = _http_client.JsonHttpClient(
|
115 |
| - credential=testutils.MockGoogleCredential(), base_url=httpserver.url) |
| 125 | + credential=testutils.MockGoogleCredential(), base_url=self.httpserver.url) |
116 | 126 | body = None
|
117 | 127 | if method in self.ENTITY_ENCLOSING_METHODS:
|
118 | 128 | body = {'key': 'value'}
|
119 | 129 | with pytest.raises(requests.exceptions.HTTPError) as excinfo:
|
120 | 130 | client.request(method, '/', json=body)
|
121 | 131 | assert excinfo.value.response.status_code == 500
|
122 |
| - assert len(httpserver.requests) == 5 |
| 132 | + assert len(self.httpserver.requests) == 5 |
123 | 133 |
|
124 |
| - def test_no_retry_on_404(self, httpserver): |
125 |
| - httpserver.serve_content({}, 404) |
| 134 | + def test_no_retry_on_404(self): |
| 135 | + self.httpserver.serve_content({}, 404) |
126 | 136 | client = _http_client.JsonHttpClient(
|
127 |
| - credential=testutils.MockGoogleCredential(), base_url=httpserver.url) |
| 137 | + credential=testutils.MockGoogleCredential(), base_url=self.httpserver.url) |
128 | 138 | with pytest.raises(requests.exceptions.HTTPError) as excinfo:
|
129 | 139 | client.request('get', '/')
|
130 | 140 | assert excinfo.value.response.status_code == 404
|
131 |
| - assert len(httpserver.requests) == 1 |
| 141 | + assert len(self.httpserver.requests) == 1 |
0 commit comments