@@ -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