from unittest.mock import AsyncMock, MagicMock, patch import httpx import pytest from src.services.observability_resolve import extract_logical_region def _mock_httpx_get_response(response: httpx.Response): mock_client = MagicMock() mock_client.get = AsyncMock(return_value=response) mock_cm = MagicMock() mock_cm.__aenter__ = AsyncMock(return_value=mock_client) mock_cm.__aexit__ = AsyncMock(return_value=None) return mock_cm class TestExtractLogicalRegion: def test_extracts_logical_region_from_internal_read_uri(self): uri = ( "https://www.ds.us-west-2-staging.aws.observability.tidbcloud.com/" "internal/metrics/abc/api/v1/" ) assert extract_logical_region(uri) == "us-west-2-staging" def test_extracts_logical_region_from_alicloud_internal_read_uri(self): uri = ( "https://www.ds.cn-hangzhou.alicloud.observability.tidbcloud.com/" "internal/metrics/abc/api/v1/" ) assert extract_logical_region(uri) == "cn-hangzhou" def test_extracts_logical_region_from_gcp_internal_read_uri(self): uri = ( "https://www.ds.us-central1.gcp.observability.tidbcloud.com/" "internal/metrics/abc/api/v1/" ) assert extract_logical_region(uri) == "us-central1" class TestGetO11yDeltaPath: @pytest.fixture(autouse=True) def _mock_gs_base_url(self): with patch( "src.services.observability_resolve.get_observability_global_service_url", return_value="https://gs.example.com", ): yield @pytest.mark.asyncio async def test_resolves_table_path_from_gs_response(self): payload = { "code": 0, "message": "", "data": { "clusters": [ { "id": "019cd1e0-a8ff-7b6f-9e90-209d4946bb14", "tenantID": "1369847559691397282", "internalReadUri": ( "https://www.ds.us-west-2-staging.aws.observability.tidbcloud.com/" "internal/metrics/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/api/v1/" ), } ] }, } response = httpx.Response(200, json=payload) with patch( "src.services.observability_resolve.get_server_auth0_token", return_value="auth0-token", ): with patch( "src.services.observability_resolve.httpx.AsyncClient", return_value=_mock_httpx_get_response(response), ): with patch( "src.tools.get_o11y_delta_path.get_valid_server_auth", new_callable=AsyncMock, ): from src.tools.get_o11y_delta_path import get_o11y_delta_path result = await get_o11y_delta_path( cluster_id="10289018618901654118", env="staging", deploy_type="dedicated", ) assert len(result) == 1 assert result[0]["type"] == "text" assert ( result[0]["text"] == "s3://o11y-prod-shared-us-west-2-staging/" "deltalake/1369847559691397282/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/slowlogs" ) @pytest.mark.asyncio async def test_resolves_table_path_for_alicloud_cluster(self): payload = { "code": 0, "message": "", "data": { "clusters": [ { "id": "019cd1e0-a8ff-7b6f-9e90-209d4946bb14", "tenantID": "1369847559691397282", "internalReadUri": ( "https://www.ds.cn-hangzhou.alicloud.observability.tidbcloud.com/" "internal/metrics/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/api/v1/" ), } ] }, } response = httpx.Response(200, json=payload) with patch( "src.services.observability_resolve.get_server_auth0_token", return_value="auth0-token", ): with patch( "src.services.observability_resolve.httpx.AsyncClient", return_value=_mock_httpx_get_response(response), ): with patch( "src.tools.get_o11y_delta_path.get_valid_server_auth", new_callable=AsyncMock, ): from src.tools.get_o11y_delta_path import get_o11y_delta_path result = await get_o11y_delta_path( cluster_id="10289018618901654118", env="staging", deploy_type="dedicated", ) assert len(result) == 1 assert result[0]["type"] == "text" assert ( result[0]["text"] == "s3://o11y-prod-shared-cn-hangzhou/" "deltalake/1369847559691397282/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/slowlogs" ) @pytest.mark.asyncio async def test_resolves_table_path_for_gcp_cluster(self): payload = { "code": 0, "message": "", "data": { "clusters": [ { "id": "019cd1e0-a8ff-7b6f-9e90-209d4946bb14", "tenantID": "1369847559691397282", "internalReadUri": ( "https://www.ds.us-central1.gcp.observability.tidbcloud.com/" "internal/metrics/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/api/v1/" ), } ] }, } response = httpx.Response(200, json=payload) with patch( "src.services.observability_resolve.get_server_auth0_token", return_value="auth0-token", ): with patch( "src.services.observability_resolve.httpx.AsyncClient", return_value=_mock_httpx_get_response(response), ): with patch( "src.tools.get_o11y_delta_path.get_valid_server_auth", new_callable=AsyncMock, ): from src.tools.get_o11y_delta_path import get_o11y_delta_path result = await get_o11y_delta_path( cluster_id="10289018618901654118", env="staging", deploy_type="dedicated", ) assert len(result) == 1 assert result[0]["type"] == "text" assert ( result[0]["text"] == "gs://o11y-prod-shared-us-central1/" "deltalake/1369847559691397282/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/slowlogs" ) @pytest.mark.asyncio async def test_resolves_both_paths_for_premium_deploy_type(self): payload = { "code": 0, "message": "", "data": { "clusters": [ { "id": "019cd1e0-a8ff-7b6f-9e90-209d4946bb14", "tenantID": "1369847559691397282", "internalReadUri": ( "https://www.ds.us-west-2-staging.aws.observability.tidbcloud.com/" "internal/metrics/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/api/v1/" ), } ] }, } response = httpx.Response(200, json=payload) with patch( "src.services.observability_resolve.get_server_auth0_token", return_value="auth0-token", ): with patch( "src.services.observability_resolve.httpx.AsyncClient", return_value=_mock_httpx_get_response(response), ): with patch( "src.tools.get_o11y_delta_path.get_valid_server_auth", new_callable=AsyncMock, ): from src.tools.get_o11y_delta_path import get_o11y_delta_path result = await get_o11y_delta_path( cluster_id="10289018618901654118", env="staging", deploy_type="premium", ) assert len(result) == 2 assert result[0]["type"] == "text" assert result[1]["type"] == "text" assert ( result[0]["text"] == "s3://o11y-prod-shared-us-west-2-staging/" "deltalake/1369847559691397282/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/slowlogs" ) assert ( result[1]["text"] == "s3://o11y-prod-shared-us-west-2-staging/" "deltalake/1369847559691397282/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/persisted_statements_summary" ) @pytest.mark.asyncio async def test_resolves_only_slowlog_path_for_dedicated_deploy_type(self): payload = { "code": 0, "message": "", "data": { "clusters": [ { "id": "019cd1e0-a8ff-7b6f-9e90-209d4946bb14", "tenantID": "1369847559691397282", "internalReadUri": ( "https://www.ds.us-west-2-staging.aws.observability.tidbcloud.com/" "internal/metrics/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/api/v1/" ), } ] }, } response = httpx.Response(200, json=payload) with patch( "src.services.observability_resolve.get_server_auth0_token", return_value="auth0-token", ): with patch( "src.services.observability_resolve.httpx.AsyncClient", return_value=_mock_httpx_get_response(response), ): with patch( "src.tools.get_o11y_delta_path.get_valid_server_auth", new_callable=AsyncMock, ): from src.tools.get_o11y_delta_path import get_o11y_delta_path result = await get_o11y_delta_path( cluster_id="10289018618901654118", env="staging", deploy_type="dedicated", ) assert len(result) == 1 assert result[0]["type"] == "text" assert ( result[0]["text"] == "s3://o11y-prod-shared-us-west-2-staging/" "deltalake/1369847559691397282/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/slowlogs" ) @pytest.mark.asyncio async def test_resolves_only_slowlog_path_for_starter_deploy_type(self): payload = { "code": 0, "message": "", "data": { "clusters": [ { "id": "019cd1e0-a8ff-7b6f-9e90-209d4946bb14", "tenantID": "1369847559691397282", "internalReadUri": ( "https://www.ds.us-west-2-staging.aws.observability.tidbcloud.com/" "internal/metrics/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/api/v1/" ), } ] }, } response = httpx.Response(200, json=payload) with patch( "src.services.observability_resolve.get_server_auth0_token", return_value="auth0-token", ): with patch( "src.services.observability_resolve.httpx.AsyncClient", return_value=_mock_httpx_get_response(response), ): with patch( "src.tools.get_o11y_delta_path.get_valid_server_auth", new_callable=AsyncMock, ): from src.tools.get_o11y_delta_path import get_o11y_delta_path result = await get_o11y_delta_path( cluster_id="10289018618901654118", env="staging", deploy_type="starter", ) assert len(result) == 1 assert result[0]["type"] == "text" assert ( result[0]["text"] == "s3://o11y-prod-shared-us-west-2-staging/" "deltalake/1369847559691397282/019cd1e0-a8ff-7b6f-9e90-209d4946bb14/slowlogs" )