Skip to content

Commit a57345a

Browse files
committed
Add more unit tests to address coverage requirements
1 parent 2f1a3b0 commit a57345a

File tree

1 file changed

+55
-29
lines changed

1 file changed

+55
-29
lines changed

tests/compute_engine/test__mtls.py

Lines changed: 55 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -147,24 +147,50 @@ def test_mds_mtls_adapter_proxy_manager_for(
147147
)
148148

149149

150+
@mock.patch("requests.adapters.HTTPAdapter.send") # Patch the PARENT class method
150151
@mock.patch("ssl.create_default_context")
151-
def test_mds_mtls_adapter_session_request(mock_ssl_context, mock_mds_mtls_config):
152+
def test_mds_mtls_adapter_session_request(
153+
mock_ssl_context, mock_super_send, mock_mds_mtls_config
154+
):
152155
adapter = _mtls.MdsMtlsAdapter(mock_mds_mtls_config)
153156
session = requests.Session()
154157
session.mount("https://", adapter)
155158

156-
# Mock the adapter\'s send method to avoid actual network requests
157-
adapter.send = mock.Mock()
159+
# Setup the parent class send return value
158160
response = requests.Response()
159161
response.status_code = 200
160-
adapter.send.return_value = response
162+
mock_super_send.return_value = response
161163

162-
# Make a request
163-
response = session.get("https://example.com")
164+
response = session.get("https://fake-mds.com")
164165

165166
# Assert that the request was successful
166167
assert response.status_code == 200
167-
adapter.send.assert_called_once()
168+
mock_super_send.assert_called_once()
169+
170+
171+
@mock.patch("requests.adapters.HTTPAdapter.send")
172+
@mock.patch("google.auth.compute_engine._mtls._parse_mds_mode")
173+
@mock.patch("ssl.create_default_context")
174+
def test_mds_mtls_adapter_send_success(
175+
mock_ssl_context, mock_parse_mds_mode, mock_super_send, mock_mds_mtls_config
176+
):
177+
"""Test the explicit 'happy path' where mTLS succeeds without error."""
178+
mock_parse_mds_mode.return_value = _mtls.MdsMtlsMode.DEFAULT
179+
adapter = _mtls.MdsMtlsAdapter(mock_mds_mtls_config)
180+
181+
# Setup the parent class send return value to be successful (200 OK)
182+
mock_response = requests.Response()
183+
mock_response.status_code = 200
184+
mock_super_send.return_value = mock_response
185+
186+
request = requests.Request(method="GET", url="https://fake-mds.com").prepare()
187+
188+
# Call send directly
189+
response = adapter.send(request)
190+
191+
# Verify we got the response back and no fallback happened
192+
assert response == mock_response
193+
mock_super_send.assert_called_once()
168194

169195

170196
@mock.patch("google.auth.compute_engine._mtls.HTTPAdapter")
@@ -183,14 +209,14 @@ def test_mds_mtls_adapter_send_fallback_default_mode(
183209
with mock.patch(
184210
"requests.adapters.HTTPAdapter.send", side_effect=requests.exceptions.SSLError
185211
):
186-
request = requests.Request(method="GET", url="https://example.com").prepare()
212+
request = requests.Request(method="GET", url="https://fake-mds.com").prepare()
187213
adapter.send(request)
188214

189215
# Check that fallback to HTTPAdapter.send occurred
190216
mock_http_adapter_class.assert_called_once()
191217
mock_fallback_send.assert_called_once()
192218
fallback_request = mock_fallback_send.call_args[0][0]
193-
assert fallback_request.url == "http://example.com/"
219+
assert fallback_request.url == "http://fake-mds.com/"
194220

195221

196222
@mock.patch("google.auth.compute_engine._mtls.HTTPAdapter")
@@ -211,49 +237,49 @@ def test_mds_mtls_adapter_send_fallback_http_error(
211237
with mock.patch(
212238
"requests.adapters.HTTPAdapter.send", return_value=mock_mtls_response
213239
):
214-
request = requests.Request(method="GET", url="https://example.com").prepare()
240+
request = requests.Request(method="GET", url="https://fake-mds.com").prepare()
215241
adapter.send(request)
216242

217243
# Check that fallback to HTTPAdapter.send occurred
218244
mock_http_adapter_class.assert_called_once()
219245
mock_fallback_send.assert_called_once()
220246
fallback_request = mock_fallback_send.call_args[0][0]
221-
assert fallback_request.url == "http://example.com/"
247+
assert fallback_request.url == "http://fake-mds.com/"
222248

223249

250+
@mock.patch("requests.adapters.HTTPAdapter.send")
224251
@mock.patch("google.auth.compute_engine._mtls._parse_mds_mode")
225252
@mock.patch("ssl.create_default_context")
226-
def test_mds_mtls_adapter_send_no_fallback_strict_mode(
227-
mock_ssl_context, mock_parse_mds_mode, mock_mds_mtls_config
253+
def test_mds_mtls_adapter_send_no_fallback_other_exception(
254+
mock_ssl_context, mock_parse_mds_mode, mock_http_adapter_send, mock_mds_mtls_config
228255
):
229-
mock_parse_mds_mode.return_value = _mtls.MdsMtlsMode.STRICT
256+
mock_parse_mds_mode.return_value = _mtls.MdsMtlsMode.DEFAULT
230257
adapter = _mtls.MdsMtlsAdapter(mock_mds_mtls_config)
231258

232-
# Simulate SSLError on the super().send() call
259+
# Simulate HTTP exception
233260
with mock.patch(
234-
"requests.adapters.HTTPAdapter.send", side_effect=requests.exceptions.SSLError
261+
"requests.adapters.HTTPAdapter.send",
262+
side_effect=requests.exceptions.ConnectionError,
235263
):
236-
request = requests.Request(method="GET", url="https://example.com").prepare()
237-
with pytest.raises(requests.exceptions.SSLError):
264+
request = requests.Request(method="GET", url="https://fake-mds.com").prepare()
265+
with pytest.raises(requests.exceptions.ConnectionError):
238266
adapter.send(request)
239267

268+
mock_http_adapter_send.assert_not_called()
269+
240270

241-
@mock.patch("requests.adapters.HTTPAdapter.send")
242271
@mock.patch("google.auth.compute_engine._mtls._parse_mds_mode")
243272
@mock.patch("ssl.create_default_context")
244-
def test_mds_mtls_adapter_send_no_fallback_other_exception(
245-
mock_ssl_context, mock_parse_mds_mode, mock_http_adapter_send, mock_mds_mtls_config
273+
def test_mds_mtls_adapter_send_no_fallback_strict_mode(
274+
mock_ssl_context, mock_parse_mds_mode, mock_mds_mtls_config
246275
):
247-
mock_parse_mds_mode.return_value = _mtls.MdsMtlsMode.DEFAULT
276+
mock_parse_mds_mode.return_value = _mtls.MdsMtlsMode.STRICT
248277
adapter = _mtls.MdsMtlsAdapter(mock_mds_mtls_config)
249278

250-
# Simulate a different exception
279+
# Simulate SSLError on the super().send() call
251280
with mock.patch(
252-
"requests.adapters.HTTPAdapter.send",
253-
side_effect=requests.exceptions.ConnectionError,
281+
"requests.adapters.HTTPAdapter.send", side_effect=requests.exceptions.SSLError
254282
):
255-
request = requests.Request(method="GET", url="https://example.com").prepare()
256-
with pytest.raises(requests.exceptions.ConnectionError):
283+
request = requests.Request(method="GET", url="https://fake-mds.com").prepare()
284+
with pytest.raises(requests.exceptions.SSLError):
257285
adapter.send(request)
258-
259-
mock_http_adapter_send.assert_not_called()

0 commit comments

Comments
 (0)