Merge branch 'main' into codex/github-mention-fixnetwork-add-connectivityguard-to-short

This commit is contained in:
pixelpaws
2026-04-20 15:54:30 +08:00
committed by GitHub
28 changed files with 4469 additions and 194 deletions

View File

@@ -39,6 +39,26 @@ async def test_connectivity_guard_enters_cooldown_after_threshold():
assert guard.cooldown_remaining_seconds() > 0
async def test_connectivity_guard_scopes_cooldown_to_destination():
guard = await ConnectivityGuard.get_instance()
destination_a = "civitai.com"
destination_b = "api.github.com"
guard.register_network_failure(
OSError(errno.ENETUNREACH, "unreachable"),
destination_a,
)
guard.register_network_failure(asyncio.TimeoutError("timeout"), destination_a)
guard.register_network_failure(ConnectionRefusedError("refused"), destination_a)
assert guard.should_block_request(destination_a) is True
assert guard.should_block_request(destination_b) is False
guard.register_success(destination_a)
assert guard.should_block_request(destination_a) is False
async def test_connectivity_guard_recovers_after_success():
guard = await ConnectivityGuard.get_instance()
guard.online = False
@@ -55,21 +75,51 @@ async def test_connectivity_guard_recovers_after_success():
async def test_downloader_short_circuits_all_request_helpers_during_cooldown():
guard = await ConnectivityGuard.get_instance()
guard.cooldown_until = datetime.now() + timedelta(seconds=30)
guard.online = False
guard.failure_count = 3
destination = "example.invalid"
guard.register_network_failure(
OSError(errno.ENETUNREACH, "unreachable"),
destination,
)
guard.register_network_failure(asyncio.TimeoutError("timeout"), destination)
guard.register_network_failure(
ConnectionRefusedError("refused"),
destination,
)
downloader = Downloader()
ok, payload = await downloader.make_request("GET", "https://example.invalid")
ok, payload = await downloader.make_request("GET", f"https://{destination}")
assert ok is False
assert payload == OFFLINE_COOLDOWN_ERROR
ok, payload, headers = await downloader.download_to_memory("https://example.invalid")
ok, payload, headers = await downloader.download_to_memory(f"https://{destination}")
assert ok is False
assert payload == OFFLINE_FRIENDLY_MESSAGE
assert headers is None
ok, payload = await downloader.get_response_headers("https://example.invalid")
ok, payload = await downloader.get_response_headers(f"https://{destination}")
assert ok is False
assert payload == OFFLINE_COOLDOWN_ERROR
async def test_downloader_only_short_circuits_requests_for_same_destination():
guard = await ConnectivityGuard.get_instance()
guard.register_network_failure(
OSError(errno.ENETUNREACH, "unreachable"),
"example.invalid",
)
guard.register_network_failure(asyncio.TimeoutError("timeout"), "example.invalid")
guard.register_network_failure(
ConnectionRefusedError("refused"),
"example.invalid",
)
downloader = Downloader()
ok, payload = await downloader.make_request("GET", "https://example.invalid")
assert ok is False
assert payload == OFFLINE_COOLDOWN_ERROR
assert (
guard.should_block_request(downloader._guard_destination("https://example.com"))
is False
)