test: add tests for extracted parse_api_proxies
Cover valid entries, invalid proto/port, missing keys, and mixed valid/invalid input. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from s5p.config import ChainHop, Config, load_config, parse_proxy_url
|
from s5p.config import ChainHop, Config, load_config, parse_api_proxies, parse_proxy_url
|
||||||
|
|
||||||
|
|
||||||
class TestParseProxyUrl:
|
class TestParseProxyUrl:
|
||||||
@@ -65,6 +65,57 @@ class TestChainHop:
|
|||||||
assert str(hop) == "http://u@proxy:8080"
|
assert str(hop) == "http://u@proxy:8080"
|
||||||
|
|
||||||
|
|
||||||
|
class TestParseApiProxies:
|
||||||
|
"""Test API response proxy parsing."""
|
||||||
|
|
||||||
|
def test_valid_entries(self):
|
||||||
|
data = {
|
||||||
|
"proxies": [
|
||||||
|
{"proto": "socks5", "proxy": "1.2.3.4:1080"},
|
||||||
|
{"proto": "http", "proxy": "5.6.7.8:8080"},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
result = parse_api_proxies(data)
|
||||||
|
assert len(result) == 2
|
||||||
|
assert result[0] == ChainHop(proto="socks5", host="1.2.3.4", port=1080)
|
||||||
|
assert result[1] == ChainHop(proto="http", host="5.6.7.8", port=8080)
|
||||||
|
|
||||||
|
def test_skips_invalid_proto(self):
|
||||||
|
data = {"proxies": [{"proto": "ftp", "proxy": "1.2.3.4:21"}]}
|
||||||
|
assert parse_api_proxies(data) == []
|
||||||
|
|
||||||
|
def test_skips_missing_proto(self):
|
||||||
|
data = {"proxies": [{"proxy": "1.2.3.4:1080"}]}
|
||||||
|
assert parse_api_proxies(data) == []
|
||||||
|
|
||||||
|
def test_skips_missing_colon(self):
|
||||||
|
data = {"proxies": [{"proto": "socks5", "proxy": "no-port"}]}
|
||||||
|
assert parse_api_proxies(data) == []
|
||||||
|
|
||||||
|
def test_skips_bad_port(self):
|
||||||
|
data = {"proxies": [{"proto": "socks5", "proxy": "1.2.3.4:abc"}]}
|
||||||
|
assert parse_api_proxies(data) == []
|
||||||
|
|
||||||
|
def test_empty_proxies(self):
|
||||||
|
assert parse_api_proxies({"proxies": []}) == []
|
||||||
|
|
||||||
|
def test_missing_proxies_key(self):
|
||||||
|
assert parse_api_proxies({}) == []
|
||||||
|
|
||||||
|
def test_mixed_valid_invalid(self):
|
||||||
|
data = {
|
||||||
|
"proxies": [
|
||||||
|
{"proto": "socks5", "proxy": "1.2.3.4:1080"},
|
||||||
|
{"proto": "ftp", "proxy": "bad:21"},
|
||||||
|
{"proto": "socks4", "proxy": "5.6.7.8:1080"},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
result = parse_api_proxies(data)
|
||||||
|
assert len(result) == 2
|
||||||
|
assert result[0].proto == "socks5"
|
||||||
|
assert result[1].proto == "socks4"
|
||||||
|
|
||||||
|
|
||||||
class TestConfig:
|
class TestConfig:
|
||||||
"""Test Config defaults."""
|
"""Test Config defaults."""
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user