diff --git a/packages/google-auth/google/auth/compute_engine/_metadata.py b/packages/google-auth/google/auth/compute_engine/_metadata.py index c1fecd3b7dca..aae724ab18ee 100644 --- a/packages/google-auth/google/auth/compute_engine/_metadata.py +++ b/packages/google-auth/google/auth/compute_engine/_metadata.py @@ -166,16 +166,15 @@ def _prepare_request_for_mds(request, use_mtls=False) -> None: Args: request (google.auth.transport.Request): A callable used to make - HTTP requests. + HTTP requests. If mTLS is enabled, and the request supports sessions, + the request will have the mTLS adapter mounted. Otherwise, there + will be no change. use_mtls (bool): Whether to use mTLS for the request. - Returns: - google.auth.transport.Request: A request object to use. - If mTLS is enabled, the request will have the mTLS adapter mounted. - Otherwise, the original request will be returned unchanged. + """ - # Only modify the request if mTLS is enabled. - if use_mtls: + # Only modify the request if mTLS is enabled, and request supports sessions. + if use_mtls and hasattr(request, "session"): # Ensure the request has a session to mount the adapter to. if not request.session: request.session = requests.Session() diff --git a/packages/google-auth/tests/compute_engine/test__metadata.py b/packages/google-auth/tests/compute_engine/test__metadata.py index 9fc2c8cf6cb5..35996ab24b92 100644 --- a/packages/google-auth/tests/compute_engine/test__metadata.py +++ b/packages/google-auth/tests/compute_engine/test__metadata.py @@ -955,3 +955,17 @@ def test__prepare_request_for_mds_mtls_no_session(mock_mds_mtls_adapter): mock_session_class.assert_called_once() mock_mds_mtls_adapter.assert_called_once() assert request.session.mount.call_count == len(_metadata._GCE_DEFAULT_MDS_HOSTS) + + +@mock.patch("google.auth.compute_engine._mtls.MdsMtlsAdapter") +def test__prepare_request_for_mds_mtls_http_request(mock_mds_mtls_adapter): + """ + http requests should be ignored. + Regression test for https://github.com/googleapis/google-cloud-python/issues/16035 + """ + from google.auth.transport import _http_client + + request = _http_client.Request() + _metadata._prepare_request_for_mds(request, use_mtls=True) + + assert mock_mds_mtls_adapter.call_count == 0