Skip to content

Commit 0e4f3bf

Browse files
authored
Speeding up the HTTPClient tests by reusing the test server instance (#387)
1 parent d3dda24 commit 0e4f3bf

File tree

1 file changed

+27
-17
lines changed

1 file changed

+27
-17
lines changed

tests/test_http_client.py

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,13 @@
1414

1515
"""Tests for firebase_admin._http_client."""
1616
import pytest
17-
from pytest_localserver import plugin
17+
from pytest_localserver import http
1818
import requests
1919

2020
from firebase_admin import _http_client
2121
from tests import testutils
2222

2323

24-
# Fixture for mocking a HTTP server
25-
httpserver = plugin.httpserver
26-
2724
_TEST_URL = 'http://firebase.test.url/'
2825

2926

@@ -92,40 +89,53 @@ class TestHttpRetry:
9289

9390
@classmethod
9491
def setup_class(cls):
95-
# Turn off exponential backoff for faster execution
92+
# Turn off exponential backoff for faster execution.
9693
_http_client.DEFAULT_RETRY_CONFIG.backoff_factor = 0
9794

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+
98108
@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)
101111
client = _http_client.JsonHttpClient(
102-
credential=testutils.MockGoogleCredential(), base_url=httpserver.url)
112+
credential=testutils.MockGoogleCredential(), base_url=self.httpserver.url)
103113
body = None
104114
if method in self.ENTITY_ENCLOSING_METHODS:
105115
body = {'key': 'value'}
106116
with pytest.raises(requests.exceptions.HTTPError) as excinfo:
107117
client.request(method, '/', json=body)
108118
assert excinfo.value.response.status_code == 503
109-
assert len(httpserver.requests) == 5
119+
assert len(self.httpserver.requests) == 5
110120

111121
@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)
114124
client = _http_client.JsonHttpClient(
115-
credential=testutils.MockGoogleCredential(), base_url=httpserver.url)
125+
credential=testutils.MockGoogleCredential(), base_url=self.httpserver.url)
116126
body = None
117127
if method in self.ENTITY_ENCLOSING_METHODS:
118128
body = {'key': 'value'}
119129
with pytest.raises(requests.exceptions.HTTPError) as excinfo:
120130
client.request(method, '/', json=body)
121131
assert excinfo.value.response.status_code == 500
122-
assert len(httpserver.requests) == 5
132+
assert len(self.httpserver.requests) == 5
123133

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)
126136
client = _http_client.JsonHttpClient(
127-
credential=testutils.MockGoogleCredential(), base_url=httpserver.url)
137+
credential=testutils.MockGoogleCredential(), base_url=self.httpserver.url)
128138
with pytest.raises(requests.exceptions.HTTPError) as excinfo:
129139
client.request('get', '/')
130140
assert excinfo.value.response.status_code == 404
131-
assert len(httpserver.requests) == 1
141+
assert len(self.httpserver.requests) == 1

0 commit comments

Comments
 (0)