Files
Aether/tests/services/antigravity/test_url_availability.py
fawney19 b88fb6273b refactor: Antigravity/Codex 服务重构为插件化适配器架构
- 将 Antigravity 和 Codex 从独立模块迁移至 src/services/provider/adapters/ 插件体系
- 新增 provider_types 和 oauth_token 模块,移除 maintenance_scheduler 中的 OAuth 定时刷新
- 增强 admin API:扩展 keys 和 provider_query 端点,新增 dashboard 路由
- 大幅增强 ProviderDetailDrawer 组件,新增 AntigravityQuotaDialog
- 改进 handler 基类(chat/cli)和错误分类器
- 优化 fetch_scheduler 和 upstream_fetcher
- 前端 UI 组件清理和优化
- 更新测试以匹配新模块结构
2026-02-06 16:37:06 +08:00

65 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from __future__ import annotations
from typing import Any
import src.services.provider.adapters.antigravity.url_availability as ua_mod
from src.services.provider.adapters.antigravity.constants import (
DAILY_BASE_URL,
PROD_BASE_URL,
SANDBOX_BASE_URL,
URL_UNAVAILABLE_TTL_SECONDS,
)
from src.services.provider.adapters.antigravity.url_availability import url_availability
def _reset_state() -> None:
# Singleton: tests need to reset global state
with url_availability._mu: # type: ignore[attr-defined]
url_availability._unavailable.clear() # type: ignore[attr-defined]
url_availability._last_success = None # type: ignore[attr-defined]
def test_mark_success_priority() -> None:
_reset_state()
url_availability.mark_success(PROD_BASE_URL)
ordered = url_availability.get_ordered_urls(prefer_daily=True)
assert ordered[0] == PROD_BASE_URL
def test_mark_unavailable_filters_url() -> None:
_reset_state()
url_availability.mark_unavailable(DAILY_BASE_URL)
ordered = url_availability.get_ordered_urls(prefer_daily=True)
# Sandbox → ProdDaily 被标记为不可用,应被过滤掉)
assert ordered[0] == SANDBOX_BASE_URL
assert DAILY_BASE_URL not in ordered
assert url_availability.is_available(DAILY_BASE_URL) is False
def test_ttl_recovery(monkeypatch: Any) -> None:
_reset_state()
t0 = 1000.0
monkeypatch.setattr(ua_mod.time, "time", lambda: t0)
url_availability.mark_unavailable(PROD_BASE_URL)
assert url_availability.is_available(PROD_BASE_URL) is False
monkeypatch.setattr(ua_mod.time, "time", lambda: t0 + URL_UNAVAILABLE_TTL_SECONDS + 1)
assert url_availability.is_available(PROD_BASE_URL) is True
def test_all_unavailable_fallback_returns_base_order() -> None:
_reset_state()
url_availability.mark_unavailable(SANDBOX_BASE_URL)
url_availability.mark_unavailable(DAILY_BASE_URL)
url_availability.mark_unavailable(PROD_BASE_URL)
ordered = url_availability.get_ordered_urls(prefer_daily=True)
# 全部不可用时仍返回基础顺序(允许继续尝试,等 TTL 恢复)
assert ordered == [SANDBOX_BASE_URL, DAILY_BASE_URL, PROD_BASE_URL]