Spaces:
Running
Running
Test validated DNS address fallback behavior
Browse files- tests/test_downloader.py +36 -1
tests/test_downloader.py
CHANGED
|
@@ -8,7 +8,7 @@ import respx
|
|
| 8 |
from httpx import Response
|
| 9 |
|
| 10 |
from app.core.exceptions import InputError
|
| 11 |
-
from app.services.downloader import Downloader
|
| 12 |
from app.services.validator import MediaValidator
|
| 13 |
|
| 14 |
|
|
@@ -90,3 +90,38 @@ def test_response_filename_falls_back_to_url_path() -> None:
|
|
| 90 |
|
| 91 |
response = Response(200)
|
| 92 |
assert Downloader._response_filename(response, "https://example.test/media%20clip.mp4") == "media clip.mp4"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
from httpx import Response
|
| 9 |
|
| 10 |
from app.core.exceptions import InputError
|
| 11 |
+
from app.services.downloader import Downloader, _PinnedNetworkBackend
|
| 12 |
from app.services.validator import MediaValidator
|
| 13 |
|
| 14 |
|
|
|
|
| 90 |
|
| 91 |
response = Response(200)
|
| 92 |
assert Downloader._response_filename(response, "https://example.test/media%20clip.mp4") == "media clip.mp4"
|
| 93 |
+
|
| 94 |
+
|
| 95 |
+
async def test_pinned_backend_retries_validated_addresses(settings) -> None:
|
| 96 |
+
first_socket = object()
|
| 97 |
+
calls = []
|
| 98 |
+
|
| 99 |
+
class Fallback:
|
| 100 |
+
async def connect_tcp(self, **kwargs):
|
| 101 |
+
calls.append(kwargs)
|
| 102 |
+
if len(calls) == 1:
|
| 103 |
+
raise OSError("first validated address unavailable")
|
| 104 |
+
return first_socket
|
| 105 |
+
|
| 106 |
+
downloader = Downloader(settings, MediaValidator(settings))
|
| 107 |
+
downloader._pinned[("media.example.test", 443)] = ("203.0.113.10", "93.184.216.34")
|
| 108 |
+
backend = _PinnedNetworkBackend(downloader, Fallback())
|
| 109 |
+
|
| 110 |
+
result = await backend.connect_tcp("media.example.test", 443, timeout=3.0)
|
| 111 |
+
|
| 112 |
+
assert result is first_socket
|
| 113 |
+
assert [call["host"] for call in calls] == ["203.0.113.10", "93.184.216.34"]
|
| 114 |
+
assert all(call["port"] == 443 for call in calls)
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
async def test_pinned_backend_fails_closed_without_validated_addresses(settings) -> None:
|
| 118 |
+
class Fallback:
|
| 119 |
+
async def connect_tcp(self, **kwargs):
|
| 120 |
+
raise AssertionError("must not connect when validated address list is empty")
|
| 121 |
+
|
| 122 |
+
downloader = Downloader(settings, MediaValidator(settings))
|
| 123 |
+
downloader._pinned[("media.example.test", 443)] = ()
|
| 124 |
+
backend = _PinnedNetworkBackend(downloader, Fallback())
|
| 125 |
+
|
| 126 |
+
with pytest.raises(OSError, match="No validated network destination"):
|
| 127 |
+
await backend.connect_tcp("media.example.test", 443)
|