File size: 2,135 Bytes
5a4ba84 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | import pytest
from app.grabber.parsers import VMessParser, VLESSParser, TrojanParser, SSParser
from app.models.proxy import Proxy
class TestVMessParser:
def test_parse_valid_vmess(self):
vmess_json = '{"add": "127.0.0.1", "port": 443, "id": "test-uuid", "aid": 0}'
import base64
encoded = base64.b64encode(vmess_json.encode()).decode()
url = f"vmess://{encoded}"
proxy = VMessParser.parse(url)
assert proxy is not None
assert proxy.ip == "127.0.0.1"
assert proxy.port == 443
assert proxy.protocol == "vmess"
def test_parse_invalid_vmess(self):
url = "vmess://invalid-base64!@#"
with pytest.raises(ValueError):
VMessParser.parse(url)
class TestVLESSParser:
def test_parse_valid_vless(self):
url = "vless://uuid-here@192.168.1.1:443?type=tcp&encryption=none"
proxy = VLESSParser.parse(url)
assert proxy is not None
assert proxy.ip == "192.168.1.1"
assert proxy.port == 443
assert proxy.protocol == "vless"
def test_parse_vless_with_domain(self):
url = "vless://uuid@example.com:443?type=tcp"
proxy = VLESSParser.parse(url)
assert proxy is not None
assert "example.com" in proxy.ip or proxy.ip != ""
class TestTrojanParser:
def test_parse_valid_trojan(self):
url = "trojan://password123@10.0.0.1:443?sni=example.com"
proxy = TrojanParser.parse(url)
assert proxy is not None
assert proxy.ip == "10.0.0.1"
assert proxy.port == 443
assert proxy.protocol == "trojan"
class TestSSParser:
def test_parse_valid_ss(self):
method_pass = "aes-256-gcm:password123"
import base64
encoded = base64.b64encode(method_pass.encode()).decode()
url = f"ss://{encoded}@192.168.1.1:8388"
proxy = SSParser.parse(url)
assert proxy is not None
assert proxy.ip == "192.168.1.1"
assert proxy.port == 8388
assert proxy.protocol == "shadowsocks"
|