(url: str, provider: str, error_providers: list[str])
| 1548 | |
| 1549 | def test_get_cloud_from_metadata_requests(monkeypatch): |
| 1550 | def create_mock_response(url: str, provider: str, error_providers: list[str]): |
| 1551 | # Create a mock response based on the URL. |
| 1552 | mock_response = Mock() |
| 1553 | |
| 1554 | if url == "http://metadata.google.internal/computeMetadata/v1": |
| 1555 | # GCP endpoint |
| 1556 | if "gcp" in error_providers: |
| 1557 | print("raising") |
| 1558 | raise requests.exceptions.ConnectionError() |
| 1559 | mock_response.status_code = 200 if provider == "gcp" else 400 |
| 1560 | elif url == "http://169.254.169.254/latest/meta-data/": |
| 1561 | # AWS endpoint |
| 1562 | if "aws" in error_providers: |
| 1563 | raise requests.exceptions.ConnectionError() |
| 1564 | # Azure IMDS returns 400 (not 404) when queried with AWS endpoint format |
| 1565 | # because Azure requires the "Metadata: true" header (not sent in AWS queries). |
| 1566 | # See: https://learn.microsoft.com/en-us/azure/virtual-machines/instance-metadata-service#errors-and-debugging |
| 1567 | if provider == "azure": |
| 1568 | mock_response.status_code = ( |
| 1569 | 400 # Bad Request (missing headers/wrong path) |
| 1570 | ) |
| 1571 | else: |
| 1572 | mock_response.status_code = 200 if provider == "aws" else 404 |
| 1573 | elif url == "http://169.254.169.254/metadata/instance?api-version=2021-12-13": |
| 1574 | # Azure endpoint |
| 1575 | if "azure" in error_providers: |
| 1576 | raise requests.exceptions.ConnectionError() |
| 1577 | # AWS IMDS returns 404 when queried with Azure endpoint format |
| 1578 | # because Azure's URL path doesn't exist on AWS metadata service. |
| 1579 | # See: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html#instance-metadata-returns |
| 1580 | if provider == "aws": |
| 1581 | mock_response.status_code = 404 # Not Found |
| 1582 | else: |
| 1583 | mock_response.status_code = 200 if provider == "azure" else 400 |
| 1584 | |
| 1585 | return mock_response |
| 1586 | |
| 1587 | with patch("requests.get") as mock_get: |
| 1588 | mock_get.side_effect = lambda url, **kwargs: create_mock_response( |
no test coverage detected
searching dependent graphs…