137 lines
4.0 KiB
Python
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
|
|
|
|
|