Files
more_dots/tests/test_nacos_service.py
T
2026-03-24 18:07:22 +08:00

137 lines
4.0 KiB
Python

import asyncio
from services.integrations import nacos_service
from services.integrations.nacos_service import NacosConfig, NacosManager, ServiceConfig, load_service_config
class _FakeConfigParser:
def get(self, section, option, fallback=None):
if section == "app" and option == "host":
return "0.0.0.0"
if section == "app" and option == "service_name":
return fallback
if section == "app" and option == "version":
return "1.2.3"
if section == "app" and option == "model_section":
return "qwen-80b"
return fallback
def getint(self, section, option, fallback=None):
if section == "app" and option == "port":
return 8000
return fallback
class _RetryNacosManager(NacosManager):
def __init__(self, nacos_config: NacosConfig, service_config: ServiceConfig):
super().__init__(nacos_config, service_config)
self.register_attempts = 0
def register_service(self) -> bool:
self.register_attempts += 1
# First attempt fails, later attempts succeed.
self.is_registered = self.register_attempts >= 2
return self.is_registered
def test_load_service_config_streaming_metadata_and_service_name_fallback(monkeypatch):
monkeypatch.setattr(nacos_service.Config, "_config", _FakeConfigParser())
monkeypatch.setattr(nacos_service.Config, "DEFAULT_MODEL_SECTION", "gpt-4o")
monkeypatch.setattr(nacos_service.Config, "get_section", lambda section: {} if section == "metadata" else {})
monkeypatch.setattr(nacos_service, "_get_local_ip", lambda: "10.0.0.8")
cfg = load_service_config()
assert cfg.service_name == "apbo-boat-agent"
assert cfg.ip == "10.0.0.8"
assert cfg.metadata["streaming"] == "true"
def test_nacos_manager_start_keeps_retry_loop_when_first_register_fails():
nacos_cfg = NacosConfig(
enabled=True,
server_addresses="localhost:8848",
namespace="public",
group_name="DEFAULT_GROUP",
cluster_name="DEFAULT",
username=None,
password=None,
heartbeat_interval=1,
weight=1.0,
ephemeral=True,
register_port=None,
)
service_cfg = ServiceConfig(
service_name="apbo-boat-agent",
host="0.0.0.0",
port=8000,
ip="10.0.0.8",
metadata={},
)
manager = _RetryNacosManager(nacos_cfg, service_cfg)
async def _run_case():
await manager.start()
await asyncio.sleep(1.2)
await manager.stop()
asyncio.run(_run_case())
assert manager.register_attempts >= 2
assert manager.is_registered is True
class _CaptureClient:
def __init__(self):
self.register_calls = []
self.heartbeat_calls = []
self.remove_calls = []
def add_naming_instance(self, **kwargs):
self.register_calls.append(kwargs)
def send_heartbeat(self, **kwargs):
self.heartbeat_calls.append(kwargs)
def remove_naming_instance(self, **kwargs):
self.remove_calls.append(kwargs)
def test_nacos_manager_uses_register_port_override_for_registry_calls():
nacos_cfg = NacosConfig(
enabled=True,
server_addresses="localhost:8848",
namespace="public",
group_name="DEFAULT_GROUP",
cluster_name="DEFAULT",
username=None,
password=None,
heartbeat_interval=1,
weight=1.0,
ephemeral=True,
register_port=26004,
)
service_cfg = ServiceConfig(
service_name="apbo-boat-agent",
host="0.0.0.0",
port=8000,
ip="10.0.0.8",
metadata={},
)
manager = NacosManager(nacos_cfg, service_cfg)
manager.client = _CaptureClient()
assert manager._registration_port() == 26004
assert manager.register_service() is True
manager._send_heartbeat()
manager.deregister_service()
assert manager.client.register_calls[0]["port"] == 26004
assert manager.client.heartbeat_calls[0]["port"] == 26004
assert manager.client.remove_calls[0]["port"] == 26004