"""Region coverage comes from the provider, not from a list in Helix. A hardcoded region list is wrong in the one direction that matters: a machine created in a region nobody thought to add is invisible forever, and invisible reads exactly like "we have no servers there". Prod Tencent was pinned to three regions (guangzhou / shanghai / beijing) out of the 19 the account can use. Enumerating all 19 by hand on 2026-08-12 found genuinely zero CVM instances — which is the point: that zero is now confirmed rather than assumed, and it stays confirmed as regions come and go. """ from __future__ import annotations from unittest.mock import patch from app.domains.cmdb.providers.base import ProviderCredentials from app.domains.cmdb.providers.tencent import TencentProvider class _Resp: def __init__(self, **kw): for k, v in kw.items(): setattr(self, k, v) class _Client: def __getattr__(self, name): return lambda *a, **kw: None def _provider(regions: str | None = None) -> TencentProvider: fields = {"secret_id": "AKIDtest", "secret_key": "sk-test"} if regions is not None: fields["regions"] = regions return TencentProvider(ProviderCredentials( provider_id="tc-test", provider_type="tencent", account_alias="腾讯云", fields=fields, )) def _with_regions(provider, regions, *, raises=False): def _call(fn, req, **_kw): if req.__class__.__name__ == "DescribeRegionsRequest": if raises: raise RuntimeError("DescribeRegions exploded") return _Resp(RegionSet=[_Resp(Region=r) for r in regions]) return _Resp() return ( patch( "app.domains.cmdb.providers.tencent._make_tc_client", return_value=_Client(), ), patch.object(provider, "_call", side_effect=_call), ) def test_regions_are_discovered_when_none_configured() -> None: provider = _provider() discovered = ["ap-guangzhou", "ap-nanjing", "eu-frankfurt"] p1, p2 = _with_regions(provider, discovered) with p1, p2: assert provider._regions == discovered def test_an_explicit_list_stays_an_explicit_narrowing() -> None: """An admin who typed three regions meant three regions.""" provider = _provider("ap-guangzhou, ap-shanghai") p1, p2 = _with_regions(provider, ["ap-guangzhou", "ap-nanjing"]) with p1, p2: assert provider._regions == ["ap-guangzhou", "ap-shanghai"] def test_discovery_failure_falls_back_to_the_static_list() -> None: """A transient API error must degrade to the previous behaviour, not to syncing nothing — an empty region list would silently report an empty fleet.""" provider = _provider() p1, p2 = _with_regions(provider, [], raises=True) with p1, p2: regions = provider._regions assert "ap-guangzhou" in regions assert len(regions) > 3 def test_an_empty_region_set_falls_back_rather_than_syncing_nothing() -> None: provider = _provider() p1, p2 = _with_regions(provider, []) with p1, p2: regions = provider._regions assert "ap-guangzhou" in regions def test_discovery_runs_once_per_provider_instance() -> None: """One extra API call per sync, not one per capability.""" provider = _provider() calls: list[str] = [] def _call(fn, req, **_kw): calls.append(req.__class__.__name__) return _Resp(RegionSet=[_Resp(Region="ap-guangzhou")]) with ( patch( "app.domains.cmdb.providers.tencent._make_tc_client", return_value=_Client(), ), patch.object(provider, "_call", side_effect=_call), ): provider._regions provider._regions provider._regions assert calls.count("DescribeRegionsRequest") == 1