|
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